commit c1e06056ae415347817563c7454f4398605cc362 Author: Nicolas MASSE Date: Wed Sep 11 11:40:16 2019 +0200 migration from svn diff --git a/Compilation/Compilation.kdevelop b/Compilation/Compilation.kdevelop new file mode 100755 index 0000000..eb2d259 --- /dev/null +++ b/Compilation/Compilation.kdevelop @@ -0,0 +1,102 @@ + + + + Nicolas MASSÉ + nicolas27.masse@laposte.net + $VERSION$ + KDevCustomProject + C + + + + + Compilation + executable + + + + + + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + libstdc++ + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + qt-kdev3 + ruby + ruby_bugs + sdl + stl + sw + w3c-dom-level2-html + w3c-svg + w3c-uaag10 + wxwidgets_bugs + + + Guide to the Qt Translation Tools + Qt Assistant Manual + Qt Designer Manual + Qt Reference Documentation + qmake User Guide + + + KDE Libraries (Doxygen) + + + + + + + + + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + + + false + false + + + *.o,*.lo,CVS + false + + + diff --git a/Compilation/Compilation.kdevelop.filelist b/Compilation/Compilation.kdevelop.filelist new file mode 100755 index 0000000..45d44ea --- /dev/null +++ b/Compilation/Compilation.kdevelop.filelist @@ -0,0 +1,9 @@ +# KDevelop Custom Project File List +debug.c +generator.c +generator.h +Makefile +epc.h +exemples/while.pas +exemples/if.pas +README diff --git a/Compilation/Makefile b/Compilation/Makefile new file mode 100755 index 0000000..218a8db --- /dev/null +++ b/Compilation/Makefile @@ -0,0 +1,77 @@ +# +# Makefile ENSICAEN 2006 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Construit le programme EPC +# + +# +# version: 05/04/2006 +# +# done: - +# +# todo: - +# + + +CC = gcc +CFLAGS = -Wall -ggdb +LDFLAGS = + +LEX = lex + +# Le -v génère un fichier "parser.output" contenant des informations utiles. +YACC = yacc +YACCFLAGS = -v + +TARGETS = debug epc epc-debug + +all: $(TARGETS) exemples + +exemples: + $(MAKE) -C $@ + +epc: lex.yy.o parser.tab.o main_parser.o generator.o + $(CC) -o $@ $(LDFLAGS) $^ + +epc-debug: lex-debug.yy.o parser.tab.o main_parser.o generator.o + $(CC) -o $@ $(LDFLAGS) $^ + +debug: lex.yy.o debug.o parser.tab.o generator.o + $(CC) -o $@ $(LDFLAGS) $^ + +lex.yy.o: parser.tab.h + +lex-debug.yy.o: lex.yy.c parser.tab.h + $(CC) $(CFLAGS) -DDEBUG -c -o $@ $< + +lex.yy.c: scanner.l + $(LEX) $< + +parser.tab.c: parser.y + $(YACC) $(YACCFLAGS) -d -b parser $< + +parser.tab.h: parser.y + $(YACC) $(YACCFLAGS) -d -b parser $< + +clean: + rm -f lex.yy.c parser.tab.c parser.tab.h parser.output *.o $(TARGETS) + make -C exemples $@ + +distclean: clean + rm -f *~ + make -C exemples $@ + + +.PHONY: distclean clean all exemples diff --git a/Compilation/README b/Compilation/README new file mode 100755 index 0000000..e20ba33 --- /dev/null +++ b/Compilation/README @@ -0,0 +1,61 @@ +============================================================================= + README ENSICAEN 2006 + + MASSE Nicolas (2005-Groupe3-LIMIN) + LIMIN Thomas (2005-Groupe3-MASSE) + + ENSICAEN + 6 Boulevard Marechal Juin + F-14050 Caen Cedex + + Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + reproduit, utilise ou modifie sans l'avis express de ses auteurs. +============================================================================= + + + +Travail effectué : +----------------------------------------------------------- + - Analyse lexicale + - Analyse syntaxique + - Génération de code à 3 adresses + - Makefiles + - Correction de bug dans la fonction trim + - Ajout de 2 fonctions dans generator.[hc] + + void init(struct t_code * s); + + char * getType(char * id); + - Test du programme avec les examples + + + + +Reste à faire : +----------------------------------------------------------- + - Vérification de type + - Tests intensifs + + + + +Description des fichiers : +----------------------------------------------------------- + epc.h : déclarations communes à tous les fichiers + debug.c : programme de test, analyse lexicale seulement + main_parser.c : le main du compilateur + parser.y : fichier yacc + scanner.l : fichier lex + exemples/*.pas : fichiers exemples + generator.[ch] : fonctions utilitaires + README : ce fichier + Compilation.kdevelop : projet KDevelop + + + + +Fichiers générés : +----------------------------------------------------------- + epc : le compilateur + epc-debug : le compilateur, avec affichage de l'analyse lexicale + debug : programme de test, analyse lexicale seulement + exemples/*.c : exemples compilés + parser.output : généré par yacc, descriptif de la grammaire diff --git a/Compilation/debug.c b/Compilation/debug.c new file mode 100755 index 0000000..76beea7 --- /dev/null +++ b/Compilation/debug.c @@ -0,0 +1,39 @@ +/** + * #(@)debug.c ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 05/04/2006 + * + * done: - + * + * todo: - + */ + +#include + +/* Header commun */ +#include "epc.h" + +/** Le nom du programme, indispensable pour l'édition des liens */ +char * progname = "test"; + +/** + * Programme de test : analyse lexicalement l'entrée standard. + */ +int main() { + for (;;) + yylex(); + +} + diff --git a/Compilation/epc.h b/Compilation/epc.h new file mode 100755 index 0000000..c44798e --- /dev/null +++ b/Compilation/epc.h @@ -0,0 +1,54 @@ +/** + * #(@)epc.h ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * Contient la déclaration des variables partagées entre les différents + * fichiers. + * + * @version 05/04/2006 + * + * done: - + * + * todo: - + */ + +#ifndef EPC_H +#define EPC_H + +/* Pour FILE* */ +#include + +/** Le nom du programme, défini dans le fichier parser.y */ +extern char* progname; + +/** L'analyseur syntaxique, fonction définie par lex */ +extern int yylex(void); + +/** Le flux d'entrée utilisée par l'analyseur syntaxique */ +extern FILE *yyin; + +/** + * Analyseur syntaxique, fonction définie par yacc + * dans le fichier parser.tab.c + */ +extern int yyparse(void); + +/** Définie dans le fichier scanner.l */ +extern int line_no; + +/** Définie par lex */ +extern char * yytext; + + +#endif /* EPC_H */ diff --git a/Compilation/exemples/Makefile b/Compilation/exemples/Makefile new file mode 100755 index 0000000..c7b2405 --- /dev/null +++ b/Compilation/exemples/Makefile @@ -0,0 +1,49 @@ +# +# Makefile ENSICAEN 2006 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Construit les exemples +# + +# +# version: 05/04/2006 +# +# done: - +# +# todo: - +# + + +CC = gcc +CFLAGS = -Wall +LDFLAGS = -lm + +EPC = ../epc + +TARGETS = if while micropascal + +all: $(TARGETS) + +$(TARGETS): % : %.pas $(EPC) + $(EPC) $< >$@.c + $(CC) $(CFLAGS) $(LDFLAGS) $@.c -o $@ + +clean: + rm -f *.c $(TARGETS) + +distclean: clean + rm -f *~ + + +.PHONY: distclean clean all diff --git a/Compilation/exemples/femtopascal.pas b/Compilation/exemples/femtopascal.pas new file mode 100755 index 0000000..0d4a4a9 --- /dev/null +++ b/Compilation/exemples/femtopascal.pas @@ -0,0 +1,10 @@ +program femto; +var var1 : integer; +begin + var1 := 10; + while (var1 * 2) > 0 do + begin + var1 := var1 - 1; + printf('%d\n', var1); + end; +end. diff --git a/Compilation/exemples/for.pas b/Compilation/exemples/for.pas new file mode 100755 index 0000000..95eaef4 --- /dev/null +++ b/Compilation/exemples/for.pas @@ -0,0 +1,18 @@ +program toto; +var i,j,k : integer; + +begin + + for i:=2 to 7 step 2 do + begin + writeln('i = ',i); + for j:=0 to 3 do + begin + writeln(' j = ',j); + for k:=5 downto 3 do + begin + writeln(' k = ',k); + end; + end; + end; +end. diff --git a/Compilation/exemples/if.pas b/Compilation/exemples/if.pas new file mode 100755 index 0000000..89c8c05 --- /dev/null +++ b/Compilation/exemples/if.pas @@ -0,0 +1,12 @@ +program if1; +var var1 : integer; +begin + var1 := 10; + + if (var1 * 2) > 0 then + printf('(var1 * 2) > 0\n'); + + if (var1 + 2 ) < 0 then + printf('(var1 + 2 ) < 0\n'); +end. + diff --git a/Compilation/exemples/micropascal.pas b/Compilation/exemples/micropascal.pas new file mode 100755 index 0000000..166f0be --- /dev/null +++ b/Compilation/exemples/micropascal.pas @@ -0,0 +1,17 @@ +program toto; +var i : integer; + k,variablelongue : integer; +begin + i:=20; + variablelongue:=-10; + k:=i+2*3+4; + variablelongue:=pow(2,3); + if (NOT (1>2)) then i:=20; + + while (i> 10) do + begin + printf('i = %d\n', i+3); + if (i=2) then puts('i=2'); + i:=i-1; + end; +end. diff --git a/Compilation/exemples/proc_fonc.pas b/Compilation/exemples/proc_fonc.pas new file mode 100755 index 0000000..a497534 --- /dev/null +++ b/Compilation/exemples/proc_fonc.pas @@ -0,0 +1,124 @@ +program testoffset; + +const + MAX = 100; +type + complex = record + re,im : integer; + end; + pile = array [0..10] of complex; + pile_int = array [0..10] of integer; + complexpile = record + p : array [0..2] of record + re,im : integer ; + end; + sommet : integer; + end; + +const + TOOOOOO = 100; +var + test1 : complex; + i : integer; + mapile : complexpile; + mapile2 : complexpile; + test : array [0..2] of integer; + test2 : array [0..2] of complex; + ok : boolean; + c : char; + + + + +function fucnspeciale (idd : integer ):integer; +const MAX = 3; +var ddddeedede : integer; +begin + write (MAX); + idd:=45; + idd:=4; +end; + +procedure totii (idd :integer ); +const MAX = 4; +var ddddededede : integer; +begin + idd:=45; + write ('tot'); +end; + +procedure totii2 (idd :boolean ); +const MAX = 5; +var ddddededede : integer; +begin + idd:=true; + write ('tot'); +end; + +procedure totii3 (idd :boolean ); +const MAX = 6; +var ddddededede : integer; +begin + idd:=true; + write ('tot'); +end; + +procedure totii4 (idd :boolean ); +const MAX = 7; +var ddddededede : integer; +begin + idd:=true; + write ('tot'); +end; + +function fucnspeciale2 (idd :integer ):integer; +const MAX = 8; +var ddddeedede: integer; +begin + write ('tot'); + ddddeedede:=45; + idd:=4; +end; + +function specialtest (c : char ,b:boolean,i:integer):integer; +const MAX =9; +begin + i:=4; + specialtest:=4; +end; + +begin + totii2(true); + i:=10+fucnspeciale(i)+specialtest('t',false,1+5+8-8); + i:=10+fucnspeciale(i)+specialtest(c,ok,i); + test1.im:=4; + i:=10; + mapile.sommet := 0; + mapile2.sommet := 0; + mapile.p[2].re := 10; + test[5]:=MAX+5+i; + ok := true; + c := 't'; + writeln(ok); + read(ok, test2[1].re,c); + writeln(ok); + writeln(test2[1].re); + writeln (i); + + + writeln(1+5+8+8+7); + while true = ok do + begin + if i = 15 then + ok:=false; + writeln (i); + i:=i+1; + end; + c:='z'; + if c <> 't' then + writeln(ok); + + if 1+i=5+5+1 then + writeln(ok); + mapile.p[0].re :=3; +end. diff --git a/Compilation/exemples/tabmulti.pas b/Compilation/exemples/tabmulti.pas new file mode 100755 index 0000000..f864cd0 --- /dev/null +++ b/Compilation/exemples/tabmulti.pas @@ -0,0 +1,38 @@ +program tabmulti; + +var + test2 : array [2..4,3,4,5] of integer; + test : array [4,6,7] of integer; + i,j,k,l : integer; + +begin + test2[3,2,3,4]:=4; + i:=1; + j:=1; + k:=1; + l:=7; +{ for i:= 0 to 2 do } +{ begin } +{ for j:=0 to 3 do } +{ begin } + for k:=0 to 5 do + begin + write('k = '); + writeln (k); + for l:=0 to 6 do + begin +{ write('i = '); } +{ write (i); } +{ write(' j = '); } +{ write (j); } + write(' l = '); + writeln (l); + test[j,k,l] := l; +{ writeln(test[j,k,l]); } + end; + end; +{ end; } +{ end; } + test[3,5,6]:=4; + writeln( test[3,5,6]); +end. \ No newline at end of file diff --git a/Compilation/exemples/while.pas b/Compilation/exemples/while.pas new file mode 100755 index 0000000..291516a --- /dev/null +++ b/Compilation/exemples/while.pas @@ -0,0 +1,10 @@ +program while1; +var var1 : integer; +begin + var1 := 10; + while (var1 * 2) > 0 do + begin + var1 := var1 - 1; + printf('%d\n', var1); + end; +end. diff --git a/Compilation/generator.c b/Compilation/generator.c new file mode 100755 index 0000000..e511b9b --- /dev/null +++ b/Compilation/generator.c @@ -0,0 +1,169 @@ +/** -*- c-basic-offset: 3 -*- + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * @author Regis Clouard + * + * @version 2006-03-06 + */ + +#include +#include +#include +#include +#include "generator.h" + +/** + * @file generator.c + * + * Theses functions do not care about memory management. + * @todo Manage memory. + */ + +/** + * Init the parser's union. + */ +void init(struct t_code * s) { + s->after = ""; + s->before = ""; + s->code = ""; + s->place = ""; + s->type = ""; +} + + +/** + * Does not create new string. + */ +char *trim( char *s ) { + // Bug : s[strlen(s)-2]='\0'; + s[strlen(s)-1]='\0'; + return s+1; +} + +/** + * Creates a new string. + */ +char *prod( const char *s ) { + if (s!=NULL && (strlen(s) > 0)) { + char* ns=(char*)malloc((strlen(s)+6)*sizeof(char)); + strcpy(ns," "); + strcat(ns,s); + strcat(ns,";\n"); + return ns; + } else { + return strdup(""); + } +} + +/* The current temporary counter. */ +static int _tempCounter=0; + +static struct s_table *_symbolTable=NULL; + +/** + * Creates a new string that can be free. + */ +char *newTemp( char * type) { + char *_name=(char *)malloc(7*sizeof(char)); + + sprintf(_name,"__t%03d",_tempCounter++); + addType(_name,type); + return _name; +} + +/* Current number of label. */ +static int _label=0; + +/** + * Creates a new string that can be free. + */ +char *newLabel( ) { + char *_name=(char *)malloc(5*sizeof(char)); + + sprintf(_name,"__L%03d",_label++); + return _name; +} + +/** + * Creates a new string. + */ +char *concat( const char *item, ... ) { + //const char *p; + va_list argp; + //int i; + char *s; + int size=strlen(item)+1; + char *statement=(char *)malloc(size*sizeof(char)); + + va_start(argp, item); + strcpy(statement,item); + while ((s = va_arg(argp, char *))!= NULL) { + statement=realloc(statement,size+strlen(s)); + statement[size-1]='\0'; + strcat(statement,s); + size+=strlen(s); + } + + va_end(argp); + statement[size-1]='\0'; + return statement; +} + +/** + * Allocates a new entry in the symbol table, but + * the structure field are already allocated. + * @param a name for the identifier. + * @param type a type name (int, float, void ...). + */ +void addType(char *identifier, char* type) { + struct s_table *ns= (struct s_table *)(malloc(sizeof(struct s_table))); + + strcpy(ns->name,identifier); + strcpy(ns->type,type); + ns->next=_symbolTable; + _symbolTable=ns; +} + +/** + * Retourne le type d'un symbole + */ +char * getType(char * id) { + struct s_table * se = _symbolTable; + while (se != NULL) { + if (strcmp(se->name, id) == 0) { + return se->type; + } + + se = se->next; + } + + // type par defaut + return "void"; +} + +/** + * Goes through the symbol table and builds + * the convenient C statement liek: type variable; + * One line per variable. + */ +char *genDeclarationVars( ) { + char *s,*s1; + struct s_table *t=_symbolTable; + + s=NULL; + while ( t!= NULL) { + s1=s; + s=concat(prod(concat(t->type," ",t->name,NULL)),s1,NULL); + if (s1) free(s1); + t=t->next; + } + return s; +} diff --git a/Compilation/generator.h b/Compilation/generator.h new file mode 100755 index 0000000..aa77272 --- /dev/null +++ b/Compilation/generator.h @@ -0,0 +1,130 @@ +/** -*- c-basic-offset: 3 -*- + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +#ifndef GENERATOR_H +#define GENERATOR_H + +#include "parser.tab.h" + +/** + * @author Regis Clouard + * @author Nicolas Massé + * @author Thomas Limin + * + * @version 2006-03-06 + */ + +/** + * @file generator.h + * This file contains functions for managing + * symbol table and intermediate code. + */ + +/** + * The symbol table. + */ +struct s_table { + char name[255]; /* the name of the symbol */ + char type[255]; /* The C type of symbol : int, float, void. */ + struct s_table *next; /* The next symbol. */ +}; + +extern struct s_table *_symbolTable; + +/** + * Initialise une structure de donnees du parseur. + */ +void init(struct t_code * s); + +/** + * Retourne le type d'un symbole. + */ +char * getType(char * id); + +/** + * Creates a new entry in the symbol table + * for the given identifier with the specified type. + * Available types are those of the C language. + * For example, the following call adds the integer + * variable 'i' in the symbol table: + *
+ * addType("i","int");
+ * 
+ * @param the name of the identifier. + * @param type the type name (int, float, void ...). + */ +void addType( char *identifier, char *type ) ; + +/** + * Returns the code for the declaration + * of all the variables in the symbol table. + * @return the code. + */ +char* genDeclarationVars(); + +/** + * Creates a new tempory variable name with the + * specified type. Available types are those + * of the C language: int, float, etc. For + * example the following call creates a new + * integer variable: + *
+ * char * variable=newTemp("int");
+ * 
+ * The variable name template looks like __txxx where + * xxx is a serial integer number that begins with 1. + * For example, the second call to newTemp returns: __t002 + * Also, adds the variable in the symbol table. + * + * @param type the type of the temporary variable. + * @return a new variable name. + */ +char* newTemp( char *type ); + +/** + * Creates a new label name. + * The label name takes the form of __Lxxxx + * where xxxx is an integer. For example, + * the second call to newLabel() return __L002 + * @return the string with the label name. + */ +char *newLabel( ) ; + +/** + * Catenates the given strings into one single string. + * The result string is dynamically allocated. So a free + * is necessary for destruction. + * @param items the list of input strings. + * @return the new statement. + */ +char *concat( const char *item, ... ); + +/** + * Returns the given string without the first and + * the last character. For example this is convenient + * for getting text from Pascal string: + *
+ * trim("'this a text'"); -> returns "this a text"
+ * 
+ * @param s the string to process. + * @return the string modified. + */ +char *trim( char *s ); + +/** + * Builds a C statement with + * the given code. + * Adds semicolon and indents each line. + * @param s the given code. + * @return the C statement. + */ +char *prod( const char *s ) ; + +#endif /* GENERATOR_H */ diff --git a/Compilation/main_parser.c b/Compilation/main_parser.c new file mode 100755 index 0000000..13cb49f --- /dev/null +++ b/Compilation/main_parser.c @@ -0,0 +1,59 @@ +/** + * #(@)main_parser.c ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Executes the parser and the semantic analyzer. + * Generates the intermediate code to standard output. + * The compiler accepts only one Pascal file. + */ + +#include "parser.tab.h" +#include "epc.h" + +#include +#include + +int main( int argc, char *argv[] ) { + if (argc == 1) { + fprintf(stderr,"%s: no input files\n",argv[0]); + exit(1); + } + + if (strcmp(argv[1],"-h") == 0) { + fprintf(stderr,"Usage: %s [options] file\n",argv[0]); + fputs("Options:",stderr); + fputs(" -h Display this information",stderr); + exit(0); + } + + yyin=fopen(argv[1], "r"); /* Open the input for the parser. */ + + /* @todo: !! Add a function to get only the name of the */ + /* file without the path. */ + progname=argv[1]; + + if (!yyin) { /* Cannot open input file. */ + fprintf(stderr,"%s: %s: No such file or directory\n",argv[0],argv[1]); + fprintf(stderr,"%s: no input file\n",argv[0]); + return 1; + } + + if (yyparse()) { + fprintf(stderr,"%s: %s: compilation failed\n",argv[0],argv[1]); + return 1; + } + + return 0; +} + diff --git a/Compilation/parser.y b/Compilation/parser.y new file mode 100755 index 0000000..fd36077 --- /dev/null +++ b/Compilation/parser.y @@ -0,0 +1,428 @@ +/** + * #(@)parser.y ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 05/04/2006 + * + * done: - + * + * todo: - + */ + +/** + * @file parser.y + * + * Part of the Pascal grammar in Yacc format, based originally on BNF. + * The grammar has been massaged somewhat to make it LALR, and limited + * to integer type, and if and while control structure. + */ + +%{ +#include +#include +#include + +/* Fonctions utilitaires */ +#include "generator.h" + +/* Header commun */ +#include "epc.h" + +/* voir le corps de la méthode ci-dessous */ +int yyerror(char * s); + +/** Le nom du programme, utilisée par yacc */ +char * progname; +%} + +/** + * The list of attributes associated to each terminal + * and non terminal of the grammar. + */ +%union { + char strval[255]; /* The value of the token. */ + + /** + * This structure defines the convenient + * information for building the code. + */ + struct t_code { + char* code; /* The string that contains the 3 address code */ + char* place; /* The name of the identifier or the temporary variable. */ + char* before; /* The name of the label before the code. */ + char* after; /* The name of the label after the code. */ + char* type; /* The name of the type (int, float, ...). */ + } code3a; +} + +/* Les jetons */ +%token AND ASSIGNMENT +%token COLON COMMA DO DOT END EQUAL +%token GE GT IF IN INTEGER LBRAC LE +%token LPAREN LT MINUS NOT NOTEQUAL OF OR +%token PBEGIN PLUS +%token PROGRAM +%token RBRAC RPAREN +%token SEMICOLON DIV MULT THEN +%token VAR WHILE +%token IDENTIFIER +%token REALNUMBER +%token INTNUMBER +%token CHARACTER_STRING + +/* Operator associativity. */ +%left PLUS MINUS +%left OR AND NOT +%right MULT DIV + +/* The axiom. */ +%start program + +/* Information de typage des non termimaux */ +%type identifier number term type_denoter sign +%type compound_statement statement_sequence procedure_statement +%type simple_expression expression instruction +%type actual_parameter_list relop variable_declaration +%type program_heading block statement_part +%% +program: program_heading SEMICOLON block DOT + { + puts("#include "); + puts("#include "); + puts($1.code); + puts($3.code); + } + ; + +program_heading: PROGRAM identifier + { + init(&$$); + $$.code = concat("/* nom du programme : '", $2.place, "' */", NULL); + } + ; + +block: variable_declaration_part statement_part + { + init(&$$); + $$.code = concat("int main(void) {\n", + $2.code, + prod("return 0"), + "}\n", NULL); + } + ; + +statement_part: compound_statement + { + init(&$$); + $$.code = concat(" /* début des variables */\n", + genDeclarationVars(), + " /* fin des variables */\n\n", + $1.code, NULL); + } + ; + +variable_declaration_part : VAR variable_declaration_list SEMICOLON + { + } + | + { + } + ; + +variable_declaration_list : variable_declaration_list SEMICOLON variable_declaration + { + } + + | variable_declaration + { + } + + ; +variable_declaration : identifier COLON type_denoter + { + init(&$$); + addType($1.place, $3.type); + $$.type = $3.type; + } + | identifier COMMA variable_declaration + { + init(&$$); + addType($1.place, $3.type); + $$.type = $3.type; + } + + ; +type_denoter: INTEGER + { + init(&$$); + $$.type = "int"; + } + ; + +compound_statement: PBEGIN statement_sequence SEMICOLON END + { + init(&$$); + $$.code = concat(" { /* début du bloc */\n", $2.code, " } /* fin du bloc */\n", NULL); + } + ; +statement_sequence: instruction + { + init(&$$); + $$.code = $1.code; + } + | statement_sequence SEMICOLON instruction + { + init(&$$); + $$.code = concat($1.code, $3.code, NULL); + } + ; +/* INSTRUCTION */ +instruction: identifier ASSIGNMENT expression /* S -> id:=E */ + { + init(&$$); + $$.code = concat($3.code, prod(concat($1.place , " = ", $3.place, NULL)), NULL); + } + | procedure_statement /* S->procedure(args) */ + { + $$ = $1; // pass through + } + | compound_statement /* S -> BEGIN S END */ + { + $$ = $1; // pass through + } + | IF expression THEN instruction /* S -> IF THEN */ + { + $$.after = newLabel(); + $$.code = concat($2.code, + prod(concat("if (", $2.place, " == 0) goto ", $$.after, NULL)), + $4.code, + prod(concat($$.after, ":", NULL)), + NULL); + } + | WHILE expression DO instruction /* S-> WHILE DO */ + { + $$.before = newLabel(); + $$.after = newLabel(); + $$.code = concat(prod(concat($$.before, ":", NULL)), + $2.code, + prod(concat("if (", $2.place, " == 0) goto ", $$.after, NULL)), + $4.code, + prod(concat("goto ", $$.before, NULL)), + prod(concat($$.after, ":", NULL)), + NULL); + } + ; +/* PROCEDURE CALL */ +procedure_statement: identifier /* no actual parameter list */ + { + init(&$$); + $$.code = prod(concat($1.place, "()", NULL)); + $$.type = "void"; + } + | identifier LPAREN actual_parameter_list RPAREN /* with actual argument list */ + { + init(&$$); + $$.code = concat($3.code, prod(concat($1.place, "(", $3.place, ")", NULL)), NULL); + $$.type= "void"; + } + ; +actual_parameter_list: expression + { + $$ = $1; // pass through + } + | actual_parameter_list COMMA expression + { + init(&$$); + $$.code = concat($1.code, $3.code, NULL); + $$.place = concat($1.place, ", ", $3.place, NULL); + } + ; +/* EXPRESSIONS */ +expression: simple_expression + { + $$ = $1; // pass through + } + | simple_expression relop simple_expression + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " ", $2.code , " ", $3.place, NULL)), NULL); + } + ; +simple_expression: term /* E -> T */ + { + $$ = $1; // pass through + } + | sign term /* E-> +/- T */ + { + init(&$$); + $$.type = $2.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($2.code, + prod(concat($$.place, " = ", $1.code, " ", $2.place, NULL)), + NULL); + } + | NOT simple_expression /* E-> NOT E */ + { + init(&$$); + $$.type = $2.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($2.code, + prod(concat($$.place, " = ! ", $2.place, NULL)), + NULL); + + } + | simple_expression PLUS simple_expression /* E -> E + E */ + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " + ", $3.place, NULL)), NULL); + } + | simple_expression MINUS simple_expression /* E -> E - E */ + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " - ", $3.place, NULL)), NULL); + } + | simple_expression MULT simple_expression /* E -> E * E */ + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " * ", $3.place, NULL)), NULL); + } + | simple_expression DIV simple_expression /* E -> E / E */ + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " / ", $3.place, NULL)), NULL); + } + | simple_expression AND simple_expression /* E -> E AND E */ + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " && ", $3.place, NULL)), NULL); + } + | simple_expression OR simple_expression /* E -> E OR E */ + { + init(&$$); + $$.type = $1.type; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($1.code, $3.code, prod(concat($$.place, " = ", $1.place, " || ", $3.place, NULL)), NULL); + } + | LPAREN expression RPAREN /* E -> (E) */ + { + $$ = $2; // pass through + } + ; +term: identifier + { + init(&$$); + $$.place = $1.place; + $$.type = $1.type; + } + | identifier LPAREN actual_parameter_list RPAREN /* Function call */ + { + init(&$$); + $$.type = "int"; // TODO type checking + $$.place = newTemp($$.type); + $$.code = concat($3.code, + prod(concat($$.place, " = ", $1.place, "(", $3.place, ")", NULL)), + NULL); + } + | number + { + $$ = $1; // pass through + } + | CHARACTER_STRING + { + init(&$$); + $$.type = "char *"; + $$.place = newTemp($$.type); + $$.code = prod(concat($$.place, " = ", concat("\"", trim($1), "\"", NULL), NULL)); +} + ; +identifier: IDENTIFIER + { + init(&$$); + $$.place = strdup($1); + $$.type = getType($1); + } + ; +number: INTNUMBER + { + init(&$$); + $$.place = strdup($1); + $$.type = "int"; + } + ; +sign: PLUS + { + init(&$$); + $$.code = "+"; + } + | MINUS + { + init(&$$); + $$.code = "-"; + } + ; +relop: EQUAL + { + init(&$$); + $$.code = "=="; + } + | NOTEQUAL + { + init(&$$); + $$.code = "!="; + } + | LT + { + init(&$$); + $$.code = "<"; + } + | GT + { + init(&$$); + $$.code = ">"; + } + | LE + { + init(&$$); + $$.code = "<="; + } + | GE + { + init(&$$); + $$.code = ">="; + } + ; +%% + +/** + * Provides a yyerror routine which simply reports error line. + * It is called when the parser finds something not covered by any rule. + * + * @param s the error message to print. + */ +int yyerror(char * s) { + fprintf(stderr, "%s:%d: %s: at or before '%s'\n", progname, line_no, s, yytext); + return 0; +} diff --git a/Compilation/scanner.l b/Compilation/scanner.l new file mode 100755 index 0000000..2f15958 --- /dev/null +++ b/Compilation/scanner.l @@ -0,0 +1,163 @@ +/** + * #(@)scanner.l ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 05/04/2006 + * + * done: - + * + * todo: - + */ + + +%{ +#include +#include + +/* Header généré par yacc */ +#include "parser.tab.h" + +/* Header commun */ +#include "epc.h" + +/** + * Affiche le jeton sur la sortie standard et le retourne. + * + * @param x le jeton + * @return le jeton + */ +#ifdef DEBUG +#define A(x) {printf("Trouve: %s = \"%s\"\n", #x, yytext); return x;} +#else +#define A(x) {return x;} +#endif + +/** Le numéro de la ligne courante */ +int line_no = 1; + +/* Termine un commentaire ? */ +void commenteof(); + +%} + +ID [a-zA-Z][a-zA-Z0-9_]* +INT [0-9]+ +REAL [0-9]*\.[0-9]+ +A [aA] +B [bB] +C [cC] +D [dD] +E [eE] +F [fF] +G [gG] +H [hH] +I [iI] +J [jJ] +K [kK] +L [lL] +M [mM] +N [nN] +O [oO] +P [pP] +Q [qQ] +R [rR] +S [sS] +T [tT] +U [uU] +V [vV] +W [wW] +X [xX] +Y [yY] +Z [zZ] + + +%% + +"(*" | +"{" { int c; + while ((c = input())) { + if (c == '}') + break; + else if (c == '*') { + if ((c = input()) == ')') + break; + else + unput (c); + } else if (c == '\n') + line_no++; + else if (c == 0) + commenteof(); + } +} +{A}{N}{D} {A(AND)} +{N}{O}{T} {A(NOT)} +{O}{R} {A(OR)} +{D}{O} {A(DO)} +{I}{F} {A(IF)} +{I}{N} {A(IN)} +{E}{N}{D} {A(END)} +{O}{F} {A(OF)} +{B}{E}{G}{I}{N} {A(PBEGIN)} +{P}{R}{O}{G}{R}{A}{M} {A(PROGRAM)} +{T}{H}{E}{N} {A(THEN)} +{V}{A}{R} {A(VAR)} +{W}{H}{I}{L}{E} {A(WHILE)} +{I}{N}{T}{E}{G}{E}{R} {A(INTEGER)} +":=" {A(ASSIGNMENT)} +'[^']*' {strcpy(yylval.strval, yytext); A(CHARACTER_STRING)} +":" {A(COLON)} +";" {A(SEMICOLON)} +"," {A(COMMA)} +"." {A(DOT)} +"=" {A(EQUAL)} +">=" {A(GE)} +">" {A(GT)} +"<" {A(LT)} +"<>" {A(NOTEQUAL)} +"<=" {A(LE)} +"[" {A(LBRAC)} +"]" {A(RBRAC)} +"(" {A(LPAREN)} +")" {A(RPAREN)} +"-" {A(MINUS)} +"+" {A(PLUS)} +"/" {A(DIV)} +"*" {A(MULT)} +{INT} {strcpy(yylval.strval, yytext); A(INTNUMBER)} +{REAL} {strcpy(yylval.strval, yytext); A(REALNUMBER)} +{ID} {strcpy(yylval.strval, yytext); A(IDENTIFIER)} +[ \t\f] ; +\n line_no++; +. fprintf (stderr,"%s:%d: error: '%c' (%d): illegal character\n", progname,line_no,yytext[0], yytext[0]); +%% + +/** + * Prints error message in case of bad comment pattern. + */ +void commenteof() { + fprintf (stderr, "%s:%d:error: unexpected EOF inside comment at line\n", progname, line_no); + exit (1); +} + +/** + * If the application requires yylex to continue processing + * with another source of input, returns TRUE. + * + * @return always TRUE. + */ +int yywrap () { + return 1; +} + + diff --git a/Corba/Bank/AccountImpl.java b/Corba/Bank/AccountImpl.java new file mode 100755 index 0000000..cd274b0 --- /dev/null +++ b/Corba/Bank/AccountImpl.java @@ -0,0 +1,96 @@ +/* + * #(@)AccountImpl.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ +package Bank; + +import BankManagement.*; + +import org.omg.CosNaming.*; +import org.omg.CosNaming.NamingContextPackage.*; +import org.omg.CORBA.*; +import org.omg.PortableServer.*; +import org.omg.PortableServer.POA; + +import java.util.*; + +/** + * Un compte bancaire concret: le servant + */ +class AccountImpl extends AccountPOA { + + /** + * Le solde du compte. + */ + private int balance = 0; + + /** + * Le possesseur du compte. + */ + private String username; + + /** + * La liste des operations. + */ + private List opList; + + + /** + * Construit un nouveau compte bancaire. + */ + public AccountImpl(String username) { + setUsername(username); + opList = new ArrayList(); + } + + private void setUsername(String user) { + this.username = user; + } + + public String getUsername() { + return this.username; + } + + /** + * Retourne le solde du compte. + */ + public int balance() { + return balance; + } + + /** + * Effectue un retrait. + */ + public void withdraw(int amount) { + balance -= amount; + opList.add("withdraw[amount = " + amount + "]"); + } + + /** + * Effectue un retrait. + */ + public void deposit(int amount) { + balance += amount; + opList.add("deposit[amount = " + amount + "]"); + } + + public String operations() { + StringBuffer sb = new StringBuffer(); + + Iterator it = opList.iterator(); + while (it.hasNext()) { + sb.append(it.next()); + sb.append(Character.LINE_SEPARATOR); + } + + return sb.toString(); + } + +} + diff --git a/Corba/Bank/BankClient.java b/Corba/Bank/BankClient.java new file mode 100755 index 0000000..033a53a --- /dev/null +++ b/Corba/Bank/BankClient.java @@ -0,0 +1,195 @@ +/* + * #(@)BankClient.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package Bank; + +import BankManagement.*; + +import java.io.*; +import java.util.*; +import org.omg.CosNaming.*; +import org.omg.CORBA.*; + +/** + * Le client qui permet d'accéder au serveur. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class BankClient { + public static void main(String args[]) { + + String host = "localhost"; + String port = "1050"; + + if (args.length >= 1) { + port = args[0]; + } + + if (args.length >= 2) { + host = args[1]; + } + + displayHelp(); + + try { + // create and initialize the ORB + ORB orb = ORB.init(new String[] {"-ORBInitialPort", host, "-ORBInitialPort", port }, null); + + // get the root naming context + org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); + NamingContext ncRef = NamingContextHelper.narrow(objRef); + + // resolve the Object Reference in Naming + // make sure there are no spaces between "" + NameComponent nc = new NameComponent("Bank", ""); + NameComponent path[] = {nc}; + Bank bankRef = BankHelper.narrow(ncRef.resolve(path)); + + + int accNum = -1; + int sessionId = -1; + String user = null; + String pass = null; + Account accRef = null; + + boolean quit = false; + + BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); + + + while (!quit) { + StringTokenizer stk = new StringTokenizer(buff.readLine(), " \t"); + + try { + + while (!quit && stk.hasMoreTokens()) { + String token = stk.nextToken(); + + + if (token.equals("login")) { + System.out.print("[ LOGIN ] (void)"); + if (stk.hasMoreTokens()) { + user = stk.nextToken(); + System.out.println(" : login = " + user); + } else { + throw new Exception("Syntax error at '" + token + "'"); + } + } else if (token.equals("pass")) { + System.out.print("[ PASS ] (void)"); + if (stk.hasMoreTokens()) { + pass = stk.nextToken(); + System.out.println(" : pass = " + pass); + } else { + throw new Exception("Syntax error at '" + token + "'"); + } + + } else if (token.equals("connect")) { + System.out.print("[ CONNECT ] (login = " + user + ", pass = " + pass + ")"); + sessionId = bankRef.connect(user, pass); + System.out.println(" : sessionId = " + sessionId); + if (sessionId == 0) { + System.out.println("wrong login or password"); + } + } else if (token.equals("disconnect")) { + System.out.print("[ DISCONNECT ] (sessionId = " + sessionId + ")"); + bankRef.disconnect(sessionId); + sessionId = -1; + System.out.println(" : OK"); + } else if (token.equals("create")) { + accNum = bankRef.create(sessionId); + if (accNum == 0) { + System.out.println("Please log-in before create account: login pass connect "); + } else { + System.out.print("[ CREATE ] (sessionId = " + sessionId + ")"); + System.out.println(" : accNum = " + accNum); + System.out.println(" : OK"); + } + } else if (token.equals("getacc")) { + if (stk.hasMoreTokens()) { + accNum = Integer.parseInt(stk.nextToken()); + } else { + throw new Exception("Syntax error at '" + token + "'"); + } + System.out.print("[ GET ACCOUNT ] (sessionId = " + sessionId + ", accNum = " + accNum + ")"); + accRef = bankRef.getAccount(accNum, sessionId); + System.out.println(" : OK"); + } else if (token.equals("deposit")) { + int m; + if (stk.hasMoreTokens()) { + m = Integer.parseInt(stk.nextToken()); + } else { + throw new Exception("Syntax error at '" + token + "'"); + } + + System.out.print("[ DEPOSIT ] (sessionId = " + sessionId + ", accNum = " + accNum + ", amount = " + m + ")"); + accRef.deposit(m); + System.out.println(" : OK"); + } else if (token.equals("withdraw")) { + int m; + if (stk.hasMoreTokens()) { + m = Integer.parseInt(stk.nextToken()); + } else { + throw new Exception("Syntax error at '" + token + "'"); + } + System.out.print("[ WITHDRAW ] (sessionId = " + sessionId + ", accNum = " + accNum + ", amount = " + m + ")"); + accRef.withdraw(m); + System.out.println(" : OK"); + } else if (token.equals("balance")) { + System.out.print("[ BALANCE ] (sessionId = " + sessionId + ", accNum = " + accNum + ")"); + int b = accRef.balance(); + System.out.println(" : balance = " + b); + } else if (token.equals("quit")) { + quit = true; + } else if (token.equals("del")) { + bankRef.del(accNum, sessionId); + System.out.println("[ DEL ] (accNum = " + accNum + ")"); + accNum = -1; + accRef = null; + } else if (token.equals("help")) { + displayHelp(); + } else { + throw new Exception("Syntax error at '" + token + "'"); + } + } + + } catch (Exception e) { + System.out.println("\nERROR : " + e) ; + } + + } + + } catch (Exception e) { + System.out.println("\n\n\nERROR : " + e) ; + e.printStackTrace(System.out); + } + + } + + private static void displayHelp() { + System.out.println("Syntax: command [argument]"); + System.out.println("login "); + System.out.println("pass "); + System.out.println("connect"); + System.out.println("create"); + System.out.println("getacc "); + System.out.println("deposit "); + System.out.println("withdraw "); + System.out.println("balance"); + System.out.println("disconnect"); + System.out.println("del"); + System.out.println("help"); + System.out.println("quit"); + System.out.println("\nHint: login utest pass ptest is valid"); + } + +} diff --git a/Corba/Bank/BankImpl.java b/Corba/Bank/BankImpl.java new file mode 100755 index 0000000..59efe8b --- /dev/null +++ b/Corba/Bank/BankImpl.java @@ -0,0 +1,201 @@ +/* + * #(@)BankImpl.java ENSICAEN 2006-04-04 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * + * @author MASSE Nicolas (2004-Groupe4-LIMIN) + * @author LIMIN Thomas (2004-Groupe4-MASSE) + * @version 1.0 + */ + +package Bank; + +import BankManagement.*; +import java.util.*; +import org.omg.CORBA.*; +import org.omg.PortableServer.*; + + +/** + * A Bank servant. + */ +class BankImpl extends BankPOA { + + /** + * Bank servant constructor + */ + public BankImpl() { + //this.account = account; + this.currentAccountNumber = 0; + this.currentSessionID = 0; + this.accounts = new HashMap(16); + this.users = new HashMap(16); + this.sessions = new HashMap(16); + + // Workaround : file storage not implemented (not very "corba related") + // so users are created here and account related data are reinitialized + // every BankServer relaunch. (interessant kind of periodic revolution ;-) ) + users.put("Thomas", "grouik"); + users.put("Nicolas", "pouet"); + users.put("utest", "ptest"); + } + + /** + * Create a new account. If the session is incorrect + * it returns 0; + * + * @param sessionID + * @return the new account number + */ + public int create (int sessionID) { + int accNumber = 0; + String username = sessions.get(sessionID); + if (username != null) { + accNumber = this.getNextAccountNumber(); + AccountImpl acc = new AccountImpl(username); + + try { + _default_POA().activate_object(acc); + + } catch (org.omg.PortableServer.POAPackage.ServantAlreadyActive e) { + System.err.println(e.getMessage()); + } catch (org.omg.PortableServer.POAPackage.WrongPolicy e) { + System.err.println(e.getMessage()); + } + + this.accounts.put(accNumber, acc); + System.out.println("User " + username + " create a new account with number: " + accNumber + "(session id: " + sessionID + ")" ); + } else { + System.out.println("Invalid session id: " + sessionID); + } + + return accNumber; + } + + + /** + * Provide an account stub. + * + * @param sessionID + * @param acc_num + * @return the account stub + */ + public BankManagement.Account getAccount (int acc_num, int sessionID) throws BankManagement.no_such_account { + String username = null; + AccountImpl acc = null; + Account aref = null; + + username = this.sessions.get(sessionID); + + if (username != null) { + acc = this.accounts.get(acc_num); + } else { + System.out.println("Invalid session id: " + sessionID); + throw new BankManagement.no_such_account(); + } + + if ((acc == null || !(acc.getUsername().equals(username)))) { + System.out.println("No account " + acc_num + " for user " + username +" (session id: " + sessionID + ")"); + throw new BankManagement.no_such_account(); + } + + System.out.println("Provide account " + acc_num + " to " + username + " (session id: " + sessionID + ")"); + + try { + //get object reference from the servant + //aref = AccountHelper.narrow(_default_POA().servant_to_reference(acc)); + + + + // aref = acc._this(); // doesn't work, WHY ????? + aref = AccountHelper.narrow(this._default_POA().servant_to_reference(acc)); + + } catch (Exception e){} + + return aref; + } + + + /** + * Connect a user and give him a session id or 0 if login + * or password are wrong. + * + * @param login + * @param password + * @return the session id + */ + public int connect (String login, String password) { + String storedPassword = this.users.get(login); + int sessionID = 0; + + if ((storedPassword == null) || ! password.equals(storedPassword)) { + System.out.println("Connection refused for user " + login); + } else { + sessionID = this.getNextSessionID(); + this.sessions.put(sessionID, login); + System.out.println("User " + login + " connected (session id: " + sessionID + ")"); + } + + return sessionID; + } + + /** + * Discard a session id so the user have to log-in + * again to send commands. + * + * @param sessionID + */ + public void disconnect (int sessionID) { + String login = null; + login = this.sessions.remove(sessionID); + + if (login != null) { + System.out.println("User " + login + " is now disconnected (previously connected with session id: " + sessionID + ")"); + } else { + System.out.println("Error disconnecting session: session " + sessionID + " unknown"); + } + } + + + /** + * Destroy an account. But where is the remaining cash deposited?? + * + * @param acc_num + * @param sessionID + */ + public void del (int acc_num, int sessionID) { + String username = null; + username = this.sessions.get(sessionID); + + if (username != null) { + AccountImpl acc = accounts.get(acc_num); + if (acc.getUsername().equals(username)) { + this.accounts.remove(sessionID); + } + } + } + + private int getNextAccountNumber() { + return ++ this.currentAccountNumber; + } + + private int getNextSessionID() { + return ++ this.currentSessionID; + } + + private Account account; + private int currentAccountNumber; + private int currentSessionID; + private Map accounts; + private Map users; + private Map sessions; + +} \ No newline at end of file diff --git a/Corba/Bank/BankServer.java b/Corba/Bank/BankServer.java new file mode 100755 index 0000000..70919ef --- /dev/null +++ b/Corba/Bank/BankServer.java @@ -0,0 +1,87 @@ +/* + * #(@)BankServer.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package Bank; + +import BankManagement.*; + +import org.omg.CosNaming.*; +import org.omg.CosNaming.NamingContextPackage.*; +import org.omg.CORBA.*; +import org.omg.PortableServer.*; +import org.omg.PortableServer.POA; + +import java.util.Properties; + +/** + * Make a bank servant availlable on the corba bus + */ +public class BankServer { + + /** + * Lauch the bank server. + */ + public static void main(String args[]) { + + String host = "localhost"; + String port = "1050"; + + if (args.length >= 1) { + port = args[0]; + } + + if (args.length >= 2) { + host = args[1]; + } + + + try{ + // Step 1: Instantiate the ORB + ORB orb = ORB.init(new String[] {"-ORBInitialPort", host, "-ORBInitialPort", port }, null); + + // Step 2: Instantiate the servant + BankImpl bankServ = new BankImpl(); + + // get reference to rootpoa & activate the POAManager + POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); + rootpoa.the_POAManager().activate(); + + rootpoa.activate_object(bankServ); + + + // Resolve RootNaming context and bind a name for the + // servant. + // NOTE: If the Server is persistent in nature then using Persistent + // Name Service is a good choice. Even if ORBD is restarted the Name + // Bindings will be intact. To use Persistent Name Service use + // 'NameService' as the key for resolve_initial_references() when + // ORBD is running. + org.omg.CORBA.Object obj = orb.resolve_initial_references("NameService" ); + NamingContextExt rootContext = NamingContextExtHelper.narrow(obj); + + NameComponent[] nc = rootContext.to_name("Bank"); + rootContext.rebind(nc, rootpoa.servant_to_reference(bankServ)); + System.out.println("Bank server ready and waiting ..."); + + // wait for invocations from clients + orb.run(); + } + + catch (Exception e) { + System.err.println("ERROR: " + e); + e.printStackTrace(System.out); + } + + System.out.println("Bank Server Exiting ..."); + + } +} + diff --git a/Corba/BankManagement.idl b/Corba/BankManagement.idl new file mode 100755 index 0000000..ccba824 --- /dev/null +++ b/Corba/BankManagement.idl @@ -0,0 +1,32 @@ +/* + * #(@)BankManagement.idl ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +module BankManagement { + exception no_such_account { }; + + interface Account { + void deposit(in long amount); + void withdraw(in long amount); + long balance(); + string operations(); + string getUsername(); + }; + + interface Bank { + long create(in long sessionID); + Account getAccount(in long acc_num, in long sessionID) raises (no_such_account); + long connect(in string login, in string password); + void disconnect(in long sessionID); + void del(in long acc_num, in long sessionID); + }; +}; + diff --git a/Corba/Makefile b/Corba/Makefile new file mode 100755 index 0000000..996762a --- /dev/null +++ b/Corba/Makefile @@ -0,0 +1,38 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +IDLJ = idlj +IDLJFLAGS = -fall +JAVACFLAGS = -Xlint +JAVA_CLASS = Bank/BankServer.class Bank/BankClient.class Bank/AccountImpl.class Bank/BankImpl.class + +all: common client server + +server: Bank/BankServer.class +client: Bank/BankClient.class + +common: BankManagement Bank/AccountImpl.class Bank/BankImpl.class + +$(JAVA_CLASS) : %.class : %.java + $(JAVAC) $(JAVACFLAGS) $< + +BankManagement: BankManagement.idl + $(IDLJ) $(IDLJFLAGS) $< + test -d $@ || exit 1 + touch $@ + +clean: + rm -rf BankManagement + rm -f Bank/*.class + diff --git a/Cpp/TP1_VariablesPointeursReferences/Makefile b/Cpp/TP1_VariablesPointeursReferences/Makefile new file mode 100755 index 0000000..b2dedbe --- /dev/null +++ b/Cpp/TP1_VariablesPointeursReferences/Makefile @@ -0,0 +1,57 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description du makefile +# + +# +# Version : 1.0.0 +# +# Fait : Detail de ce qui a ete fait. +# +# A faire : Detail de ce qui n'a pas ete fait. +# + +CXX = g++ +LD = g++ +CFLAGS = -Wall --pedantic +CPPFLAGS = -I./ + + +OBJECTS = ex2.o ex3.o porte.o + +EXEC = ex2 ex3 + +all : $(EXEC) porte + +ex1.o : %.o : %.cpp %.h + $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + +ex1.o : ex1.h + +$(OBJECTS) : %.o : %.cpp + $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + +$(EXEC) : % : %.o ex1.o + $(LD) ex1.o $< -o $@ + +porte : porte.o + $(LD) ex1.o $< -o $@ + +clean: + rm -f ex1 ex2 ex3 porte *~ *.o + +.PHONY: all clean + diff --git a/Cpp/TP1_VariablesPointeursReferences/ex1.cpp b/Cpp/TP1_VariablesPointeursReferences/ex1.cpp new file mode 100755 index 0000000..c6014d6 --- /dev/null +++ b/Cpp/TP1_VariablesPointeursReferences/ex1.cpp @@ -0,0 +1,92 @@ + /** + * #(@)ex1.cpp ENSICAEN 2005-09-20 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +#include "ex1.h" + +void lectureClavierTableau(int * tableau, int taille) { + cout << "Veuiler saisir " << taille << " entiers" << endl; + for (int i = 0; i < taille; i++) { + cin >> tableau[i]; + } +} + + +void affichageTableau(int * tableau, int taille) { + cout << "Affichage d'un tableau contenant " << taille << " valeurs" << endl; + + for (int i = 0; i < taille; i++) { + cout << tableau[i] << endl; + } +} + + +void echange(int * entier1, int * entier2) { + int tmp = *entier1; + *entier1 = *entier2; + *entier2 = tmp; +} + + +void echange(int & entier1, int & entier2) { + int tmp = entier1; + entier1 = entier2; + entier2 = tmp; +} + + +int & getMin(int * const tableau, int taille) { + int min = tableau[0]; + int idMin = 0; + + for (int i = 1; i < taille; i ++) { + if (tableau[i] < min) { + min = tableau[i]; + idMin = i; + } + } + + return tableau[idMin]; +} + + +int & getMax(int * const tableau, int taille) { + int max = tableau[0]; + int idMax = 0; + + for (int i = 1; i < taille; i ++) { + if (tableau[i] > max) { + max = tableau[i]; + idMax = i; + } + } + + return tableau[idMax]; +} + + +int & getRandom(int * const tableau, int taille) { + // récupératoin d'un nombre aléatoire x, tel que 0 <= x < taille + // à l'aide des bits de poids fort du résultat de rand + int index = static_cast(taille * (rand() / (RAND_MAX + 1.0))); + + return tableau[index]; +} + + +void melanger(int * const tableau, int taille, int nbEchange) { + for (int i = nbEchange - 1; i >= 0; i--) { + echange(getRandom(tableau, taille), getRandom(tableau, taille)); + } +} diff --git a/Cpp/TP1_VariablesPointeursReferences/ex1.h b/Cpp/TP1_VariablesPointeursReferences/ex1.h new file mode 100755 index 0000000..52643bb --- /dev/null +++ b/Cpp/TP1_VariablesPointeursReferences/ex1.h @@ -0,0 +1,122 @@ + /** + * #(@)ex1.h ENSICAEN 2005-09-20 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Premier TP, découverte du C++, des entrées/sorties, des références + */ + +#include +#include +#include + +using namespace std; + + +/** + * Lecture au clavier d'un tableau d'entier + * + * @param tableau le tableau à remplir + * @param taille la taille du tableau + */ +void lectureClavierTableau(int * tableau, int taille); + + +/** + * Affichage des éléments du tableau sur la sortie standard + * + * Lecture au clavier d'un tableau d'entier + * + * @param tableau le tableau à afficher + * @param taille la taille du tableau + */ +void affichageTableau(int * tableau, int taille); + + +/** + * Echange de deux entiers, passage par adresse/pointeur + * + * @param entier1 adresse du premier entier + * @param entier2 adresse du second entier + */ +void echange(int * entier1, int * entier2); + + +/** + * Echange de deux entiers, passage par référence + * + * @param entier1 premier entier + * @param entier2 second entier + */ +void echange(int & entier1, int & entier2); + + +/** + * Echange de deux entiers, passage par valeurs + * (cette fonction est volontairement défaillante, il n'est pas + * possible d'échanger deux variable à l'aide d'une fonction + * à qui l'on ne passe que les valeurs des variables. De plus, + * elle est commentée car si elle est disponible, elle rend la + * résolution de surcharge ambigue entre la version echange(int, int) + * et la version echange(int &, int &), le compilateur ne pouvant déterminer + * laquelle des deux doit etre appelée, les deux acceptant des entiers en + * parametres) + * + * @param entier1 premier entier + * @param entier2 second entier + */ +/* +void echange(int entier1, int entier2) { + int tmp = entier1; + entier1 = entier2; + entier2 = tmp; +} +*/ + + +/** + * Recherche et retour du minimum d'un tableau d'entiers + * + * @param tableau le tableau dont il faut retourner le minimum + * @param taille la taille du tableau + */ +int & getMin(int * const tableau, int taille); + + +/** + * Recherche et retour du maximum d'un tableau d'entiers + * + * @param tableau le tableau dont il faut retourner le maximum + * @param taille la taille du tableau + */ +int & getMax(int * const tableau, int taille); + + +/** + * Retourne un élément tiré au hasard dans le tableau + * + * @param tableau le tableau dont il faut retourner le maximum + * @param taille la taille du tableau + */ +int & getRandom(int * const tableau, int taille); + + +/** + * Effectue le mélange du tableau l'aide d'un nombre + * donné d'échnges + * + * @param tableau le tableau à melanger + * @param taille la taille du tableau + * @param nbEchange le nombre d'échange à faire + */ +void melanger(int * const tableau, int taille, int nbEchange); diff --git a/Cpp/TP1_VariablesPointeursReferences/ex2.cpp b/Cpp/TP1_VariablesPointeursReferences/ex2.cpp new file mode 100755 index 0000000..c271495 --- /dev/null +++ b/Cpp/TP1_VariablesPointeursReferences/ex2.cpp @@ -0,0 +1,45 @@ + /** + * #(@)ex2.cpp ENSICAEN 2005-09-20 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Exercice 2 du TP 1 de C++. + */ + +#include "ex1.h" + +/** + * la taille maximale du tableau + */ +#define TAILLE_MAX 10 + +/** + * Fonction principale. + * - demande à l'utilisateur de remplir un tableau + * - permute le mini et le maxi du tableau + * - affiche le tableau + * + * La ligne de commande doit préciser le nombre de case du tableau, qui + * doit etre strictement positive et inférieure ou égale à TAILLE_MAX + */ +int main(int argc, char ** argv) { + int tableau[TAILLE_MAX]; + + // récupération sur la ligne de commande du parametre "taille du tableau" + int taille = int(argv[1]); + lectureClavierTableau(tableau, taille); + echange(getMin(tableau, taille), getMax(tableau, taille)); + affichageTableau(tableau, taille); +} + + diff --git a/Cpp/TP1_VariablesPointeursReferences/ex3.cpp b/Cpp/TP1_VariablesPointeursReferences/ex3.cpp new file mode 100755 index 0000000..9b76d3a --- /dev/null +++ b/Cpp/TP1_VariablesPointeursReferences/ex3.cpp @@ -0,0 +1,45 @@ + /** + * #(@)ex3.cpp ENSICAEN 2005-09-20 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Exercice 3 du TP 1 de C++. + */ + +#include "ex1.h" + +/** + * la taille maximale du tableau + */ +#define TAILLE_MAX 10 + +/** + * Fonction principale. + * - demande à l'utilisateur de remplir un tableau + * - permute le mini et le maxi du tableau + * - affiche le tableau + * + * La ligne de commande doit préciser le nombre de case du tableau, qui + * doit etre strictement positive et inférieure ou égale à TAILLE_MAX + */ +int main(int argc, char ** argv) { + int tableau[TAILLE_MAX]; + + // récupération sur la ligne de commande du parametre "taille du tableau" + int taille = int(argv[1]); + lectureClavierTableau(tableau, taille); + echange(getMin(tableau, taille), getMax(tableau, taille)); + affichageTableau(tableau, taille); +} + + diff --git a/Cpp/TP1_VariablesPointeursReferences/porte.cpp b/Cpp/TP1_VariablesPointeursReferences/porte.cpp new file mode 100755 index 0000000..f73516a --- /dev/null +++ b/Cpp/TP1_VariablesPointeursReferences/porte.cpp @@ -0,0 +1,154 @@ +/** + * #(@)porte.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Ce programme permet de definir des fonctions logiques en intention + * et de les utiliser. Il ne prend pas de parametre. + * + * + * Trace d'execution + * ------------------- + * + * Table de verite par defaut : + * +-----+-----+-----+ + * |b1\b2| 0 | 1 | + * +-----+-----+-----+ + * | 0 | 0 | 0 | + * +-----+-----+-----+ + * | 1 | 0 | 0 | + * +-----+-----+-----+ + * + * Table de verite de la fonction ET : + * +-----+-----+-----+ + * |b1\b2| 0 | 1 | + * +-----+-----+-----+ + * | 0 | 0 | 0 | + * +-----+-----+-----+ + * | 1 | 0 | 1 | + * +-----+-----+-----+ + * + * Test OK + */ + +#include + +using namespace std; + +/** + * Faire retourner par une fonction une reference a une variable locale + * est une erreur. Mais si cette variable est declaree static, alors cela + * devient possible. + * + * En effet, lorsque l'on declare une variable locale a une fonction, cette + * variable est alouee sur la pile et une fois la fonction terminee, la pile + * est reajustee et la variable n'existe plus. Faire reference a cette + * variable est incorrect et conduit a des resultats errones. + * + * Mais lorsque l'on declare une variable "static", le compilateur + * reserve une zone memoire pendant toute l'execution du programme ; on + * peut alors y faire reference à partir de n'importe quel moment de + * l'execution du programme. + * + * Le fait de retourner une reference permet d'utiliser l'appel de fonction + * comme "lvalue", c'est une construction similaire à la suivante en C : + * + * strncpy(dst, src, size)[size - 1] = '\0'; + * + */ + + +/* + * @version 1.0 + * + * @Fait Enonce + affichage de la table de verite. + * + * @Afaire - + */ + + +/** + * Cette fonction dispose d'un tableau statique de 4 booleens a deux entrees + * qui definit la table de verite de la fonction logique. Les deux parametres + * b1 et b2 sont les indices dans tableau du resultat de la fonction logique + * pour ces deux valeurs. + * + * Elle retourne une reference vers l'element du tableau qui contient le + * resultat de la fonction logique, ce qui permet d'utiliser un appel de + * cette fonction comme "lvalue". + * + */ +bool & porte(bool b1, bool b2) { + static bool tableVerite[2][2] = {{false, false}, {false, false}}; + + return tableVerite[int(b1)][int(b2)]; +} + + +/** + * Cette fonction affiche la table de verite definie en intention par + * l'intermediaire de la fonction porte(bool, bool). + * + * @param st le flux de sortie. + */ +void afficheTableVerite(ostream & st) { + int b1, b2; + + // Entete de la table de verite + st << "+-----+-----+-----+" << endl; + st << "|b1\\b2| 0 | 1 |" << endl; + st << "+-----+-----+-----+" << endl; + + // Parcours ligne / ligne + for (b1 = 0; b1 <= 1; b1++) { + // Entete de ligne + st << "| " << b1 << " |"; + + // Parcours colonne par colonne + for (b2 = 0; b2 <= 1; b2++) { + st << " " << porte(bool(b1), bool(b2)) << " |"; + } + + // Fin de la ligne + st << endl; + + // Separation entre deux lignes + st << "+-----+-----+-----+" << endl; + } +} + + +/** + * Point d'entree du programme. Ce programme n'accepte pas de parametres. + */ +int main(int argc, char ** argv) { + cout << "Table de verite par defaut :" << endl; + afficheTableVerite(cout); + cout << endl; + + /* Definition de la fonction logique ET par extention */ + porte(true, false) = false; + porte(false, true) = false; + porte(true, true) = true; + porte(false, false) = false; + + cout << "Table de verite de la fonction ET :" << endl; + afficheTableVerite(cout); + cout << endl; + + if (porte(true, true)) + cout << "Test OK" << endl; + + return 0; +} + diff --git a/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/Makefile b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/Makefile new file mode 100755 index 0000000..2fb847e --- /dev/null +++ b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/Makefile @@ -0,0 +1,51 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description du makefile +# + +CXX = g++ +LD = g++ +CFLAGS = -Wall --pedantic -g +#CFLAGS = -Wall +CPPFLAGS = -I./ + + +OBJECTS = complex.o + +EXEC = checkComplex + +all : $(EXEC) + +checkComplex : checkComplex.o + +checkComplex.o : %.o : %.cpp + $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + + +$(OBJECTS) : %.o : %.cpp + $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + +$(EXEC) : % : %.o $(OBJECTS) + $(LD) $^ -o $@ + +clean: + rm -f *~ *.o + +distclean: clean + rm -f $(EXEC) + +.PHONY: all clean distclean + diff --git a/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/checkComplex.cpp b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/checkComplex.cpp new file mode 100755 index 0000000..dbd094c --- /dev/null +++ b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/checkComplex.cpp @@ -0,0 +1,78 @@ + /** + * #(@)checkComplex.cpp ENSICAEN 2005-09-29 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Test de la classe complexe, objet du TP2 + */ + +#include "complex.h" + +int main(int argc, char ** argv) { + Complex a(1, 1); + Complex b(3, 4); + Complex c; + + std::cout << "a: "; + a.writeTo(std::cout); + + std::cout << std::endl << "b: "; + b.writeTo(std::cout); + + std::cout << std::endl << "c: "; + c.writeTo(std::cout); + std::cout << std::endl; + + std::cout << std::endl << "a * b: " << std::endl; + (a * b).writeTo(std::cout); + std::cout << std::endl; + + std::cout << std::endl << "a - b: " << std::endl; + (a - b).writeTo(std::cout); + std::cout << std::endl; + + std::cout << std::endl << "a + b: " << std::endl; + (a + b).writeTo(std::cout); + std::cout << std::endl; + + std::cout << "Normalisation" << std::endl; + c = normalize(a); + c.writeTo(std::cout); + std::cout << std::endl; + std::cout << "Fin de la normalisation" << std::endl << std::endl; + + std::cout << "Rotation" << std::endl; + c = b.rotate(a, M_PI / 2); + c.writeTo(std::cout); + std::cout << std::endl; + std::cout << "Fin de la rotation" << std::endl << std::endl; + + std::cout << "Debut de 'Complex d = getMax(a, b)'" << std::endl; + Complex d = getMax(a, b); + std::cout << "Fin de 'Complex d = getMax(a, b)'" << std::endl << std::endl; + + + std::cout << "Debut de 'c = getMax(a, b)'" << std::endl; + c = getMax(a, b); + std::cout << "Fin de 'c = getMax(a, b)'" << std::endl << std::endl; + + std::cout << "Debut de l'initialisation du tableau (taille 10)" << std::endl; + Complex tab[10]; + std::cout << "Fin de l'initialisation du tableau" << std::endl << std::endl; + + std::cout << "Appel de la fonction remplirTableau(3, tab)" << std::endl; + remplirTableau(3, tab); + std::cout << "Fin de l'appel" << std::endl << std::endl; + + return 0; +} diff --git a/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/complex.cpp b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/complex.cpp new file mode 100755 index 0000000..4cb857a --- /dev/null +++ b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/complex.cpp @@ -0,0 +1,178 @@ +/** + * #(@)complex.cpp ENSICAEN 2005-02-27 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +#include "complex.h" +#include + +using namespace std; + +Complex::~Complex() { + cout << "---Complex[" << this << "]("; + this->writeTo(cout); + cout << ")" << endl; +} + +Complex::Complex(double re, double im) : _re(re), _im(im) { + cout << "+++Complex[" << this << "](" << re << ", " << im << ")" << endl; +} + +Complex::Complex(const Complex & cpx) { + cout << "rrrComplex[" << this << "]("; + cpx.writeTo(cout); + cout << ")" << endl; + + this->setRealPart(cpx.getRealPart()); + this->setImaginaryPart(cpx.getImaginaryPart()); +} + +double Complex::getRealPart() const { + return _re; +} + + +double Complex::getImaginaryPart() const { + return _im; +} + +void Complex::setRealPart(double re) { + _re = re; +} + +void Complex::setImaginaryPart(double im) { + _im = im; +} + +double Complex::getMagnitude() const { + double re = this->getRealPart(); + double im = this->getImaginaryPart(); + + return std::sqrt((re * re) + (im * im)); +} + +double Complex::getAngle() const { + double angle = 0; + double r = this->getRealPart(); + double i = this->getImaginaryPart(); + + if (r == 0) { + if (i > 0) { + angle = M_PI_2; + } else if (i < 0) { + angle = - M_PI_2; + } else { + angle = FP_NAN; + } + } else if (r > 0) { + angle = std::atan(i / r); + } else { + if (i > 0) { + angle = M_PI - std::atan(i / r); + } else { + angle = - M_PI + std::atan(i / r); + } + } + + return angle; +} + +Complex Complex::rotate(Complex & c, double angle) const { + Complex tmp = (*this) - c; + Complex tmp2 = tmp * Complex(cos(angle), sin(angle)); + return tmp2 + c; +} + +void Complex::writeTo(std::ostream & output) const { + output << this->getRealPart() << " + i * " << this->getImaginaryPart(); +} + +Complex Complex::operator+(const Complex & c2) const { + return sum(*this, c2); +} + +Complex Complex::operator-(const Complex & c2) const { + return ::minus(*this, c2); +} + +Complex Complex::operator*(const Complex & c2) const { + return product(*this, c2); +} + +Complex & Complex::operator=(const Complex & c2) { + cout << "===Complex[" << &c2 << "]("; + c2.writeTo(cout); + cout << ") >> [" << this << "]("; + this->writeTo(cout); + cout << ")"<< endl; + this->setImaginaryPart(c2.getImaginaryPart()); + this->setRealPart(c2.getRealPart()); + + return *this; +} + +void Complex::swapRealAndImaginaryPart() { + double tmp = this->getImaginaryPart(); + this->setImaginaryPart(this->getRealPart()); + this->setRealPart(tmp); +} + +Complex product(const Complex & cpx1, const Complex & cpx2) { + double re1 = cpx1.getRealPart(); + double re2 = cpx2.getRealPart(); + double im1 = cpx1.getImaginaryPart(); + double im2 = cpx2.getImaginaryPart(); + + return Complex((re1 * re2) - (im1 * im2), (re1 * im2) + (im1 * re2)); +} + +Complex sum(const Complex & cpx1, const Complex & cpx2) { + return Complex(cpx1.getRealPart() + cpx2.getRealPart(), + cpx1.getImaginaryPart() + cpx2.getImaginaryPart()); +} + +Complex minus(const Complex & cpx1, const Complex & cpx2) { + return Complex(cpx1.getRealPart() - cpx2.getRealPart(), + cpx1.getImaginaryPart() - cpx2.getImaginaryPart()); +} + +Complex normalize(Complex cpx) { + cout << "La normalisation a commence" << endl; + + double mag = cpx.getMagnitude(); + double r, i; + + r = cpx.getRealPart() / mag; + i = cpx.getImaginaryPart() / mag; + + return Complex(r, i); +} + +Complex & getMax(Complex & c1, Complex & c2) { + Complex & max = c2; + + if (c1.getMagnitude() > c2.getMagnitude()) { + max = c1; + } + + return max; +} + +void remplirTableau(int n, Complex * tab) { + int i; + + for (i = 0; i < n; i++) { + tab[i] = Complex(i, 0); + } +} + diff --git a/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/complex.h b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/complex.h new file mode 100755 index 0000000..8aa70f7 --- /dev/null +++ b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/complex.h @@ -0,0 +1,241 @@ + /** + * #(@)complex.h ENSICAEN 2005-02-27 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +#ifndef __COMPLEXE_H__ +#define __COMPLEXE_H__ + +#include + +/** + * Définition d'une classe complexe fournissant les services de base + * (voir énoncé TP2) + * + * @author MASSE Nicolas & LIMIN Thomas + * @version 0.0.1 + */ +class Complex { + + public: + + + /** + * Constructeur par défaut. + * + * @param re partie réelle du nombre complexe, 0 par défaut + * @param im partie imaginaire du nmbre complexe, 0 par defaut + */ + Complex(double re = 0, double im = 0); + + + /** + * Construit un complexe de module 1 a partir de son argument. + * + * @param angle l'argument du complexe + */ + Complex(double angle); + + + /** + * Constructeur par recopie (clone) + */ + Complex(const Complex & cpx); + + + /** + * Destructeur + */ + ~Complex(); + + /** + * Retourne la partie réelle. + * + * @return la partie réelle du complexe + */ + double getRealPart() const; + + + /** + * Retourne la partie imaginaire. + * + * @return la partie imaginaire du complexe + */ + double getImaginaryPart() const; + + + /** + * Modifie la partie réelle + * + * @param re la nouvelle partie réelle affectée + */ + void setRealPart(double re); + + + /** + * Modifie la partie imaginaire. + * + * @param im la nouvelle partie imaginaire affectée + */ + void setImaginaryPart(double im); + + + /** + * Retourne le module. + * + * @return le module du nombre complexe + */ + double getMagnitude() const; + + + /** + * Retourne l'argument en radians + * + * return l'argument du nombre complexe + */ + double getAngle() const; + + + /** + * Retourne un nouveau complexe résultant de la rotation + * de l'instance de complexe par l'angle donné + * + * @param c centre de rotation + * @param angle angle de rotation en radians + * @return le resultat de la rotation + */ + Complex rotate(Complex & c, double angle) const; + + /** + * Donne une représentation sous la forme a + ib du nombre complexe + * et la copie dans le flux passé en argument + * + * @param output le flux dans lequel sera écrit la représentation + */ + void writeTo(std::ostream & output) const; + + /** + * Effectue la somme de ce complexe et de celui passe en parametre. + * + * @param c2 le complexe a ajouter + * @return la somme des deux complexes + */ + Complex operator+(const Complex & c2) const; + + /** + * Effectue la difference de ce complexe et de celui passe en parametre. + * + * @param c2 le complexe a soustraire + * @return la difference des deux complexes + */ + Complex operator-(const Complex & c2) const; + + /** + * Effectue le produit de ce complexe et de celui passe en parametre. + * + * @param c2 le complexe a multiplier + * @return le produit des deux complexes + */ + Complex operator*(const Complex & c2) const; + + /** + * Operateur d'affectation + * + * @param c2 le complexe a affecter + * @return le complexe + */ + Complex & operator=(const Complex & c2); + + /** + * Echange les parties réelles et imaginaires + */ + void swapRealAndImaginaryPart(); + + private: + + /** + * Partie entière du nombre complexe + */ + double _re; + + /** + * Partie imaginaire du nombre complexe + */ + double _im; + + + +}; + + +/** + * Effectue le produit de deux nombres complexes. + * + * @param cpx1 premier complexe + * @param cpx1 second complexe + * @return un nombre complexe issu du produit + * des deux premiers. La propriété est transférée à l'appelant. + */ +Complex product(const Complex & cpx1, const Complex & cpx2); + + +/** + * Effectue la somme de deux nombres complexes. + * + * @param cpx1 premier complexe + * @param cpx1 second complexe + * @return un nombre complexe issu de la somme + * des deux premiers. La propriété est transférée à l'appelant. + */ +Complex sum(const Complex & cpx1, const Complex & cpx2); + + +/** + * Effectue la difference de deux nombres complexes + * + * @param cpx1 premier complexe + * @param cpx1 second complexe + * @return un nombre complexe issu de la difference + * des deux premiers (cpx1 - cpx2 => cpx3). + */ +Complex minus(const Complex & cpx1, const Complex & cpx2); + +/** + * Normalise un complexe. + * + * @param cpx le complexe a normaliser + * @return le complexe normalise + */ +Complex normalize(Complex cpx); + +/** + * Retourne le complexe qui a le plus grand module. + * + * @param c1 le premier complexe + * @param c2 le deuxieme complexe + * @return le plus grand des deux. + */ +Complex & getMax(Complex & c1, Complex & c2); + + +/** + * Remplit le tableau de n elements avec une suite de nombre + * complexes de 0 à n-1. + * + * @param n le nombre d'éléments dans le tableau + * @param tab le tableau + */ +void remplirTableau(int n, Complex * tab); + + +#endif /* def __COMPLEXE_H__ */ diff --git a/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/notes b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/notes new file mode 100755 index 0000000..3175464 --- /dev/null +++ b/Cpp/TP2_EncapsulationConstructionEtNotionsDeBase/notes @@ -0,0 +1,218 @@ + + + Réponses aux questions posées + + + +1.2 - Effectivement, et heureusement, selon toute attente, le compilateur +détecte un eerreur et refuse la compilation lorsque l'on essaie d'atteindre +un champ privé à partir d'une fonction non membre: + +complex.h: Dans function « Complex minus(const Complex&, const Complex&) »: +complex.h:115: error: `double Complex::_re' is private + + +1.4 - Il est difficile d'ajouter un Constructeur prenant pour argument le +module et l'argument, ce constructeur aurait la meme "signature" que celui +prenant comme argument la partie reelle et la partie imaginaire. En effet +ces quatres parametres seraient vraisemblablement des doubles, et lors de la +compilation, le compilateur ne pourrait determiner, a l'aide du type des +arguments, quel constructeur était souhaité. + + + + +3.1 - Nous avons cree une methode normalize dont le prototype est le suivant : + + Complex normalize(Complex cpx); + +Comme le parametre cpx est passe par valeur, il est necessaire d'en effectuer +une copie sur la pile d'ou l'appel au constructeur de recopie avant l'appel à +la fonction. On peut noter que la copie est detruite lorsque la fonction se +termine. + +Ainsi pour le code suivant : + + Complex c; + + [...] + + std::cout << "Normalisation" << std::endl; + c = normalize(a); + std::cout << std::endl; + std::cout << "Fin de la normalisation" << std::endl; + +On obtient la trace suivante : + +(1) +++Complex[0xbfd23db0](0, 0) +(2) Normalisation +(3) rrrComplex[0xbfd23d90](1 + i * 1) +(4) La normalisation a commence +(5) +++Complex[0xbfd23da0](0.707107, 0.707107) +(6) ===Complex[0xbfd23da0](0.707107 + i * 0.707107) >> [0xbfd23db0](0 + i * 0) +(7) ---Complex[0xbfd23da0](0.707107 + i * 0.707107) +(8) ---Complex[0xbfd23d90](1 + i * 1) +(9) Fin de la normalisation +(10) ---Complex[0xbfd23db0](0.707107 + i * 0.707107) + +Etude de la trace d'execution : + 1 - Declaration du complexe "c", et appel du constructeur par defaut. + 2 - Avant appel a la fonction de normalisation. + 3 - Appel du constructeur de recopie pour passer le complexe sur la pile. + 4 - Dans la fonction de normalisation + 5 - Creation d'un nouveau complexe local + 6 - Affectation de la valeur de retour (complexe local) + dans la variable c (appartenant à l'appelant) + 7 - Destruction du complexe local + 8 - Destruction du complexe parametre + 9 - Fonction de normalisation terminee + 10 - Destruction du complexe "c" + + => Remarque : + + On remarque qu'un appel au constructeur de recopie est effectue pour passer + le parametre sur la pile (initialisation d'une zone mémoire "brute"), mais + que c'est l'opérateur d'affectation qui est utilisé pour recopier la valeur + de retour (écrasement d'une zone mémoire déjà initialisée) + + + + +3.2 - Nous avons ajoute une methode dont le prototype est le suivant : + + Complex Complex::rotate(Complex & c, double angle) const; + +Ainsi, pour le code suivant : + + std::cout << "Rotation" << std::endl; + c = b.rotate(a, M_PI / 2); + c.writeTo(std::cout); + std::cout << std::endl; + std::cout << "Fin de la rotation" << std::endl; + +et la methode suivante : + + Complex Complex::rotate(Complex & c, double angle) const { + Complex tmp = (*this) - c; + Complex tmp2 = tmp * Complex(cos(angle), sin(angle)); + return tmp2 + c; + } + +On obtient la trace d'execution suivante : + +(1) +++Complex[0xbfd5ef00](0, 0) +(2) Rotation +(3) +++Complex[0xbfd5ee80](2, 3) +(4) +++Complex[0xbfd5ee60](6.12303e-17, 1) +(5) +++Complex[0xbfd5ee70](-3, 2) +(6) ---Complex[0xbfd5ee60](6.12303e-17 + i * 1) +(7) +++Complex[0xbfd5eee0](-2, 3) +(8) ---Complex[0xbfd5ee70](-3 + i * 2) +(9) ---Complex[0xbfd5ee80](2 + i * 3) +(10) ===Complex[0xbfd5eee0](-2 + i * 3) >> [0xbfd5ef00](0.707107 + i * 0.707107) +(11) ---Complex[0xbfd5eee0](-2 + i * 3) +(12) Fin de la rotation +(13) ---Complex[0xbfd5ef00](-2 + i * 3) + +Etude de la trace d'execution : + 1 - Declaration du complexe "c", et appel du constructeur par defaut. + 2 - Avant appel a la methode de rotation. + 3 - Creation et initialisation de l'objet tmp + 4 - Creation et initialisation du complexe Complex(cos(angle), sin(angle)) + 5 - Creation et initialisation de tmp2 + 6 - Destruction de Complex(cos(angle), sin(angle)) + 7 - Creation et initialisation de tmp2 + c + 8 - Destruction de tmp2 + 9 - Destruction de tmp + 10 - Recopie de la valeur de retour (tmp2 + c) dans "c" + 11 - Destruction de la valeur de retour + 12 - Apres appel a la methode de rotation. + 13 - Destruction de "c" + + => Remarque : + On remarque que lors d'un passage d'arguments par référence, le + constructeur par recopie n'est pas appellé, d'ou un gain de performance. + Il ne faut cependant pas oublier que l'objet passé par référence est + modifiable pas la méthode appellée, c'est pourquoi l'utilisation du mot + clé "const", lorsque cela est possible, est recommandée. + + + + +3.3 - Nous avons defini une fonction dont le prototype est le suivant : + + Complex & getMax(Complex & c1, Complex & c2) + +et nous avons obtenu les resultats suivants : + + Debut de 'Complex d = getMax(a, b)' +(1) rrrComplex[0xbfed1af0](3 + i * 4) + Fin de 'Complex d = getMax(a, b)' + + Debut de 'c = getMax(a, b)' +(2) ===Complex[0xbfed1b20](3 + i * 4) >> [0xbfed1b10](-2 + i * 3) + Fin de 'c = getMax(a, b)' + +On remarque que : + 1 - Lors d'une initialisation à partir du résultat de la fonction, + c'est le constructeur par recopie qui est utilisé. + 2 - Lors d'une affectation, c'est la méthode qui surcharge l'opérateur + d'affectation qui est appellée. + + + +3.4 - Comme l'énoncé n'est pas très clair, nous avons choisi de remplir le +tableau selon la méthode suivante : + + tab[i] = Complex(i, 0); + +On obtient la trace d'exécution suivante : + + Debut de l'initialisation du tableau (taille 10) + (1) +++Complex[0xbf80c330](0, 0) + +++Complex[0xbf80c340](0, 0) + +++Complex[0xbf80c350](0, 0) + +++Complex[0xbf80c360](0, 0) + +++Complex[0xbf80c370](0, 0) + +++Complex[0xbf80c380](0, 0) + +++Complex[0xbf80c390](0, 0) + +++Complex[0xbf80c3a0](0, 0) + +++Complex[0xbf80c3b0](0, 0) + (10) +++Complex[0xbf80c3c0](0, 0) + Fin de l'initialisation du tableau + + Appel de la fonction remplirTableau(3, tab) + (11) +++Complex[0xbf80c2b0](0, 0) + (12) ===Complex[0xbf80c2b0](0 + i * 0) >> [0xbf80c330](0 + i * 0) + (13) ---Complex[0xbf80c2b0](0 + i * 0) + +++Complex[0xbf80c2b0](1, 0) + ===Complex[0xbf80c2b0](1 + i * 0) >> [0xbf80c340](0 + i * 0) + ---Complex[0xbf80c2b0](1 + i * 0) + +++Complex[0xbf80c2b0](2, 0) + ===Complex[0xbf80c2b0](2 + i * 0) >> [0xbf80c350](0 + i * 0) + ---Complex[0xbf80c2b0](2 + i * 0) + Fin de l'appel + + (14) ---Complex[0xbf80c3c0](0 + i * 0) + ---Complex[0xbf80c3b0](0 + i * 0) + ---Complex[0xbf80c3a0](0 + i * 0) + ---Complex[0xbf80c390](0 + i * 0) + ---Complex[0xbf80c380](0 + i * 0) + ---Complex[0xbf80c370](0 + i * 0) + ---Complex[0xbf80c360](0 + i * 0) + ---Complex[0xbf80c350](2 + i * 0) + ---Complex[0xbf80c340](1 + i * 0) + (24) ---Complex[0xbf80c330](0 + i * 0) + + +Remarques : + 1-10 - Chaque element du tableau est initialisé par le constructeur par + defaut. + + 11 - Un objet temporaire est cree. + 12 - Cet objet est affecté a la case courante du tableau. + 13 - L'objet temporaire est detruit. + + 14-24 - Chaque element du tableau est passé au destructeur. + + diff --git a/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop new file mode 100755 index 0000000..665ec22 --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop @@ -0,0 +1,101 @@ + + + + Nicolas MASSE + nicolas27.masse@laposte.net + $VERSION$ + KDevCustomProject + C++ + + + + + CalculMatriciel + executable + + + + + + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + qt-kdev3 + ruby + ruby_bugs + sdl + sw + w3c-dom-level2-html + w3c-svg + w3c-uaag10 + wxwidgets_bugs + + + Guide to the Qt Translation Tools + Qt Assistant Manual + Qt Designer Manual + Qt Reference Documentation + qmake User Guide + + + KDE Libraries (Doxygen) + + + + + + + + + + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + + + false + false + + + *.o,*.lo,CVS + false + + + diff --git a/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop.filelist b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop.filelist new file mode 100755 index 0000000..2d1a8aa --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop.filelist @@ -0,0 +1,5 @@ +# KDevelop Custom Project File List +checkMatrix.cpp +Makefile +matrix.cpp +matrix.h diff --git a/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop.pcs b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop.pcs new file mode 100755 index 0000000..f330030 Binary files /dev/null and b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevelop.pcs differ diff --git a/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevses b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevses new file mode 100755 index 0000000..9b4f57b --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/CalculMatriciel.kdevses @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Cpp/TP3_CalculMatriciel/Doxyfile b/Cpp/TP3_CalculMatriciel/Doxyfile new file mode 100755 index 0000000..d94c708 --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = CalculMatriciel.kdevelop +PROJECT_NUMBER = $VERSION$ +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/nicolas/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/nicolas/repository/ENSI_2ndY/Cpp/TP3_12-10-2005_CalculMatriciel +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = CalculMatriciel.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/Cpp/TP3_CalculMatriciel/Makefile b/Cpp/TP3_CalculMatriciel/Makefile new file mode 100755 index 0000000..069f2f8 --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/Makefile @@ -0,0 +1,49 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description du makefile +# + +CXX = g++ +LD = g++ +CFLAGS = -Wall --pedantic -ggdb +CPPFLAGS = -I./ + + +OBJECTS = matrix.o + +EXEC = checkMatrix + +checkMatrix : checkMatrix.o + +all : $(OBJECTS) + +checkMatrix.o : %.o : %.cpp + $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + +$(OBJECTS) : %.o : %.cpp %.h + $(CXX) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ + +$(EXEC) : % : %.o $(OBJECTS) + $(LD) $^ -o $@ + +clean: + rm -f *~ *.o + +distclean: clean + rm -f $(EXEC) + +.PHONY: all clean distclean + diff --git a/Cpp/TP3_CalculMatriciel/checkMatrix.cpp b/Cpp/TP3_CalculMatriciel/checkMatrix.cpp new file mode 100755 index 0000000..db5387d --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/checkMatrix.cpp @@ -0,0 +1,92 @@ + /** + * #(@)checkMatrix.cpp ENSICAEN 2005-10-18 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Test de la classe Matrix, objet du TP3 + */ + +#include +#include "matrix.h" + +using namespace std; + +int main(int argc, char ** argv) { + unsigned int truc; + + cout << "isPowerOfTwo(0) = " << isPowerOfTwo(0, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(1) = " << isPowerOfTwo(1, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(2) = " << isPowerOfTwo(2, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(3) = " << isPowerOfTwo(3, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(4) = " << isPowerOfTwo(4, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(5) = " << isPowerOfTwo(5, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(6) = " << isPowerOfTwo(6, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(7) = " << isPowerOfTwo(7, &truc) << " (" << truc << ")" << endl; + cout << "isPowerOfTwo(0x80000000) = " << isPowerOfTwo(0x80000000, &truc) << " (" << truc << ")" << endl; + + + Matrix a(1,2); + Matrix b; +// Matrix * c; + + bool result = a == b; + + cout << "a == b ? " << result << endl; + + Matrix d(2, 3); + Matrix e(3, 3); + + d.setValueAt(1, 1, 11); + d.setValueAt(1, 2, 12); + d.setValueAt(1, 3, 13); + d.setValueAt(2, 1, 21); + d.setValueAt(2, 2, 22); + d.setValueAt(2, 3, 23); + + e.setValueAt(1, 1, 1); + e.setValueAt(2, 2, 1); + e.setValueAt(3, 3, 1); + + Matrix f = d * e; + cout << d << e; + cout << f; + + //Matrix q(1,1); + //q.setValueAt(1, 1, 4); + + Matrix q(2,2); + q.setValueAt(1, 1, 1); + q.setValueAt(1, 2, 2); + q.setValueAt(2, 1, 3); + q.setValueAt(2, 2, 4); + + //for (unsigned int i = 1; i <= q.getLineNb(); i++) { + // for (unsigned int j = 1; j <= q.getColNb(); j++) { + // q.setValueAt(i, j, (i * j) % 7); + // } + //} + + Matrix iq = q.invert(); + cout << "Avant l'inversion:" << endl << q << endl; + cout << "Résultat de l'inversion:" << endl << iq << endl; + /* + cout << "Entrez une matrice au clavier, dont le format est le suivant :" << endl; + cout << "nlignes ncols 11 12 13 21 22 23 ..." << endl; + + cin >> &c; + + cout << *c; + + delete c; + */ +} diff --git a/Cpp/TP3_CalculMatriciel/matrix.cpp b/Cpp/TP3_CalculMatriciel/matrix.cpp new file mode 100755 index 0000000..4978aeb --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/matrix.cpp @@ -0,0 +1,489 @@ +/** + * #(@)matrix.cpp ENSICAEN 2005-10-15 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +#include "matrix.h" + +Matrix::Matrix(unsigned int line_nb, unsigned int col_nb) { + // store dimensions + _line_nb = line_nb; + _col_nb = col_nb; + + // allocate memory + _columns = new double[line_nb * col_nb]; + _lines = new double*[line_nb]; + + // initialise lines' pointers + for (unsigned int i = 0; i < line_nb; i++) { + _lines[i] = _columns + (i * col_nb); + } +} + + +Matrix::Matrix(const Matrix & m) { + // retrieve and copy dimension + _line_nb = m._line_nb; + _col_nb = m._col_nb; + + // allocate memory + _columns = new double[_line_nb * _col_nb]; + _lines = new double*[_line_nb]; + + + // initialise lines' pointers + for (unsigned int i = 0; i < _line_nb; i++) { + _lines[i] = _columns + (i * _col_nb); + } + + // copy the values from m to this + double * src = m._columns; + double * dest = _columns; + for (unsigned int i = _line_nb * _col_nb; i > 0 ; i--) { + *(dest++) = *(src++); + } + +} + + +Matrix::~Matrix() { + // free the two blocks of memory + delete[] _lines; + delete[] _columns; +} + + +Matrix & Matrix::operator=(const Matrix & m) { + // check inequality + if (this != &m) { + + // matrix geometry changed flag + bool reInitLines = false; + + // check number of coefficients + unsigned int nbCells = (m._col_nb * m._line_nb); + if ((_col_nb * _line_nb) != nbCells) { + // number of "cells" has changed : necessary to reallocate memory + delete[] _columns; + _columns = new double[_line_nb * _col_nb]; + reInitLines = true; + } + + // check number of line: + if (_line_nb != m._line_nb) { + // number of line has changed : necessary to reallocate memory + delete[] _lines; + _lines = new double*[_line_nb]; + reInitLines = true; + } + + // store new dimensions + _line_nb = m._line_nb; + _col_nb = m._col_nb; + + if (reInitLines) { + // initialise lines' pointers + for (unsigned int i = 0; i < _line_nb; i++) { + _lines[i] = _columns + (i * _col_nb); + } + } + + // copy the values from m to this + double * src = m._columns; + double * dest = _columns; + for (unsigned int i = nbCells; i > 0 ; i--) { + *(dest++) = *(src++); + } + } + + return *this; +} + +bool Matrix::operator==(const Matrix & m) const { + + // check dimensions + if ((_line_nb != m._line_nb) || (_col_nb != m._col_nb)) { + return false; + } + + // check coefficients values + double * c1 = m._columns; + double * c2 = _columns; + for (unsigned int i = _line_nb * _col_nb; i > 0 ; i--) { + if (*(c1++) != *(c2++)) { + return false; + } + } + + return true; + } + + +bool Matrix::operator!=(const Matrix & m) const { + return ! (*this == m); +} + + +Matrix Matrix::operator+(const Matrix & m) const { + Matrix mat(*this); + + mat += m; + + return mat; +} + +Matrix & Matrix::operator+=(const Matrix & m) { + assert(m.getColNb() == this->getColNb()); + assert(m.getLineNb() == this->getLineNb()); + + for (unsigned int r = 1; r <= this->getLineNb(); r++) { + for (unsigned int c = 1; c <= this->getColNb(); c++) { + this->setValueAt(r, c, this->getValueAt(r, c) + m.getValueAt(r, c)); + } + } + + return *this; +} + +Matrix Matrix::operator-(const Matrix & m) const { + Matrix mat(*this); + + mat -= m; + + return mat; +} + +Matrix & Matrix::operator-=(const Matrix & m) { + assert(m.getColNb() == this->getColNb()); + assert(m.getLineNb() == this->getLineNb()); + + for (unsigned int r = 1; r <= this->getLineNb(); r++) { + for (unsigned int c = 1; c <= this->getColNb(); c++) { + this->setValueAt(r, c, this->getValueAt(r, c) - m.getValueAt(r, c)); + } + } + + return *this; +} + +Matrix Matrix::operator-() const { + Matrix tmp(this->getLineNb(), this->getColNb()); + + for (unsigned int r = 1; r <= this->getLineNb(); r++) { + for (unsigned int c = 1; c <= this->getColNb(); c++) { + tmp.setValueAt(r, c, - this->getValueAt(r, c)); + } + } + + return tmp; +} + +Matrix Matrix::transpose() const { + Matrix mat(this->getColNb(), this->getLineNb()); + + for (unsigned int r = 1; r <= this->getLineNb(); r++) { + for (unsigned int c = 1; c <= this->getColNb(); c++) { + mat.setValueAt(c, r, this->getValueAt(r, c)); + } + } + + return mat; +} + +Matrix Matrix::invertR() const { + assert(this->getColNb() == this->getLineNb() && isPowerOfTwo(this->getColNb(), 0)); + + if (this->getColNb() == 1) { + Matrix tmp(1, 1); + tmp.setValueAt(1, 1, 1 / this->getValueAt(1, 1)); + cout << "Résultat temporaire:" << endl << *this << endl << tmp << endl; + return tmp; + } else { + Matrix B = this->getQuarter(1); + Matrix Ct = this->getQuarter(2); + Matrix D = this->getQuarter(3); + Matrix C = this->getQuarter(4); + + cout << "quarter B" << endl << B << endl; + cout << "quarter Ct" << endl << Ct << endl; + cout << "quarter D" << endl << D << endl; + cout << "quarter C" << endl << C << endl; + + Matrix Bm1 = B.invertR(); + Matrix CBm1T = (C * Bm1).transpose(); + Matrix S = D - C * Bm1 * Ct; // OK + Matrix Q3 = S.invertR(); + Matrix & Sm1 = Q3; + Matrix Sm1CBm1 = (Sm1 * C) * Bm1; + Matrix Sm1CBm1T = Sm1CBm1.transpose(); + + Matrix Bm1CTSm1 = (Bm1 * CBm1T) * Sm1; + Matrix Q2 = -Bm1CTSm1; + + Matrix Q4 = - Sm1CBm1; + + Matrix Q1 = Bm1 + (CBm1T * Sm1CBm1); + + Matrix ret(this->getLineNb(), this->getLineNb()); + + unsigned int nl1 = Q1.getLineNb(); + unsigned int nc1 = Q1.getColNb(); + for (unsigned int i = 1; i <= nl1; i ++) { + for (unsigned int j = 1; j <= nc1; j ++) { + ret.setValueAt(i,j, Q1.getValueAt(i, j)); + } + } + + unsigned int nl2 = Q2.getLineNb(); + unsigned int nc2 = Q2.getColNb(); + for (unsigned int i = 1; i <= nl2; i ++) { + for (unsigned int j = 1; j <= nc2; j ++) { + ret.setValueAt(i, nc1 + j, Q2.getValueAt(i, j)); + } + } + + unsigned int nl3 = Q3.getLineNb(); + unsigned int nc3 = Q3.getColNb(); + for (unsigned int i = 1; i <= nl3; i ++) { + for (unsigned int j = 1; j <= nc3; j ++) { + ret.setValueAt(nl1 + i, nc1 + j, Q3.getValueAt(i, j)); + } + } + + unsigned int nl4 = Q4.getLineNb(); + unsigned int nc4 = Q4.getColNb(); + for (unsigned int i = 1; i <= nl4; i ++) { + for (unsigned int j = 1; j <= nc4; j ++) { + ret.setValueAt(nl1 + i, j, Q2.getValueAt(i, j)); + } + } + + cout << "Résultat temporaire:" << endl << *this << endl <getLineNb() != this->getColNb()) { + // Error, simply return the matrix + return *this; + } + + // we provide a positive defined matrix; + Matrix m(*this); + Matrix mt = m.transpose(); + Matrix r = mt * m; + + unsigned int size; + isPowerOfTwo(r.getColNb(), &size); + + Matrix * toBeInverted = &r; + if (size != toBeInverted->getColNb()) { + // we must resize the Matrix + toBeInverted = new Matrix(size, size); + unsigned int rSize = r.getColNb(); + for (unsigned int i = 1; i <= size; i++) { + for (unsigned int j = 1; j <= size; j++) { + double value = 0; + + if (i <= rSize && j <= rSize) { + value = r.getValueAt(i, j); + } else if (i == j) { + value = 1; + } + toBeInverted->setValueAt(i, j, value); + } + } + } + + + cout << "La matrice qui va être effectivement inversée:" << endl << *toBeInverted << endl; + + Matrix invert = toBeInverted->invertR(); + Matrix small(this->getLineNb(), this->getColNb()); + + // copy the inverted matrix into the source matrix + int c = this->getColNb(); + int l = this->getLineNb(); + + for (int i = 1; i <= l; i++) { + for (int j = 1; j <= c; j++) { + small.setValueAt(i, j, invert.getValueAt(i, j)); + } + } + + if (toBeInverted != &r) { + delete toBeInverted; + } + + return small * mt; +} + + +Matrix Matrix::getQuarter(int quarter) const { + unsigned int nbLine = this->getLineNb(); + unsigned int nbCol = this->getColNb(); + + Matrix m((nbLine / 2) + (nbLine % 2), (nbCol / 2) + (nbCol % 2)); + unsigned int lineStart, lineEnd, colStart, colEnd; + if (quarter == 1) { + // return up left quarter + lineStart = 1; + colStart = 1; + lineEnd = nbLine / 2; + colEnd = nbCol / 2; + if ((nbLine % 2) != 0) { + // nbLine odd + lineEnd++; + } + if ((nbCol % 2) != 0) { + // nbCol odd + colEnd++; + } + } else if (quarter == 2) { + // return up right quarter + lineStart = 1; + lineEnd = nbLine / 2; + colStart = nbCol / 2 + 1; + colEnd = nbCol; + if ((nbLine % 2) != 0) { + // nbLine odd + lineEnd++; + } + } else if (quarter == 3) { + // return down right quarter + lineStart = nbLine / 2 + 1; + lineEnd = nbLine; + colStart = nbCol / 2 + 1; + colEnd = nbCol; + } else if (quarter == 4) { + // return down left quarter + lineStart = nbLine / 2 + 1; + lineEnd = nbLine; + colStart = 1; + colEnd = (nbCol /2) + (nbCol %2); + if ((nbCol % 2) != 0) { + // nbCol odd + colEnd++; + } + } + + unsigned int im = 1, jm = 1; + for(unsigned int i = lineStart; i <= lineEnd; i++) { + for(unsigned int j = colStart; j <= colEnd; j++) { + m.setValueAt(im, jm, this->getValueAt(i,j)); + jm ++; + } + jm = 1; + im ++; + } + + return m; +} + +Matrix Matrix::operator*(const Matrix & m) const { + assert(this->getColNb() == m.getLineNb()); + + Matrix mat(this->getLineNb(), m.getColNb()); + + for (unsigned int r = 1; r <= mat.getLineNb(); r++) { + for (unsigned int c = 1; c <= mat.getColNb(); c++) { + double tmp = 0; + + for (unsigned int i = 1; i <= this->getColNb(); i++) { + //cout << r << " " << c << " " << i << endl; + tmp += this->getValueAt(r, i) * m.getValueAt(i, c); + } + + mat.setValueAt(r, c, tmp); + } + } + + return mat; +} + + +ostream & operator<<(ostream & os, const Matrix & m) { + unsigned int nbLine = m.getLineNb(); + unsigned int nbCol = m.getColNb(); + + // write values, line by line + for (unsigned int i = 1; i <= nbLine; i++) { + if (i == 1) { + os << "["; + } else { + os << " "; + } + + for (unsigned int j = 1; j <= nbCol; j++) { + os << m.getValueAt(i, j) << " "; + } + + if (i == nbLine) { + os << "]"; + } + + os << endl; + } + + return os; +} + + +istream & operator>>(istream & is, Matrix ** m) { + // write number of line and column + unsigned int nbLine; + unsigned int nbCol; + + is >> nbLine; + is >> nbCol; + + *m = new Matrix(nbLine, nbCol); + + // write values, line by line + for (unsigned int i = 1; i <= nbLine; i++) { + for (unsigned int j = 1; j <= nbCol; j++) { + double val; + + is >> val; + (*m)->setValueAt(i, j, val); + } + } + + return is; +} + +bool isPowerOfTwo(unsigned int n, unsigned int * max) { + unsigned int shifted = 0x80000000; + bool power = true; + int nb = sizeof(shifted) * 8; + + // Find a bit + while ((shifted & n) == 0 && nb != 0) { + shifted >>= 1; + nb--; + } + + // Is it the only one ? + if ((shifted & n) != n) { + power = false; + if (max != 0) { + *max = shifted << 1; + } + } else if (max != 0) { + *max = n; + } + + return power; +} diff --git a/Cpp/TP3_CalculMatriciel/matrix.h b/Cpp/TP3_CalculMatriciel/matrix.h new file mode 100755 index 0000000..1bef197 --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/matrix.h @@ -0,0 +1,285 @@ +/** +* #(@)Matrix.h ENSICAEN 2005-10-12 +* +* @author MASSE Nicolas (2005-Groupe4-LIMIN) +* @author LIMIN Thomas (2005-Groupe4-MASSE) +* +* ENSICAEN +* 6 Boulevard Marechal Juin +* F-14050 Caen Cedex +* +* Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +* reproduit, utilise ou modifie sans l'avis express de ses auteurs. +*/ + +/** + * Objectifs du TP: allocation dynamique, copie et destruction des objets, + * surcharge d'operateurs, programmation d'une classe concrète, CHoix entre + * fonctions membres, non-membres, + */ + +/* + * @version 0.0.1 + * + * @done: nothing + * + * @todo: all + */ + +#ifndef __MATRIX_H__ +#define __MATRIX_H__ + +#include +#include + +using namespace std; + +/** + * A class wich implements the mathematical concept of Matrix + */ +class Matrix { + +public: + + /** + * Default constructor. The caller has to provide the + * size of the future matrix. + * + * @param line_nb number of line, default 2 + * @param col_nb number of column, default 2 + */ + Matrix(unsigned int line_nb = 2, unsigned int col_nb = 2); + + /** + * Clone constructor + * + * @param m original matrix + */ + Matrix(const Matrix & m); + + /** + * Matrix destructor. Free memory that is used to store + * the coeficient. + */ + ~Matrix(); + + /** + * Assignment operator. + * + * @param m original matrix + * @retun a reference on the matrix' copy + */ + Matrix & operator=(const Matrix & m); + + /** + * Equality check operator. + * + * @param m second matrix + * @retun true if the matrices are identical, else false + */ + bool operator==(const Matrix & m) const; + + /** + * Inequality check operator. + * + * @param m second matrix + * @retun true if the matrices are different, else true + */ + bool operator!=(const Matrix & m) const; + + /** + * Addition operator. + * + * @param m second matrix + * @return the addition of the two matrix + */ + Matrix operator+(const Matrix & m) const; + + /** + * Addition and affectation operator. + * + * @param m second matrix + * @return a reference to this + */ + Matrix & operator+=(const Matrix & m); + + /** + * Minus operator. + * + * @param m second matrix + * @return the difference between the two matrix + */ + Matrix operator-(const Matrix & m) const; + + /** + * Minus and affectation operator. + * + * @param m second matrix + * @return a reference to this + */ + Matrix & operator-=(const Matrix & m); + + /** + * Unary minus operator. + * + * @return a new matrix + */ + Matrix operator-() const; + + /** + * Transposes this matrix. + * + * @return a new transposed matrix. + */ + Matrix transpose() const; + + /** + * Invert the Matrix. This is the entry point for the recursive + * inversion process. It init the matrix so it will be inversible + * + * @return a new matrix, inverted + */ + Matrix invert() const; + + /** + * Multiply operator. + * + * @param m the second matrix. + * @return the result. + */ + Matrix operator*(const Matrix & m) const; + + /** + * Return a pointer linked to the previous element of the first element + * of the row, so that the notation m[row][col] works (with row in [1,n] + * and col in [1,n]. + * + * @param row the row number (between 1 and _line_nb). + * @return a pointer to the row. + */ + inline double * operator[](unsigned int row) { + assert(row > 0 && row <= this->getLineNb()); + + return _lines[row - 1] - 1; + } + + /** + * Number of lines getter + * + * @return the number of lines + */ + inline unsigned int getLineNb() const { + return _line_nb; + } + + /** + * Number of columns getter + * + * @return the number of comumns + */ + inline unsigned int getColNb() const { + return _col_nb; + } + + /** + * Matrix values getter. + * + * @param r the row number [1,n] + * @param c the col number [1,n] + * @return the value. + */ + inline double getValueAt(unsigned int r, unsigned int c) const { + assert(r > 0 && r <= _line_nb); + assert(c > 0 && c <= _col_nb); + return _lines[r - 1][c - 1]; + } + + /** + * Matrix values setter. + * + * @param r the row number [1,n] + * @param c the col number [1,n] + * @param v the value. + */ + inline void setValueAt(unsigned int r, unsigned int c, double v) { + assert(r > 0 && r <= _line_nb); + assert(c > 0 && c <= _col_nb); + _lines[r - 1][c - 1] = v; + } + + /** + * Create a Matrix which is a copy of a quarter of the current Matrix + * The returned quarter is: + * + * 1 => up left + * 2 => up right + * 3 => down right + * 4 => down left + * + * @param quarter the quarter to return + * @return a new Matrix + */ + Matrix getQuarter(int quarter) const; + + +private: + /** + * Inverts this matrix (recursive) + * + * @return a new inverted matrix. + */ + Matrix invertR() const; + + /** + * The number of line of the matrix + */ + unsigned int _line_nb; + + /** + * The number of line of the matrix + */ + unsigned int _col_nb; + + /** + * An array of pointers, each allowing access to a column + */ + double ** _lines; + + /** + * Memory area in wich columns are stored + */ + double * _columns; + +}; + +/** + * Write a Matrix to output stream. Following format is used: + * line_number column number values (line by line) + * + * @param os the output stream + * @param m the matrix to write out + * @return the output stream + */ +ostream & operator<<(ostream & os, const Matrix & m); + +/** + * Get a Matrix from input stream. Following format is used: + * line_number column number values (line by line) + * + * @param is the input stream + * @param m a pointer on a Matrix pointer. the param is used + * to write out the pointer to the new Matrix + * @return the input stream + */ +istream & operator>>(istream & is, Matrix ** m); + +/** + * Tests if n is a power of two. + * + * @param n the number to test. + * @param max a pointer to store the power of two upper or equal to n + * @return true or false. + */ +bool isPowerOfTwo(unsigned int n, unsigned int * max); + +#endif /* define __MATRIX_H__ */ diff --git a/Cpp/TP3_CalculMatriciel/notes b/Cpp/TP3_CalculMatriciel/notes new file mode 100755 index 0000000..35a9532 --- /dev/null +++ b/Cpp/TP3_CalculMatriciel/notes @@ -0,0 +1,23 @@ +Utilisation des Fonctions membres en tant qu'amies + +Les fonctions membres d'une classe sont implicitement "amies de la classe", ce +qui implique qu'une fonction membre peut accéder aux variables d'instance de +l'objet sur lequel elle est appelée, mais aussi le cas échéant, aux variables +d'instance d'un objet de meme classe passé en parametre. Cette propriété est +beaucoup utilisée dans notre implémentation de ce TP, notamment pour nous +éviter l'écriture de nombreux accesseurs privés. + +Cependant cette propriété met à mal le concept d'encapsulation, car il permet +à des objets d'accéder aux champs privés d'autres objets. Pour relativiser, +nous argumenterons que le code violant l'encapsulation est interne à la classe +"violée" et donc qu'il est écrit en tenant compte de l'implémentation de +celle ci, pour en tirer le meilleur partis en terme d'efficacité. Ce souci +d'efficacité est un élément important lors des choix d'implémentation, car +l'utilisation, somme toute périlleuse et difficile du langage C++, n'est due +qu'a la propriété de ce langage de permettre l'écriture d'applications très +efficaces, avantage qu'il serait peu judicieux de perdre en s'encombrant de +lourdeurs. Par ailleurs, l'avantage qu'a le respect de l'encapsulation à +l'intérieur d'un classe est de pouvoir changer la représentation de données +en ayant à réécrir qu'un minimum d'acceseurs. Or dans notre cas (TP3), +le format des données en interne est fixé une fois pour toute, ce qui +réduit considérablement l'interet induit par le respect de l'encapsulation. \ No newline at end of file diff --git a/Cpp/TP4_ComptesBancaires/AUTHORS b/Cpp/TP4_ComptesBancaires/AUTHORS new file mode 100755 index 0000000..a6c9f7e --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/AUTHORS @@ -0,0 +1,2 @@ +Nicolas MASSE +Thomas LIMIN diff --git a/Cpp/TP4_ComptesBancaires/COPYING b/Cpp/TP4_ComptesBancaires/COPYING new file mode 100755 index 0000000..5b6e7c6 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, 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 show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/Cpp/TP4_ComptesBancaires/ChangeLog b/Cpp/TP4_ComptesBancaires/ChangeLog new file mode 100755 index 0000000..e69de29 diff --git a/Cpp/TP4_ComptesBancaires/Doxyfile b/Cpp/TP4_ComptesBancaires/Doxyfile new file mode 100755 index 0000000..13a6a01 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = tp4_comptesbancaires.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/nicolas/repository/ENSI_2ndY/Cpp/TP3_12-10-2005_CalculMatriciel/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/nicolas/repository/ENSI_2ndY/Cpp/tp4_comptesbancaires +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = tp4_comptesbancaires.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/Cpp/TP4_ComptesBancaires/INSTALL b/Cpp/TP4_ComptesBancaires/INSTALL new file mode 100755 index 0000000..02a4a07 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/INSTALL @@ -0,0 +1,167 @@ +Basic Installation +================== + + These are generic installation instructions. + + 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, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + 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 at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +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 architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as 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 `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + 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'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +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. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Cpp/TP4_ComptesBancaires/Makefile.am b/Cpp/TP4_ComptesBancaires/Makefile.am new file mode 100755 index 0000000..02520f2 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/Makefile.am @@ -0,0 +1,5 @@ +# not a GNU package. You can remove this line, if +# have all needed files, that a GNU package needs +AUTOMAKE_OPTIONS = foreign 1.4 + +SUBDIRS = src diff --git a/Cpp/TP4_ComptesBancaires/Makefile.cvs b/Cpp/TP4_ComptesBancaires/Makefile.cvs new file mode 100755 index 0000000..d160702 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/Makefile.cvs @@ -0,0 +1,8 @@ +default: all + +all: + aclocal + autoheader + automake + autoconf + diff --git a/Cpp/TP4_ComptesBancaires/Makefile.in b/Cpp/TP4_ComptesBancaires/Makefile.in new file mode 100755 index 0000000..9490609 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/Makefile.in @@ -0,0 +1,612 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +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@ +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ + TODO config.guess config.sub depcomp install-sh ltmain.sh \ + missing mkinstalldirs +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno configure.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ + +# not a GNU package. You can remove this line, if +# have all needed files, that a GNU package needs +AUTOMAKE_OPTIONS = foreign 1.4 +SUBDIRS = src +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ + cd $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: 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__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +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) + 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 +uninstall-info-am: + +# 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. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; 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; \ + (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" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + 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 || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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 \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__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*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(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 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { 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 +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-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 + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +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-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ + check-am clean clean-generic clean-libtool clean-recursive \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-shar dist-tarZ dist-zip distcheck distclean \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-recursive distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-generic \ + mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-info-am + +# 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: diff --git a/Cpp/TP4_ComptesBancaires/NEWS b/Cpp/TP4_ComptesBancaires/NEWS new file mode 100755 index 0000000..e69de29 diff --git a/Cpp/TP4_ComptesBancaires/README b/Cpp/TP4_ComptesBancaires/README new file mode 100755 index 0000000..40c27ea --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/README @@ -0,0 +1 @@ +On peut dire que le type compte n'est pas absolument polymorphe car ce n'est pas un type abstrait: toute les methodes ont une implémentation, de plus ele ne sont pas toute surchargées. Il y a donc une partie de l'implémentation qui est propre à la classe Compte, elle n'est donc pas absolument polymorphe \ No newline at end of file diff --git a/Cpp/TP4_ComptesBancaires/TODO b/Cpp/TP4_ComptesBancaires/TODO new file mode 100755 index 0000000..c049eb5 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/TODO @@ -0,0 +1 @@ +La totalité de l'énoncé a été traité diff --git a/Cpp/TP4_ComptesBancaires/aclocal.m4 b/Cpp/TP4_ComptesBancaires/aclocal.m4 new file mode 100755 index 0000000..7d85358 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/aclocal.m4 @@ -0,0 +1,7147 @@ +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005 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. + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + +# serial 47 AC_PROG_LIBTOOL + + +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) +# ----------------------------------------------------------- +# If this macro is not defined by Autoconf, define it here. +m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + +# AC_PROG_LIBTOOL +# --------------- +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) +dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 +])]) + +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) +])])# AC_PROG_LIBTOOL + + +# _AC_PROG_LIBTOOL +# ---------------- +AC_DEFUN([_AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +])# _AC_PROG_LIBTOOL + + +# AC_LIBTOOL_SETUP +# ---------------- +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.50)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +AC_LIBTOOL_SYS_MAX_CMD_LEN +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +AC_LIBTOOL_OBJDIR + +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +_LT_AC_PROG_ECHO_BACKSLASH + +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 "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +[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 avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +AC_CHECK_TOOL(AR, ar, false) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) +test -z "$pic_mode" && pic_mode=default + +# Check if we have a version mismatch between libtool.m4 and ltmain.sh. +# +# Note: This should be in AC_LIBTOOL_SETUP, _after_ $ltmain have been defined. +# We also should do it _before_ AC_LIBTOOL_LANG_C_CONFIG that actually +# calls AC_LIBTOOL_CONFIG and creates libtool. +# +_LT_VERSION_CHECK + +# Use C for the default configuration in the libtool script +tagname= +AC_LIBTOOL_LANG_C_CONFIG +_LT_AC_TAGCONFIG +])# AC_LIBTOOL_SETUP + + +# _LT_VERSION_CHECK +# ----------------- +AC_DEFUN([_LT_VERSION_CHECK], +[AC_MSG_CHECKING([for correct ltmain.sh version]) +if test "x$ltmain" = "x" ; then + AC_MSG_RESULT(no) + AC_MSG_ERROR([ + +*** @<:@Gentoo@:>@ sanity check failed! *** +*** \$ltmain is not defined, please check the patch for consistency! *** +]) +fi +gentoo_lt_version="1.5.20" +gentoo_ltmain_version=`grep '^@<:@ @:>@*VERSION=' $ltmain | sed -e 's|^@<:@ @:>@*VERSION=||'` +if test "x$gentoo_lt_version" != "x$gentoo_ltmain_version" ; then + AC_MSG_RESULT(no) + AC_MSG_ERROR([ + +*** @<:@Gentoo@:>@ sanity check failed! *** +*** libtool.m4 and ltmain.sh have a version mismatch! *** +*** (libtool.m4 = $gentoo_lt_version, ltmain.sh = $gentoo_ltmain_version) *** + +Please run: + + libtoolize --copy --force + +if appropriate, please contact the maintainer of this +package (or your distribution) for help. +]) +else + AC_MSG_RESULT(yes) +fi +])# _LT_VERSION_CHECK + + +# _LT_AC_SYS_COMPILER +# ------------------- +AC_DEFUN([_LT_AC_SYS_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_AC_SYS_COMPILER + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +AC_DEFUN([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +AC_DEFUN([_LT_COMPILER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/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. +AC_DEFUN([_LT_LINKER_BOILERPLATE], +[ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* +])# _LT_LINKER_BOILERPLATE + + +# _LT_AC_SYS_LIBPATH_AIX +# ---------------------- +# 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. +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 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 +])# _LT_AC_SYS_LIBPATH_AIX + + +# _LT_AC_SHELL_INIT(ARG) +# ---------------------- +AC_DEFUN([_LT_AC_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_AC_SHELL_INIT + + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[_LT_AC_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +])])# _LT_AC_PROG_ECHO_BACKSLASH + + +# _LT_AC_LOCK +# ----------- +AC_DEFUN([_LT_AC_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && 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 which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file 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* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|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-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-linux*) + # Test if the compiler is 64bit + echo 'int i;' > conftest.$ac_ext + lt_cv_cc_64bit_output=no + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *"ELF 64"*) + lt_cv_cc_64bit_output=yes + ;; + 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_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) +esac + +need_locks="$enable_libtool_lock" + +])# _LT_AC_LOCK + + +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], +[AC_REQUIRE([LT_AC_PROG_SED]) +AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # 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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $rm conftest* +]) + +if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) +else + ifelse([$6], , :, [$6]) +fi +])# AC_LIBTOOL_COMPILER_OPTION + + +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ------------------------------------------------------------ +# Check whether the given compiler option works +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], +[AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$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 "X$_lt_linker_boilerplate" | $Xsed > conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) +else + ifelse([$5], , :, [$5]) +fi +])# AC_LIBTOOL_LINKER_OPTION + + +# AC_LIBTOOL_SYS_MAX_CMD_LEN +# -------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], +[# 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*) + # 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; + ;; + + 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; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # 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` + ;; + 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 + ;; + *) + # 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. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + 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` + ;; + 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 +])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h)dnl +])# _LT_AC_CHECK_DLFCN + + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +}] +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_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl +if test "x$enable_dlopen" != xyes; 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*) + 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 + ]) + ;; + + *) + 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="-dld"], + [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="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + 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_AC_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 "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_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 +])# AC_LIBTOOL_DLOPEN_SELF + + +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) +# --------------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$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:__oline__: $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:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp + $SED '/^$/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_AC_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 .. + rmdir conftest + $rm conftest* +]) +])# AC_LIBTOOL_PROG_CC_C_O + + +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) +# ----------------------------------------- +# Check to see if we can do hard links to lock some files if needed +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], +[AC_REQUIRE([_LT_AC_LOCK])dnl + +hard_links="nottested" +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; 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 "$hard_links" = no; 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 +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + +# AC_LIBTOOL_OBJDIR +# ----------------- +AC_DEFUN([AC_LIBTOOL_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 +])# AC_LIBTOOL_OBJDIR + + +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) +# ---------------------------------------------- +# Check hardcoding attributes. +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_AC_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && + # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + +# AC_LIBTOOL_SYS_LIB_STRIP +# ------------------------ +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], +[striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) +fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +])# AC_LIBTOOL_SYS_LIB_STRIP + + +# AC_LIBTOOL_SYS_DYNAMIC_LINKER +# ----------------------------- +# PORTME Fill in your ld.so characteristics +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], +[AC_MSG_CHECKING([dynamic linker characteristics]) +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" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # 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. + 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 +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +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 + 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' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; 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 + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.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}' + else + # 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' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + 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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $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' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + 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*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + 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 + ;; + 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 + ;; + + linux*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [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 + if test $supports_anon_versioning = yes; 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 -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + $archive_expsym_cmds="$archive_cmds" + fi + else + ld_shlibs=no + fi + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # 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}${versuffix}$shared_ext ${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`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + 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='GNU ld.so' + ;; + +freebsd* | dragonfly*) + # 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[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + 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 "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + 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' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + 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 + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + 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 + # 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 + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + case $host_cpu:$lt_cv_cc_64bit_output in + powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /usr/X11R6/lib64" + sys_lib_search_path_spec="/lib64 /usr/lib64 /usr/local/lib64 /usr/X11R6/lib64" + ;; + esac + + # 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' + + # Find out which ABI we are using (multilib Linux x86_64 hack). + libsuff= + case "$host_cpu" in + x86_64*) + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + ;; + esac + fi + rm -rf conftest* + ;; + *) + ;; + esac + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + +knetbsd*-gnu) + version_type=linux + 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='GNU 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 + 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=linux + 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 + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + 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 + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +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" + ;; + +sco3.2v5*) + version_type=osf + 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 + ;; + +solaris*) + version_type=linux + 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 "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + 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 + ;; + +uts4*) + version_type=linux + 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 "$dynamic_linker" = no && can_build_shared=no +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + +# _LT_AC_TAGCONFIG +# ---------------- +AC_DEFUN([_LT_AC_TAGCONFIG], +[AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi +fi +])# _LT_AC_TAGCONFIG + + +# AC_LIBTOOL_DLOPEN +# ----------------- +# enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_DLOPEN + + +# AC_LIBTOOL_WIN32_DLL +# -------------------- +# declare package support for building win32 DLLs +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) +])# AC_LIBTOOL_WIN32_DLL + + +# AC_ENABLE_SHARED([DEFAULT]) +# --------------------------- +# implement the --enable-shared flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT) +])# AC_ENABLE_SHARED + + +# AC_DISABLE_SHARED +# ----------------- +#- set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no) +])# AC_DISABLE_SHARED + + +# AC_ENABLE_STATIC([DEFAULT]) +# --------------------------- +# implement the --enable-static flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT) +])# AC_ENABLE_STATIC + + +# AC_DISABLE_STATIC +# ----------------- +# set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no) +])# AC_DISABLE_STATIC + + +# AC_ENABLE_FAST_INSTALL([DEFAULT]) +# --------------------------------- +# implement the --enable-fast-install flag +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT) +])# AC_ENABLE_FAST_INSTALL + + +# AC_DISABLE_FAST_INSTALL +# ----------------------- +# set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no) +])# AC_DISABLE_FAST_INSTALL + + +# AC_LIBTOOL_PICMODE([MODE]) +# -------------------------- +# implement the --with-pic flag +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default) +])# AC_LIBTOOL_PICMODE + + +# AC_PROG_EGREP +# ------------- +# This is predefined starting with Autoconf 2.54, so this conditional +# definition can be removed once we require Autoconf 2.54 or later. +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) +])]) + + +# AC_PATH_TOOL_PREFIX +# ------------------- +# find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_REQUIRE([AC_PROG_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="ifelse([$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 <&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 + +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 +])# AC_PATH_TOOL_PREFIX + + +# AC_PATH_MAGIC +# ------------- +# find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_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 + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# AC_PATH_MAGIC + + +# AC_PROG_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH([gnu-ld], + [AC_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]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$GCC" = yes; 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 "$with_gnu_ld" = yes; 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 &1 /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=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + 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]) 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 + ;; + +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 Linux ELF. +linux*) + 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=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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 + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + 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 + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +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 +])# AC_DEPLIBS_CHECK_METHOD + + +# AC_PROG_NM +# ---------- +# find the pathname to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}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 + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + 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" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +])# AC_PROG_NM + + +# AC_CHECK_LIBM +# ------------- +# check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-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_CHECK_LIBM + + +# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl convenience library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-convenience to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# it is assumed to be `libltdl'. LIBLTDL will be prefixed with +# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' +# (note the single quotes!). If your package is not flat and you're not +# using automake, define top_builddir and top_srcdir appropriately in +# the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_CONVENIENCE + + +# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) +# ----------------------------------- +# sets LIBLTDL to the link flags for the libltdl installable library and +# LTDLINCL to the include flags for the libltdl header and adds +# --enable-ltdl-install to the configure arguments. Note that +# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, +# and an installed libltdl is not found, it is assumed to be `libltdl'. +# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and top_srcdir +# appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +])# AC_LIBLTDL_INSTALLABLE + + +# AC_LIBTOOL_CXX +# -------------- +# enable support for C++ libraries +AC_DEFUN([AC_LIBTOOL_CXX], +[AC_REQUIRE([_LT_AC_LANG_CXX]) +])# AC_LIBTOOL_CXX + + +# _LT_AC_LANG_CXX +# --------------- +AC_DEFUN([_LT_AC_LANG_CXX], +[AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) +])# _LT_AC_LANG_CXX + +# _LT_AC_PROG_CXXCPP +# --------------- +AC_DEFUN([_LT_AC_PROG_CXXCPP], +[ +AC_REQUIRE([AC_PROG_CXX]) +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +fi +])# _LT_AC_PROG_CXXCPP + +# AC_LIBTOOL_F77 +# -------------- +# enable support for Fortran 77 libraries +AC_DEFUN([AC_LIBTOOL_F77], +[AC_REQUIRE([_LT_AC_LANG_F77]) +])# AC_LIBTOOL_F77 + + +# _LT_AC_LANG_F77 +# --------------- +AC_DEFUN([_LT_AC_LANG_F77], +[AC_REQUIRE([AC_PROG_F77]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) +])# _LT_AC_LANG_F77 + + +# AC_LIBTOOL_GCJ +# -------------- +# enable support for GCJ libraries +AC_DEFUN([AC_LIBTOOL_GCJ], +[AC_REQUIRE([_LT_AC_LANG_GCJ]) +])# AC_LIBTOOL_GCJ + + +# _LT_AC_LANG_GCJ +# --------------- +AC_DEFUN([_LT_AC_LANG_GCJ], +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) +])# _LT_AC_LANG_GCJ + + +# AC_LIBTOOL_RC +# -------------- +# enable support for Windows resource files +AC_DEFUN([AC_LIBTOOL_RC], +[AC_REQUIRE([LT_AC_PROG_RC]) +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) +])# AC_LIBTOOL_RC + + +# AC_LIBTOOL_LANG_C_CONFIG +# ------------------------ +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) +AC_DEFUN([_LT_AC_LANG_C_CONFIG], +[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_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + +_LT_AC_SYS_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# +# Check for any special shared library compilation flags. +# +_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac +fi +if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +# Report which librarie types wil 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 "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + 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 "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC="$lt_save_CC" +])# AC_LIBTOOL_LANG_C_CONFIG + + +# AC_LIBTOOL_LANG_CXX_CONFIG +# -------------------------- +# Ensure that the configuration vars for the C compiler are +# suitably defined. Those variables are subsequently used by +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], +[AC_LANG_PUSH(C++) +AC_REQUIRE([AC_PROG_CXX]) +AC_REQUIRE([_LT_AC_PROG_CXXCPP]) + +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_AC_TAGVAR(allow_undefined_flag, $1)= +_LT_AC_TAGVAR(always_export_symbols, $1)=no +_LT_AC_TAGVAR(archive_expsym_cmds, $1)= +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_direct, $1)=no +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no +_LT_AC_TAGVAR(hardcode_automatic, $1)=no +_LT_AC_TAGVAR(module_cmds, $1)= +_LT_AC_TAGVAR(module_expsym_cmds, $1)= +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_AC_TAGVAR(no_undefined_flag, $1)= +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Dependencies to place before and after the object being linked: +_LT_AC_TAGVAR(predep_objects, $1)= +_LT_AC_TAGVAR(postdep_objects, $1)= +_LT_AC_TAGVAR(predeps, $1)= +_LT_AC_TAGVAR(postdeps, $1)= +_LT_AC_TAGVAR(compiler_lib_search_path, $1)= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_AC_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_AC_SYS_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_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 + 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 + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +_LT_AC_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' +else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_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 "$with_gnu_ld" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_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_AC_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 "\-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_AC_TAGVAR(ld_shlibs, $1)=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + 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 + 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 + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + 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_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes; 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 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_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' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd* | kfreebsd*-gnu | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_AC_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 $output_objdir/$soname = $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) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_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; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -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_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + 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_AC_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_AC_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; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc*) + # 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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC*) + # Portland Group C++ compiler + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_AC_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' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_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=`echo $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; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_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_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + ;; + osf3*) + 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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=`echo $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; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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 "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_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=`echo $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; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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 "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -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 \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_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 -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 \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; +esac +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_AC_TAGVAR(GCC, $1)="$GXX" +_LT_AC_TAGVAR(LD, $1)="$LD" + +AC_LIBTOOL_POSTDEP_PREDEP($1) +AC_LIBTOOL_PROG_COMPILER_PIC($1) +AC_LIBTOOL_PROG_CC_C_O($1) +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) +AC_LIBTOOL_PROG_LD_SHLIBS($1) +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) +AC_LIBTOOL_SYS_LIB_STRIP +AC_LIBTOOL_DLOPEN_SELF($1) + +AC_LIBTOOL_CONFIG($1) + +AC_LANG_POP +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +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 +])# AC_LIBTOOL_LANG_CXX_CONFIG + +# AC_LIBTOOL_POSTDEP_PREDEP([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. +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +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... +ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" +ifelse([$1], [], +[#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# 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. + +# 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//" + +# 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 + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG], +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# 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 + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + +# Is the compiler the GNU C compiler? +with_gcc=$_LT_AC_TAGVAR(GCC, $1) + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + +# Commands used to build and install a shared archive. +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + +# 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=$_LT_AC_TAGVAR(hardcode_automatic, $1) + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + +# Set to yes if exported symbols are required. +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + +# The commands to list exported symbols. +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + +# Symbols that must always be exported. +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + +ifelse([$1],[], +[# ### END LIBTOOL CONFIG], +[# ### END LIBTOOL TAG CONFIG: $tagname]) + +__EOF__ + +ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\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 "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # 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" +]) +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi +])# AC_LIBTOOL_CONFIG + + +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# 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]]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDGIRSTW]]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDRT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# 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 + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Try without a prefix undercore, 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. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $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 < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[[]] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_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_save_LIBS" + CFLAGS="$lt_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 -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; 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 +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) +# --------------------------------------- +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # 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*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_AC_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 + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC*) + # Portland Group C++ compiler. + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $cc_basename in + icc* | ecc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + unicos*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; +esac +]) + + +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) +# ------------------------------------ +# See if the linker supports building shared libraries. +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_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_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # 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. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + _LT_CC_BASENAME([$compiler]) + case $host_os in + cygwin* | mingw* | pw32*) + # 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 + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; 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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [[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 + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_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' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; + esac + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + _LT_AC_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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&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. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + 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 + 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 AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | 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 + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + 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 + + 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_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + if test "$GCC" = yes; 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 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi[[45]]*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # 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. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu | dragonfly*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_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~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_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' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_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' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi +]) +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_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_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$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_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac +])# AC_LIBTOOL_PROG_LD_SHLIBS + + +# _LT_AC_FILE_LTDLL_C +# ------------------- +# Be careful that the start marker always follows a newline. +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ +])# _LT_AC_FILE_LTDLL_C + + +# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) +# --------------------------------- +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +AC_DEFUN([LT_AC_PROG_GCJ], +[AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) +]) + +AC_DEFUN([LT_AC_PROG_RC], +[AC_CHECK_TOOL(RC, windres, no) +]) + +# 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. # +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_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 +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 $lt_ac_count -gt 10 && 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_MSG_RESULT([$SED]) +]) + +# Copyright (C) 2002, 2003, 2005 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. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 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], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# 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 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +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, 2000, 2001, 2002, 2003, 2004, 2005 +# 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 + +# 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", "GCJ", or "OBJC". +# 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 + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$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'. + 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 + 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 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + 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 + ;; + none) break ;; + esac + # 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. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} 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, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# 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 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _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. FIXME. This creates each `.P' file that we will +# 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" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# 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 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# 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 12 + +# 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. + +# 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.58])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 +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +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], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])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) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. 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)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# 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_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 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 +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 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 2 + +# 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, 2002, 2003, 2005 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 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# 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 4 + +# 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 supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 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_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 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 3 + +# _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], +[AC_FOREACH([_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])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# 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 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# 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 ( + 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 + rm -f conftest.file + 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 + + 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)]) + +# Copyright (C) 2001, 2003, 2005 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="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 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 2 + +# _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. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +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 /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 + diff --git a/Cpp/TP4_ComptesBancaires/config.guess b/Cpp/TP4_ComptesBancaires/config.guess new file mode 100755 index 0000000..d023e56 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/config.guess @@ -0,0 +1,1483 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-11-11' + +# 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 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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 Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +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 + +trap 'exit 1' 1 2 15 + +# 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. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; 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 ; set_cc_for_build= ;' + +# 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) >/dev/null 2>&1 ; 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 + +if [ "${UNAME_SYSTEM}" = "Linux" ] ; then + eval $set_cc_for_build + cat << EOF > $dummy.c + #include + #ifdef __UCLIBC__ + # ifdef __UCLIBC_CONFIG_VERSION__ + LIBC=uclibc __UCLIBC_CONFIG_VERSION__ + # else + LIBC=uclibc + # endif + #else + LIBC=gnu + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'` +fi + +# 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 tupples: *-*-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". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-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. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + 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 + # 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/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + 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. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + 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) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # 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:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $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; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $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 + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + 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 [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 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 [ -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 [ "${HP_ARCH}" = "" ]; then + eval $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 [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $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 __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $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; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + 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*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 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/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[345]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` 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 ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld" + exit ;; + esac + if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + 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. + echo i386-sequent-sysv4 + exit ;; + 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. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + 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 + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + 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 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + 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 i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + 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; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *: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 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#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 (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#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 + printf ("vax-dec-ultrix\n"); exit (0); +# 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; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/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 + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Cpp/TP4_ComptesBancaires/config.h.in b/Cpp/TP4_ComptesBancaires/config.h.in new file mode 100755 index 0000000..5a1898a --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/config.h.in @@ -0,0 +1,55 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* 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 version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/Cpp/TP4_ComptesBancaires/config.sub b/Cpp/TP4_ComptesBancaires/config.sub new file mode 100755 index 0000000..e3a11c8 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/config.sub @@ -0,0 +1,1605 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-11-13' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# 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. + +# 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. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +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" + 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 + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -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) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx | dvp \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ms1 \ + | msp430 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[24]a*eb | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m32c) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | ms1-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + m32c-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsEE* | ee | ps2) + basic_machine=mips64r5900el-scei + case $os in + -linux*) + ;; + *) + os=-elf + ;; + esac + ;; + iop) + basic_machine=mipsel-scei + os=-irx + ;; + dvp) + basic_machine=dvp-scei + os=-elf + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# 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) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -irx*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -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 + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + 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 + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Cpp/TP4_ComptesBancaires/configure b/Cpp/TP4_ComptesBancaires/configure new file mode 100755 index 0000000..e9bc9af --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/configure @@ -0,0 +1,21369 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 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 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+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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 + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + 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 + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # 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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1 && unset CDPATH + +if test -z "$ECHO"; then +if test "X${echo_test_string+set}" != Xset; then +# find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string=`eval $cmd`) 2>/dev/null && + echo_test_string=`eval $cmd` && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="configure.in" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# 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. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +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 + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -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 | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$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 ;; + + -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 ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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 ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=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 ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$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'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +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 + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + 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 + + +# 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 its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + 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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r "./$ac_unique_file") 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CXX_set=${CXX+set} +ac_env_CXX_value=$CXX +ac_cv_env_CXX_set=${CXX+set} +ac_cv_env_CXX_value=$CXX +ac_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_env_CXXFLAGS_value=$CXXFLAGS +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_cv_env_CXXFLAGS_value=$CXXFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +ac_env_CXXCPP_set=${CXXCPP+set} +ac_env_CXXCPP_value=$CXXCPP +ac_cv_env_CXXCPP_set=${CXXCPP+set} +ac_cv_env_CXXCPP_value=$CXXCPP +ac_env_F77_set=${F77+set} +ac_env_F77_value=$F77 +ac_cv_env_F77_set=${F77+set} +ac_cv_env_F77_value=$F77 +ac_env_FFLAGS_set=${FFLAGS+set} +ac_env_FFLAGS_value=$FFLAGS +ac_cv_env_FFLAGS_set=${FFLAGS+set} +ac_cv_env_FFLAGS_value=$FFLAGS + +# +# 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 this package 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 \`..'] + +_ACEOF + + cat <<_ACEOF +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] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --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] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_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 + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --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) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] + include additional configurations [automatic] + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + 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 + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 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 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +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` +hostinfo = `(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 + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&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_sep= +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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$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 + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + 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. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$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 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$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. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +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_config_headers="$ac_config_headers config.h" + +am__api_version="1.9" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# 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. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +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_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 + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$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' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# 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 ( + 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 + rm -f conftest.file + 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". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +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 $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 + +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +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=tp4_comptesbancaires + VERSION=0.1 + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# 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"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# 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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +ac_ext=cc +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 + +ac_ext=cc +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 -n "$ac_tool_prefix"; then + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC + 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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + echo "$as_me:$LINENO: result: $CXX" >&5 +echo "${ECHO_T}$CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 +echo "${ECHO_T}$ac_ct_CXX" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CXX" && break +done +test -n "$ac_ct_CXX" || ac_ct_CXX="g++" + + CXX=$ac_ct_CXX +fi + + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C++ compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out 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. +echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 +echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 +echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 +GXX=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +CXXFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cxx_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cxx_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 +if test "$ac_test_CXXFLAGS" = set; 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 +for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +ac_ext=cc +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 +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CXX" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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'. + 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 + 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 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + 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 + ;; + none) break ;; + esac + # 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. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} 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 + +fi +echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 +echo "${ECHO_T}$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 + + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; 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 + enable_shared=yes +fi; + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; 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 + enable_static=yes +fi; + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; 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 + enable_fast_install=yes +fi; + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_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" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +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 +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + 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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; 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 +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + 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; +} + +/* 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 don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=cc +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 + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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'. + 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 + 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 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + 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 + ;; + none) break ;; + esac + # 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. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} 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 + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$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 + + +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # 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 +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 $lt_ac_count -gt 10 && 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 + +fi + +SED=$lt_cv_path_SED +echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6 + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$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 + darwin*) + if test "$GCC" = yes; then + reload_cmds='$CC -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + +echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}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 + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + 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" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6 +NM="$lt_cv_path_NM" + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + +echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 +# which 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 +aix4* | aix5*) + 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='/usr/bin/file -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'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | kfreebsd*-gnu | dragonfly*) + 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=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + 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]) 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 + ;; + +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 Linux ELF. +linux*) + 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=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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 + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + 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 + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +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 no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && 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 which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 4118 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file 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* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|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-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-linux*) + # Test if the compiler is 64bit + echo 'int i;' > conftest.$ac_ext + lt_cv_cc_64bit_output=no + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *"ELF 64"*) + lt_cv_cc_64bit_output=yes + ;; + 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" + echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_cc_needs_belf=no +fi +rm -f conftest.err conftest.$ac_objext \ + 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 + +fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +esac + +need_locks="$enable_libtool_lock" + + +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 +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&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+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-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. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$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. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +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 + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cc +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 +echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/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. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +echo "$as_me:$LINENO: result: $CXXCPP" >&5 +echo "${ECHO_T}$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. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # 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 >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=cc +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 + +fi + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran + 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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + echo "$as_me:$LINENO: result: $F77" >&5 +echo "${ECHO_T}$F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_F77="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 +echo "${ECHO_T}$ac_ct_F77" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_F77" && break +done + + F77=$ac_ct_F77 +fi + + +# Provide some information about the compiler. +echo "$as_me:5251:" \ + "checking for Fortran 77 compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 +if test "${ac_cv_f77_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_f77_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + FFLAGS=-g +cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_f77_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_f77_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +G77=`test $ac_compiler_gnu = yes && echo yes` +ac_ext=cc +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 + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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*) + # 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; + ;; + + 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; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # 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` + ;; + 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 + ;; + *) + # 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. + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + 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` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 +else + echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6 +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# 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]*\)' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +linux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDGIRSTW]' + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris* | sysv5*) + symcode='[BDRT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# 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 + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, 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. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$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=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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 < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_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 -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +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 + echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6 +else + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 +fi + +echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6 +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 +fi +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6 +objdir=$lt_cv_objdir + + + + + +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 "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +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 avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}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 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 <&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 + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 <&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 + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi; +test -z "$pic_mode" && pic_mode=default + +# Check if we have a version mismatch between libtool.m4 and ltmain.sh. +# +# Note: This should be in AC_LIBTOOL_SETUP, _after_ $ltmain have been defined. +# We also should do it _before_ AC_LIBTOOL_LANG_C_CONFIG that actually +# calls AC_LIBTOOL_CONFIG and creates libtool. +# +echo "$as_me:$LINENO: checking for correct ltmain.sh version" >&5 +echo $ECHO_N "checking for correct ltmain.sh version... $ECHO_C" >&6 +if test "x$ltmain" = "x" ; then + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + { { echo "$as_me:$LINENO: error: + +*** [Gentoo] sanity check failed! *** +*** \$ltmain is not defined, please check the patch for consistency! *** +" >&5 +echo "$as_me: error: + +*** [Gentoo] sanity check failed! *** +*** \$ltmain is not defined, please check the patch for consistency! *** +" >&2;} + { (exit 1); exit 1; }; } +fi +gentoo_lt_version="1.5.20" +gentoo_ltmain_version=`grep '^[ ]*VERSION=' $ltmain | sed -e 's|^[ ]*VERSION=||'` +if test "x$gentoo_lt_version" != "x$gentoo_ltmain_version" ; then + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + { { echo "$as_me:$LINENO: error: + +*** [Gentoo] sanity check failed! *** +*** libtool.m4 and ltmain.sh have a version mismatch! *** +*** (libtool.m4 = $gentoo_lt_version, ltmain.sh = $gentoo_ltmain_version) *** + +Please run: + + libtoolize --copy --force + +if appropriate, please contact the maintainer of this +package (or your distribution) for help. +" >&5 +echo "$as_me: error: + +*** [Gentoo] sanity check failed! *** +*** libtool.m4 and ltmain.sh have a version mismatch! *** +*** (libtool.m4 = $gentoo_lt_version, ltmain.sh = $gentoo_ltmain_version) *** + +Please run: + + libtoolize --copy --force + +if appropriate, please contact the maintainer of this +package (or your distribution) for help. +" >&2;} + { (exit 1); exit 1; }; } +else + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +fi + + +# Use C for the default configuration in the libtool script +tagname= +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;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# +# Check for any special shared library compilation flags. +# +lt_prog_cc_shlib= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + lt_prog_cc_shlib='-belf' + ;; + esac +fi +if test -n "$lt_prog_cc_shlib"; then + { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : + else + { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + lt_cv_prog_cc_can_build_shared=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_prog_compiler_static" + printf "$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 "X$_lt_linker_boilerplate" | $Xsed > conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_static_works=yes + fi + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # 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:6410: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:6414: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; 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= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # 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' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # 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' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + 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 + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # 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='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + 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 "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic='-qnocommon' + lt_prog_compiler_wl='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # 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' + ;; + + 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' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux*) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # 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' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic='-Kpic' + lt_prog_compiler_static='-dn' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + 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* | sysv5*) + 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 + ;; + + 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 + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # 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:6672: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:6676: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 + +if test x"$lt_prog_compiler_pic_works" = xyes; 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 +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$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:6734: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:6738: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp + $SED '/^$/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.err || 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 .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$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 + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # 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_" + # 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. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # 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 + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; 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 2>/dev/null` in + *\ [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 + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + 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 + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach 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*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + 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/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + 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; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # 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; $echo \"$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' ;; + esac + archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; 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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + 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 $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' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&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. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + 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 + ;; + + 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 $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 + + if test "$ld_shlibs" = no; 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 "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + 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 + 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 AIX nm, but means don't demangle with GNU 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")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | 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 + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + 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 + + 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_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; 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 + hardcode_direct=yes + 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 "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # 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_use_runtimelinking" = yes; 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. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; 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 $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec=' ' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + 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 + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # 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=' ' + 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 `echo "$deplibs" | $SED -e '\''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' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=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* | kfreebsd*-gnu | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $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 $output_objdir/$soname = $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* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*|ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*|ia64*) + archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=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 "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + 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 + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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 + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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 + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${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 ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + 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' + 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 linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; 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.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + 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' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + 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 + fi + +echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6 +test "$ld_shlibs" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# 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 "$enable_shared" = yes && test "$GCC" = yes; 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. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + 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:$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=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # 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. + 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 +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +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 + 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' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; 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 + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.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}' + else + # 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' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + 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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + 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*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + 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 + ;; + 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 + ;; + + linux*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 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 + if test $supports_anon_versioning = yes; 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 -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + $archive_expsym_cmds="$archive_cmds" + fi + else + ld_shlibs=no + fi + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # 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}${versuffix}$shared_ext ${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`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + 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='GNU ld.so' + ;; + +freebsd* | dragonfly*) + # 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[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + 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 "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + 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' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + 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 + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + 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 + # 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 + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + case $host_cpu:$lt_cv_cc_64bit_output in + powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /usr/X11R6/lib64" + sys_lib_search_path_spec="/lib64 /usr/lib64 /usr/local/lib64 /usr/X11R6/lib64" + ;; + esac + + # 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' + + # Find out which ABI we are using (multilib Linux x86_64 hack). + libsuff= + case "$host_cpu" in + x86_64*) + echo '#line 8186 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + ;; + esac + fi + rm -rf conftest* + ;; + *) + ;; + esac + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + +knetbsd*-gnu) + version_type=linux + 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='GNU 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 + 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=linux + 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 + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + 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 + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +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" + ;; + +sco3.2v5*) + version_type=osf + 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 + ;; + +solaris*) + version_type=linux + 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 "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + 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 + ;; + +uts4*) + version_type=linux + 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 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var" || \ + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; 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 +echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; 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*) + 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 + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* 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_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* 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_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; 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 < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; 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 < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$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 + + +# Report which librarie types wil actually be built +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# 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. + +# 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//" + +# 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 + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# 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 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# 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 + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# 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 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# 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 and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +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 + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# 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 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# 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 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 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# 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 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_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 + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\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 "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # 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" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=cc +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 + +CC="$lt_save_CC" + + +# Check whether --with-tags or --without-tags was given. +if test "${with_tags+set}" = set; then + withval="$with_tags" + tagnames="$withval" +fi; + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cc +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= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# 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= + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +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 + 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 + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + 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 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$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 "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -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 "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + 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 + 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 + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + 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_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; 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 + hardcode_direct_CXX=yes + 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 "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # 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_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; 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 $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_CXX=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX=' ' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes ; then + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + 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' + fi + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_CXX=no + ;; + esac + fi + ;; + + 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 + ;; + freebsd[12]*) + # 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* | kfreebsd*-gnu | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + 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 $output_objdir/$soname = $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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + hardcode_libdir_separator_CXX=: + ;; + ia64*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + *) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + hardcode_direct_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*|ia64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + 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; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + ia64*|hppa*64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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 + ;; + 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" && echo -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 "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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=: + ;; + linux*) + 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; echo $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*) + # 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*) + # Portland Group C++ compiler + 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' + + 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; $echo \"$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=`echo $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; echo $list' + ;; + 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::"' + ;; + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + openbsd*) + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + 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__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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='echo' + ;; + osf3*) + 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 + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + 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" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + + 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. + # + # 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=`echo $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; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + 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 "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + 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. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + 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" && echo -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' + 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=`echo $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; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + + 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 "\-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 + ;; + sco*) + archive_cmds_need_lc_CXX=no + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + 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*) + # 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 C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. We must also pass each convience library through + # to the system linker between allextract/defaultextract. + # The C++ compiler will combine linker options so we + # cannot just pass the convience library names through + # without $wl. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # 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 "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $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 -nostdlib ${wl}-M $wl$lib.exp -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 \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $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 -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 \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + archive_cmds_need_lc_CXX=no + ;; + 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 +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p 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 + ;; + + *.$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 "$pre_test_object_deps_done" = no; 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 + +# PORTME: override above test on systems where it is broken +case $host_os in +solaris*) + case $cc_basename in + CC*) + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + postdeps_CXX='-lCstd -lCrun' + ;; + esac +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; 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 "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # 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' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # 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' + ;; + 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= + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # 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*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; 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_AC_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 + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_CXX='-qnocommon' + lt_prog_compiler_wl_CXX='-Wl,' + ;; + esac + ;; + 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* | kfreebsd*-gnu | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + 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*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc* | ecpc*) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC*) + # 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' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + 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*) + ;; + sco*) + case $cc_basename in + CC*) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC*) + # 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 + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # 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:11403: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:11407: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; 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 +case $host_os in + # For platforms which 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 + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$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:11465: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:11469: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp + $SED '/^$/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.err || 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 .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$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 + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU 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")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# 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 "$enable_shared" = yes && test "$GCC" = yes; 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. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_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:$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=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + 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* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # 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. + 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 +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +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 + 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' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; 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 + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.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}' + else + # 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' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + 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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + 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*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + 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 + ;; + 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 + ;; + + linux*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 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 + if test $supports_anon_versioning = yes; 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 -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + $archive_expsym_cmds="$archive_cmds" + fi + else + ld_shlibs=no + fi + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # 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}${versuffix}$shared_ext ${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`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + 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='GNU ld.so' + ;; + +freebsd* | dragonfly*) + # 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[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + 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 "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + 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' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + 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 + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + 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 + # 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 + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + case $host_cpu:$lt_cv_cc_64bit_output in + powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /usr/X11R6/lib64" + sys_lib_search_path_spec="/lib64 /usr/lib64 /usr/local/lib64 /usr/X11R6/lib64" + ;; + esac + + # 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' + + # Find out which ABI we are using (multilib Linux x86_64 hack). + libsuff= + case "$host_cpu" in + x86_64*) + echo '#line 12046 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + ;; + esac + fi + rm -rf conftest* + ;; + *) + ;; + esac + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + +knetbsd*-gnu) + version_type=linux + 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='GNU 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 + 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=linux + 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 + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + 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 + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +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" + ;; + +sco3.2v5*) + version_type=osf + 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 + ;; + +solaris*) + version_type=linux + 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 "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + 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 + ;; + +uts4*) + version_type=linux + 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 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var_CXX" || \ + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; 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 +echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6 + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; 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*) + 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 + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* 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_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* 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_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; 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 < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; 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 < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$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 + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# 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 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# 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 + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# 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 and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +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 + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# 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 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_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 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 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_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 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# 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 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=cc +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 + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +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 + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +test "$ld_shlibs_F77" = no && can_build_shared=no + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # 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_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # 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_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + 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_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # 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_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_F77='-qnocommon' + lt_prog_compiler_wl_F77='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # 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_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-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_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux*) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-fpic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_F77='-Kpic' + lt_prog_compiler_static_F77='-dn' + ;; + + solaris*) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_F77='-Qoption ld ';; + *) + lt_prog_compiler_wl_F77='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + unicos*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_can_build_shared_F77=no + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # 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:13893: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:13897: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$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:13955: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:13959: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp + $SED '/^$/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_F77=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 .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$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 + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # 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_F77="_GLOBAL_OFFSET_TABLE_" + # 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. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # 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 + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; 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_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [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 + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$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_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_F77=no + fi + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; + esac + archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + else + ld_shlibs_F77=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&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. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = no; then + runpath_var= + hardcode_libdir_flag_spec_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$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_F77=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + 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 + 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 AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | 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 + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + 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 + + 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_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; 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 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=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_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # 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_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_f77_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_F77=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77=' ' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$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_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # 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_F77=' ' + allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_F77='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_F77=no + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='' + link_all_deplibs_F77=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_F77=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu | dragonfly*) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*|ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*|ia64*) + archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + ia64*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + *) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + sco3.2v5*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$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' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_F77='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv5*) + no_undefined_flag_F77=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$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' + hardcode_libdir_flag_spec_F77= + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6 +test "$ld_shlibs_F77" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 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. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # 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. + 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 +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +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 + 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' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; 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 + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.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}' + else + # 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' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + 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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + 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*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + 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 + ;; + 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 + ;; + + linux*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 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 + if test $supports_anon_versioning = yes; 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 -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + $archive_expsym_cmds="$archive_cmds" + fi + else + ld_shlibs=no + fi + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # 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}${versuffix}$shared_ext ${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`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + 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='GNU ld.so' + ;; + +freebsd* | dragonfly*) + # 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[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + 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 "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + 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' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + 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 + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + 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 + # 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 + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + case $host_cpu:$lt_cv_cc_64bit_output in + powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /usr/X11R6/lib64" + sys_lib_search_path_spec="/lib64 /usr/lib64 /usr/local/lib64 /usr/X11R6/lib64" + ;; + esac + + # 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' + + # Find out which ABI we are using (multilib Linux x86_64 hack). + libsuff= + case "$host_cpu" in + x86_64*) + echo '#line 15387 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + ;; + esac + fi + rm -rf conftest* + ;; + *) + ;; + esac + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + +knetbsd*-gnu) + version_type=linux + 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='GNU 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 + 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=linux + 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 + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + 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 + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +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" + ;; + +sco3.2v5*) + version_type=osf + 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 + ;; + +solaris*) + version_type=linux + 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 "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + 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 + ;; + +uts4*) + version_type=linux + 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 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var_F77" || \ + test "X$hardcode_automatic_F77" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6 + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# 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 + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# 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_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# 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_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=cc +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 + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + +old_archive_cmds_GCJ=$old_archive_cmds + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # 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:16153: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16157: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # 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_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # 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_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + 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_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # 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_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + darwin*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + case $cc_basename in + xlc*) + lt_prog_compiler_pic_GCJ='-qnocommon' + lt_prog_compiler_wl_GCJ='-Wl,' + ;; + esac + ;; + + mingw* | pw32* | os2*) + # 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_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-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_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux*) + case $cc_basename in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-fpic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_GCJ='-Kpic' + lt_prog_compiler_static_GCJ='-dn' + ;; + + solaris*) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl_GCJ='-Qoption ld ';; + *) + lt_prog_compiler_wl_GCJ='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + unicos*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_can_build_shared_GCJ=no + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # 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:16415: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:16419: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp + $SED '/^$/d' conftest.err >conftest.er2 + if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$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:16477: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:16481: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp + $SED '/^$/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_GCJ=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 .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$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 + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # 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_GCJ="_GLOBAL_OFFSET_TABLE_" + # 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. + extract_expsyms_cmds= + # Just being paranoid about ensuring that cc_basename is set. + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + case $host_os in + cygwin* | mingw* | pw32*) + # 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 + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; 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_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ [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 + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$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_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_GCJ=no + fi + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_addflag= + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; + esac + archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + $echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + else + ld_shlibs_GCJ=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&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. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = no; then + runpath_var= + hardcode_libdir_flag_spec_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$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_GCJ=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + 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 + 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 AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | 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 + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + 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 + + 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_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; 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 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=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_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # 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_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_GCJ=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ=' ' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$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_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi[45]*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # 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_GCJ=' ' + allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + case $host_os in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' + ;; + esac + fi + ;; + esac + archive_cmds_need_lc_GCJ=no + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='' + link_all_deplibs_GCJ=yes + if test "$GCC" = yes ; then + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + case $cc_basename in + xlc*) + output_verbose_link_cmd='echo' + archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + ;; + *) + ld_shlibs_GCJ=no + ;; + esac + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu | dragonfly*) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*|ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*|ia64*) + archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + ia64*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + *) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + sco3.2v5*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + wlarc='' + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$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' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine linker options so we + # cannot just pass the convience library names through + # without $wl, iff we do not link with $LD. + # Luckily, gcc supports the same syntax we need for Sun Studio. + # Supported since Solaris 2.6 (maybe 2.5.1?) + case $wlarc in + '') + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + *) + whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; + esac ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv5*) + no_undefined_flag_GCJ=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$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' + hardcode_libdir_flag_spec_GCJ= + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ 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. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # 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. + 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 +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +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 + 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' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; 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 + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.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}' + else + # 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' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + 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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + 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*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + 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 + ;; + 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 + ;; + + linux*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 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 + if test $supports_anon_versioning = yes; 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 -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + $archive_expsym_cmds="$archive_cmds" + fi + else + ld_shlibs=no + fi + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # 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}${versuffix}$shared_ext ${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`' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + 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 + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + 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='GNU ld.so' + ;; + +freebsd* | dragonfly*) + # 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[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + # Handle Gentoo/FreeBSD as it was Linux + case $host_vendor in + gentoo) + version_type=linux ;; + *) + version_type=freebsd-$objformat ;; + esac + + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + linux) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + need_lib_prefix=no + need_version=no + ;; + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + 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 + 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 "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + 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' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + 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 + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + 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 + # 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 + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + case $host_cpu:$lt_cv_cc_64bit_output in + powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes) + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /usr/X11R6/lib64" + sys_lib_search_path_spec="/lib64 /usr/lib64 /usr/local/lib64 /usr/X11R6/lib64" + ;; + esac + + # 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' + + # Find out which ABI we are using (multilib Linux x86_64 hack). + libsuff= + case "$host_cpu" in + x86_64*) + echo '#line 17929 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + ;; + esac + fi + rm -rf conftest* + ;; + *) + ;; + esac + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + +knetbsd*-gnu) + version_type=linux + 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='GNU 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 + 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=linux + 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 + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + 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 + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +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" + ;; + +sco3.2v5*) + version_type=osf + 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 + ;; + +solaris*) + version_type=linux + 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 "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + 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 + ;; + +uts4*) + version_type=linux + 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 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var_GCJ" || \ + test "X$hardcode_automatic_GCJ" = "Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6 + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; 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*) + 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 + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* 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_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* 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_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; 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 < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; 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 < +#endif + +#include + +#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 + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && 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_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$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 + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# 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 + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# 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_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# 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_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=cc +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 + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# 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. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +printf "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$rm conftest* + +ac_outfile=conftest.$ac_objext +printf "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$rm conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# 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 + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# 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 + +# 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 + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# 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 + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# 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 + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# 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 in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# 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_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# 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_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + fi +fi + + +ac_ext=cc +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 + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + + ac_config_files="$ac_config_files Makefile src/Makefile" +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, don't put newlines in cache variables' values. +# 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. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *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 \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + 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}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ 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[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $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} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# 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+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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 + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + 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 + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # 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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -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 + --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 ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +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=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + 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 +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + 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+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@mkdir_p@,$mkdir_p,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@AMTAR@,$AMTAR,;t t +s,@am__tar@,$am__tar,;t t +s,@am__untar@,$am__untar,;t t +s,@CXX@,$CXX,;t t +s,@CXXFLAGS@,$CXXFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CXX@,$ac_ct_CXX,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CXXDEPMODE@,$CXXDEPMODE,;t t +s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t +s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@EGREP@,$EGREP,;t t +s,@LN_S@,$LN_S,;t t +s,@ECHO@,$ECHO,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@CPP@,$CPP,;t t +s,@CXXCPP@,$CXXCPP,;t t +s,@F77@,$F77,;t t +s,@FFLAGS@,$FFLAGS,;t t +s,@ac_ct_F77@,$ac_ct_F77,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # 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. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #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. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # 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. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# 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 || { (exit 1); exit 1; } +fi + diff --git a/Cpp/TP4_ComptesBancaires/configure.in b/Cpp/TP4_ComptesBancaires/configure.in new file mode 100755 index 0000000..af5465c --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/configure.in @@ -0,0 +1,10 @@ +AC_INIT(configure.in) + +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE(tp4_comptesbancaires, 0.1) + +AC_LANG_CPLUSPLUS +AC_PROG_CXX +AM_PROG_LIBTOOL + +AC_OUTPUT(Makefile src/Makefile) diff --git a/Cpp/TP4_ComptesBancaires/depcomp b/Cpp/TP4_ComptesBancaires/depcomp new file mode 100755 index 0000000..4c20c6c --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/depcomp @@ -0,0 +1,441 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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 . + +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 +# `libtool' can also be set to `yes' or `no'. + +depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# 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 + +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. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## 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). +## - 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 -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## 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. + tr ' ' ' +' < "$tmpdepfile" | +## 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. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : + else + 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 ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. 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. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Must come before tru64. + + # Intel's C compiler understands `-MD -MF file'. However + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 AIX 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. + + tmpdepfile1="$object.d" + tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` + if test "$libtool" = yes; then + "$@" -Wc,-MD + else + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#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 proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + test -z "$dashmflag" && dashmflag=-M + ( IFS=" " + case " $* " in + *" --mode=compile "*) # this is libtool, let us make it quiet + for arg + do # cycle over the arguments + case "$arg" in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + 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) + # X makedepend + ( + shift + cleared=no + for arg in "$@"; do + case $cleared in no) + set ""; shift + cleared=yes + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift;; + -*) + ;; + *) + set fnord "$@" "$arg"; shift;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tail +3 "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + 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 proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + 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 proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/Cpp/TP4_ComptesBancaires/install-sh b/Cpp/TP4_ComptesBancaires/install-sh new file mode 100755 index 0000000..36f96f3 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/install-sh @@ -0,0 +1,276 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/#inst.$$# + rmtmp=$dstdir/#rm.$$# + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# 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. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/Cpp/TP4_ComptesBancaires/ltmain.sh b/Cpp/TP4_ComptesBancaires/ltmain.sh new file mode 100755 index 0000000..decca9d --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/ltmain.sh @@ -0,0 +1,6643 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# 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. + +basename="s,^.*/,,g" + +# 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" + +# define SED for historic ltconfig's generated by Libtool 1.3 +test -z "$SED" && SED=sed + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.5.20 +TIMESTAMP=" (1.1220.2.287 2005/08/31 18:54:15)" + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +# Same for EGREP, and just to be sure, do LTCC as well +if test "X$EGREP" = X ; then + EGREP=egrep +fi +if test "X$LTCC" = X ; then + LTCC=${CC-gcc} +fi + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +if test -z "$max_cmd_len"; then + i=0 + testring="ABCD" + new_result= + + # 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"`$SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ + = "XX$testring") >/dev/null 2>&1 && + new_result=`expr "X$testring" : ".*" 2>&1` && + max_cmd_len="$new_result" && + test "$i" != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + testring="$testring$testring" + done + testring= + # 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. + max_cmd_len=`expr $max_cmd_len \/ 2` +fi + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# 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. +func_win32_libid () +{ + 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 + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + 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_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 () +{ + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # 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. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + # user sometimes does CC=-gcc so we need to match that to 'gcc' + trimedcc=`echo ${CC} | $SED -e "s/${host}-//g"` + # and sometimes libtool has CC=-gcc but user does CC=gcc + extendcc=${host}-${CC} + # and sometimes libtool has CC=-gcc but user has CC=-gcc + # (Gentoo-specific hack because we always export $CHOST) + mungedcc=${CHOST-${host}}-${trimedcc} + case "$@ " in + "cc "* | " cc "* | "${host}-cc "* | " ${host}-cc "*|\ + "gcc "* | " gcc "* | "${host}-gcc "* | " ${host}-gcc "*) + tagname=CC + break ;; + "$trimedcc "* | " $trimedcc "* | "`$echo $trimedcc` "* | " `$echo $trimedcc` "*|\ + "$extendcc "* | " $extendcc "* | "`$echo $extendcc` "* | " `$echo $extendcc` "*|\ + "$mungedcc "* | " $mungedcc "* | "`$echo $mungedcc` "* | " `$echo $mungedcc` "*|\ + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # 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 + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + + $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" + $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 + exit $EXIT_FAILURE + fi +} + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + my_status="" + + $show "${rm}r $my_gentop" + $run ${rm}r "$my_gentop" + $show "$mkdir $my_gentop" + $run $mkdir "$my_gentop" + my_status=$? + if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then + exit $my_status + fi + + 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 + my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` + my_xdir="$my_gentop/$my_xlib" + + $show "${rm}r $my_xdir" + $run ${rm}r "$my_xdir" + $show "$mkdir $my_xdir" + $run $mkdir "$my_xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$my_xdir"; then + exit $status + fi + case $host in + *-darwin*) + $show "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + if test -z "$run"; then + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` + if test -n "$darwin_arches"; then + darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + $show "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + 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 have a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + lipo -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + ${rm}r unfat-$$ + cd "$darwin_orig_dir" + else + cd "$darwin_orig_dir" + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + fi # $run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + func_extract_archives_result="$my_oldobjs" +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2005 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $? + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $? + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $? + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +# 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= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # 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= + + 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) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$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,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$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. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, and some SunOS ksh mistreat backslash-escaping + # in scan sets (worked around with variable expansion), + # and furthermore cannot handle '|' '&' '(' ')' in scan sets + # at all, so we specify them separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` + case $qlibobj in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qlibobj="\"$qlibobj\"" ;; + esac + test "X$libobj" != "X$qlibobj" \ + && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; 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 "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + 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 "$need_locks" = yes; then + until $run ln "$srcfile" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; 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." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo "$srcfile" > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` + case $qsrcfile in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qsrcfile="\"$qsrcfile\"" ;; + esac + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </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." + + $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 + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." + + $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 + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_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 + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$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 "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + darwin_framework) + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + prev= + 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 + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + 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 + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework|-arch) + prev=darwin_framework + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + 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*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit $EXIT_FAILURE + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + -model) + compile_command="$compile_command $arg" + compiler_flags="$compiler_flags $arg" + finalize_command="$finalize_command $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m* pass through architecture-specific compiler args for GCC + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*) + + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # 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 + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + -Kthread | -mthreads | -mt | -pthread | -pthreads | -threads | -qthreaded | -kthread ) + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$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 "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + 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. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + 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 test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; 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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$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 link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # 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 "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + if eval $echo \"$deplib\" 2>/dev/null \ + | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $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 used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # 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 + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; 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. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$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 + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && 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 + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; 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 "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || 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 + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$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 "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + 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 + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; 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 "$linkmode" = lib && + test "$hardcode_into_libs" = yes; 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 "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; 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*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + 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 "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; 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 + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; 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 "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; 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 + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; 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 "$linkmode" = prog; 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 "$hardcode_direct" != unsupported; 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 "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; 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 can not 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 "$module" = yes; 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 "$build_old_libs" = no; 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 "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + 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 "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # 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 "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_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 "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # 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 + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; 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 + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # 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="$2" + number_minor="$3" + number_revision="$4" + # + # 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 + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + 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]) ;; + *) + $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + 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]) ;; + *) + $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + 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]) ;; + *) + $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + 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 + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + 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 "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + 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 "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; 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) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e '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 + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; 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 "*) ;; + *) dlfiles="$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 "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$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. + $rm conftest.c + cat > conftest.c </dev/null` + 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + # It is ok to link against an archive when + # building a shared library. + if $AR -t $potlib > /dev/null 2>&1; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$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 + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name=`expr $a_deplib : '-l\(.*\)'` + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$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 + newdeplibs="$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 + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; 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 + fi + ;; + 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 is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; 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 "$build_old_libs" = no; 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 "$allow_undefined" = no; 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 "$build_old_libs" = no; 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 + + # 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 "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$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" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$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 "$mode" != relink && 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 + realname="$2" + shift; 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" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "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"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && 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 "X$skipped_export" != "X:" && + len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # 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 + output_la=`$echo "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$output_la-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + len=1 + 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~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadable object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" + done + + $echo "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" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + 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\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && 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 + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(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 "$mode" = relink; then + $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 + $show "${rm}r $gentop" + $run ${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 + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run 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 "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $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= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${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" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$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 "*) ;; + *) finalize_rpath="$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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + 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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$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 "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([ ][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # 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/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +" + + case $host in + *cygwin* | *mingw* ) + $echo >> "$output_objdir/$dlsyms" "\ +/* DATA imports from DLLs on WIN32 can't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs */ +struct { +" + ;; + * ) + $echo >> "$output_objdir/$dlsyms" "\ +const struct { +" + ;; + esac + + + $echo >> "$output_objdir/$dlsyms" "\ + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + 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*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + 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 + rpath="$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 + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; 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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "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}\" || 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 + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${outputname}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +#define HAVE_DOS_BASED_FILE_SYSTEM +#ifndef DIR_SEPARATOR_2 +#define DIR_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 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +char * basename (const char *name); +char * fnqualify(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + return 127; +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +char * +basename (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; +} + +char * +fnqualify(const char *path) +{ + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); +#endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; +} + +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 (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# 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. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# 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 variable: + 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 + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + 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 >> $output "\ + + # 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 $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + + # Make sure env LD_LIBRARY_PATH does not mess us up + if test -n \"\${LD_LIBRARY_PATH+set}\"; then + export LD_LIBRARY_PATH=\$progdir:\$LD_LIBRARY_PATH + fi +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + 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 $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + # 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 + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "copying selected object files to avoid basename conflicts..." + + if test -z "$gentop"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + fi + + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + counter=`expr $counter + 1` + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + $run ln "$obj" "$gentop/$newobj" || + $run cp "$obj" "$gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_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 + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$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= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "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}\" || 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 + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; 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) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "X$EGREP" = X ; then + EGREP=egrep + fi + # We do not want portage's install root ($D) present. Check only for + # this if the .la is being installed. + if test "$installed" = yes && test "$D"; then + eval mynewdependency_lib=`echo "$libdir/$name" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` + else + mynewdependency_lib="$libdir/$name" + fi + # Do not add duplicates + if test "$mynewdependency_lib"; then + my_little_ninja_foo_1=`echo $newdependency_libs |$EGREP -e "$mynewdependency_lib"` + if test -z "$my_little_ninja_foo_1"; then + newdependency_libs="$newdependency_libs $mynewdependency_lib" + fi + fi + ;; + *) + if test "$installed" = yes; then + # Rather use S=WORKDIR if our version of portage supports it. + # This is because some ebuild (gcc) do not use $S as buildroot. + if test "$PWORKDIR"; then + S="$PWORKDIR" + fi + # We do not want portage's build root ($S) present. + my_little_ninja_foo_2=`echo $deplib |$EGREP -e "$S"` + # We do not want portage's install root ($D) present. + my_little_ninja_foo_3=`echo $deplib |$EGREP -e "$D"` + if test -n "$my_little_ninja_foo_2" && test "$S"; then + mynewdependency_lib="" + elif test -n "$my_little_ninja_foo_3" && test "$D"; then + eval mynewdependency_lib=`echo "$deplib" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` + else + mynewdependency_lib="$deplib" + fi + else + mynewdependency_lib="$deplib" + fi + # Do not add duplicates + if test "$mynewdependency_lib"; then + my_little_ninja_foo_4=`echo $newdependency_libs |$EGREP -e "$mynewdependency_lib"` + if test -z "$my_little_ninja_foo_4"; then + newdependency_libs="$newdependency_libs $mynewdependency_lib" + fi + fi + ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + # Do not add duplicates + if test "$installed" = yes && test "$D"; then + install_libdir=`echo "$install_libdir" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` + fi + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# 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' + +# Libraries that this one depends upon. +dependency_libs='$dependency_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 "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) prev=$arg ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + 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. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$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 "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. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + 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 + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run 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 + if test "$linkname" != "$realname"; then + $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$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 + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run 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 + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + 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 + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo 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. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo 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. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + save_umask=`umask` + umask 0077 + if $mkdir "$tmpdir"; then + umask $save_umask + else + umask $save_umask + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "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) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $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" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + 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 + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # 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 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + 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) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + 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 test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --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 + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +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. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [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: $modename [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 + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [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 + -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 + -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 + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +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: $modename [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." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $? + +# The TAGs below are defined such that we never get into a situation +# in which 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: diff --git a/Cpp/TP4_ComptesBancaires/missing b/Cpp/TP4_ComptesBancaires/missing new file mode 100755 index 0000000..6a37006 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +# Originally 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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 + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/Cpp/TP4_ComptesBancaires/mkinstalldirs b/Cpp/TP4_ComptesBancaires/mkinstalldirs new file mode 100755 index 0000000..d2d5f21 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/Cpp/TP4_ComptesBancaires/src/Banque.cpp b/Cpp/TP4_ComptesBancaires/src/Banque.cpp new file mode 100755 index 0000000..07fee48 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Banque.cpp @@ -0,0 +1,124 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implantation de la classe Banque. + */ + +#include + +/* + * @Fait tout + * + * @Afaire - + */ + + + +#include "Banque.h" + +#include +#include +#include "CompteCheque.h" +#include "Livret.h" +#include "PlanEpargneLogement.h" + +Banque::Banque() { + this->_nbCompte = TAILLE_BANQUE; + + for (int i = 0; i < _nbCompte; i++) { + std::ostringstream oss; + oss << i; + this->_comptes[i] = this->creerNouveauCompte(oss.str()); + } +} + + +Banque::~Banque() { + int nbCompte = this->nbCompte(); + + for (int i = 0; i < nbCompte; i++) { + delete _comptes[i]; + _comptes[i] = 0; + } +} + +int Banque::nbCompte() const { + return this->_nbCompte; +} + + +Compte * Banque::creerNouveauCompte(std::string nom) const { + int type = random(4); + double solde = random(500) * 10.0; + Compte * cpt = 0; + + switch(type) { + case 0: + cpt = new Compte(nom, solde); + break; + case 1: + cpt = new CompteCheque(nom, -500, solde); + break; + case 2: + cpt = new Livret(nom, 0.1, solde); + break; + default: + cpt = new PlanEpargneLogement(nom, 0.1, solde); + break; + } + + return cpt; + +} + +int random(int randMax) { + return (int) (((double)randMax) * (rand() / (RAND_MAX + 1.0))); +} + +Compte * const * Banque::comptes() const { + return this->_comptes; +} + +double Banque::calculeSommeSolde() const { + double somme = 0; + Compte * const * comptes = this->comptes(); + for (int i = this->nbCompte() - 1; i >= 0; i--) { + somme += comptes[i]->solde(); + } + + return somme; +} + +bool Banque::effectueVirements( int nbVirement ) const { + Compte * const * comptes = this->comptes(); + int nbCompte = this->nbCompte(); + double soldeInitial = this->calculeSommeSolde(); + + for (int i = nbVirement -1; i >= 0; i--) { + Compte * src = comptes[random(nbCompte)]; + Compte * dest = 0; + double montant = random(500) * 10; + + do { + dest = comptes[random(nbCompte)]; + } while (src == dest); + + src->virement(dest, montant); + } + + return soldeInitial == this->calculeSommeSolde(); +} + + diff --git a/Cpp/TP4_ComptesBancaires/src/Banque.h b/Cpp/TP4_ComptesBancaires/src/Banque.h new file mode 100755 index 0000000..ecce681 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Banque.h @@ -0,0 +1,109 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +#include + +#ifndef BANQUE_H +#define BANQUE_H + +#include "Compte.h" + +/* Nombre de comptes dans une banque */ +#define TAILLE_BANQUE 10 + +/** + * Définition de la classe Banque. Une banque est un regroupement de comptes. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class Banque { + +public: + + /** + * Constructeur de Banque + */ + Banque(); + + /** + * Destructeur de Banque + */ + ~Banque(); + + /** + * Calcule la somme des soldes des comptes + * + * @return la somme des solde des comptes + */ + double calculeSommeSolde() const; + + /** + * Effectue le nombre voulue d'opération de virement, + * les comptes sources, destination et le montant étant + * choisis aléatoirement + * + * @param nbVirement le nombre de virement à effectuer (>=0) + * @return true si le solde total reste constant, false sinon + */ + bool effectueVirements(int nbVirement) const; + + private: + + /** + * Retourne le nombre de compte gérés + * + * @return le nb de comptes + */ + int nbCompte() const; + + /** + * Cree un nouveau compte. Le type précis de l'objet retourné + * est choisi aléatoirement dans {Compte, CompteCheque, Livret, + * PlanEpargneLogement} + * + * @param nom le nom du compte à créer + * @return un nouveau compte + */ + Compte * creerNouveauCompte(std::string nom) const; + + /** + * Retoune le tableau de comptes + * + * @return _comptes + */ + Compte * const * comptes() const; + + /** + * Le tableau de comptes gérés par cette banque + */ + Compte * _comptes[TAILLE_BANQUE]; + + /** + * Le nombre de comptes gérés par la banque + */ + int _nbCompte; + +}; + +/** + * Tire un nombre aléatoire compris dans [ 0, randMax [ + * + * @param randMax la limite supérieure (exclue) + * @return un nombre aléatoire; + */ +int random(int randMax); + + +#endif /* BANQUE_H */ diff --git a/Cpp/TP4_ComptesBancaires/src/Compte.cpp b/Cpp/TP4_ComptesBancaires/src/Compte.cpp new file mode 100755 index 0000000..f61605c --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Compte.cpp @@ -0,0 +1,174 @@ +/** + * #(@)Compte.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implémentation de la classe Compte. + */ + +#include "Compte.h" +#include + +using namespace std; + +/* Variable de classe, voir Compte.h */ +long Compte::_prochainNumeroDeCompte = 1; + + +/* + * + * Définition des constructeurs/destructeur + * + */ + +Compte::Compte(string nom, double solde) { + this->setNomProprietaire(nom); + this->setSolde(solde); + this->setNumeroDeCompte(Compte::prochainNumeroDeCompte()); + cout << *this << ": Compte::Compte(\"" << nom << "\")" << endl; +} + + +Compte::~Compte() { + cout << *this << ": Compte::~Compte()" << endl; +} + + +/* + * + * Définition des accesseurs + * + */ + + +string Compte::nomProprietaire() const { + return _nomProprietaire; +} + + +void Compte::setNomProprietaire(string theValue) { + _nomProprietaire = theValue; +} + + +long Compte::numeroDeCompte() const { + return _numeroDeCompte; +} + + +void Compte::setNumeroDeCompte(long theValue) { + _numeroDeCompte = theValue; +} + + +double Compte::solde() const { + return _solde; +} + + +void Compte::setSolde(double theValue) { + _solde = theValue; +} + +long Compte::prochainNumeroDeCompte() { + return Compte::_prochainNumeroDeCompte++; +} + + +/* + * + * Méthodes utilitaires. + * + */ + +string Compte::toString() const { + ostringstream oss; + + oss << "Compte(numeroCompte = "; + oss << this->numeroDeCompte(); + oss << ", nomProprietaire = "; + oss << this->nomProprietaire(); + oss << ", solde = "; + oss << this->solde(); + oss << ")"; + return oss.str(); +} + + + +/* + * + * Fonctions + * + */ +std::ostream & operator<<(std::ostream & st, const Compte & cpt) { + st << cpt.toString(); + return st; +} + + + +/* + * + * Opérations bancaires. + * + */ + + +bool Compte::depose(double montant) { + bool result = false; + + if (montant < 0) { + std::cerr << *this << ": Compte::depose(" << montant << "): ne peut deposer un montant négatif." << std::endl; + } else { + cout << *this << ": Compte::depose(" << montant << ")" << endl; + this->setSolde(this->solde() + montant); + result = true; + + } + + return result; +} + + +bool Compte::retrait(double montant) { + bool result = false; + + if (montant < 0) { + std::cerr << *this << ": Compte::retrait(" << montant << "): ne peut retirer un montant négatif." << std::endl; + } else { + std::cout << *this << ": Compte::retrait(" << montant << ")" << std::endl; + this->setSolde(this->solde() - montant); + result = true; + } + + return result; +} + +bool Compte::virement( Compte * compteDest, double montant ) { + bool result = false; + + if (this->retrait(montant)) { + if (compteDest->depose(montant)) { + std::cout << "Virement réussi: " << montant << " " << *this << " => " << *compteDest << std::endl; + result = true; + } else { + this->depose(montant); + std::cerr << "Erreur lors du virement: depot refusé " << montant << " " << *this << " => " << *compteDest << std::endl; + } + } else { + std::cerr << "Erreur lors du virement: retrait refusé " << montant << " " << *this << " => " << *compteDest << std::endl; + } + + return result; +} diff --git a/Cpp/TP4_ComptesBancaires/src/Compte.h b/Cpp/TP4_ComptesBancaires/src/Compte.h new file mode 100755 index 0000000..a7255aa --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Compte.h @@ -0,0 +1,162 @@ +/** + * #(@)Compte.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP Compte bancaire + */ + +#ifndef COMPTE_H +#define COMPTE_H + +#include +#include + +/** + * Représente un compte bancaire générique. + */ +class Compte { +public: + /* + * + * Constructeurs/destructeur + * + */ + + + /** + * Construit un compte. + */ + Compte(std::string nom, double solde = 0); + + /** + * Détruit un compte. + */ + virtual ~Compte(); + + /** + * Retourne le nom du propriétaire de ce compte. + */ + std::string nomProprietaire() const; + + + /** + * Retourne le numéro de ce compte. + */ + long numeroDeCompte() const; + + + /** + * Retourne le solde de ce compte. + */ + double solde() const; + + /** + * Retourne un numéro de compte unique. + */ + static long prochainNumeroDeCompte(); + + + /* + * + * Méthodes utilitaires. + * + */ + + + /** + * Retourne une représentation textuelle de ce compte. + */ + virtual std::string toString() const; + + + /* + * + * Opérations bancaires + * + */ + + /** + * Dépose un montant (nécessairement positif) sur ce compte + * + * @param montant le montant à déposer. + * @return true si l'opération s'est bien passée + */ + virtual bool depose(double montant); + + /** + * Retire un montant (nécessairement positif) sur ce compte. + * + * @param montant le montant à retirer. + * @return true si l'opération s'est bien passée + */ + virtual bool retrait(double montant); + + /** + * Effectue un virement. Le montant est transféré depuis + * l'objet compte courant vers l'objet compte fournis en + * paramètre. + * + * @param compteDest la destination du montant viré + * @param montant le montant viré + */ + bool virement(Compte * compteDest, double montant); + +private: + /** + * Definit le solde de ce compte. + */ + void setSolde(double theValue); + + + /** + * Definit le nom du propriétaire de ce compte. + */ + void setNomProprietaire(std::string theValue); + + + /** + * Définit le numéro de compte de ce compte. + */ + void setNumeroDeCompte(long theValue); + + + + + /** + * Le nom du propriétaire, ne peut pas être null. + */ + std::string _nomProprietaire; + + /** + * Le numéro du compte. + */ + long _numeroDeCompte; + + /** + * Le solde du compte, peut être négatif. + */ + double _solde; + + /** + * Le prochain numéro de compte. + */ + static long _prochainNumeroDeCompte; +}; + +/** + * Affiche un compte bancaire sur un flux de sortie + */ +std::ostream & operator<<(std::ostream & st, const Compte & cpt); + +#endif /* COMPTE_H */ diff --git a/Cpp/TP4_ComptesBancaires/src/CompteCheque.cpp b/Cpp/TP4_ComptesBancaires/src/CompteCheque.cpp new file mode 100755 index 0000000..95cb9cf --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/CompteCheque.cpp @@ -0,0 +1,83 @@ +/** + * #(@)CompteCheque.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +/* + * @Fait tout + * + * @Afaire - + */ + + + +#include "CompteCheque.h" +#include + +CompteCheque::CompteCheque(std::string nom, double decouvertAutorise, double solde) : Compte(nom, solde) { + if ( ! this->setDecouvertAutorise(decouvertAutorise)) { + this->setDecouvertAutorise(0); + } + std::cout << *this << ": CompteCheque::CompteCheque(\"" << nom << "\")" << std::endl; +} + +CompteCheque::~CompteCheque() { + std::cout << *this << ": CompteCheque::~CompteCheque()" << std::endl; +} + + +bool CompteCheque::retrait(double montant) { + bool result = false; + + if ((this->solde() - montant) >= - this->decouvertAutorise()) { + Compte::retrait(montant); + result = true; + } else { + std::cerr << *this << ": CompteCheque::retrait(" << montant << ") : erreur, le compte chèque n'est pas suffisamment approvisionné" << std::endl; + } + + return result; +} + + +double CompteCheque::decouvertAutorise() const { + return _decouvertAutorise; +} + + +bool CompteCheque::setDecouvertAutorise(double decouvert) { + bool result = false; + + if (decouvert >= 0) { + _decouvertAutorise = decouvert; + result = true; + } + + return result; +} + +std::string CompteCheque::toString( ) const { + std::ostringstream oss; + + oss << "CompteCheque(numeroCompte = "; + oss << this->numeroDeCompte(); + oss << ", nomProprietaire = "; + oss << this->nomProprietaire(); + oss << ", découvertAutorisé = "; + oss << this->decouvertAutorise(); + oss << ", solde = "; + oss << this->solde(); + oss << ")"; + + return oss.str(); +} diff --git a/Cpp/TP4_ComptesBancaires/src/CompteCheque.h b/Cpp/TP4_ComptesBancaires/src/CompteCheque.h new file mode 100755 index 0000000..a85316b --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/CompteCheque.h @@ -0,0 +1,90 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +#ifndef COMPTECHEQUE_H +#define COMPTECHEQUE_H + +#include + +#include + +/** + * Un compte chèque est un compte pour lequel il existe un montant maximum de + * découvertautorisé. Outre cette donnée, on pourra donc ajouter une méthode pemettant + * d'obtenir ou de modifier ce montant. L'opération de retrait devra tenir compte de + * cette nouvelle donnée. + * + * @author Nicolas MASSE + * @author Thomas LIMIN +*/ +class CompteCheque : public Compte { + +public: + /** + * Constructeur de compte cheque + * + * @param nom le nom du titulaire du comte + * @param decouvertAutorisé le montant de découvert autorisé (0 par défaut) + * @param solde le solde du compte (0 par défaut) + */ + CompteCheque(std::string nom, double decouvertAutorise = 0, double solde = 0); + + /** + * Destructeur + */ + ~CompteCheque(); + + /** + * Effectue un retrait si et seulement si le solde après retrait est supérieur + * ou égal au montant de découvert autorisé + * + * @param montant le montant du retrait + **/ + bool retrait(double montant); + + /** + * Renseigne le montant de découvert autorisé. Le montant doit être + * supérieur ou égal à 0, sans quoi le montant reste inchangé et false + * est retourné. + * + * @param decouvert le montant de découvert autorisé + * @return true si le montant est correctement modifié + */ + bool setDecouvertAutorise(double decouvert); + + /** + * Retourne le montant de découvert autorisé + * + * @return decouvert autorisé + */ + double decouvertAutorise() const; + + /** + * Retourne une représentation textuelle de ce compte. + */ + std::string toString() const; + + +private: + + /** + * Le montant de découvert autorisé. Par exemple, la valeur + * 200 indique que le solde minimum du compte est -200 (inclus) + */ + double _decouvertAutorise; + +}; + +#endif diff --git a/Cpp/TP4_ComptesBancaires/src/Livret.cpp b/Cpp/TP4_ComptesBancaires/src/Livret.cpp new file mode 100755 index 0000000..543ecd3 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Livret.cpp @@ -0,0 +1,109 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implémentation de la classe Livret. + */ + +#include + +#include "Livret.h" +#include + +Livret::Livret(std::string nom, double taux, double solde): Compte(nom, solde) { + if ( ! this->setTaux(taux)) { + this->setTaux(0); + } + this->setSoldeMini(this->solde()); + std::cout << *this << ": Livret::Livret(\"" << nom << "\", taux: " << taux << ", solde: " << solde << ")" << std::endl; +} + + +Livret::~ Livret() { + std::cout << *this << ": Livret::~Livret()" << std::endl; +} + +double Livret::taux() const { + return _taux; +} + + +bool Livret::setTaux(double taux) { + bool result = false; + + if (taux >= 0) { + _taux = taux; + result = true; + } + + return result; +} + + +double Livret::soldeMini() const { + return _soldeMini; +} + + +bool Livret::setSoldeMini(double solde) { + bool result = false; + + if (solde >= 0) { + _soldeMini = solde; + result = true; + } else { + std::cerr << *this << ": Retrait::setSoldeMini(" << solde << ") : erreur, le solde mini ne devrait pas être négatif" << std::endl; + } + + return result; +} + +bool Livret::retrait( double montant ) { + bool result = false; + + if ((this->solde() - montant) >= 0) { + result = Compte::retrait(montant); + if (result && (this->solde() < this->soldeMini())) { + this->setSoldeMini(this->solde()); + } + } else { + std::cerr << *this << ": Livret::retrait(" << montant << ") : erreur, le livret n'est pas suffisamment approvisionné" << std::endl; + } + + return result; +} + +std::string Livret::toString( ) const { + std::ostringstream oss; + + oss << "Livret(numeroCompte = "; + oss << this->numeroDeCompte(); + oss << ", nomProprietaire = "; + oss << this->nomProprietaire(); + oss << ", solde = "; + oss << this->solde(); + oss << ", taux = "; + oss << this->taux(); + oss << ")"; + + return oss.str(); +} + +double Livret::priseDInterets() { + double interet = this->soldeMini() * this->taux(); + std::cout << *this << " : Livret::priseDInterets() => " << interet << std::endl; + this->depose(interet); + this->setSoldeMini(this->solde()); + return interet; +} diff --git a/Cpp/TP4_ComptesBancaires/src/Livret.h b/Cpp/TP4_ComptesBancaires/src/Livret.h new file mode 100755 index 0000000..63abb80 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Livret.h @@ -0,0 +1,128 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +#include + +/* + * @Fait tout + * + * @Afaire - + */ + + + +#ifndef LIVRET_H +#define LIVRET_H + +#include "Compte.h" + +/** + * Un livret est un compte dont le solde ne peut être négatif. Il est rémunéré + * sur la base d'un taux d'intérêts spécifié à l'ouverture que l'on suppose fixe + * + * @author Thomas LIMIN + * @author Nicolas MASSE + */ +class Livret : public Compte { +public: + + /** + * Constructeur de livret. + * + * @param nom le nom du titulaire du compte + * @param taux le taux d'intêret + * @param solde le solde initial du compte + */ + Livret(std::string nom, double taux = 0, double solde = 0); + + /** + * Destructeur + */ + ~Livret(); + + /** + * Retrait. Sur un livret, il est impossible d'avoir un solde négatif. + * La méthode de retrait prend en compte cette restriction et interdit + * les retrait qui mettraient dans cette situation. + * + * @param montant le montant du retrait + * @return true si le retrait a bien été effectué + */ + bool retrait(double montant); + + /** + * Calcule les interêts perçus sur ce compte. + * Cette valeur correspond à la somme mini présente + * sur le compte depuis la dernière prise d'interêts + * par le taux d'interêt. Le montant perçu est immédiatement + * ajouté au compte. + * + * @return le montant des interêts perçus + */ + double priseDInterets(); + + + /** + * Met à jour le taux d'interêt. Doit être >= 0 + * + * @param taux le nouveaux taux d'interêt + * @return true si modification réussie + */ + bool setTaux(double taux); + + /** + * Retourne le taux d'interêt associé à ce livret + * + * @return le taux d'interêt + */ + virtual double taux() const; + + /** + * Retourne le taux d'interêt associé à ce livret + * + * @return le solde minimum + */ + double soldeMini() const; + + /** + * Retourne une représentation textuelle de ce Livret. + */ + std::string toString() const; + + +private: + + /** + * Met à jour le sole minimum. Doit être >= 0 + * + * @param solde le nouveaux solde minimum + * @return true si modification réussie + */ + bool setSoldeMini(double solde); + + + + /** + * Le taux d'interêt appliqué à ce livret + */ + double _taux; + + /** + * Le solde mnimum de ce compte depuis la dernière prise d'interêts + */ + double _soldeMini; + +}; + +#endif diff --git a/Cpp/TP4_ComptesBancaires/src/Makefile.am b/Cpp/TP4_ComptesBancaires/src/Makefile.am new file mode 100755 index 0000000..fcb67c7 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Makefile.am @@ -0,0 +1,11 @@ +bin_PROGRAMS = tp4_comptesbancaires +tp4_comptesbancaires_SOURCES = tp4_comptesbancaires.cpp Compte.cpp \ + CompteCheque.cpp Livret.cpp PlanEpargneLogement.cpp Moneo.cpp Banque.cpp + +# set the include path found by configure +INCLUDES= $(all_includes) + +# the library search path. +tp4_comptesbancaires_LDFLAGS = $(all_libraries) +noinst_HEADERS = Compte.h CompteCheque.h Livret.h PlanEpargneLogement.h \ + Banque.h diff --git a/Cpp/TP4_ComptesBancaires/src/Makefile.in b/Cpp/TP4_ComptesBancaires/src/Makefile.in new file mode 100755 index 0000000..b1274c0 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Makefile.in @@ -0,0 +1,464 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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@ + + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +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 = tp4_comptesbancaires$(EXEEXT) +subdir = src +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_tp4_comptesbancaires_OBJECTS = tp4_comptesbancaires.$(OBJEXT) \ + Compte.$(OBJEXT) CompteCheque.$(OBJEXT) Livret.$(OBJEXT) \ + PlanEpargneLogement.$(OBJEXT) Moneo.$(OBJEXT) Banque.$(OBJEXT) +tp4_comptesbancaires_OBJECTS = $(am_tp4_comptesbancaires_OBJECTS) +tp4_comptesbancaires_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(tp4_comptesbancaires_SOURCES) +DIST_SOURCES = $(tp4_comptesbancaires_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +tp4_comptesbancaires_SOURCES = tp4_comptesbancaires.cpp Compte.cpp \ + CompteCheque.cpp Livret.cpp PlanEpargneLogement.cpp Moneo.cpp Banque.cpp + + +# set the include path found by configure +INCLUDES = $(all_includes) + +# the library search path. +tp4_comptesbancaires_LDFLAGS = $(all_libraries) +noinst_HEADERS = Compte.h CompteCheque.h Livret.h PlanEpargneLogement.h \ + Banque.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .cpp .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 \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: 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__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + 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 +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +tp4_comptesbancaires$(EXEEXT): $(tp4_comptesbancaires_OBJECTS) $(tp4_comptesbancaires_DEPENDENCIES) + @rm -f tp4_comptesbancaires$(EXEEXT) + $(CXXLINK) $(tp4_comptesbancaires_LDFLAGS) $(tp4_comptesbancaires_OBJECTS) $(tp4_comptesbancaires_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Banque.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Compte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CompteCheque.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Livret.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Moneo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PlanEpargneLogement.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp4_comptesbancaires.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; 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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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 -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -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-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags 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-exec \ + install-exec-am install-info install-info-am install-man \ + 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 uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-info-am + +# 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: diff --git a/Cpp/TP4_ComptesBancaires/src/Moneo.cpp b/Cpp/TP4_ComptesBancaires/src/Moneo.cpp new file mode 100755 index 0000000..c36f4e6 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Moneo.cpp @@ -0,0 +1,154 @@ +/** + * #(@)Moneo.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implémentation de la classe Moneo. + */ + +#include "Moneo.h" +#include + +using namespace std; + + +/* + * + * Définition des constructeurs/destructeur + * + */ + +Moneo::Moneo(CompteCheque & cpt, double soldeMax) { + this->setCompte(cpt); + this->setSoldeMax(soldeMax); + this->setSolde(0); + std::cout << *this << ": Moneo::Moneo(" << cpt << ", soldeMax: " << soldeMax << ")" << std::endl; +} + + +Moneo::~Moneo() { + double montant = this->solde(); + this->compte().depose(montant); + std::cout << *this << ": Moneo::~Moneo()" << std::endl; +} + + + +/* + * + * Opérations bancaires. + * + */ + + +bool Moneo::recharge() { + bool ret = false; + double montant = this->soldeMax() - this->solde(); + + if (this->compte().retrait(montant)) { + cout << *this << ": Moneo::recharge() => " << montant << std::endl; + this->setSolde(this->soldeMax()); + ret = true; + } else { + cout << *this << ": Moneo::recharge() opération impossible, solde compte trop faible" << std::endl; + } + + return ret; +} + + +bool Moneo::retrait(double montant) { + bool ret = false; + + if (montant < 0) { + cerr << *this << ": Moneo::retrait(" << montant << "): ne peut retirer un montant négatif." << endl; + } else if (montant > this->solde()) { + cerr << *this << ": Moneo::retrait(" << montant << "): solde trop faible." << endl; + } else { + cout << *this << ": Moneo::retrait(" << montant << ")" << endl; + this->setSolde(this->solde() - montant); + ret = true; + } + + return ret; +} + + +/* + * + * Définition des accesseurs + * + */ + + +CompteCheque & Moneo::compte() const { + return *_compte; +} + + +void Moneo::setCompte(CompteCheque & cpt) { + _compte = &cpt; +} + + +double Moneo::solde() const { + return _solde; +} + + +void Moneo::setSolde(double theValue) { + _solde = theValue; +} + +double Moneo::soldeMax() const { + return _soldeMax; +} + + +void Moneo::setSoldeMax(double theValue) { + _soldeMax = theValue; +} + + + +/* + * + * Méthodes utilitaires. + * + */ + +string Moneo::toString() const { + ostringstream oss; + + oss << "Moneo(soldeMax = "; + oss << this->soldeMax(); + oss << ", solde = "; + oss << this->solde(); + oss << ", compte = "; + oss << this->compte(); + oss << ")"; + + return oss.str(); +} + + + +/* + * + * Fonctions + * + */ +std::ostream & operator<<(std::ostream & st, const Moneo & cpt) { + st << cpt.toString(); + return st; +} diff --git a/Cpp/TP4_ComptesBancaires/src/Moneo.h b/Cpp/TP4_ComptesBancaires/src/Moneo.h new file mode 100755 index 0000000..b2cb82d --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/Moneo.h @@ -0,0 +1,148 @@ +/** + * #(@)Moneo.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP Compte bancaire + */ + +#ifndef MONEO_H +#define MONEO_H + +#include +#include +#include "CompteCheque.h" + +/** + * Représente un porte monnaie monéo. + */ +class Moneo { + +public: + /* + * + * Constructeurs/destructeur + * + */ + + + /** + * Construit un porte monnaie Moneo + */ + Moneo(CompteCheque & cpt, double soldeMax); + + /** + * Détruit un porte monnaie Moneo: le montant contenu dans le + * porte monnaie est reversé sur le compte associé + */ + ~Moneo(); + + + /* + * + * Getteurs + * + */ + + + /** + * Retourne le compte chèque associé. + */ + CompteCheque & compte() const; + + /** + * Retourne le solde de ce porte monnaie. + */ + double solde() const; + + /** + * Retourne une représentation textuelle de ce compte. + */ + std::string toString() const; + + + /* + * + * Opérations bancaires + * + */ + + /** + * Recharge le porte monnaie d'un montant (nécessairement positif). + * + * @param montant le montant à déposer. + */ + bool recharge(double montant); + + /** + * Recharge le porte monnaie à son solde maximum. + * + */ + bool recharge(); + + /** + * Retire un montant (nécessairement positif) de ce porte monnaie. + * + * @param montant le montant à retirer. + */ + bool retrait(double montant); + +private: + + /** + * Definit le solde de ce compte. + */ + void setSolde(double theValue); + + /** + * Definit le solde maximum de ce compte. + */ + void setSoldeMax(double theValue); + + /** + * Retourne le solde maximum de ce porte monnaie. + */ + double soldeMax() const; + + + /** + * Definit le compte chèque associé. + */ + void setCompte(CompteCheque & theValue); + + + + + /** + * Le compte chèque associé, ne peut pas être null. + */ + CompteCheque * _compte; + + /** + * Le solde de ce compte, ne peut pas être négatif. + */ + double _solde; + + /** + * Le solde maximum de ce compte, ne peut pas être négatif. + */ + double _soldeMax; + +}; + +/** + * Affiche un porte monnaie Monéo sur un flux de sortie + */ +std::ostream & operator<<(std::ostream & st, const Moneo & cpt); + +#endif /* MONEO_H */ diff --git a/Cpp/TP4_ComptesBancaires/src/PlanEpargneLogement.cpp b/Cpp/TP4_ComptesBancaires/src/PlanEpargneLogement.cpp new file mode 100755 index 0000000..b56a988 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/PlanEpargneLogement.cpp @@ -0,0 +1,96 @@ +/** + * #(@)PlanEpargneLogement.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implémentation de la classe PlanEpargneLogement. + */ + +/* + * @Fait tout + * + * @Afaire - + */ + + + +#include "PlanEpargneLogement.h" +#include + +double PlanEpargneLogement::_coefficient = 1; + +PlanEpargneLogement::PlanEpargneLogement( std::string nom, double taux, double solde ) : Livret(nom, taux, solde) { + std::cout << *this << ": PlanEpargneLogement::PlanEpargneLogement(\"" << nom << "\", taux: " << taux << ", solde: " << solde << ")" << std::endl; +} + + +PlanEpargneLogement::~PlanEpargneLogement() { + std::cout << *this << ": PlanEpargneLogement::~PlanEpargneLogement()" << std::endl; +} + + +bool PlanEpargneLogement::retrait( double montant ) { + bool result = false; + + if (montant == this->solde()) { + result = Livret::retrait(montant); + } else { + std::cerr << *this << ": PlanEpargneLogement::retrait(" << montant << ") : erreur, le montant du retait doit être égal au solde" << std::endl; + } + + return result; +} + +std::string PlanEpargneLogement::toString( ) const { + std::ostringstream oss; + + oss << "Plan-Epargne-Logement(numeroCompte = "; + oss << this->numeroDeCompte(); + oss << ", nomProprietaire = "; + oss << this->nomProprietaire(); + oss << ", solde = "; + oss << this->solde(); + oss << ", taux: "; + oss << this->taux(); + oss << ")"; + return oss.str(); +} + +double PlanEpargneLogement::coefficient() { + return PlanEpargneLogement::_coefficient; +} + +bool PlanEpargneLogement::setCoefficient(double coef) { + bool result = false; + + if (coef >= 0) { + _coefficient = coef; + result = true; + } else { + std::cerr << "PlanEpargneLogement::setCoefficient(" << coef << ")" << std::endl; + } + + return result; +} + + +double PlanEpargneLogement::taux() const { + return Livret::taux() * PlanEpargneLogement::coefficient(); +} + + + + + + + diff --git a/Cpp/TP4_ComptesBancaires/src/PlanEpargneLogement.h b/Cpp/TP4_ComptesBancaires/src/PlanEpargneLogement.h new file mode 100755 index 0000000..d0b7c49 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/PlanEpargneLogement.h @@ -0,0 +1,102 @@ +/** + * #(@)PlanEpargneLogement.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Déclaration de la classe PlanEpargneLogement. + */ + + +#ifndef PLANEPARGNELOGEMENT_H +#define PLANEPARGNELOGEMENT_H + +#include + +#include "Livret.h" + +/** + * Represente un plan epargne logement. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class PlanEpargneLogement : public Livret { + + public: + + /** + * Constructeur de plan epargne logement. + * + * @param nom le nom du titulaire du compte + * @param taux le taux d'intêret + * @param solde le solde initial du compte + */ + PlanEpargneLogement(std::string nom, double taux = 0, double solde = 0); + + /** + * Destructeur + */ + ~PlanEpargneLogement(); + + /** + * Retrait. Sur un PEL, il est impossible d'avoir un solde négatif. + * De plus le seul montant de retrait autorisé est le solde du PEL + * La méthode de retrait prend en compte ces restrictions + * + * @param montant le montant du retrait + * @return true si le retrait a bien été effectué + */ + bool retrait(double montant); + + /** + * Retourne le taux d'interêt. Pour un PEL, il correspond + * au taux initial multiplié par le coefficient global + * + * @return le taux; + */ + double taux() const; + + /** + * Retourne une représentation textuelle de ce compte. + */ + std::string toString() const; + + /** + * Permet de modifier le coefficient général + * le coefficient doit être >= 0 + * + * @param coef le nouveau coefficient + * @return true si ok + */ + static bool setCoefficient(double coef); + + + + private: + + /** + * Pour récupérer le coefficient + * + * @return le coefficient actuel + */ + static double coefficient(); + + /** + * le coefficient qui est appliqué au taux de toutes les instance de PlanEpargneLogement + * il est initialisé à 1 lors du chargement de la classe. + */ + static double _coefficient; + +}; + +#endif diff --git a/Cpp/TP4_ComptesBancaires/src/comptes.cpp b/Cpp/TP4_ComptesBancaires/src/comptes.cpp new file mode 100755 index 0000000..fb53e5a --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/comptes.cpp @@ -0,0 +1,49 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + + + +#include "comptes.h" + +Comptes::Comptes() +{ +} + + +Comptes::~Comptes() +{ +} + + diff --git a/Cpp/TP4_ComptesBancaires/src/comptes.h b/Cpp/TP4_ComptesBancaires/src/comptes.h new file mode 100755 index 0000000..fa34284 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/comptes.h @@ -0,0 +1,52 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + + + +#ifndef COMPTES_H +#define COMPTES_H + +/** +@author Nicolas MASSE +*/ +class Comptes{ +public: + Comptes(); + + ~Comptes(); + +}; + +#endif diff --git a/Cpp/TP4_ComptesBancaires/src/tp4_comptesbancaires.cpp b/Cpp/TP4_ComptesBancaires/src/tp4_comptesbancaires.cpp new file mode 100755 index 0000000..0ae25e6 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/src/tp4_comptesbancaires.cpp @@ -0,0 +1,55 @@ +/** + * #(@)tp4_comptesbancaires.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Programme de test du TP4 + */ + +#include + +/* + * @Fait tout + * + * @Afaire - + */ + + + + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include "Banque.h" +#include "PlanEpargneLogement.h" + +using namespace std; + +int main(int argc, char *argv[]) { + + PlanEpargneLogement::setCoefficient(0.5); + srand(time(0)); + + Banque b; + + std::cout << std::endl << std::endl << "Somme des soldes: " << b.calculeSommeSolde() << std::endl << std::endl; + std::cout << std::endl << std::endl << "Constance des soldes: " << b.effectueVirements(50) << std::endl << std::endl; + + return EXIT_SUCCESS; +} diff --git a/Cpp/TP4_ComptesBancaires/templates/cpp b/Cpp/TP4_ComptesBancaires/templates/cpp new file mode 100755 index 0000000..0a6b0d3 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/templates/cpp @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + + + diff --git a/Cpp/TP4_ComptesBancaires/templates/h b/Cpp/TP4_ComptesBancaires/templates/h new file mode 100755 index 0000000..954a12a --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/templates/h @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + + + diff --git a/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevelop b/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevelop new file mode 100755 index 0000000..ecc8e68 --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevelop @@ -0,0 +1,195 @@ + + + + Nicolas MASSE + nicolas27.masse@laposte.net + 0.1 + KDevAutoProject + C++ + + C++ + Code + + + kdevbookmarks + + . + false + + + + + + src/tp4_comptesbancaires + debug + true + + + src/tp4_comptesbancaires + true + executable + + + + optimized + kdevgccoptions + kdevgppoptions + kdevg77options + -O2 -g0 + + + --enable-debug=full + debug + kdevgccoptions + kdevgppoptions + kdevg77options + -O0 -g3 -Wall + + + + + + + + + + + + + + + + + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + w3c-dom-level2-html + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + qt-kdev3 + ruby + ruby_bugs + sdl + w3c-svg + sw + w3c-uaag10 + wxwidgets_bugs + + + Guide to the Qt Translation Tools + Qt Assistant Manual + Qt Designer Manual + Qt Reference Documentation + qmake User Guide + + + KDE Libraries (Doxygen) + + + + + + + + + + + + + false + false + + + *.o,*.lo,CVS + false + + + + + Doxygen Documentation Collection + tp4_comptesbancaires.tag + + + + TP4_ComptesBancaires + tp4_comptesbancaires + TP4_ComptesBancaires + TP4_COMPTESBANCAIRES + Nicolas MASSE + nicolas27.masse@laposte.net + GPL + COPYING + 0.1 + 2005 + /home/nicolas/repository/ENSI_2ndY/Cpp/tp4_comptesbancaires + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + + set + m_,_ + theValue + false + true + + + + + .h + .cpp + + + + + + + libtool + + + + true + false + false + + + false + true + 10 + + + diff --git a/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevelop.pcs b/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevelop.pcs new file mode 100755 index 0000000..d0b002b Binary files /dev/null and b/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevelop.pcs differ diff --git a/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevses b/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevses new file mode 100755 index 0000000..6bc1b5a --- /dev/null +++ b/Cpp/TP4_ComptesBancaires/tp4_comptesbancaires.kdevses @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Cpp/TP5_ModelesDeClasses/Ensemble.hh b/Cpp/TP5_ModelesDeClasses/Ensemble.hh new file mode 100755 index 0000000..58af4e9 --- /dev/null +++ b/Cpp/TP5_ModelesDeClasses/Ensemble.hh @@ -0,0 +1,619 @@ +/** + * @file Ensemble.hh + * @author Nicolas MASSE & Thomas LIMIN + * @date Thu Nov 18 + * + * @brief Declaration de la classe parametree Ensemble. + * + */ +#ifndef ENSEMBLE_H +#define ENSEMBLE_H + +#include +#include + +/* using namespace std; + * + * NOTE : + * Ce fichier d'en-tete ne comporte pas de directive using, bien que la version + * fournie en comporte. En effet, l'usage de cette directive dans un fichier + * d'en-tete (dont la finalite est d'etre inclus dans un fichier source) peut creer + * des conflits d'espace de noms dans les fichiers l'incluant. On preferera + * l'utilisation des prefixe d'espace de noms + */ + + + + +/** + * Extension (iterateur, foncteur) + * Classe foncteur. Ses instances peuvent etre appelees + * comme des fonctions race à la surcharge de l'opérateur () + * l'implémentation courante retourne le double de l'element + * passé a cette fonction + */ + +template + +class Foncteur { + +public: + + /** + * Constructeur. Permet de definir le coefficient de multiplication + * propre au foncteur + * + * @param coef le coefficient + */ + Foncteur(double coef) : _coef(coef) {} + + /** + * Une methode foncteur, retourne le double de l'elemet + * passe en parametre. Ceci ne fonctionne que pour les + * types de données qpossédant un opérateur * + * + * @param e l'element a traiter + * @return l'element retourne + */ + T operator() (const T & e) { + return e * _coef; + } + +private: + + double _coef; +}; + + + +/** + * Classe permettant de representer un ensemble d'elements + * en utilisant uniquement la notion d'egalite entre elements + * Aucune relation d'ordre n'est utilisee (par exemple + * pour avoir un representation ordonnee en memoire qui accelererait + * les recherches).
+ * Seul l'operateur == est utilise pour tester l'egalite de deux + * elements. + */ + +template + +class Ensemble { + +private: + + /** + * Concept de noeud d'une liste chainée. Cette clase est définnie a l'interieur + * de la classe ensemble, ce qui permet d'en limiter la portée a la classe + * Ensemble + */ + + class Noeud { + + private: + T _valeur; + Noeud * _suivant; + + public: + Noeud(const T & valeur, Noeud * suivant = 0) : _valeur(valeur), _suivant(suivant) { } + + Noeud(const Noeud & n) { + _valeur = n.getValeur(); + + if (n.aUnSuivant()) { + _suivant = new Noeud(*n.getSuivant()); + } else { + _suivant = 0; + } + } + + ~Noeud() { + delete _suivant; + } + + const T & getValeur() const { + return _valeur; + } + + Noeud * getSuivant() const { + return _suivant; + } + + void setSuivant(Noeud * suivant) { + _suivant = suivant; + } + + bool aUnSuivant() const { + return _suivant != 0; + } + + /** + * Methode recursive de suppression d'un element dans + * une liste chainee. + * + * @param liste une liste. + * @param x un element. + * + * @return le liste sans l'element. + */ + Noeud * retire(const T & x) { + + Noeud * ret = this; + + if (this->getValeur() == x) { + // On l'a trouve ! + ret = this->getSuivant(); + this->setSuivant(0); + delete this; + } else if (this->aUnSuivant()) { + // Il y a un suivant. + this->setSuivant(this->getSuivant()->retire(x)); + } + + return ret; + } + }; + + + /** + * Concept d'iterateur d'une liste. + */ + + class Iterateur { + + public: + /** + * Constructeur d'iterateur. L'iterateur retourne permet + * d'acceder au premier element de la l'ensemble. + * + * @param e l'enemble sur lequel l'iterateur s'applique + */ + Iterateur(const Ensemble & e) : _ensemble(e) { + _noeudSuivant = e._liste; + } + + /** + * Test la fin de l'ensemble itere + * + * @return true si il reste des element, false sinon + */ + bool hasNext() const { + return _noeudSuivant != 0; + } + + /** + * @return l'element courant et passe au suivant + */ + const T & next() { + const T & v = _noeudSuivant->getValeur(); + + _noeudSuivant = _noeudSuivant->getSuivant(); + + return v; + } + + private: + /** + * l'enemble itere + */ + const Ensemble & _ensemble; + + /** + * la position courante dans l'ensemble + */ + Noeud * _noeudSuivant; + }; + + Noeud * _liste; + + +public: + + /** + * Construit un ensemble vide. + */ + Ensemble() : _liste(0) { } + + /** + * Construit un singleton. + */ + Ensemble(T x) { + _liste = new Noeud(x); + } + + /** + * Destructeur. + */ + ~Ensemble() { + // delete 0 fonctionne ! + delete _liste; + _liste = 0; + } + + /** + * Test si l'ensemble est vide. + * + * @return true si l'ensemble est vide, sinon false. + */ + bool estVide() const { + return _liste == 0; + } + + /** + * Envoie tous les elements dans un flot de sortie. + * + * @param out un flot de sortie. + * + * @return le flot de sortie donne en parametre. + */ + std::ostream & flush(std::ostream & out) const { + Noeud * courant = _liste; + + out << "[ "; + + while (courant != 0) { + out << courant->getValeur() << " "; + courant = courant->getSuivant(); + } + + out << "]" << std::endl; + + return out; + } + + /** + * Test l'appartenance d'un element a l'ensemble. + * + * @param x un double. + * + * @return true sie est dans l'ensemble, false sinon. + */ + bool contient(const T & x) const { + Noeud * courant = _liste; + bool result = false; + + while (courant != 0) { + if (courant->getValeur() == x) { + result = true; + break; + } + + courant = courant->getSuivant(); + } + + return result; + } + + /** + * Test l'inclusion dans un autre ensemble. + * + * @param e un ensemble + * + * @return true si "je" suis inclus dans e, false sinon. + */ + bool estInclusDans(const Ensemble & autre) const { + Noeud * courant = _liste; + bool result = true; + + while (courant != 0) { + if (!autre.contient(courant->getValeur())) { + result = false; + break; + } + + courant = courant->getSuivant(); + } + + return result; + } + + /** + * Ajoute un "objet" a l'ensemble. + * + * @param x un element a ajouter a l'ensemble. + */ + void ajoute(const T & x) { + if (!this->contient(x)) { + _liste = new Noeud(x, _liste); + } + } + + /** + * Retire un element de l'esemble. + * + * @param e un element a retirer. + */ + void retire(const T & e) { + _liste = _liste->retire(e); + } + + + /** + * Ajoute tous les elements dans un autre ensemble. + * + * @param e un ensemble + */ + void ajouteDans(Ensemble & e) const { + Noeud * courant = _liste; + + while (courant != 0) { + e.ajoute(courant->getValeur()); + + courant = courant->getSuivant(); + } + } + + /** + * Retire tous les elements dans un autre ensemble. + * Apres a.enleveDe(b), b vaut b - a (- ensembliste) + * + * @param e un ensemble dont il faut retirer des elements. + */ + void retireDe(Ensemble & e) const { + Noeud * courant = _liste; + + while (courant != 0) { + e.retire(courant->getValeur()); + courant = courant->getSuivant(); + } + } + + /** + * Constructeur par recopie. + * + * @param e un ensemble + */ + Ensemble(const Ensemble & e) { + if (!e.estVide()) { + this->_liste = new Noeud(*(e._liste)); + } else { + this->_liste = 0; + } + } + + /** + * Operateur d'affectation d'un ensemble. + * + * @param e un ensemble + * + * @return une reference a moi-meme + */ + Ensemble & operator=(const Ensemble & e) { + if (&e != this) { + delete this->_liste; + + // nous nous voyons ici dans l'obligation de recopier + // le contenu du constructeur de recopie, ne pouvant + // l'appeler directement. + this->_liste = new Noeud(*(e._liste)); + } + + } + + + /** + * Creation d'un singleton. + * + * @param x un element + * + * @return le singleton {x} + */ + static Ensemble singleton(T x) { + return Ensemble(x); + } + + /** + * Creation d'un ensemble vide. + * + * @param x un double + * + * @return le singleton {x} + */ + static Ensemble ensembleVide() { + return Ensemble(); + } + + /** + * Retourne un iterateur. + * + * @return un ipointeur sur un iterateur. + */ + Iterateur * getIterateur() const { + return new Iterateur(*this); + } + + + /** + * Application d'une fonction a tous les elements d'un ensemble + * + * @param fct le foncteur + * @return copie le nouvel ensemble contenant les resultat en valeur de retour + */ + Ensemble appliquerAuxElements(Foncteur & fct) const { + Ensemble dest; + Iterateur * it = this->getIterateur(); + + while (it->hasNext()) { + dest.ajoute(fct(it->next())); + } + + delete it; + + return dest; + } + +private: + + /* Noeud * retireRec(Noeud * liste, T x); + * + * NOTE : + * Cette fonction n'utilisant, ni variable d'instance, ni methode de cette + * classe, nous avon juge bon de deplacer cette fonction utilitaire dans la + * classe Noeud ou elle devient une methode d'instance a part entiere. + */ + + +}; + + +/** + * Operateur << pour les ensembles. + * + * @param out un flot de sortie. + * @param e un ensemble. + * + * @return le flot de sortie donne en argument. + */ +template +std::ostream & operator<<(std::ostream & out, const Ensemble & e) { + return e.flush(out); +} + + +/* + * Creation d'un singleton. + * + * Note : + * Cette fonction utilitaire nous semble plus a sa place + * en tant que méthode statique la classe Ensemble + * + * @param x un element + * + * @return le singleton {x} + */ +//template Ensemble singleton(T x); + +/** + * Creation d'un ensemble vide. + * + * Note : + * Cette fonction utilitaire nous semble plus a sa place + * en tant que méthode statique la classe Ensemble + * + * @param x un double + * + * @return le singleton {x} + */ +//template Ensemble ensembleVide(); + +/** + * Teste l'egalite de deux ensembles. Cette fonction (et les suivantes ) + * serait aussi bien implemente en tant que methode membre, mais elle + * restera ici dans un but simplement didactique (syntaxe de la surcharge + * d'operateur hors classe et non acces a la partie privee afin d'utiliser + * les methodes publiques precedemment cites). On a egalite quand E1 + * inclus dans E2 et E2 inclus dans E1 + * + * @param a un ensemble. + * @param b un ensemble. + * + * @return true si a=b (i.e., a est inclus dans b et b est inclus dans a), + * sinon false. + */ +template +bool egale(const Ensemble & a, const Ensemble & b) { + return a.estInclusDans(b) && b.estInclusDans(a); +} + +template +bool operator==(const Ensemble & a, const Ensemble & b) { + return egale(a, b); +} + + +/* ne voyons pas le sens de ces operateurs, dans le cas d'ensemble */ + +//template +//bool operator<(const Ensemble & a, const Ensemble & b) {} + +//template +//bool operator>(const Ensemble & a, const Ensemble & b) {} + + +/** + * Union de deux ensembles de doubles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return a new Ensemble c = a union b. + */ +template +Ensemble reunion(const Ensemble & a, const Ensemble & b) { + Ensemble c(a); + b.ajouteDans(c); + return c; +} + +template +Ensemble operator+(const Ensemble & a, const Ensemble & b) { + return reunion(a, b); +} + +template +Ensemble operator|(const Ensemble & a, const Ensemble & b) { + return reunion(a, b); +} + + +/** + * Difference de deux ensembles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return a new Ensemble a prive de b. + */ +template +Ensemble difference(const Ensemble & a, const Ensemble & b) { + Ensemble c(a); + b.retireDe(c); + return c; +} + +template +Ensemble operator-(const Ensemble & a, const Ensemble & b) { + return difference(a, b); +} + + +/** + * Difference symetrique entre deux ensembles. + * + * @param a un ensemble. + * @param b un ensemble. + * + * @return (a prive de b) union (b prive de a) + */ +template +Ensemble diffSymetrique(const Ensemble & a, const Ensemble & b) { + return (a - b) + (b - a); +} + +template +Ensemble operator^(const Ensemble & a, const Ensemble & b) { + return diffSymetrique(a, b); +} + + +/** + * Intersection entre deux ensembles de doubles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return l'intersection de a et b. + */ +template +Ensemble intersection(const Ensemble & a, const Ensemble & b) { + return (a + b) - (a ^ b); +} + +template +Ensemble operator&(const Ensemble & a, const Ensemble & b) { + return intersection(a, b); +} + + +#endif /* ENSEMBLE_H */ + diff --git a/Cpp/TP5_ModelesDeClasses/EnsembleDouble.h b/Cpp/TP5_ModelesDeClasses/EnsembleDouble.h new file mode 100755 index 0000000..3ffd1bc --- /dev/null +++ b/Cpp/TP5_ModelesDeClasses/EnsembleDouble.h @@ -0,0 +1,244 @@ +/** + * @file EnsembleDouble.h + * @author Sebastien Fourey + * @date Thu Nov 18 + * + * @brief Declaration de la classe EnsembleDouble. + * + */ +#ifndef ENSEMBLEDOUBLE_H +#define ENSEMBLEDOUBLE_H + +#include +#include +using namespace std; + +/** + * Classe permettant de representer un ensemble de + * double en utilisant uniquement la notion d'egalite entre + * double. Aucune relation d'ordre n'est utilisee (par exemple + * pour avoir un representation ordonnee en memoire qui accelererait + * les recherches).
+ * Seul l'operateur == est utilise pour tester l'egalite de deux + * elements. + */ +class EnsembleDouble { + + class Noeud { + double valeur; + Noeud * suivant; + public: + Noeud(double valeur, Noeud * suivant=0):valeur(valeur),suivant(suivant) { } + ~Noeud() { delete suivant; } + double getValeur() { return valeur; } + Noeud * getSuivant() { return suivant; } + void setSuivant(Noeud * suivant) { Noeud::suivant = suivant; } + }; + + Noeud * liste; + +public: + + /** + * Construit un ensemble vide. + */ + EnsembleDouble():liste(0) { } + + /** + * Construit un singleton. + */ + EnsembleDouble(double x) { liste = new Noeud(x); } + + /** + * Destructeur. + */ + ~EnsembleDouble(); + + /** + * Test si l'ensemble est vide. + * + * @return true si l'ensemble est vide, sinon false. + */ + bool estVide() { return liste == 0; } + + /** + * Envoie tous les elements dans un flot de sortie. + * + * @param out un flot de sortie. + * + * @return le flot de sortie donne en parametre. + */ + ostream & flush(ostream & out) const; + + /** + * Test l'appartenance d'un element a l'ensemble. + * + * @param x un double. + * + * @return true sie est dans l'ensemble, false sinon. + */ + bool contient(double x) const; + + /** + * Test l'inclusion dans un autre ensemble. + * + * @param e un ensemble + * + * @return true si "je" suis inclus dans e, false sinon. + */ + bool estInclusDans(const EnsembleDouble & autre) const; + + /** + * Ajoute un "objet" a l'ensemble. + * + * @param e un double a ajouter à l'ensemble. + */ + void ajoute(double x); + + /** + * Retire un double de l'esemble. + * + * @param x un double a retirer. + */ + void retire(double x); + + + /** + * Ajoute tous les elements dans un autre ensemble. + * + * @param e un ensemble + */ + void ajouteDans(EnsembleDouble & e) const; + + /** + * Retire tous les elements dans un autre ensemble. + * Apres a.enleveDe(b), b vaut b - a (- ensembliste) + * + * @param e un ensemble dont il faut retirer des elements. + */ + void retireDe(EnsembleDouble & e) const; + + + /** + * Operateur d'affectation d'un ensemble. + * + * @param e un ensemble + * + * @return une reference a moi-meme + */ + EnsembleDouble & operator=(const EnsembleDouble & e); + + + /** + * Constructeur par recopie. + * + * @param e un ensemble + */ + EnsembleDouble(const EnsembleDouble & e); + +private: + + /** + * Methode recursive de suppression d'un element dans + * une liste chainee. + * + * @param liste une liste. + * @param x un element. + * + * @return le liste sans l'element. + */ + Noeud * retireRec(Noeud * liste, double x); + +}; + +/** + * Operateur << pour les enembles de double. + * + * @param out un flot de sortie. + * @param e un ensemble de doubles. + * + * @return le flot de sortie donne en argument. + */ +ostream & operator<<(ostream & out, const EnsembleDouble & e); + + +/** + * Creation d'un singleton. + * + * @param x un double + * + * @return le singleton {x} + */ +EnsembleDouble singleton(double x); + +/** + * Creation d'un ensemble vide. + * + * @param x un double + * + * @return le singleton {x} + */ +EnsembleDouble ensembleVide(); + +/** + * Teste l'egalite de deux ensembles. + * + * @param a un ensemble. + * @param b un ensemble. + * + * @return true si a=b (i.e., a est inclus dans b et b est inclus dans a), + * sinon false. + */ +bool egale(const EnsembleDouble & a, const EnsembleDouble & b); +bool operator==(const EnsembleDouble & a, const EnsembleDouble & b); +bool operator<(const EnsembleDouble & a, const EnsembleDouble & b); +bool operator>(const EnsembleDouble & a, const EnsembleDouble & b); + + +/** + * Union de deux ensembles de doubles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return a union b. + */ +EnsembleDouble reunion(const EnsembleDouble & a, const EnsembleDouble & b); +EnsembleDouble operator+(const EnsembleDouble & a, const EnsembleDouble & b); +EnsembleDouble operator|(const EnsembleDouble & a, const EnsembleDouble & b); + +/** + * Difference de deux ensembles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return a prive de b. + */ +EnsembleDouble difference(const EnsembleDouble & a, const EnsembleDouble & b); +EnsembleDouble operator-(const EnsembleDouble & a, const EnsembleDouble & b); + +/** + * Difference symetrique entre deux ensembles de doubles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return (a prive de b) union (b prive de a) + */ +EnsembleDouble diffSymetrique(const EnsembleDouble & a, const EnsembleDouble & b); +EnsembleDouble operator^(const EnsembleDouble & a, const EnsembleDouble & b); + + +/** + * Intersection entre deux ensembles de doubles. + * + * @param a un ensemble de doubles. + * @param b un ensemble de doubles. + * + * @return l'intersection de a et b. + */ +EnsembleDouble intersection(const EnsembleDouble & a, const EnsembleDouble & b); +EnsembleDouble operator&(const EnsembleDouble & a, const EnsembleDouble & b); + +#endif diff --git a/Cpp/TP5_ModelesDeClasses/essai_ensemble.cc b/Cpp/TP5_ModelesDeClasses/essai_ensemble.cc new file mode 100755 index 0000000..af4c029 --- /dev/null +++ b/Cpp/TP5_ModelesDeClasses/essai_ensemble.cc @@ -0,0 +1,137 @@ +/** + * @file essai_ensemble.cc + * @author Sebastien Fourey + * @date Thu Nov 18 20:38:47 2004 + * + * @brief Programme de test du modele de classe "Ensemble" + * defini dans Ensemble.hh + */ + +/* + * Ici, toute la definition du modele de classe "Ensemble" + * est dans un unique fichier .hh + * On ne fait plus de compilation separee. + * + */ + +#include +#include +#include + +#include "Ensemble.hh" + +using namespace std; + +/** + * Fonction principale du programme. + * + * @param argc le nombre d'arguments sur la ligne de commande. + * @param argv le tableau des arguments de la ligne de commande. + * + * @return 0 (SUCCESS) + */ +int main(int argc, char * argv[]) { + + typedef Ensemble EnsembleDouble; + EnsembleDouble e; + Ensemble f; + Ensemble g; + + for (int i = 1; i <= 10 ; i++) + e.ajoute(i); + + for (int i = 6; i <= 15 ; i++) + f.ajoute(i); + + for (int i = 11; i < 20 ; i++) + g.ajoute(i); + + cout << setiosflags(ios_base::boolalpha); // + + // Alternative : cout.setf(ios_base::boolalpha); // + + cout << e.contient(5) << endl; + + cout << f.contient(5) << endl; + + cout << g.contient(5) << endl; + + cout << "e = " << e << endl; + + cout << "f = " << f << endl; + + cout << "g = " << g << endl; + + /* + e.retire(0); + cout << "e - 0 = " << e << endl; + e.retire(3); + cout << "e - 3 = " << e << endl; + e.retire(1); + cout << "e - 1 = " << e << endl; + e.retire(10); + cout << "e - 10 = " << e << endl; + e.retire(6); + cout << "e - 6 = " << e << endl; + */ + + cout << " e U f = " << (e + f) << endl; + + cout << " e inter f = " << (e & f) << endl; + + cout << " e - f = " << (e - f) << endl; + + cout << " e inter g = " << (e & g) << endl; + + cout << " e diffSym f = " << (e ^ f) << endl; + + cout << " e diffSym g = " << (e ^ g) << endl; + + cout << " e - e = " << (e - e) << endl; + + cout << " e - {40.0} = " << (e - Ensemble::singleton(40.0)) << endl; + + cout << " e U {40} U {50} = " << e + Ensemble::singleton(40.0) + Ensemble::singleton(50.0) << endl; + + cout << endl; + + cout << " e = " << e << endl; + + cout << " f = " << f << endl; + + cout << " (e U f) - f " << (e + f) - f << endl; + + cout << " (e U f) - f == e ? " << (((e + f) - f) == e) << endl; + + cout << " En effet, car e inter f = " << (e & f) << endl; + + cout << endl; + + cout << " e == e U {} ? " << ((e + Ensemble()) == e) << endl; + + Foncteur fct(3); + + cout << "e.appliquerAuxElements(Foncteur fct(3)) = " << e.appliquerAuxElements(fct) << endl; + + + // cout << " e - {5} < e ? " << ((e - Ensemble(5.0)) < e) << endl; + + Ensemble a, b; + + a.ajoute(true); + + b.ajoute(false); + + cout << endl; + + cout << " a = " << a << endl; + + cout << " b = " << b << endl; + + cout << " a + b = " << (a + b) << endl; + + cout << " a + b - {true} = " << ((a + b) - Ensemble::singleton(true)) << endl; + + return 0; +} + diff --git a/Cpp/TP6_STL/HollowMatrix.cpp b/Cpp/TP6_STL/HollowMatrix.cpp new file mode 100755 index 0000000..83559ab --- /dev/null +++ b/Cpp/TP6_STL/HollowMatrix.cpp @@ -0,0 +1,138 @@ +/** + * #(@)HollowMatrix.cpp ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implements a hollow matrix. + */ + +#include "HollowMatrix.h" + +#include + +using namespace std; + +/* + * @version 2006 + * + * @done - + * + * @todo - + */ + + +double HollowMatrix::operator()(int r, int c) const { + pair p = make_pair(r, c); + double ret = 0; + + /* + * Here, we do not use the operator [] because it inserts a default + * value in the map if the key cannot be found. + * + * The function find() does not modify the object. + */ + ArrayOf2DPoints::const_iterator i = this->find(p); + + if (i != this->end()) { + ret = i->second; + } + + return ret; +} + + +void HollowMatrix::setValue(int r, int c, double v) { + pair p = make_pair(r, c); + + if (v != 0) { + (*this)[p] = v; + } else { + this->erase(p); + } +} + + +int HollowMatrix::width(void) const { + int max = 0; + + for (ArrayOf2DPoints::const_iterator i = this->begin(); + i != this->end(); ++i) { + + /* i->first is the key, i->first.second is the col number */ + int col = i->first.second; + + if (col > max) { + max = col; + } + } + + return max; +} + +int HollowMatrix::height(void) const { + int max = 0; + + for (ArrayOf2DPoints::const_iterator i = this->begin(); + i != this->end(); ++i) { + + /* i->first is the key, i->first.first is the row number */ + int row = i->first.first; + + if (row > max) { + max = row; + } + } + + return max; +} + +ostream & operator<<(ostream & st, const HollowMatrix & m) { + int h = m.height(); + int w = m.width(); + + /* backup stream options */ + ios_base::fmtflags old_options = st.flags(); + + /* left alignment */ + st.setf(ios_base::left, ios_base::adjustfield); + + st << "["; + for (int r = 1; r <= h; r++) { + if (r == 1) { + st << "["; + } else { + st << " ["; + } + + for (int c = 1; c <= w; c++) { + /* the next field is 8 chars wide */ + st << setw(8); + + st << m(r, c); + } + + st << "]"; + + if (r != h) { + st << endl; + } + } + + st << "]" << endl; + + /* restore stream options */ + st.flags(old_options); + + return st; +} + diff --git a/Cpp/TP6_STL/HollowMatrix.h b/Cpp/TP6_STL/HollowMatrix.h new file mode 100755 index 0000000..3e9aa99 --- /dev/null +++ b/Cpp/TP6_STL/HollowMatrix.h @@ -0,0 +1,78 @@ +/** + * #(@)HollowMatrix.h ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Defines a hollow matrix. + */ + +#ifndef HOLLOW_MATRIX_H +#define HOLLOW_MATRIX_H + +#include +#include +#include + +/* + * @version 2006 + * + * @done - + * + * @todo - + */ + +typedef std::map, double> ArrayOf2DPoints; + +class HollowMatrix : public ArrayOf2DPoints { +public: + /** + * Returns the number at row r and col c. By default, all values in + * this matrix are zero. + * + * @param r the row number, starting at 1 + * @param c the col number, starting at 1 + * @return the value, 0 if not defined + */ + double operator()(int r, int c) const; + + /** + * Defines the number at row r and col c. If v is equal to zero, the + * number is removed from this matrix. + * + * @param r the row number, starting at 1 + * @param c the col number, starting at 1 + * @param v the value + */ + void setValue(int r, int c, double v); + + /** + * Returns the number of columns in this matrix. + * + * @return the number of columns in this matrix + */ + int width(void) const; + + /** + * Returns the number of rows in this matrix. + * + * @return the number of rows in this matrix + */ + int height(void) const; +private: + +}; + +std::ostream & operator<<(std::ostream & st, const HollowMatrix & m); + +#endif /* HOLLOW_MATRIX_H */ + diff --git a/Cpp/TP6_STL/Makefile b/Cpp/TP6_STL/Makefile new file mode 100755 index 0000000..def3644 --- /dev/null +++ b/Cpp/TP6_STL/Makefile @@ -0,0 +1,12 @@ +CXXFLAGS := -Wall -g +LDFLAGS := -lstdc++ + +all: tp ex3 ex4 ex5 ex6 + +ex6: ex6.o HollowMatrix.o + +clean: + rm -f *.o tp ex3 ex4 ex5 ex6 + +.PHONY: all clean + diff --git a/Cpp/TP6_STL/ex3.cpp b/Cpp/TP6_STL/ex3.cpp new file mode 100755 index 0000000..e8b604a --- /dev/null +++ b/Cpp/TP6_STL/ex3.cpp @@ -0,0 +1,62 @@ +/** + * #(@)ex3.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP7 : Utilisation des conteneurs de la STL. + */ + + +// STL includes +#include +#include +#include +#include + +#include /* for exit() */ + +using namespace std; + +int main(int argc, char ** argv) { + if (argc != 2) { + cout << "Usage : " << argv[0] << " " << endl; + exit(1); + } + + ifstream st(argv[1]); + if (! st.is_open()) { + cout << "Erreur lors de l'ouverture du fichier !" << endl; + exit(2); + } + + set s; + + char c = 0; + while (!st.eof()) { + st >> c; + s.insert(c); + } + + st.close(); + + cout << "Nombre de caracteres differents : " << s.size() << endl; + + for (set::iterator i = s.begin(); i != s.end(); i++) { + cout << *i; + } + + cout << endl; + + return 0; +} + diff --git a/Cpp/TP6_STL/ex4.cpp b/Cpp/TP6_STL/ex4.cpp new file mode 100755 index 0000000..fac5f38 --- /dev/null +++ b/Cpp/TP6_STL/ex4.cpp @@ -0,0 +1,106 @@ +/** + * #(@)ex4.cpp ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP7 : Utilisation des conteneurs de la STL. + * TP7 - EX4 : Utilisation d'un tas pour trier. + */ + + +// STL includes +#include +#include +#include +#include +#include + +#include /* for exit() */ + +using namespace std; + +/** + * Sorts the vector using a heap. + * + * @param v a vector + * @return a sorted copy of the vector + */ +template vector trier(vector & v) { + priority_queue, Cmp> pq; + vector vs; + + for (typename vector::iterator i = v.begin(); i != v.end(); i++) { + pq.push(*i); + } + + while (! pq.empty()) { + vs.push_back(pq.top()); + pq.pop(); + } + + return vs; +} + +/** + * Fill a vector with 20 integers and sort it using a heap. + * + * Trace : + * Unsorted vector : 83 86 77 15 93 35 86 92 49 21 62 27 90 59 63 26 40 26 + * 72 36 + * + * Sorted vector - less : 93 92 90 86 86 83 77 72 63 62 59 49 40 36 35 + * 27 26 26 21 15 + * + * Sorted vector - greater : 15 21 26 26 27 35 36 40 49 59 62 63 72 77 + * 83 86 86 90 92 93 + * + * + * @param argc number of arguments + * @param argv arguments + * @return 0 + */ +int main(int argc, char ** argv) { + vector v; + + for (int i = 0; i < 20; i++) { + /* L'ordre est conservé */ + v.push_back(random() % 100); + } + + cout << "Unsorted vector : "; + for (vector::iterator i = v.begin(); i != v.end(); i++) { + cout << *i << " "; + } + cout << endl; + + /* Remark : notice the space between the two ">" after + * the function name */ + vector vs = trier >(v); + + cout << "Sorted vector - less : "; + for (vector::iterator i = vs.begin(); i != vs.end(); i++) { + cout << *i << " "; + } + cout << endl; + + vs = trier >(v); + + cout << "Sorted vector - greater : "; + for (vector::iterator i = vs.begin(); i != vs.end(); i++) { + cout << *i << " "; + } + cout << endl; + + return 0; +} + diff --git a/Cpp/TP6_STL/ex5.cpp b/Cpp/TP6_STL/ex5.cpp new file mode 100755 index 0000000..a77069b --- /dev/null +++ b/Cpp/TP6_STL/ex5.cpp @@ -0,0 +1,65 @@ +/** + * #(@)ex5.cpp ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP7 : Utilisation des conteneurs de la STL. + * TP7 - EX5 : Tableaux associatifs. + */ + + +// STL includes +#include +#include +#include +#include + +#include /* for exit() */ + +using namespace std; + + +/** + * Tests the implementation of associative arrays. + * + * Trace : + * Liste des personnes : + * JCVD 45 + * Le chat 10 + * Nicolas 21 + * Thomas 21 + * + * We can notice that the keys are sorted. + * + * @param argc number of arguments + * @param argv arguments + * @return 0 + */ +int main(int argc, char ** argv) { + map age; + + age["Nicolas"] = 21; + age["Thomas"] = 21; + age["JCVD"] = 45; + age["Le chat"] = 10; + + cout << "Liste des personnes : " << endl; + for (map::const_iterator i = age.begin(); i != age.end(); ++i) { + /* i->first is the key, i->second is the value */ + cout << i->first << '\t' << i->second << endl; + } + cout << endl; + + return 1; +} + diff --git a/Cpp/TP6_STL/ex6.cpp b/Cpp/TP6_STL/ex6.cpp new file mode 100755 index 0000000..a66b891 --- /dev/null +++ b/Cpp/TP6_STL/ex6.cpp @@ -0,0 +1,169 @@ +/** + * #(@)ex6.cpp ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP7 : Utilisation des conteneurs de la STL. + * TP7 - EX6 : Matrice creuse à l'aide d'une map. + */ + +/* + * @version 2006 + * + * @done - + * + * @todo debug HollowMatrix.h + */ + + +// STL includes +#include +#include +#include +#include +#include + +#include /* for exit() */ + + +#include "HollowMatrix.h" + +using namespace std; + +/** + * Prints the results of the comparison of the two pairs. Example : + * + * code : printPair(make_pair(1, 10), + * make_pair(2, 1), "<"); + * on screen : (1, 10) < (2, 1) = true + * + * @param p1 the first pair. + * @param p2 the second pair. + * @param op the operator (<, >, == or !=) + */ +template +void printPair(pair p1, pair p2, string op) { + cout << "(" << p1.first << ", " << p1.second << ") "; + cout << op; + cout << " (" << p2.first << ", " << p2.second << ") = "; + + if (op == "<") { + cout << (p1 < p2); + } else if (op == ">") { + cout << (p1 > p2); + } else if (op == "!=") { + cout << (p1 != p2); + } else if (op == "==") { + cout << (p1 == p2); + } else { + cout << "not true, not false"; + } + + cout << endl; +} + +/** + * Tests the truth of the order relations on pairs. Results are printed + * on the screen. + */ +void testPairs(void) { + /* true */ + printPair(make_pair(1, 10), make_pair(2, 1), "<"); + + /* true */ + printPair(make_pair(0, 0), make_pair(0, 10), "<"); + + /* false, equal */ + printPair(make_pair(0, 0), make_pair(0, 0), "<"); + + /* true */ + printPair(make_pair(1, 8.5), + make_pair(1, 9), "<"); + + /* true */ + printPair(make_pair(0, 0), make_pair(0, 1), "!="); + + /* false, equal */ + printPair(make_pair(0, 5), make_pair(0, 5), ">"); + + /* false, equal */ + printPair(make_pair(0, 5), make_pair(0, 5), "<"); + + /* true */ + printPair(make_pair(0, 5), make_pair(0, 5), "=="); + + /* false, "debrie" > "clouard" */ + printPair(make_pair("debrie", 10), + make_pair("clouard", 40), "<"); + + cout << endl; +} + +void testMatrix(void) { + HollowMatrix m; + + m.setValue(1, 1, 1); + m.setValue(2, 2, 1); + m.setValue(3, 3, 1); + m.setValue(4, 4, 1); + + m.setValue(2, 3, 23); + if (m(2 ,3) != 23 || m(3, 2) == 23) { + cout << "Erreur: " << __FILE__ << ":" << __LINE__ << endl; + } + + m.setValue(3, 4, -2.3); + m.setValue(2, 4, 1.23456789); + + cout << "check: " << 1 << 1.0 << 2 << -3 << 4 << endl; + cout << endl; + + /* original matrix */ + cout << m; + cout << endl; + + /* add 4 columns */ + m.setValue(1, 8, 1); + cout << m; + cout << endl; + + /* delete 4 columns */ + m.setValue(1, 8, 0); + cout << m; + cout << endl; + + /* We can modify the matrix using the functions of the map class */ + m[make_pair(5, 5)] = 666; + cout << m; + cout << endl; + + cout << "check: " << 1 << 1.0 << 2 << -3 << 4 << endl; +} + +/** + * Tests the order relations on pairs. Tests the implementation of the matrix. + * + * @param argc number of arguments + * @param argv arguments + * @return 0 + */ +int main(int argc, char ** argv) { + /* Displays boolean as "true" or "false" */ + cout << setiosflags(ios_base::boolalpha); + + testPairs(); + testMatrix(); + + return 1; +} + diff --git a/Cpp/TP6_STL/tp.cpp b/Cpp/TP6_STL/tp.cpp new file mode 100755 index 0000000..96777ed --- /dev/null +++ b/Cpp/TP6_STL/tp.cpp @@ -0,0 +1,174 @@ +/** + * #(@)tp.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * TP7 : Utilisation des conteneurs de la STL. + * + * Implementation des exercices 1 et 2. + */ + + +// STL includes +#include +#include +#include +#include +#include + +#include /* for random() */ + +using namespace std; + +/** + * Question 1A : Remplit un vecteur d'entier avec 20 nombres entre 0 et 100 + * et les affiche. + * + * Trace : + * 83 86 77 15 93 35 86 92 49 21 62 27 90 59 63 26 40 26 72 36 + * + */ +void question_1A(void) { + /* Si on veut utiliser le vector comme une liste "classique", il ne faut + * pas d'éléments initiaux : vector v(0); + * + * Si on ne veut pas préciser le nombre initial d'éléments, il ne faut + * pas utiliser la notation : + * + * vector v(); + * + * sinon on le compilateur émet des erreurs : + * + * tp.cpp:33: error: request for member `push_back' in `v', which is of + * non-aggregate type `std::vector > ()()' + * + * le constructeur par defaut s'appelle de la manière suivante : + * vector v; + */ + vector v; + + for (int i = 0; i < 20; i++) { + /* L'ordre est conservé */ + v.push_back(random() % 100); + } + + + cout << "Question 1A: "; + + for (vector::iterator i = v.begin(); i != v.end(); i++) { + cout << *i << " "; + } + + cout << endl; +} + +/** + * Question 1B : Remplit un set d'entier avec 20 nombres entre 0 et 100, + * deux fois le nombre 0 et les affiche. + * + * Trace : + * 0 2 11 22 23 29 30 35 42 56 58 62 67 68 69 82 93 + * + * Remarque : + * les nombres sont ordonnées par ordre croissant et le numéro 0 + * n'apparait qu'une fois. + * + */ +void question_1B(void) { + set s; + + for (int i = 0; i < 20; i++) { + /* Les éléments sont triés par ordre croissant */ + s.insert(random() % 100); + } + + /* Et on ne peut insérer qu'une seule fois le même élément */ + s.insert(0); + s.insert(0); + + cout << "Question 1B: "; + + for (set::iterator i = s.begin(); i != s.end(); i++) { + cout << *i << " "; + } + + cout << endl; +} + +/** + * Dépose dix éléments sur la pile et les reprend. + * La pile n'est pas une collection. + * + * Trace : + * 9 8 7 6 5 4 3 2 1 0 + */ +void question_1C(void) { + stack s; + + for (int i = 0; i < 10; i++) { + s.push(i); + } + + cout << "Question 1C: "; + for (int i = 0; i < 10; i++) { + cout << s.top() << " "; + + /* pop() renvoie void */ + s.pop(); + } + + cout << endl; +} + +/** + * Insere 5000 éléments dans un vecteur et note les changements de + * capacité du vecteur. + * + * Trace : + * [0] 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 + * + * Remarque : + * Initialement, le vecteur a une capacite nulle. Puis sa capacité + * augmente de manière exponentielle. Ceci permet de minimiser le + * nombre d'allocations mémoire pour un taux d'inutilisation de la + * mémoire compris entre 0 et 50 %. + */ +void question_2(void) { + vector v; + size_t taille = v.capacity(); + + cout << "Question 2: [" << taille << "] "; + + for (int i = 0; i < 5000; i++) { + v.push_back(i); + + size_t ntaille = v.capacity(); + if (taille != ntaille) { + taille = ntaille; + cout << ntaille << " "; + } + + } + + cout << endl; +} + +int main(int argc, char ** argv) { + question_1A(); + question_1B(); + question_1C(); + question_2(); + + return 0; +} + diff --git a/Cpp/TP7_Rip/AUTHORS b/Cpp/TP7_Rip/AUTHORS new file mode 100755 index 0000000..2ced4fd --- /dev/null +++ b/Cpp/TP7_Rip/AUTHORS @@ -0,0 +1 @@ +Nicolas MASSE & Thomas LIMIN diff --git a/Cpp/TP7_Rip/COPYING b/Cpp/TP7_Rip/COPYING new file mode 100755 index 0000000..5b6e7c6 --- /dev/null +++ b/Cpp/TP7_Rip/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, 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 show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/Cpp/TP7_Rip/ChangeLog b/Cpp/TP7_Rip/ChangeLog new file mode 100755 index 0000000..e69de29 diff --git a/Cpp/TP7_Rip/Doxyfile b/Cpp/TP7_Rip/Doxyfile new file mode 100755 index 0000000..389da03 --- /dev/null +++ b/Cpp/TP7_Rip/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = tp7.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/nicolas/tmp_dir/tp5_templates/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/nicolas/tmp_dir/svn/artemis/tp7 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = tp7.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/Cpp/TP7_Rip/INSTALL b/Cpp/TP7_Rip/INSTALL new file mode 100755 index 0000000..02a4a07 --- /dev/null +++ b/Cpp/TP7_Rip/INSTALL @@ -0,0 +1,167 @@ +Basic Installation +================== + + These are generic installation instructions. + + 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, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + 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 at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes a while. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Type `make install' to install the programs and any data files and + documentation. + + 4. You can remove the program binaries and object files from the + source code directory by typing `make clean'. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +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 architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as 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 `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + 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'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +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. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/Cpp/TP7_Rip/Makefile.am b/Cpp/TP7_Rip/Makefile.am new file mode 100755 index 0000000..02520f2 --- /dev/null +++ b/Cpp/TP7_Rip/Makefile.am @@ -0,0 +1,5 @@ +# not a GNU package. You can remove this line, if +# have all needed files, that a GNU package needs +AUTOMAKE_OPTIONS = foreign 1.4 + +SUBDIRS = src diff --git a/Cpp/TP7_Rip/Makefile.cvs b/Cpp/TP7_Rip/Makefile.cvs new file mode 100755 index 0000000..d160702 --- /dev/null +++ b/Cpp/TP7_Rip/Makefile.cvs @@ -0,0 +1,8 @@ +default: all + +all: + aclocal + autoheader + automake + autoconf + diff --git a/Cpp/TP7_Rip/NEWS b/Cpp/TP7_Rip/NEWS new file mode 100755 index 0000000..e69de29 diff --git a/Cpp/TP7_Rip/README b/Cpp/TP7_Rip/README new file mode 100755 index 0000000..f0bfddb --- /dev/null +++ b/Cpp/TP7_Rip/README @@ -0,0 +1,14 @@ +Installation: + +./configure +make + +Remarque: + +Afin de privilégier une conception orientée objet, la classe Host diffère légèrement de la classe Host demandée: les concepts des tables de routages et d'entrée de table de routage ayant été implémenté dans des classes séparées. + +De plus, nous avons préféré nous abstenir d'utiliser la méthode de diffusion de tables pour la recherche de routes, préférant une méthode "incrémentale" de résolution, qui n'implique que les voisins immédiats, puis au besoins les voisins des voisins etc... Nous pensons que cette méthode est plus efficace car elle n'engendre pas un échange de tables généralisé qui pourrait engorger le réseau. + +Afin de coller au plus près à la réalité, nous avons simulé les envoi simultané de message en confiant à la classe Network le soin de gérer une file des messages RIP devant être envoyés, ce qui permet, lors de la mise à jour des tables de routages, un parcours du graphe qui s'apparente plus à un parcours en largeur ("diffusion concentrique de message") qu'à un parcours en profondeur, trop éloigné du fonctionnement d'un algorithme répartis + +Comme on peut le constater en executant le programme (./src/tp7) cela ne nuit en rien à son fonctionnement diff --git a/Cpp/TP7_Rip/TODO b/Cpp/TP7_Rip/TODO new file mode 100755 index 0000000..e69de29 diff --git a/Cpp/TP7_Rip/config.guess b/Cpp/TP7_Rip/config.guess new file mode 100755 index 0000000..01edd7b --- /dev/null +++ b/Cpp/TP7_Rip/config.guess @@ -0,0 +1,1495 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-12-23' + +# 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 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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 Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +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 + +trap 'exit 1' 1 2 15 + +# 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. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; 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 ; set_cc_for_build= ;' + +# 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) >/dev/null 2>&1 ; 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 + +if [ "${UNAME_SYSTEM}" = "Linux" ] ; then + eval $set_cc_for_build + cat << EOF > $dummy.c + #include + #ifdef __UCLIBC__ + # ifdef __UCLIBC_CONFIG_VERSION__ + LIBC=uclibc __UCLIBC_CONFIG_VERSION__ + # else + LIBC=uclibc + # endif + #else + LIBC=gnu + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep LIBC= | sed -e 's: ::g'` +fi + +# 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 tupples: *-*-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". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-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. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + 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 + # 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/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + 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. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + 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'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + 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) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # 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:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $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; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $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 + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + 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 [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 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 [ -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 [ "${HP_ARCH}" = "" ]; then + eval $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 [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $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 __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $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; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + 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*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + 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/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 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/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[345]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^CPU/{s: ::g;p;}'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` 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 ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-${LIBC}" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-${LIBC}aout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-${LIBC}coff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-${LIBC}oldld" + exit ;; + esac + # This should get integrated into the C code below, but now we hack + if [ "$LIBC" != "gnu" ] ; then echo "$TENTATIVE" && exit 0 ; fi + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '/^LIBC/{s: ::g;p;}'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + 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. + echo i386-sequent-sysv4 + exit ;; + 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. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + 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 + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + 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 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + 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 i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + 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; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *: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 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#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 (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#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 + printf ("vax-dec-ultrix\n"); exit (0); +# 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; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/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 + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Cpp/TP7_Rip/config.sub b/Cpp/TP7_Rip/config.sub new file mode 100755 index 0000000..14332b7 --- /dev/null +++ b/Cpp/TP7_Rip/config.sub @@ -0,0 +1,1627 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-12-23' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# 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. + + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# 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. + +# 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. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +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" + 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 + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -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) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx | dvp \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[24]a*eb | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m32c) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + nios2 | nios2-* | nios2 | nios2-*) + basic_machine=nios2-altera + os=-none + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + m32c-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsEE* | ee | ps2) + basic_machine=mips64r5900el-scei + case $os in + -linux*) + ;; + *) + os=-elf + ;; + esac + ;; + iop) + basic_machine=mipsel-scei + os=-irx + ;; + dvp) + basic_machine=dvp-scei + os=-elf + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# 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) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -irx*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -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 + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + 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 + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/Cpp/TP7_Rip/configure.in b/Cpp/TP7_Rip/configure.in new file mode 100755 index 0000000..dd549ce --- /dev/null +++ b/Cpp/TP7_Rip/configure.in @@ -0,0 +1,10 @@ +AC_INIT(configure.in) + +AM_CONFIG_HEADER(config.h) +AM_INIT_AUTOMAKE(tp7, 0.1) + +AC_LANG_CPLUSPLUS +AC_PROG_CXX +AM_PROG_LIBTOOL + +AC_OUTPUT(Makefile src/Makefile) diff --git a/Cpp/TP7_Rip/data/test_network.txt b/Cpp/TP7_Rip/data/test_network.txt new file mode 100755 index 0000000..d194863 --- /dev/null +++ b/Cpp/TP7_Rip/data/test_network.txt @@ -0,0 +1,10 @@ +A B +A C +B D +C D +C E +C F +D E +D H +D F +F G \ No newline at end of file diff --git a/Cpp/TP7_Rip/depcomp b/Cpp/TP7_Rip/depcomp new file mode 100755 index 0000000..4c20c6c --- /dev/null +++ b/Cpp/TP7_Rip/depcomp @@ -0,0 +1,441 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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 . + +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 +# `libtool' can also be set to `yes' or `no'. + +depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# 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 + +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. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## 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). +## - 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 -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## 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. + tr ' ' ' +' < "$tmpdepfile" | +## 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. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : + else + 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 ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. 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. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Must come before tru64. + + # Intel's C compiler understands `-MD -MF file'. However + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^[^:]*: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 AIX 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. + + tmpdepfile1="$object.d" + tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` + if test "$libtool" = yes; then + "$@" -Wc,-MD + else + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#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 proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + test -z "$dashmflag" && dashmflag=-M + ( IFS=" " + case " $* " in + *" --mode=compile "*) # this is libtool, let us make it quiet + for arg + do # cycle over the arguments + case "$arg" in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + 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) + # X makedepend + ( + shift + cleared=no + for arg in "$@"; do + case $cleared in no) + set ""; shift + cleared=yes + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift;; + -*) + ;; + *) + set fnord "$@" "$arg"; shift;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tail +3 "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + 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 proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + 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 proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/Cpp/TP7_Rip/install-sh b/Cpp/TP7_Rip/install-sh new file mode 100755 index 0000000..36f96f3 --- /dev/null +++ b/Cpp/TP7_Rip/install-sh @@ -0,0 +1,276 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd=$cpprog + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "$0: no input file specified" >&2 + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d "$dst" ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f "$src" ] || [ -d "$src" ] + then + : + else + echo "$0: $src does not exist" >&2 + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "$0: no destination specified" >&2 + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d "$dst" ] + then + dst=$dst/`basename "$src"` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-$defaultIFS}" + +oIFS=$IFS +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS=$oIFS + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp=$pathcomp$1 + shift + + if [ ! -d "$pathcomp" ] ; + then + $mkdirprog "$pathcomp" + else + : + fi + + pathcomp=$pathcomp/ +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd "$dst" && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename "$dst"` + else + dstfile=`basename "$dst" $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename "$dst"` + else + : + fi + +# Make a couple of temp file names in the proper directory. + + dsttmp=$dstdir/#inst.$$# + rmtmp=$dstdir/#rm.$$# + +# Trap to clean up temp files at exit. + + trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 + trap '(exit $?); exit' 1 2 13 15 + +# Move or copy the file name to the temp name + + $doit $instcmd "$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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && + +# 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. + +{ + if [ -f "$dstdir/$dstfile" ] + then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || + $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || + { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi +} && + +# Now rename the file to the real destination. + + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + +fi && + +# The final little trick to "correctly" pass the exit status to the exit trap. + +{ + (exit 0); exit +} diff --git a/Cpp/TP7_Rip/ltmain.sh b/Cpp/TP7_Rip/ltmain.sh new file mode 100755 index 0000000..8f7a6ac --- /dev/null +++ b/Cpp/TP7_Rip/ltmain.sh @@ -0,0 +1,6971 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 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 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# 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. + +basename="s,^.*/,,g" + +# 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" + +# define SED for historic ltconfig's generated by Libtool 1.3 +test -z "$SED" && SED=sed + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.5.22 +TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +# Same for EGREP, and just to be sure, do LTCC as well +if test "X$EGREP" = X ; then + EGREP=egrep +fi +if test "X$LTCC" = X ; then + LTCC=${CC-gcc} +fi + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +duplicate_deps=no +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +if test -z "$max_cmd_len"; then + i=0 + testring="ABCD" + new_result= + + # 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"`$SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ + = "XX$testring") >/dev/null 2>&1 && + new_result=`expr "X$testring" : ".*" 2>&1` && + max_cmd_len="$new_result" && + test "$i" != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + testring="$testring$testring" + done + testring= + # 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. + max_cmd_len=`expr $max_cmd_len \/ 2` +fi + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $mkdir "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || { + $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 + exit $EXIT_FAILURE + } + fi + + $echo "X$my_tmpdir" | $Xsed +} + + +# 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. +func_win32_libid () +{ + 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 + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'` + 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_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 () +{ + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # 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. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + # user sometimes does CC=-gcc so we need to match that to 'gcc' + trimedcc=`echo ${CC} | $SED -e "s/${host}-//g"` + # and sometimes libtool has CC=-gcc but user does CC=gcc + extendcc=${host}-${CC} + # and sometimes libtool has CC=-gcc but user has CC=-gcc + # (Gentoo-specific hack because we always export $CHOST) + mungedcc=${CHOST-${host}}-${trimedcc} + case "$@ " in + "cc "* | " cc "* | "${host}-cc "* | " ${host}-cc "*|\ + "gcc "* | " gcc "* | "${host}-gcc "* | " ${host}-gcc "*) + tagname=CC + break ;; + "$trimedcc "* | " $trimedcc "* | "`$echo $trimedcc` "* | " `$echo $trimedcc` "*|\ + "$extendcc "* | " $extendcc "* | "`$echo $extendcc` "* | " `$echo $extendcc` "*|\ + "$mungedcc "* | " $mungedcc "* | "`$echo $mungedcc` "* | " `$echo $mungedcc` "*|\ + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # 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 + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + + $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" + $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 + exit $EXIT_FAILURE + fi +} + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + my_status="" + + $show "${rm}r $my_gentop" + $run ${rm}r "$my_gentop" + $show "$mkdir $my_gentop" + $run $mkdir "$my_gentop" + my_status=$? + if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then + exit $my_status + fi + + 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 + my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` + my_xdir="$my_gentop/$my_xlib" + + $show "${rm}r $my_xdir" + $run ${rm}r "$my_xdir" + $show "$mkdir $my_xdir" + $run $mkdir "$my_xdir" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then + exit $exit_status + fi + case $host in + *-darwin*) + $show "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + if test -z "$run"; then + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` + darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` + if test -n "$darwin_arches"; then + darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + $show "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + 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 have a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + lipo -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + ${rm}r unfat-$$ + cd "$darwin_orig_dir" + else + cd "$darwin_orig_dir" + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + fi # $run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + func_extract_archives_result="$my_oldobjs" +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +disable_libs=no + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2005 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $? + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $? + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $? + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) + prevopt="--tag" + prev=tag + preserve_args="$preserve_args --tag" + ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +case $disable_libs in +no) + ;; +shared) + build_libtool_libs=no + build_old_libs=yes + ;; +static) + build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` + ;; +esac + +# 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= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # 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= + + 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) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$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,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$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. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, and some SunOS ksh mistreat backslash-escaping + # in scan sets (worked around with variable expansion), + # and furthermore cannot handle '|' '&' '(' ')' in scan sets + # at all, so we specify them separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` + case $qlibobj in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qlibobj="\"$qlibobj\"" ;; + esac + test "X$libobj" != "X$qlibobj" \ + && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; 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 "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + 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 "$need_locks" = yes; then + until $run ln "$srcfile" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; 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." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo "$srcfile" > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` + case $qsrcfile in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qsrcfile="\"$qsrcfile\"" ;; + esac + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </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." + + $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 + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." + + $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 + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + fi + 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 + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$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 "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; 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" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + darwin_framework|darwin_framework_skip) + test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + prev= + 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 + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + 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 + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework|-arch|-isysroot) + case " $CC " in + *" ${arg} ${1} "* | *" ${arg} ${1} "*) + prev=darwin_framework_skip ;; + *) compiler_flags="$compiler_flags $arg" + prev=darwin_framework ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + 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*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + notinst_path="$notinst_path $dir" + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) + # 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$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + -model) + compile_command="$compile_command $arg" + compiler_flags="$compiler_flags $arg" + finalize_command="$finalize_command $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + compiler_flags="$compiler_flags $arg" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m* pass through architecture-specific compiler args for GCC + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -pg pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ + -t[45]*|-txscale*|@*) + + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # 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 + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$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 "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; 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" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + 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. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then + exit $exit_status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + 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 test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; 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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$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 + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # 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 "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + if eval $echo \"$deplib\" 2>/dev/null \ + | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $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 used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # 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 + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; 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. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$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 + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && 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 + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; 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 "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || 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 + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$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 "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + 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 "$use_static_libs" = built && test "$installed" = yes ; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; 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 "$linkmode" = lib && + test "$hardcode_into_libs" = yes; 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 "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; 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*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + 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 "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; 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 module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | + $EGREP ": [^:]* bundle" >/dev/null ; 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 + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; 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 "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; 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 + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; 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 "$linkmode" = prog; 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 "$hardcode_direct" != unsupported; 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 "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; 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 can not 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 "$module" = yes; 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 "$build_old_libs" = no; 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 "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + 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 "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # 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 "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_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 "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # 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 + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; 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 + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # 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="$2" + number_minor="$3" + number_revision="$4" + # + # 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 + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + 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]) ;; + *) + $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + 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]) ;; + *) + $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + 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]) ;; + *) + $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + 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 + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + 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 "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + 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 "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; 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) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` + deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; 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 "*) ;; + *) dlfiles="$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 "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # 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 "$build_libtool_need_lc" = "yes"; then + deplibs="$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. + $rm conftest.c + cat > conftest.c </dev/null` + 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + # It is ok to link against an archive when + # building a shared library. + if $AR -t $potlib > /dev/null 2>&1; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$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 + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name=`expr $a_deplib : '-l\(.*\)'` + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$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 + newdeplibs="$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 + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; 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 + fi + ;; + 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 is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; 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 "$build_old_libs" = no; 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 "$allow_undefined" = no; 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 "$build_old_libs" = no; 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 + + + # 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 "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$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 "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$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" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$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 "$mode" != relink && 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 + realname="$2" + shift; 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 + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "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"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && 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 "X$skipped_export" != "X:" && + len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # 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 + output_la=`$echo "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$output_la-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + len=1 + 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~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadable object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" + done + + $echo "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" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + 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\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && 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 + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(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 "$mode" = relink; then + $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 + $show "${rm}r $gentop" + $run ${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 + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run 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 "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $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= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${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" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + 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 "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$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 "*) ;; + *) finalize_rpath="$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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + *) dllsearchpath="$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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$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 "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + else + $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* ) + $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # 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/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +" + + case $host in + *cygwin* | *mingw* ) + $echo >> "$output_objdir/$dlsyms" "\ +/* DATA imports from DLLs on WIN32 can't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs */ +struct { +" + ;; + * ) + $echo >> "$output_objdir/$dlsyms" "\ +const struct { +" + ;; + esac + + + $echo >> "$output_objdir/$dlsyms" "\ + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + 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*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + case $host in + *cygwin* | *mingw* ) + if test -f "$output_objdir/${outputname}.def" ; then + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` + else + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + fi + ;; + * ) + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + esac + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + exit_status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $exit_status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + 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 + rpath="$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 + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; 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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "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}\" || 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 + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + output_name=`basename $output` + output_path=`dirname $output` + 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 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#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 +# 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 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +/* -DDEBUG is fairly common in CFLAGS. */ +#undef DEBUG +#if defined DEBUGWRAPPER +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) +#else +# define DEBUG(format, ...) +#endif + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +const char * base_name (const char *name); +char * find_executable(const char *wrapper); +int check_executable(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + DEBUG("(main) argv[0] : %s\n",argv[0]); + DEBUG("(main) program_name : %s\n",program_name); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = find_executable(argv[0]); + if (newargz[1] == NULL) + lt_fatal("Couldn't find %s", argv[0]); + DEBUG("(main) found exe at : %s\n",newargz[1]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; + + for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" + return 127; +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char)name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable(const char * path) +{ + struct stat st; + + DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) && + ( + /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ +#if defined (S_IXOTH) + ((st.st_mode & S_IXOTH) == S_IXOTH) || +#endif +#if defined (S_IXGRP) + ((st.st_mode & S_IXGRP) == S_IXGRP) || +#endif + ((st.st_mode & S_IXUSR) == S_IXUSR)) + ) + return 1; + else + return 0; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise */ +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]; + int tmp_len; + char* concat_name; + + DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); + + 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 = 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 ("getcwd failed"); + 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 ("getcwd failed"); + 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 * +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 (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# 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. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# 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 variable: + 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 + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + 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 >> $output "\ + + # 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 $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + + # Make sure env LD_LIBRARY_PATH does not mess us up + if test -n \"\${LD_LIBRARY_PATH+set}\"; then + export LD_LIBRARY_PATH=\$progdir:\$LD_LIBRARY_PATH + fi +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + 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 $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + # 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 + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "copying selected object files to avoid basename conflicts..." + + if test -z "$gentop"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + exit_status=$? + if test "$exit_status" -ne 0 && test ! -d "$gentop"; then + exit $exit_status + fi + fi + + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + counter=`expr $counter + 1` + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + $run ln "$obj" "$gentop/$newobj" || + $run cp "$obj" "$gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_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 + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && + test "$len" -le "$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= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "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}\" || 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 + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; 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) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "X$EGREP" = X ; then + EGREP=egrep + fi + # We do not want portage's install root ($D) present. Check only for + # this if the .la is being installed. + if test "$installed" = yes && test "$D"; then + eval mynewdependency_lib=`echo "$libdir/$name" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` + else + mynewdependency_lib="$libdir/$name" + fi + # Do not add duplicates + if test "$mynewdependency_lib"; then + my_little_ninja_foo_1=`echo $newdependency_libs |$EGREP -e "$mynewdependency_lib"` + if test -z "$my_little_ninja_foo_1"; then + newdependency_libs="$newdependency_libs $mynewdependency_lib" + fi + fi + ;; + *) + if test "$installed" = yes; then + # Rather use S=WORKDIR if our version of portage supports it. + # This is because some ebuild (gcc) do not use $S as buildroot. + if test "$PWORKDIR"; then + S="$PWORKDIR" + fi + # We do not want portage's build root ($S) present. + my_little_ninja_foo_2=`echo $deplib |$EGREP -e "$S"` + # We do not want portage's install root ($D) present. + my_little_ninja_foo_3=`echo $deplib |$EGREP -e "$D"` + if test -n "$my_little_ninja_foo_2" && test "$S"; then + mynewdependency_lib="" + elif test -n "$my_little_ninja_foo_3" && test "$D"; then + eval mynewdependency_lib=`echo "$deplib" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` + else + mynewdependency_lib="$deplib" + fi + else + mynewdependency_lib="$deplib" + fi + # Do not add duplicates + if test "$mynewdependency_lib"; then + my_little_ninja_foo_4=`echo $newdependency_libs |$EGREP -e "$mynewdependency_lib"` + if test -z "$my_little_ninja_foo_4"; then + newdependency_libs="$newdependency_libs $mynewdependency_lib" + fi + fi + ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + # Do not add duplicates + if test "$installed" = yes && test "$D"; then + install_libdir=`echo "$install_libdir" |sed -e "s:$D:/:g" -e 's:/\+:/:g'` + fi + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# 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' + +# Libraries that this one depends upon. +dependency_libs='$dependency_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 "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) prev=$arg ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + 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. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$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 "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. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + 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 + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run 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 + if test "$linkname" != "$realname"; then + $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$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 + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run 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 + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + 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 + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo 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. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # Note that it is not necessary on cygwin/mingw to append a dot to + # foo even if both foo 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. + # + # If there is no directory component, then add one. + case $wrapper in + */* | *\\*) . ${wrapper} ;; + *) . ./${wrapper} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir=`func_mktempdir` + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "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) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "X----------------------------------------------------------------------" | $Xsed + $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" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + 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 + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # 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 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + 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) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + 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 test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --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 + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +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. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [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: $modename [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 + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [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 + -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 + -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 + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +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: $modename [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." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $? + +# The TAGs below are defined such that we never get into a situation +# in which 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 +disable_libs=shared +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +disable_libs=static +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/Cpp/TP7_Rip/missing b/Cpp/TP7_Rip/missing new file mode 100755 index 0000000..6a37006 --- /dev/null +++ b/Cpp/TP7_Rip/missing @@ -0,0 +1,336 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +# Originally 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# 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 + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.4 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. + You can get \`$1Help2man' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/Cpp/TP7_Rip/mkinstalldirs b/Cpp/TP7_Rip/mkinstalldirs new file mode 100755 index 0000000..d2d5f21 --- /dev/null +++ b/Cpp/TP7_Rip/mkinstalldirs @@ -0,0 +1,111 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" 1>&2 + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi + ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# End: +# mkinstalldirs ends here diff --git a/Cpp/TP7_Rip/src/Host.cpp b/Cpp/TP7_Rip/src/Host.cpp new file mode 100755 index 0000000..1666c83 --- /dev/null +++ b/Cpp/TP7_Rip/src/Host.cpp @@ -0,0 +1,183 @@ +/** + * #(@)Host.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the Host class. + */ + +#include + +#include "Host.h" + +using namespace std; + +Host::Host(string hostname) : +_hostname(hostname),_routingTable(new RoutingTable()) { + + initRoutingTable(); + std::cout << "New Host: " << hostname << std::endl; +} + + +Host::~Host() { + delete _routingTable; +} + +ostream & operator<<(ostream & st, const Host & host) { + host.printOn(st); + + return st; +} + + +std::string Host::hostname() const { + return _hostname; +} + +bool Host::addNeighbor(Host & neighbor) { + // check if the host is already in the neighbors collection + bool result = false; + std::pair< std::set::iterator, bool> place; + place = _neighbors.insert(&neighbor); + + if (place.second == true) { + RoutingTable::const_iterator it, end; + end = _routingTable->end(); + + // dumping routing table to new neighbor via RipMessage + for (it = _routingTable->begin(); it != end; ++it) { + RoutingTableEntry * rte = (*it).second; + RipMessage rip(*this, (*it).first, rte->cost()); + this->sendRipMessage(neighbor, rip); + } + result = true; + } + + return result; +} + + +bool Host::removeNeighbor(Host & neighbor) { + + // remove the neighbor from neighbors list + _neighbors.erase(&neighbor); + + // broadcast an infinite route towards all destination who used to + // use the removed neighbor as getaway + RoutingTable::iterator rtEnd = _routingTable->end(); + + for (RoutingTable::iterator it = _routingTable->begin(); it != rtEnd; ++it) { + RoutingTableEntry * rte = it->second; + if (&(rte->gateway()) == &neighbor) { + int updatedCost; + _routingTable->update(it->first, rte->gateway(), INFINITE, &updatedCost); + RipMessage msg(*this, it->first, INFINITE); + this->broadcastRipMessage(msg); + } + } + + return true; +} + + + +void Host::broadcastRipMessage(const RipMessage & msg) const { + for (std::set + ::const_iterator i = _neighbors.begin(); + i != _neighbors.end(); + ++i) { + + this->sendRipMessage( *(*i), msg); + } +} + + +void Host::broadcastRoutingTable(void) { + for (BasicRoutingTable::const_iterator i = _routingTable->begin(); + i != _routingTable->end(); + ++i) { + RipMessage m(i->second->gateway(), i->first, i->second->cost()); + this->broadcastRipMessage(m); + } +} + + +void Host::initRoutingTable(void) { + int cost; + _routingTable->update + (_hostname, *this, 0, &cost); +} + +void Host::printOn(ostream & st) const { + st << "Host: " << _hostname << "\nNeighbors:"; + set + ::const_iterator it, end; + + end = _neighbors.end(); + + for (it = _neighbors.begin(); it != end; ++it) { + st << " " << (*it)->hostname(); + } + + st << "\nRoutingTable: " << endl << *_routingTable << endl; +} + +void Host::handleRipMessage(const RipMessage & msg) { + cout << _hostname << ": Received RIP message: " << msg << endl; + + int cost = msg.cost() + 1; + + int newCost; + + if (_routingTable->update(msg.dstHost(), msg.srcHost(), cost, &newCost)) { + // routing table has been updated + RipMessage newMsg(*this, msg.dstHost(), newCost); + this->broadcastRipMessage(newMsg); + + } +} + + + +bool operator ==(const Host & h1, const Host & h2) { + return h1.hostname() == h2.hostname(); +} + +void Host::sendRipMessage( Host & dest, const RipMessage & msg ) const { + // dont send to the dest if rip message + // indicate a route to reach it + if (dest.hostname() != msg.dstHost()) { + // dont send rip message if the dst is the gateway to reach the dstHost + // => split horizon + RoutingTableEntry * rte = (*_routingTable)[msg.dstHost()]; + if (&(rte->gateway()) != &dest) { + std::cout << _hostname << " sending Rip message to " << dest.hostname() << std::endl; + Network::addToQueue(&dest, msg); + } + } + +} + +void Host::handleIpMessage(const IpMessage & msg) { + cout << _hostname << " received a message : " << msg << endl; + + if (msg.dstHost() == _hostname) { + cout << _hostname << ": It's for me !" << endl; + } else { + Host & h = (*_routingTable)[msg.dstHost()]->gateway(); + h.handleIpMessage(msg); + } + +} + diff --git a/Cpp/TP7_Rip/src/Host.h b/Cpp/TP7_Rip/src/Host.h new file mode 100755 index 0000000..83de4cd --- /dev/null +++ b/Cpp/TP7_Rip/src/Host.h @@ -0,0 +1,179 @@ +/** + * #(@)Host.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Represents a host in a network. + */ + +#include +#include + +/** + * See the description of the Bellman-Ford algorithm. + */ + +/* + * @version 2006-01-03 + * + * @done - + * + * @todo - + */ + + + +#ifndef HOST_H +#define HOST_H + +#include + +#define INFINITE 100 + +#include "RoutingTable.h" +class RoutingTable; // fallback + +#include "RipMessage.h" +class RipMessage; // fallback + +#include "IpMessage.h" +class IpMessage; // fallback + +#include "Network.h" +class Network; // fallback + +/** + * Represents a host of a network. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class Host { +public: + /** + * Constructs a new host with the specified name and no friend. + * + * @param hostname the hostname. + */ + Host(std::string hostname); + + /** + * Destructs this host. + */ + ~Host(); + + /** + * Returns the hostname. + * + * @return the hostname. + */ + std::string hostname() const; + + /** + * Adds a neighbor. + * + * @param neighbor the neighbor. + */ + bool addNeighbor(Host & neighbor); + + /** + * Remove a neighbor + * + * @param neighbor the neighbor + */ + bool removeNeighbor(Host & neighbor); + + /** + * Broadcasts the RIP message to all neighbors, + * except if the neighbor is the dstHost of the rip mesg + * + * @param msg the RIP message. + */ + void broadcastRipMessage(const RipMessage & msg) const; + + /** + * Broadcasts the routing table of this host to its neighbors. + * + */ + void broadcastRoutingTable(void); + + /** + * Prints details about the host on the stream. + * + * @param st the stream. + */ + void printOn(std::ostream & st) const; + + + /** + * Asks this host to handle a RIP message. + * + * @param message the RIP message to handle. + */ + void handleRipMessage(const RipMessage & msg); + + /** + * Asks this host to handle an IP message. + * + * @param message the IP message to handle. + */ + void handleIpMessage(const IpMessage & msg); + + /** + * Send the rip message to destination if it is usefull: + * - if rip message indicate a route to reach destination + * - if the destination is the gateway to reach the dstHost of the rip message + */ + void sendRipMessage(Host & dest, const RipMessage & msg) const; + + +private: + /** + * Initializes the routing table of this host. + */ + void initRoutingTable(void); + + /** + * The hostname. + */ + std::string _hostname; + + /** + * The routing table. + */ + RoutingTable * _routingTable; + + /** + * A Collection of neighbors. A set is use because hosts must + * appears only one time in this collection + */ + std::set _neighbors; + +}; + +/** + * Prints the details about the host on the output stream. + */ +std::ostream & operator<<(std::ostream & st, const Host & host); + +/** + * Compares two host, using their name. + * + * @param h1 the first host. + * @param h2 the second host. + * @return true if h1.hostname() == h2.hostname() + */ +bool operator==(const Host & h1, const Host & h2); + +#endif /* HOST_H */ + diff --git a/Cpp/TP7_Rip/src/IpMessage.cpp b/Cpp/TP7_Rip/src/IpMessage.cpp new file mode 100755 index 0000000..5f41952 --- /dev/null +++ b/Cpp/TP7_Rip/src/IpMessage.cpp @@ -0,0 +1,68 @@ +/** + * #(@)IpMessage.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the class IpMessage. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + +#include + +#include "IpMessage.h" + +using namespace std; + + +IpMessage::IpMessage(const std::string & srcHost, const std::string & dstHost, + const std::string & message) : _message(message), _srcHost(srcHost), + _dstHost(dstHost) {} + + +IpMessage::~IpMessage() {} + + +std::ostream & operator<<(std::ostream & st, const IpMessage & msg) { + msg.printOn(st); + + return st; +} + +void IpMessage::printOn(std::ostream & st) const { + st << ""; +} + + +const std::string & IpMessage::srcHost() const { + return _srcHost; +} + + +const std::string & IpMessage::dstHost() const { + return _dstHost; +} + + +const std::string & IpMessage::message() const { + return _message; +} diff --git a/Cpp/TP7_Rip/src/IpMessage.h b/Cpp/TP7_Rip/src/IpMessage.h new file mode 100755 index 0000000..181e6d0 --- /dev/null +++ b/Cpp/TP7_Rip/src/IpMessage.h @@ -0,0 +1,92 @@ +/** + * #(@)IpMessage.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Defines an IP message. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#ifndef IPMESSAGE_H +#define IPMESSAGE_H + +#include + +/** + * Represents an IP message. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class IpMessage { +public: + /** + * Constructs an IP message. + * + * @param srcHost the source host. + * @param dslHost the hostname of the destination host. + * @param cost the number of hops needed to reach the destination + * host. + */ + IpMessage(const std::string & srcHost, const std::string & dstHost, + const std::string & message); + + /** + * Destructs this IP message. + */ + ~IpMessage(); + + /** + * Prints the details about this RIP message on the output stream. + * + * @param st the output stream. + */ + void printOn(std::ostream & st) const; + + /** + * Returns the name of the host who sent this message. + */ + const std::string & srcHost() const; + + /** + * Returns the name of the destination host. + */ + const std::string & dstHost() const; + + /** + * Returns the number of hops needed to reach the destination host. + */ + const std::string & message() const; + +private: + std::string _srcHost; + std::string _dstHost; + std::string _message; +}; + +/** + * Prints the details about the IP message on the output stream. + */ +std::ostream & operator<<(std::ostream & st, const IpMessage & msg); + + +#endif /* RIPMESSAGE_H */ diff --git a/Cpp/TP7_Rip/src/Makefile.am b/Cpp/TP7_Rip/src/Makefile.am new file mode 100755 index 0000000..930bec2 --- /dev/null +++ b/Cpp/TP7_Rip/src/Makefile.am @@ -0,0 +1,13 @@ +bin_PROGRAMS = tp7 +tp7_SOURCES = tp7.cpp Network.cpp RoutingTable.cpp RipMessage.cpp Host.cpp \ + RoutingTableEntry.cpp IpMessage.cpp + +# set the include path found by configure +INCLUDES= $(all_includes) + +# the library search path. +tp7_LDFLAGS = $(all_libraries) + +noinst_HEADERS = Host.h RoutingTableEntry.h Network.h RoutingTable.h \ + RipMessage.h IpMessage.h + diff --git a/Cpp/TP7_Rip/src/Network.cpp b/Cpp/TP7_Rip/src/Network.cpp new file mode 100755 index 0000000..bb3ffba --- /dev/null +++ b/Cpp/TP7_Rip/src/Network.cpp @@ -0,0 +1,214 @@ +/** + * #(@)Network.cpp ENSICAEN 2006-01-03 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the Network class + */ + +#include "Network.h" +#include "IpMessage.h" + +/* + * @version 2006-01-03 + * + * @done - + * + * @todo - + */ + + +std::deque > Network::_queue; + + +Network::Network() : _hosts() {} + + +Network::~Network( ) { + std::map::const_iterator i; + + // destroy Host dynamic object + for (i = _hosts.begin(); i != _hosts.end(); ++i) { + delete i->second; + } +} + + +bool Network::growNetwork( std::istream & data ) { + std::string line; + const std::string delims = " \t"; + + int wordNbr; + std::string words[2]; + + // loop until end of stream is reached + while (std::getline(data, line)) { + // cut the line into wordsHostHost + std::string::size_type idBegin, idEnd; + wordNbr = 0; + + // search beginning of the first word + idBegin = line.find_first_not_of(delims); + + // while beginning of a word found + while ((idBegin != std::string::npos) && (wordNbr < 2)) { + // search end of the actual word + idEnd = line.find_first_of(delims, idBegin); + + if (idEnd == std::string::npos) { + // end of word is end of line + idEnd = line.length(); + } + + words[wordNbr] = line.substr(idBegin, idEnd - idBegin); + ++ wordNbr; + // search beginning of an other word + idBegin = line.find_first_not_of(delims, idEnd); + } + + if (wordNbr >= 2) { + // we have enough information to create a new Link + this->addLinkBetween(words[0], words[1]); + } + } +} + + +bool Network::addLinkBetween(const std::string & nameHostA, const std::string & nameHostB) { + std::map::const_iterator it; + Host * hostA; + Host * hostB; + bool result = false; + + it = _hosts.find(nameHostA); + + if (it == _hosts.end()) { + // host not found in network, we need to crete a new Host and insert it + hostA = new Host(nameHostA); + _hosts.insert(std::make_pair(nameHostA, hostA)); + } else { + // host found + hostA = it->second; + } + + it = _hosts.find(nameHostB); + + if (it == _hosts.end()) { + // host not found in network, we need to crete a new Host + hostB = new Host(nameHostB); + _hosts.insert(std::make_pair(nameHostB, hostB)); + } else { + // host found + hostB = it->second; + } + + hostA->addNeighbor(*hostB); + hostB->addNeighbor(*hostA); + + Network::processQueue(); + + return result; +} + +bool Network::removeLinkBetween( const std::string & nameHostA, const std::string & nameHostB ) { + bool result = false; + std::map::const_iterator it; + Host * hostA; + Host * hostB; + + it = _hosts.find(nameHostA); + + if (it != _hosts.end()) { + // host found + hostA = it->second; + result = true; + } + + it = _hosts.find(nameHostB); + + if (it != _hosts.end()) { + // host found + hostB = it->second; + result = result && true; + } + + if (result) { + result = hostA->removeNeighbor(*hostB) && hostB->removeNeighbor(*hostA); + } + + Network::processQueue(); + + return result; +} + + + +void Network::printOn(std::ostream & st) const { + st << "Network: " << std::endl << "Hosts:" << std::endl; + + std::map::const_iterator i; + for (i = _hosts.begin(); i != _hosts.end(); ++i) { + st << *((*i).second); + } +} + +void Network::broadcastTables(void) { + std::map::const_iterator i; + for (i = _hosts.begin(); i != _hosts.end(); ++i) { + i->second->broadcastRoutingTable(); + } + + Network::processQueue(); +} + + +std::ostream & operator <<( std::ostream & st, const Network & n ) { + n.printOn(st); + return st; +} + +Host * Network::getHost(std::string hostname ) const { + Host * h = 0; + std::map::const_iterator it; + it = _hosts.find(hostname); + + if (it != _hosts.end()) { + h = (*it).second; + } + return h; +} + + +void Network::processQueue(void) { + while (! _queue.empty()) { + std::pair p = _queue.front(); + _queue.pop_front(); + + p.first->handleRipMessage(p.second); + } +} + +void Network::addToQueue(Host * h, const RipMessage & m) { + _queue.push_back(std::make_pair(h, m)); +} + +void Network::sendMessage(const std::string & nameHostA, + const std::string & nameHostB, + const std::string & message) { + + Host * h = getHost(nameHostA); + IpMessage m(nameHostA, nameHostB, message); + + h->handleIpMessage(m); +} + diff --git a/Cpp/TP7_Rip/src/Network.h b/Cpp/TP7_Rip/src/Network.h new file mode 100755 index 0000000..93f6f05 --- /dev/null +++ b/Cpp/TP7_Rip/src/Network.h @@ -0,0 +1,147 @@ +/** + * #(@)Network.h ENSICAEN 2006-01-03 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 2006-01-03 + * + * @done - + * + * @todo - + */ + +#ifndef NETWORK_H +#define NETWORK_H + +#include +#include +#include +#include + +#include "Host.h" +class Host; // fallback + + +/** + * The Network class is in charge of building a Network, providing a data file + * the network is the owner of the hosts + */ +class Network { + +public: + + /** + * Network default constructor + */ + Network(); + + /** + * Network default destructor + */ + ~Network(); + + /** + * Add the new hosts and links present in the data stream. + * + * @param data the stream from wich network data will be read + * @return bool + */ + bool growNetwork(std::istream & data); + + /** + * Add a link in the network. + * A link is only a pair of hosts who are linked. If the hosts + * doesn't appear in the network, they are added + * + * @param nameHostA the first host + * @param nameHostB the second host + * @return state of the operation + */ + bool addLinkBetween(const std::string & nameHostA, const std::string & nameHostB); + + /** + * Sends a message m from A to B + * + * @param nameHostA the first host + * @param nameHostB the second host + * @param message the message + */ + void sendMessage(const std::string & nameHostA, const std::string & nameHostB, + const std::string & message); + + /** + * Remove a link between two hosts in the network + * + * @param nameHostA the first host + * @param nameHostB the second host + * @return state of the operation + */ + bool removeLinkBetween(const std::string & nameHostA, const std::string & nameHostB); + + /** + * Write a representation of the network into a stream + * + * @param st output stream + */ + void printOn(std::ostream & st) const; + + /** + * Broadcast the routing table of each host to its neighbors. + */ + void broadcastTables(); + + /** + * Retrieve an host thanks to its hostname + * + * @param hostname the hostname + * @return the host + */ + Host * getHost(std::string hostname) const; + + + /** + * Process the queue. + */ + static void processQueue(void); + + /** + * Add a message to the queue. + * + * @param h the destination host + * @param m the message + */ + static void addToQueue(Host * h, const RipMessage & m); + + + private: + + /** + * the collection of Hosts in the network + */ + std::map _hosts; + + /** + * The double ended queue. + */ + static std::deque > _queue; +}; + + +/** + * Prints the details about the network on the output stream. + */ +std::ostream & operator<<(std::ostream & st, const Network & n); + + +#endif /* NETWORK_H */ + diff --git a/Cpp/TP7_Rip/src/RipMessage.cpp b/Cpp/TP7_Rip/src/RipMessage.cpp new file mode 100755 index 0000000..8e804cc --- /dev/null +++ b/Cpp/TP7_Rip/src/RipMessage.cpp @@ -0,0 +1,67 @@ +/** + * #(@)RipMessage.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the class RipMessage. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + +#include + +#include "RipMessage.h" + +using namespace std; + + +RipMessage::RipMessage(Host & srcHost, const std::string & dstHost, int cost) + : _cost(cost), _srcHost(srcHost), _dstHost(dstHost) {} + + +RipMessage::~RipMessage() {} + + +std::ostream & operator<<(std::ostream & st, const RipMessage & msg) { + msg.printOn(st); + + return st; +} + +void RipMessage::printOn(std::ostream & st) const { + st << ""; +} + + +Host& RipMessage::srcHost() const { + return _srcHost; +} + + +std::string RipMessage::dstHost() const { + return _dstHost; +} + + +int RipMessage::cost() const { + return _cost; +} diff --git a/Cpp/TP7_Rip/src/RipMessage.h b/Cpp/TP7_Rip/src/RipMessage.h new file mode 100755 index 0000000..fdd0048 --- /dev/null +++ b/Cpp/TP7_Rip/src/RipMessage.h @@ -0,0 +1,93 @@ +/** + * #(@)RipMessage.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Defines a RIP message. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#ifndef RIPMESSAGE_H +#define RIPMESSAGE_H + +#include + +#include "Host.h" +class Host; // fallback + +/** + * Represents a RIP message. + * + * @author Nicolas MASSE + * @author Thomas LIMIN +*/ +class RipMessage { +public: + /** + * Constructs a RIP message. + * + * @param srcHost the source host. + * @param dslHost the hostname of the destination host. + * @param cost the number of hops needed to reach the destination host. + */ + RipMessage(Host & srcHost, const std::string & dstHost, int cost); + + /** + * Destructs this RIP message. + */ + ~RipMessage(); + + /** + * Prints the details about this RIP message on the output stream. + * + * @param st the output stream. + */ + void printOn(std::ostream & st) const; + + /** + * Returns the host who sent this message. + */ + Host& srcHost() const; + + /** + * Returns the name of the destination host. + */ + std::string dstHost() const; + + /** + * Returns the number of hops needed to reach the destination host. + */ + int cost() const; + +private: + Host & _srcHost; + std::string _dstHost; + int _cost; +}; + +/** + * Prints the details about the RIP message on the output stream. + */ +std::ostream & operator<<(std::ostream & st, const RipMessage & msg); + + +#endif /* RIPMESSAGE_H */ diff --git a/Cpp/TP7_Rip/src/RoutingTable.cpp b/Cpp/TP7_Rip/src/RoutingTable.cpp new file mode 100755 index 0000000..d7e2fca --- /dev/null +++ b/Cpp/TP7_Rip/src/RoutingTable.cpp @@ -0,0 +1,143 @@ +/** + * #(@)RoutingTable.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the RoutingTable. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#include "RoutingTable.h" + + +using namespace std; + + +RoutingTable::RoutingTable() + : BasicRoutingTable() {} + + +RoutingTable::~RoutingTable() { + for (BasicRoutingTable::const_iterator i = this->begin(); + i != this->end(); + ++i) { + + delete i->second; + + } +} + +bool RoutingTable::contains(const string & host) const { + BasicRoutingTable::const_iterator it = this->find(host); + + return it != this->end(); +} + +bool RoutingTable::update(const string & dstHost, Host & gateway, int cost, int * updatedCost) { + + bool updated = false; + + RoutingTable::iterator it = this->find(dstHost); + + if (it != this->end()) { + // dstHost is already present in the routing table... + // check if the new cost is lower than the older + RoutingTableEntry * rte = (*it).second; + + if (cost < rte->cost()) { + // a shorter way to reach dstHost has been found, table entry + // must be updated + rte->cost(cost); + rte->gateway(gateway); + *updatedCost = cost; + updated = true; + } else if ((&gateway == &rte->gateway())) { + // change must be apply because it come from the current gateway to reach + // the wanted host + cout << "Modification from GW: route to " << dstHost << " through " << gateway.hostname() << " with " << cost << " hops" << std::endl; + + rte->cost(cost); + *updatedCost = cost; + updated = true; + } else if (cost >= INFINITE) { + std::cout << "Host receive broken route to " << dstHost << " from a neighbor which is not the gateway" << std::endl; + *updatedCost = rte->cost(); + + updated = true; + } else { + std::cout << "Default case: route to " << dstHost << " through " << gateway.hostname() << " with " << cost << " hops" << std::endl; + } + } else { + // dstHost is not in the routing table, it must be added + (*this)[dstHost] = new RoutingTableEntry(gateway, cost); + *updatedCost = cost; + updated = true; + } + + return updated; + +} + +// bool RoutingTable::remove(const std::string & dstHost) { +// bool result = false; +// RoutingTable::iterator it = this->find(dstHost); +// +// if (it != this->end()) { +// // the matching table entry has been found +// RoutingTableEntry * rte = it->second; +// delete rte; +// this->erase(it); +// result = true; +// } +// +// return result; +// +// } + + +std::ostream & operator <<(std::ostream & st, const RoutingTable & rt) { + rt.printOn(st); + + return st; +} + +void RoutingTable::printOn(std::ostream & st) const { + for (BasicRoutingTable::const_iterator i = this->begin(); + i != this->end(); + ++i) { + + st << "[route to \"" << i->first + << "\" through \"" << i->second->gateway().hostname() + << "\" with " << i->second->cost() << " hops]" << endl; + } +} + +RoutingTableEntry & RoutingTable::routingTableEntry(const std::string & host) const { + BasicRoutingTable::const_iterator it = this->find(host); + RoutingTableEntry * rte = 0; + + if (it != this->end()) { + rte = it->second; + } + + return *rte; +} + + diff --git a/Cpp/TP7_Rip/src/RoutingTable.h b/Cpp/TP7_Rip/src/RoutingTable.h new file mode 100755 index 0000000..48bcac1 --- /dev/null +++ b/Cpp/TP7_Rip/src/RoutingTable.h @@ -0,0 +1,105 @@ +/** + * #(@)RoutingTable.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#ifndef ROUTINGTABLE_H +#define ROUTINGTABLE_H + +#include + +#include "Host.h" +class Host; // fallback + +#include "RoutingTableEntry.h" +class RoutingTableEntry; // fallback + +#include "RipMessage.h" +class RipMessage; // fallback + +/** The parent class of the class RoutingTable */ +typedef std::map BasicRoutingTable; + +/** + * Represents a routing table. + * + * @author Nicolas MASSE + * @author Thomas LIMIN +*/ +class RoutingTable : public BasicRoutingTable { +public: + /** + * Constructs a new empty routing table. + */ + RoutingTable(); + + + /** + * Destructs this routing table. + */ + ~RoutingTable(); + + /** + * Tests if this routing table contains the specified host. + * + * @param host the host. + * @return true if this routing table contains the host, + * else false. + */ + bool contains(const std::string & host) const; + + /** + * Returns the routing table entry of the specified host. + * + * @param host the host. + * @return the routing table entry of the host. + */ + RoutingTableEntry & routingTableEntry(const std::string & host) const; + + /** + * Adds a routing entry to this routing table. If an entry already exists + * for this host, this function checks wether the newcost is lower in order to + * update the routing table only when necessary. + * + * @return true if the routing table has been updated, false otherwise + */ + bool update(const std::string & dstHost, Host & host, int cost, int * updatedCost); + + /** + * Prints details about the routing table on the stream. + * + * @param st the stream. + */ + void printOn(std::ostream & st) const; + +private: + +}; + +/** + * Prints the details about the routing table on the output stream. + */ +std::ostream & operator<<(std::ostream & st, const RoutingTable & rt); + +#endif /* ROUTING_TABLE_H */ diff --git a/Cpp/TP7_Rip/src/RoutingTableEntry.cpp b/Cpp/TP7_Rip/src/RoutingTableEntry.cpp new file mode 100755 index 0000000..640412d --- /dev/null +++ b/Cpp/TP7_Rip/src/RoutingTableEntry.cpp @@ -0,0 +1,53 @@ +/** + * #(@)RoutingTableEntry.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the RoutingTableEntry class. + */ + +/* + * @version 2006-01-03 + * + * @done - + * + * @todo - + */ + + +#include + +#include "RoutingTableEntry.h" + +using namespace std; + +RoutingTableEntry::RoutingTableEntry(Host & gateway, int cost) : _gateway(&gateway), _cost(cost) { } + +Host& RoutingTableEntry::gateway() const { + return (* _gateway); +} + + + + +int RoutingTableEntry::cost() const { + return _cost; +} + +void RoutingTableEntry::cost(int cost) { + _cost = cost; +} + +void RoutingTableEntry::gateway(Host & gateway) { + _gateway = &gateway; +} diff --git a/Cpp/TP7_Rip/src/RoutingTableEntry.h b/Cpp/TP7_Rip/src/RoutingTableEntry.h new file mode 100755 index 0000000..84ad19e --- /dev/null +++ b/Cpp/TP7_Rip/src/RoutingTableEntry.h @@ -0,0 +1,88 @@ +/** + * #(@)RoutingTableEntry.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Represents an entry of a routing table. + */ + +/* + * @version 2006-01-03 + * + * @done - + * + * @todo - + */ + + + +#ifndef ROUTINGTABLEENTRY_H +#define ROUTINGTABLEENTRY_H + +#include "Host.h" +class Host; // fallback + +/** + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class RoutingTableEntry { +public: + /** + * Creates a new routing table entry with the gateway and the cost specified. + */ + RoutingTableEntry(Host& gateway, int cost = 0); + + + /** + * Returns the gateway host of this routing table entry. + * + * @return the neighbour host. + */ + Host& gateway() const; + + /** + * Set the gateway + * + * @param gateway the new gateway + */ + void gateway(Host & gateway); + + + /** + * Returns the number of hops to reach the destination host. + * + * @return the number of hops needed to reach the destination host. + */ + int cost() const; + + /** + * Set the cost + * + * @param cost the new cost + */ + void cost(int cost); + +private: + /** + * The gateway. + */ + Host * _gateway; + + /** + * The number of hops to reach the destination host. + */ + int _cost; +}; + +#endif /* ROUTINGTABLEENTRY_H */ diff --git a/Cpp/TP7_Rip/src/tp7.cpp b/Cpp/TP7_Rip/src/tp7.cpp new file mode 100755 index 0000000..dcb9c90 --- /dev/null +++ b/Cpp/TP7_Rip/src/tp7.cpp @@ -0,0 +1,72 @@ +/** + * #(@)tp7.cpp ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Entry point of the project. + */ + +/* + * @version 2006-01-03 + * + * @done - + * + * @todo - + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#include "Network.h" +#include "Host.h" + +using namespace std; + +int main(int argc, char *argv[]) { + + // build a network + Network n; + if (argc > 1) { + ifstream istr(argv[1]); + n.growNetwork(istr); + } else { + n.growNetwork(cin); + } + + + cout << n << endl; + + n.sendMessage("A", "G", "Titi"); + + n.removeLinkBetween("A", "C"); + + // unused because useless + //n.broadcastTables(); + + cout << n << endl; + + n.sendMessage("A", "G", "Titi"); + + n.removeLinkBetween("F", "D"); + + cout << n << endl; + + n.sendMessage("A", "G", "Titi"); + + return 0; +} diff --git a/Cpp/TP7_Rip/templates/cpp b/Cpp/TP7_Rip/templates/cpp new file mode 100755 index 0000000..102ff47 --- /dev/null +++ b/Cpp/TP7_Rip/templates/cpp @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + diff --git a/Cpp/TP7_Rip/templates/h b/Cpp/TP7_Rip/templates/h new file mode 100755 index 0000000..3e1bb3d --- /dev/null +++ b/Cpp/TP7_Rip/templates/h @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + diff --git a/Cpp/TP7_Rip/tp7.kdevelop b/Cpp/TP7_Rip/tp7.kdevelop new file mode 100755 index 0000000..7544b51 --- /dev/null +++ b/Cpp/TP7_Rip/tp7.kdevelop @@ -0,0 +1,209 @@ + + + + Nicolas MASSE & Thomas LIMIN + nicolas27.masse@laposte.net & thomas.limin@laposte.net + 0.1 + KDevAutoProject + C++ + + C++ + Code + + + . + false + + kdevsubversion + + + + src/tp7 + debug + true + + + src/tp7 + true + build + / + ../data/test_network.txt + true + + + + + optimized + kdevgccoptions + kdevgppoptions + kdevg77options + -O2 -g0 + + + --enable-debug=full + debug + kdevgccoptions + kdevgppoptions + kdevg77options + -O0 -g3 + + + + + + + + + + + + + + + + + true + 1 + false + + 0 + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + w3c-dom-level2-html + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + qt-kdev3 + ruby + ruby_bugs + sdl + w3c-svg + sw + w3c-uaag10 + wxwidgets_bugs + + + Guide to the Qt Translation Tools + Qt Assistant Manual + Qt Designer Manual + Qt Reference Documentation + qmake User Guide + + + KDE Libraries (Doxygen) + + + + + + + + + + + + + false + false + + + *.o,*.lo,CVS + false + false + + + + + Doxygen Documentation Collection + tp7.tag + + + + + tp7 + tp7 + Tp7 + TP7 + Nicolas MASSE & Thomas LIMIN + nicolas27.masse@laposte.net & thomas.limin@laposte.net + GPL + COPYING + 0.1 + 2006 + /home/nicolas/tmp_dir/svn/artemis/tp7 + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + + set + m_,_ + theValue + false + true + + + false + 3 + /usr/qt/3 + + + + + .h + .cpp + + + + + + + libtool + + + + true + false + false + + + false + true + 10 + + + diff --git a/Cpp/TP7_Rip/tp7.kdevses b/Cpp/TP7_Rip/tp7.kdevses new file mode 100755 index 0000000..2c12aa0 --- /dev/null +++ b/Cpp/TP7_Rip/tp7.kdevses @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DB/TD1/create.sql b/DB/TD1/create.sql new file mode 100755 index 0000000..fadc55f --- /dev/null +++ b/DB/TD1/create.sql @@ -0,0 +1,29 @@ +-- categ(_codecat_, libcat) +CREATE TABLE categ ( + codecat SERIAL PRIMARY KEY, + libcat VARCHAR(50) NOT NULL +); + +-- auteur(_numaut_, identaut) +CREATE TABLE auteur ( + numaut SERIAL PRIMARY KEY, + identaut VARCHAR(50) +); + +-- livre(_numliv_, titre, codecat*, annee, nbexe) +CREATE TABLE livre ( + numliv SERIAL PRIMARY KEY, + titre VARCHAR(100) NOT NULL, + codecat INTEGER REFERENCES categ, + annee INTEGER NOT NULL, + nbexe INTEGER NOT NULL DEFAULT 1 +); + +-- ecritpar(_numliv*, numaut*_) +CREATE TABLE ecritpar ( + numliv INTEGER NOT NULL REFERENCES livre, + numaut INTEGER NOT NULL REFERENCES auteur, + PRIMARY KEY (numliv, numaut) +); + + diff --git a/DB/TD1/insert.sql b/DB/TD1/insert.sql new file mode 100755 index 0000000..a4bcbce --- /dev/null +++ b/DB/TD1/insert.sql @@ -0,0 +1,124 @@ +-- Auteurs : V.Hugo, Jean d'Ormesson, Balzac, Stendhal, Flaubert, Verlaine +INSERT INTO auteur (identaut) VALUES ('V. Hugo'); +INSERT INTO auteur (identaut) VALUES ('Jean d''Ormesson'); +INSERT INTO auteur (identaut) VALUES ('Balzac'); +INSERT INTO auteur (identaut) VALUES ('Stendhal'); +INSERT INTO auteur (identaut) VALUES ('Flaubert'); +INSERT INTO auteur (identaut) VALUES ('Verlaine'); + +-- Catégories : théatre, poésie, roman +INSERT INTO categ (libcat) VALUES ('théatre'); +INSERT INTO categ (libcat) VALUES ('poésie'); +INSERT INTO categ (libcat) VALUES ('roman'); + +-- ---------------------------------------------------------------------------- +-- Livres +-- ---------------------------------------------------------------------------- + +-- "Hernani" de V.Hugo, théatre, 1830 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Hernani', codecat, 1830 +FROM categ +WHERE libcat = 'théatre'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Hernani'), + (SELECT numaut + FROM auteur + WHERE identaut = 'V. Hugo') +); + + +-- "Les contemplations" de V.Hugo, poésie, 1856 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Les contemplations', codecat, 1856 +FROM categ +WHERE libcat = 'poésie'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Les contemplations'), + (SELECT numaut + FROM auteur + WHERE identaut = 'V. Hugo') +); + +-- "Les misérables" de V.Hugo, roman, 1860 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Les misérables', codecat, 1860 +FROM categ +WHERE libcat = 'roman'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Les misérables'), + (SELECT numaut + FROM auteur + WHERE identaut = 'V. Hugo') +); + +-- "Eugènie grandet" de Balzac, roman, 1833 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Eugénie grandet', codecat, 1833 +FROM categ +WHERE libcat = 'roman'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Eugénie grandet'), + (SELECT numaut + FROM auteur + WHERE identaut = 'Balzac') +); + +-- "Le rouge et le noir" de Stendhal, roman, 1831 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Le rouge et le noir', codecat, 1831 +FROM categ +WHERE libcat = 'roman'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Le rouge et le noir'), + (SELECT numaut + FROM auteur + WHERE identaut = 'Stendhal') +); + +-- "Madame Bovary" de Flaubert, roman, 1857 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Madame Bovary', codecat, 1857 +FROM categ +WHERE libcat = 'roman'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Madame Bovary'), + (SELECT numaut + FROM auteur + WHERE identaut = 'Flaubert') +); + +-- "Poèmes saturniens" de Verlaine, poésie, 1866 +INSERT INTO livre (titre, codecat, annee) +SELECT 'Poèmes saturniens', codecat, 1866 +FROM categ +WHERE libcat = 'poésie'; + +INSERT INTO ecritpar (numliv, numaut) VALUES ( + (SELECT numliv + FROM livre + WHERE titre = 'Poèmes saturniens'), + (SELECT numaut + FROM auteur + WHERE identaut = 'Verlaine') +); + + diff --git a/DB/TP1_OrdresSQL/create.sql b/DB/TP1_OrdresSQL/create.sql new file mode 100755 index 0000000..93fc566 --- /dev/null +++ b/DB/TP1_OrdresSQL/create.sql @@ -0,0 +1,80 @@ +-- +-- create.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Creation des tables +-- + +-- +-- Version : 0.0.1 +-- +-- Fait : - +-- +-- A faire : - +-- + + +-- genre(_numg_, nomg) +-- numg : identifiant de genre +-- nomg : nom du genre +CREATE TABLE genre ( + numg INTEGER PRIMARY KEY, + nomg VARCHAR(80) NOT NULL +); + +-- com(_numc_, identc) +-- numc : identifiant de comedien +-- identc : nom et prenom du comedien +CREATE TABLE com ( + numc INTEGER PRIMARY KEY, + identc VARCHAR(30) NOT NULL +); + +-- realis(_numr_, identr) +-- numr : identifiant du realisateur +-- identr : nom et prenom du realisateur +CREATE TABLE realis ( + numr INTEGER PRIMARY KEY, + identr VARCHAR(30) NOT NULL +); + +-- film(_numf_, titre, numg*, annee, numr*, resume) +-- numf : identifiant du film +-- titre : titre du film +-- numg : identifiant du genre, reference la table genre +-- annee : annee de sortie du film +-- numr : identifiant du realisateur du film, reference la table realis +-- resume : resume du film +CREATE TABLE film ( + numf INTEGER PRIMARY KEY, + titre VARCHAR(80) NOT NULL, + numg INTEGER NOT NULL REFERENCES genre, + annee INTEGER NOT NULL DEFAULT date_part('year', now()) + CHECK (annee > 1850 + AND annee <= date_part('year', now()) + ), + numr INTEGER NOT NULL REFERENCES realis, + resume TEXT +); + +-- role(_numc*, numf*_) +-- numc : identifiant du comedien, reference la table com +-- numf : identifiant du film, reference la table film +CREATE TABLE role ( + numc INTEGER NOT NULL REFERENCES com, + numf INTEGER NOT NULL REFERENCES film, + PRIMARY KEY (numc, numf) +); + + diff --git a/DB/TP1_OrdresSQL/delete_data.sql b/DB/TP1_OrdresSQL/delete_data.sql new file mode 100755 index 0000000..4593923 --- /dev/null +++ b/DB/TP1_OrdresSQL/delete_data.sql @@ -0,0 +1,32 @@ +-- +-- delete_data.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Supprime toutes les donnees des tables +-- + +-- +-- Version : 1.0 +-- +-- Fait : - +-- +-- A faire : - +-- + +DELETE FROM role; +DELETE FROM film; +DELETE FROM com; +DELETE FROM realis; +DELETE FROM genre; + diff --git a/DB/TP1_OrdresSQL/drop_table.sql b/DB/TP1_OrdresSQL/drop_table.sql new file mode 100755 index 0000000..57f2c2f --- /dev/null +++ b/DB/TP1_OrdresSQL/drop_table.sql @@ -0,0 +1,32 @@ +-- +-- drop_table.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Supprime les tables +-- + +-- +-- Version : 1.0 +-- +-- Fait : - +-- +-- A faire : - +-- + +DROP TABLE role; +DROP TABLE film; +DROP TABLE realis; +DROP TABLE com; +DROP TABLE genre; + diff --git a/DB/TP1_OrdresSQL/dump/cinema.com b/DB/TP1_OrdresSQL/dump/cinema.com new file mode 100755 index 0000000..c077bb2 --- /dev/null +++ b/DB/TP1_OrdresSQL/dump/cinema.com @@ -0,0 +1,1410 @@ +-- +-- PostgreSQL database dump +-- + +SET client_encoding = 'SQL_ASCII'; +SET check_function_bodies = false; +SET client_min_messages = warning; + + + +-- +-- Data for Name: com; Type: TABLE DATA; Schema: limin; Owner: limin +-- + +COPY com (numc, identc) FROM stdin; +1 CELLIER Caroline +2 LANGLET Daniel +3 ARDITI Pierre +4 MARION Madeleine +5 ECOFFEY Jean-Philippe +6 BAYE Nathalie +7 MALAVOY Christophe +8 MNICH Genevieve +9 HARRIS Julie +10 BLOOM Claire +11 JOHNSON Richard +12 TAMBLYN Rus +13 MAXWELL Lois +14 BREL Jacques +15 HARDEN Jacques +16 RIVA Emmanuelle +17 NEIL Nathalie +18 DONAT Robert +19 CAROLL Madeleine +20 MANNHEIM Lucy +21 ASHCROFT Peggy +22 BRIALY Jean-Claude +23 CASSEL Jean-Pierre +24 DORLEAC Francoise +25 GARCIN Henri +26 GRAD Genevieve +27 LE POULAIN Jean +28 PROSLIER Jean-Marie +29 MONTAND Yves +30 SIGNORET Simone +31 PERIER Francois +32 SANDRELLI Stefania +33 CARRIERE Mathieu +34 GLOWNA Vadim +35 BONNAIRE Sandrine +36 DE LA BROSSE Simon +37 KECHICHE Abdel +38 ONFROY Stephane +39 PHILIPE Gerard +40 LOLLOBRIGIDA Gina +41 ROQUEVERT Noel +42 HUSSENOT Olivier +43 HERRAND Marcel +44 TENNBERG Jean-Marc +45 PAREDES Jean +46 ROLLAN Henri +47 PAGE Genevieve +48 BERNARDI Nerio +49 PELAYO Sylvie +50 ANYS Georgette +51 CUSHING Peter +52 LEE Christopher +53 GOUGH Michael +54 STRIBLING Melissa +55 MARSH Carol +56 VAN EYSSEN John +57 DICKIE Olga +58 GAUNT Valerie +59 MURPHY Audie +60 MAULDIN Bill +61 DICK Douglas +62 DANO Royal +63 DIERKES John +64 HUNNICUTT Arthur +65 DEVINE Andy +66 DURANT Tim +67 STRANGE Glenn +68 BALLEW Smith +69 JOLLEY Stanford +70 WHITE Dan +71 NOLTE Nick +72 BOOTHE Powers +73 IRONSIDE Michael +74 ALSONSO Maria +75 BERRY Richard +76 YANNE Jean +77 DELUC Xavier +78 BRUNAUX Olivia +79 HACKMAN Gene +80 STREISAND Barbra +81 LADD Diane +82 QUAID Dennis +83 DOBSON Kevin +84 BELVAUX Lucas +85 AUMONT Jean-Pierre +86 CARMET Jean +87 COTTON Eve +88 DREYFUS Jean-Claude +89 DUBOIS Jean-Paul +90 DENIS Jacques +91 KALFON Jean-Pierre +92 MESGUICH Daniel +93 STEVENIN Jean-Francois +94 THIBAULT Jean-Marc +95 BLOCH Bernard +96 BOUILLETTE Christian +97 BUKOWSKI Julien +98 DRAY Albert +99 IBANEZ Roger +100 LAUGHTON Charles +101 O'HARA Maureen +102 HARDWICKE Cedric +103 MITCHELL Thomas +104 O'BRIEN Edmond +105 HAMPDEN Walter +106 MARSHALL Alan +107 DAVENPORT Harry +108 ZUCCO George +109 WHITNEY Helen +110 GOMBELL Minna +111 LA ROCQUE Rod +112 HOHL Arthur +113 TOBIAS George +114 NEWMAN Paul +115 CRUISE Tom +116 MASTRANTONIO Mary-Elisabeth +117 SHAVER Helen +118 TURTURRO John +119 BRENNAN Eileen +120 KAHN Madeline +121 LLOYD Christopher +122 MC KEAN Michael +123 MULL Martin +124 WARREN Lesley Ann +125 VING Lee +126 CONNERY Sean +127 ST JOHN Jill +128 GRAY Charles +129 LEE Bernard +130 MORIN Michel +131 GIRAUD Roland +132 PASCAL Christine +133 LEGROS Stephane +134 CORNILLAC Clovis +135 THUILLIER Luc +136 MARECHAL Marcel +137 MARTIAL Jacques +138 ROSSELI Bernard +139 GABAY Nathalie +140 DOUGLAS Kirk +141 LANCASTER Burt +142 DURNING Charles +143 SMITH Alexis +144 CARVEY Dana +145 SCHWARZENEGGER Arnold +146 NIELSEN Brigitte +147 BERGMAN Sandahl +148 SMITH Paul +149 REYES Ernie +150 REYNOLDS Burt +151 BERGEN Candice +152 SEGAL George +153 PEREZ Jose +154 BRASSEUR Claude +155 ZABOU +156 GELIN Daniel +157 BORGEAUD Nelly +158 ADELIN Jean-Claude +159 ALLEN Woody +160 CARRADINE John +161 JACOBI Lou +162 LASSER Louise +163 QUAYLE Anthony +164 ENGLUND Robert +165 YORRENS Tania +166 DESMOUCEAUX Georgy +167 MERCIER Chantal +168 GOLDMAN Philippe +169 STALLONE Sylvester +170 SHIRE Talia +171 YOUNG Burt +172 WEATHERS Carl +173 MISTER T +174 EASTWOOD Clint +175 ALEXANDER Jane +542 KINSKI Klaus +177 TORN Rip +178 CARA Irene +179 DETMERS Maruschka +180 PLACIDO Michele +181 DIEGO Juan +182 PICCOLI Michel +183 SERRAULT Michel +184 DUNOYER Francois +185 FLON Suzanne +186 FRESSON Bernard +187 DAVIS Bette +188 RICHARDS Kim +189 EISENMANN Ike +190 CLAYBURGH Jill +191 STERNHAGEN Frances +192 PENDLETON Austin +193 BOUYX Evelyne +194 BOISSON Christine +195 COX Ronny +196 BESCH Bibi +197 CLEMENS Paul +198 LANVIN Gerard +199 BUSIA Akosua +200 BROOKS Richard +201 KILLING Laure +202 BLANCHE Roland +203 HARARI Clement +204 NORRIS Chuck +205 SOON-TECK Oh +206 WILLIAMS Steven +207 OHTA Bennett +208 COSTA Cosie +209 TERRY Joe Michael +210 HALL Anthony Michael +211 LE BROCK Kelly +212 SMITH Llan Mitchell +213 PAXTON Bill +214 SNYDER Suzanne +215 DUNNE Griffin +216 ARQUETTE Rosanna +217 BLOOM Verna +218 CHONG Thomas +219 BALASKO Josiane +220 DE BANKOLE Isaach +221 HOLGADO Ticky +222 OLIVIER Patrick +223 LEAUD Jean-Pierre +224 BRODERICK Matthew +225 RUCK Alan +226 SARA Mia +227 JONES Jeffrey +228 GREY Jennifer +229 PICKET Cindy +230 WARD Lyman +231 VANEL Charles +232 GREY Denise +233 MAILLAN Jacqueline +234 LAFONT Bernadette +235 HUPPERT Isabelle +236 WILSON Lambert +237 RADZIWILOWICZ Jerzy +238 SHARIF Omar +239 LEMMON Jack +240 MATTHAU Walter +241 EVANS Monica +242 SHELLEY Carole +243 DELON Alain +244 BOURVIL Andre +245 MICHEL Dominique +246 BERRYMAN Dorothee +247 PORTAL Louise +248 RIOUX Genevieve +249 CURZI Pierre +250 GIRARD Remy +251 JACQUES Yves +252 BRIERE Daniel +253 CRAIN Jeanne +254 BRICE Pierre +255 BARRYMORE John Drew +256 MITCHELL Gordon +257 DE VITO Danny +258 MIDLER Bette +259 REINHOLD Judge +260 SLATER Helen +261 MORRIS Anita +262 DEWAERE Patrick +263 GOLDSMITH Clio +264 MOREAU Jeanne +265 MARCHAND Guy +266 DUX Pierre +267 MODINE Matthew +268 CAGE Nicolas +269 HARKINS John +270 BARON Sandy +271 YOUNG Karen +272 VALLI Alida +273 DUFILHO Jacques +274 TORNADE Pierre +275 LUNDGREN Dolph +276 DUEZ Sophie +277 MAUREL Julien +278 CAROIT Philippe +279 GERE Richard +280 EICHHORN Lisa +281 REDGRAVE Vanessa +282 DEVANE William +283 VENNERA Chick +284 MORGAN Wendy +285 BRUEL Patrick +286 BROCHET Anne +287 BLANCHOT Agnes +288 HELD Ingrid +289 COLLETTE Yann +290 SENTIER Jean-Pierre +291 FONTES Guiherme +292 GONCALVES Milton +293 FERREIRA Taumaturgo +294 WILTGEN Ana Beatriz +295 TRINDADE Ze +296 PIRES Miriam +297 HOGAN Paul +298 KOZLOWSKI Linda +299 STEEBURGER Mary +300 NICHOLSON Jack +301 D'ANGELO Beverly +302 FELL Norman +303 DOOLEY Paul +304 WAKABAYASHI Akiko +305 TMABA Tetsuro +306 HAMA Mie +307 SHIMADA Teru +308 MURPHY Eddie +309 DANCE Charles +310 LEWIS Charlotte +311 PERKINS Anthony +312 SCARWID Diana +313 FAHEY Jeff +314 MAXWELL Roberta +315 GILLIN Hugh +316 BAYER Gary +317 LAUTERBACH Heiner +318 OSCHSENKNECHT Uwe +319 KRIENER Ulrike +320 MAGIMEL Benoit +321 VINCENT Helene +322 WILMS Andre +323 GARNER James +324 SPRADLIN G.D. +325 JONES Shirley +326 HOWELL C. Thomas +327 CRENNA Richard +328 NIKSON Julie +329 NAPIER Charles +330 BERKOFF Steven +331 PENN Sean +332 SANTONI Reni +333 MORALES Esai +334 DREYFUSS Richard +335 ANSPACH Susan +336 HOFFMANN Dustin +337 GOLINO Valeria +338 DENEUVE Catherine +339 DUSSOLIER Andre +340 LAMOTTE Martin +341 CHAPLIN Charlie +342 CHERRILL Virginia +343 MYERS Harry +344 BRONSON Charles +345 RAFFIN Deborah +346 LAUTER Ed +347 RENUCCI Robin +348 TRAN Marguerite +349 ANDREWS Harry +350 BANNEN Ian +351 LYNCH Alfred +352 MANESSE Gaspard +353 FETJO Raphael +354 MORIER-GENOUD Philippe +355 CHAULET Emmanuelle +356 RENOIR Sophie +357 VIELLARD Eric +358 GENDRON Francois-Eric +361 WATERSTON Sam +359 CLUZET Francois +360 SCOTT-THOMAS Kristin +362 NGOR Haing S. +363 BARRAULT Marie-Christine +364 CREMER Bruno +365 BONNET Stephane +366 PRADAL Bruno +367 DAFOE Willem +368 FONDA Jane +369 VOIGHT Jon +370 DERN Bruce +371 GODDARD Paulette +372 BERGMAN Henry +373 BERENGER Tom +374 PARE Michael +375 FERREOL Andrea +376 BRENER Muriel +377 CHESNAY Patrick +378 TILLY Meg +379 DERRICKS Cleavant +380 OLIVIER Laurence +381 NIVEN David +382 BOHRINGER Richard +383 HUBERT Antoine +384 HUBERT Julien +385 PACINO Al +386 SUTHERLAND Donald +387 KINSKI Nastassja +388 LANGMANN Thomas +389 PSZONIAK Wojtek +390 GIRAUDI Nicolas +391 MORIARTY Michael +392 SNODGRESS Carrie +393 DE NIRO Robert +394 KEITEL Harvey +395 PROVAL David +396 BEALS Jennifer +397 NOURI Michael +398 BAUER Belinda +399 BILLINGSLEY Jennifer +400 BEATTY Ned +401 HOPKINS Bob +402 LLOYD Emily +403 BELL Tom +404 DURHAM Geoffrey +405 HEYWOOD Pat +406 CAAN James +407 SORVINO Paul +408 HUTTON Lauren +409 CARNOVSKY Morris +410 BROOKES Jacqueline +411 ROURKE Mickey +412 RAMPLING Charlotte +413 DICKSON Neil +414 HYDE-WHITE Alex +415 HUTCHINSON Fiona +416 GASPERITSCH Vincent +417 NEGRET Francois +418 HEREDIA Lisa +419 REED Oliver +420 OAKLAND Simon +421 DE MORNAY Rebecca +422 ARMSTRONG Curtis +423 LEROY-BEAULIEU Philippine +424 MARTIN Remi +425 CHAUMETTE Monique +426 SAINT-JEAN Guy +427 BLANC Michel +428 BATES Alan +429 DAVIS Sammi +430 FULFORD Christopher +431 CODURI Camille +432 CLEES John +433 LEE CURTIS Jamie +434 KLINE Kevin +435 PALIN Michael +436 ANTONUTTI Omero +437 ROEL Gabriela +438 HAGERTY Julie +439 HAYS Robert +440 GRAVES Peter +441 STACK Robert +442 DARMON Gerard +443 JEANNERET Anais +444 COMBENEGRE Philippe +445 SAVAGE John +446 WILLIAMS Treat +447 DE BAYSER Clotilde +448 GOLDEN Annie +449 KHORSAND Philippe +450 AUDRAN Stephane +451 MOEST Veronique +452 PECK Gregory +453 FLANDERS Ed +454 O'HERLIHY Dan +455 POIRET Jean +456 GALIENA Anna +457 STEFFEN Valerie +458 AFONSO Yves +459 SCHMIDT Odile +460 GARY Lorraine +461 GUEST Lance +462 VAN PEEBLES Mario +463 CAINE Michael +464 DANGERFIELD Rodney +465 KELLERMAN Sally +466 GORDON Keith +467 WHITEHEAD Paxton +468 DOWNEY Robert Jr +469 WALKEN Christopher +470 MASTERSON Mary Stuart +471 PENN Christopher +472 PERKINS Millie +473 RYAN Eileen +474 DE LUISE Dom +475 WOODWARD Joanne +476 FIELD Sally +477 LAMBERT Christophe +478 STAMP Terence +479 BOSCHI Giula +480 ACKLAND Joss +481 CALHOUN Rory +482 MASSARI Lea +483 MARCHAL Georges +484 KARR Mabel +485 JONES Tommy Lee +486 HAMILTON Linda +487 VAUGHN Robert +488 PIGNET Christine +489 MONS Maurice +490 BOUCHITEY Patrick +820 SMITH Kurtwood +492 DUCASSE Cecile +493 BACRI Jean-Pierre +494 ALDA Alan +495 HARRIS Barbara +496 STREEP Meryl +497 STAPEL Huub +498 VAN AMMELROOY Willeke +499 VAN DALSUM Josine +500 ROMER Piet +501 VEERMAN Hans +502 BOMPOIL Michel +503 PHILIPE Anne-Marie +504 CARRILLO Elpidia +505 DUKE Bill +506 BIRKIN Jane +507 DEMY Mathieu +508 GAINSBOURG Charlotte +509 ANGLADE Jean-Hugues +510 CELARIE Clementine +511 TAUSIG Otto +512 KEATON Michael +513 BASSINGER Kim +514 VOLONTE Gian-Maria +515 ABATANLUONO Diego +516 LIOTARD Therese +517 POLIMENO Santo +518 KEITH David +519 PROSKY Robert +520 BABCOCK Barbara +521 LONE John +522 O'TOOLE Peter +523 CHEN Joan +524 RUOCHENG Ying +525 STOLZ Eric +526 CARRICO Monica +527 MARGOLIN Stuart +528 BRADFORD Richard +529 HARRIS Ed +530 WHALLEY Joanne +578 BRAUNDAUER Klaus Maria +532 SUCHET David +533 McGILLIS Kelly +534 KILMER Val +535 EDWARDS Anthony +536 SKERRITT Tom +828 HEARD John +538 AUTEUIL Daniel +539 MARIELLE Jean-Pierre +540 LAVANANT Dominique +541 LINDON Vincent +176 VOYAGIS Yorgo +543 WINGER Debra +544 RUSSEL Theresa +545 FREY Sami +546 HOPPER Dennis +547 WILLIAMSON Nicol +548 NOIRET Philippe +549 AZEMA Sabine +550 BROOKS Mel +551 CANDY John +552 MORANIS Rick +553 PULLMAN Bill +554 WINSLOW Michael +555 ZUNIGA Daphne +556 VAN PATTEN Dick +557 ASTIN Sean +558 BROLIN Josh +559 COHEN Jeff +560 FELDMAN Corey +561 BIEHN Michael +562 DEPARDIEU Gerard +563 CARDONE Nathalie +564 LAZENBY George +565 RIGG Diana +566 SAVALAS Telly +567 BORIENKO Yuri +568 JOBERT Marlene +569 DUTRONC Jacques +570 FOSSEY Brigitte +571 GALLIGAN Zach +572 CATES Phoebe +573 AXTON Hoyt +574 HOLLIDAY Polly +575 LEE McCAIN Frances +576 BRADY Scott +577 FORD Harrison +531 KEATON Diane +579 VILLERET Jacques +580 DARLAN Eva +581 SEREYS Jacques +582 HIEGEL Catherine +583 BOUDET Jacques +584 HURT William +585 MATLIN Marlee +586 LAURIE Piper +587 BOSCO Philip +588 GOMPF Allison +589 CLEARY John F. +590 SEYMOUR Jane +591 BALMER Jean-Francois +592 SEWERIN Andrzej +593 BASLER Marianne +594 USTINOV Peter +595 MILES Sarah +596 RICE-EDWARDS Sebastien +597 HAYMAN David +598 O'CONNOR Derrick +599 WOOLRIDGE Susan +600 WASSON Craig +601 GRIFFITH Melanie +602 HENRY Gregg +603 SHELTON Deborah +604 BOYD Guy +605 FRANZ Dennis +606 BARKIN Ellen +607 SMITH Ebbe Roe +608 GLENN Scott +609 COSTNER Kevin +610 GLOVER Danny +611 SAGERBRECHT Mariane +612 POUNDER C.C.H. +613 PALANCE Jack +614 KAUFMANN Christine +615 CALHOUN Monica +616 FLAGG Darron +617 AQUILAR George +618 BISSET Jacqueline +619 PEREZ Vincent +620 SILVER Veronique +621 LAMBRECHT Yves +622 PERRIN Jacques +623 CASCIO Salvatore +624 BOURGINE Elisabeth +625 LEOTARD Philippe +626 LUCCHINI Fabrice +629 MAC Lachlan Kyle +630 CHRISTIAN Claudia +631 FELDER Clarence +632 GULAGER Clu +633 MULKEY Chris +634 FREMONT Thierry +635 KAPRISKY Valerie +636 KALFA Steve +637 KERBOUL Yves +638 ROBERTSON Cliff +639 McMILLAN Kenneth +640 GIBB Cynthia +641 DANIELS Jeff +642 STAPLETON Maureen +643 CHANNING Stockard +644 MASUR Richard +793 WEBER Jacques +646 BONO Sonny +647 BURR Raymond +648 CONNORS Chuck +649 SHATNER William +650 GOLDBERG Whoopi +651 COLLINS Stephen +652 WOOD John +653 KANE Carol +654 POTTS Annie +655 GOETZ Peter Michael +656 GARCIA Nicole +657 STANCZAK Wadeck +658 PRANDI F. Romana +659 BARRAULT Jean-Louis +660 RENAUD Madeleine +661 BRANDAUER Klaus-Maria +662 LOGGIA Robert +663 BLAKELY Susan +664 ZUMWALT Rick +665 MENDENHALL D. +666 McCARTY Chris +667 TOGNAZZI Ugo +668 GALABRU Michel +669 LUKE Benny +670 WILBY James +671 GRANT Hugh +672 GRAVES Rupert +673 ELLIOTT Denholm +674 TANDY Mark +675 THOMAS-HOWELL C. +676 TAYLOR Elizabeth +677 WARD Sophie +678 RHYS-DAVIES John +679 SHEEN Martin +680 NIMOY Leonard +681 KELLEY DeForest +682 DOOHAN James +683 NICHOLS Michelle +684 MACCHIO Ralph +685 MASON Marsha +686 YOUNG Sean +687 PATTON Will +688 ROBARDS Jason +689 GOODMAN Dody +690 TRINTIGNANT Marie +691 TAVERNIER Nils +692 BUNEL Marie +693 ADJANI Isabelle +694 GREVILLE Laurent +695 CUNY Alain +696 ROBINSON Madeleine +697 LEBRUN Daniele +698 HUSTON Angelica +699 JONES James Earl +700 JUGNOT Gerard +701 GLASS Ann-Gisel +702 FULLER Samuel +703 REED Ricky Addison +704 PHILLIPS Lou Diamond +705 DE SOTTO Rosana +706 PENA Elizabeth +707 VON ZERNECK Danielle +708 CHER +709 GARDENIA Vincent +710 DUKAKIS Olympia +711 AIELLO Danny +712 MAAS Hidde +713 VAN DE VEN Monique +714 VALCKE Serge-Henri +715 HARRIS Richard +716 EGGAR Samantha +717 BANCROFT Anne +718 GELINAS Gratien +719 ARCAND Gabriel +720 FABIAN Francoise +721 BRIDGES Jess +722 GLOSE Glenn +723 COYOTE Peter +725 TAYLOR-YOUNG Leigh +726 DENNER John +727 LEE Tommy +728 PLIMTON Martha +729 DENNEHY Brian +730 SMITH Shawn +731 ATKINS Tom +732 CAMPBELL Bruce +733 Z'DAR Robert +734 LANDON Laurence +735 FEUER Debra +736 HUTTON Thimothy +737 CROUSE Lindsay +738 HASSET Marilyn +739 BRIDGES Beau +740 MONTGOMERY Belinda J. +741 BRYANT William +742 GOLDBLUM Jeff +743 DAVIS Geena +744 GETZ John +745 BOUSHEL Joy +746 CARLSON Les +747 CRONENBERG David +748 DORF Stephen +749 DENTON Christa +750 TRIPP Louis +751 DELEMARE Lise +752 MERCURE Jean +753 FERRAN Catherine +754 WEAVER Fritz +755 CORBETT Gretchen +756 KORKES Jon +757 LAFONT Jean-Philippe +758 FEDERSPIEL Brigitte +759 KJER Bodil +760 KULLE Jarl +761 ANDERSON Bibi +762 RICH Claude +763 DEMIANS Virginie +764 LORENT Ariane +765 BAUER Steven +766 WILLIAMS Barbara +767 CARUSO David +768 EBERSOLE Christine +769 WENDT George +770 MIOU-MIOU +771 CASARES Maria +772 ROYER Regis +773 HUNT Helen +774 SADLER Bill +775 BRIDGES Jeff +776 ALLEN Karen +777 SMITH Charles M. +778 JAECKEL Richard +779 BISSON Jean-Pierre +780 GOSSETT Loui Jr +781 WIDMARK Richard +782 HUNTER Holly +783 SENECA Joe +784 FOSTER Eric +785 VALENTINE Kim +786 LEE Ida +787 ROCHEFORT Jean +788 BLANC Dominique +789 ARPIN Regis +790 BEHAR David +791 CALFA Don +792 BATEMAN Suzanne +645 BERTIN Roland +794 CASSEL Jacqueline +795 SCIALLA Freel +796 SHORT Martin +797 RYAN Meg +798 McCARTHY Kevin +799 LEWIS Fiona +800 WELLS Vernon +801 BARYSHNIKOV Mikhael +802 HINES Gregory +803 SKOLIMOWSKI Jerzy +804 ROSSELLINI Isabella +805 MIRREN Helen +806 STEENBURGEN Mary +807 McDOWALL Roddy +808 RUBES Jan +809 RUSS William +810 LYNCH Richard +811 PROPHET Melissa +812 ZALE Alexander +813 BEZACE Didier +814 O'NEAL Tatum +815 MACNICHOL Kristy +816 DILLON Matt +817 AVERY Margaret +818 WINFREY Oprah +819 PUGH Willard +491 WELLER Peter +821 WELD Tuesday +822 NELSON Willie +823 BELUSHI James +824 SIGNORELLI Tom +825 FARROW Mia +826 WIEST Dianne +827 STRITCH Elaine +537 BLAIR Betsy +829 ALLEN Nancy +830 O'ROURKE Heather +831 RUBINSTEIN Zelda +832 RICHARD Firmine +833 VERNIER Pierre +834 LEOUX Maxime +835 PRIVAT Gilles +836 COMBEAU Muriel +837 SCOTT George C. +838 VAN DEVERE Trish +839 DOUGLAS Melvyn +840 BELMONDO Jean-Paul +841 ANCONINA Richard +842 LIO +843 STANTON Harry Dean +844 ESTEVEZ Emilio +845 WALTER Tracey +846 BARASH Olivia +847 O'NEAL Ryan +848 BERENSON Marisa +849 MAGEE Patrick +850 KRUGER Hardy +851 ROGERS Mimi +852 BRACCO Lorraine +853 ORBACH Jerry +854 WILLIAMS Robin +855 WHITAKER Forest +856 TRAN Tung Thanh +857 SUKAPATANA Chintara +858 ADDAMS Dawn +859 JOHNSTON Oliver +860 CHAPLIN Michael +861 AUDLEY Maxime +862 GREEN Harry +863 AYKROYD Dan +864 HANKS Tom +865 PLUMMER Christopher +866 MORGAN Harry +867 GARFUNKEL Art +868 REGGIANI Serge +869 CATALIFO Patrick +870 SINGER Marc +871 UNGER Joe +872 BROOKS Albert +873 DE ALMEIDA Joachim +874 KINGSLEY Ben +875 SARANDON Susan +876 STAPLETON Jean +877 VAN DAM Jose +878 ROUSSEL Anne +879 VOLTER Philippe +880 ANHOLT Christian +881 WEST Samuel +882 BUCKLEY Betty +883 SEIGNER Emmanuelle +884 MAHONEY John +885 KLEIN Gerard +886 PINON Dominique +887 DHARKER Ayesha +888 SANDS Julian +889 LONG Shelley +893 GOSSET Louis Jr. +894 GEDRICK Jason +895 THOMERSON Tim +896 CARTER Helena Bonham +897 ELWES Cary +898 BALE Christian +899 MALKOVITCH John +900 RICHARDSON Miranda +901 HAVERS Nigel +902 PANTOLIANO Joe +903 DALLE Beatrice +904 FREISS Stephane +906 TWOMEY Anne +907 HARPER Jessica +908 MADONNA +909 MORRIS Haviland +910 HUTTON Timothy +911 GIBSON Mel +912 BUSEY Gary +913 RYAN Mitchell +914 LOVE Darlene +915 LANOUX Victor +916 BLANC Eric +917 FRANCOIS Jacques +918 GUTTENBERG Steve +919 McGOVERN Elizabeth +920 SHENAR Paul +921 POITIER Sidney +922 BROWN Clancy +923 ALLEY Kirstie +924 JOUVET Louis +925 SIMON Michel +926 FRANCEN Victor +927 OZERAY Madeleine +928 STROH Valerie +929 BERTELOOT Jean-Yves +930 BONNAFFE Jacques +931 CHAPUIS Pierre-Alain +932 SCOB Edith +933 HARRISON Gregory +934 WHITELEY Arkie +935 KERR Bill +936 HAYWOOD Chris +937 ARGUE David +938 MORRIS Judy +939 SMITH Charles Martin +940 GARCIA Andy +941 SORIANO Pepe +942 SAZATORNIL Jose +943 LAMPREAVE Chus +944 CODESCO Manolo +945 PRICE Jonathan +946 PALIN Michel +947 GREIST Kim +948 BALDWIN Alec +949 NEILL Sam +950 PORTER Eric +951 REES Angharad +952 MERROW Jane +953 BELUSHI Jim +954 BOYLE Peter +955 O'ROSS Ed +956 BRIGHT Richard +957 HAUER Rutger +958 KRABBE Jeroen +959 DE LINT Derek +960 LOCKE Sondra +961 BAIRD Sharon +962 TOWSEND Robert +963 GRAHAM Guerrit +964 TOMITA Tamlyn +965 BASINGER Kim +966 DZUNDZA George +967 BASABARA Gary +968 OLIVER David +969 URSITTI Susan +970 MARKHAM Monte +971 PFEIFFER Michelle +972 LIOTTA Ray +973 PESCI Joe +974 WARD Fred +975 THURMAN Una +976 DE MEDEIROS Maria +977 DE CAPITANI Grace +978 ABASCAL Margot +979 LHERMITTE Thierry +980 SARDOU Michel +982 DOUGLAS Michael +983 SHEEN Charlie +984 HANNAH Daryl +985 BLACK Karen +986 NESBITT Cathleen +987 HAWKINS Jack +988 COLLINS Joan +989 HEMIGWAY Mariel +990 McGILL Everett +991 GUNN Moses +992 HECKART Eileen +993 SVENSON Bo +994 OLBRYCHSKI Daniel +995 LABOURIER Dominique +996 CHICOT Etienne +997 HANIN Roger +998 VAN UCHELEN Marc +999 VAN DER LUBBE Huub +1000 BAKER Carrol +1001 O'KEEFE Michael +1002 VENORA Diane +1003 WAITS Tom +1004 GIRARDOT Annie +1005 CLEMENT Aurore +1006 BAUCHAU Patrick +1007 CAREL Roger +1008 SOMMER Josef +1009 THOMPSON Brian +1010 ROBINSON Andrew +1011 HERZFELD John +1012 CLARKSON Patricia +1013 NEESON Liam +1014 KIM Evan C. +1015 HUNT David +1016 BEART Emmanuelle +1017 HOSSEIN Robert +1018 BAUSSON Mona +1019 TURNER Kathleen +1020 WRIGHT Amy +1021 DUDIKOFF Michael +1022 JAMES Steve +1023 CONWAY Gary +1024 BOTES Michelles +1025 PARADIS Vanessa +1026 MIKAEL Ludmilla +1027 MOORE Roger +1028 BOUQUET Carole +1029 TOPOL +1030 JOHNSON Lynn-Holly +1031 GLOVER Julian +1032 DE CAUNES Antoine +1033 DINEV Patricia +1034 NOEL Magali +1035 GIRARDOT Hippolyte +1036 PERRIER Mireille +1037 ATTAL Yvan +1038 CARRADINE David +1039 ROUNDTREE Richard +1040 MAURIER Claire +1041 AUFFAY Patrick +1042 REMY Albert +1043 WILLIS Bruce +1044 RICKMAN Alan +1045 BEDELIA Bonnie +1046 GODOUNOV Alexander +1047 MUTI Ornella +1048 MANTEGNA Joe +1049 DUNAWAY Faye +1050 BACALL Michael +1051 HALLYDAY David +1052 CARTER T.K. +1053 TILLY Jennifer +1054 MISHA McK +1055 CLENNON David +1056 PHOENIX River +1057 STEELE Jadrien +1058 DONNADIEU Bernard-Pierre +1059 BERVOETS Gene +1060 TER STEEGE Johanna +1061 ECKHAUS Gwen +1063 HENRY Judith +1064 GARREL Maurice +1065 LANDGREBE Gudrun +1066 LYNCH Kelly +1067 HOPKINS Anthony +1068 McRAE Frank +1069 FOX James +1070 TOKUDA Marilyn +1071 WEYERS Marius +1072 OBERON Elan +1073 ALEONG Aki +1074 WISE William +1075 LOPEZ Gerry +1076 MOSCOW David +1077 PERKINS Elizabeth +1078 HUSHTON Jared +1079 LOVITZ Jon +1080 ALONSO Maria-Conchita +1081 KOTTO Yaphet +1082 VENTURA Jesse +1083 SPADER James +1084 STUBBS Neil +1085 COLLIN Melodie +1086 MAGNET Cecile +1087 BERMAN Marc +1088 FROT Catherine +1089 IRONS Jeremy +1090 BUJOLD Genevieve +1091 VON PALLESKE Heidi +1092 GORDON Barbara +1093 DOUGLAS Shirley +1094 BROWN Bryan +1095 SHUE Elizabeth +1096 BANES Lisa +1097 LUCKINBILL Laurence +1098 MUSY Alain +1099 DUCREUX Louis +1100 FLOERSHEIM Patrick +1101 THOMPSON Lea +1102 DILLON Melinda +1103 STERN Daniel +1104 WEAVER Sigourney +1105 MILUWI John Omirah +1106 CUTHBERTSON Iain +1107 HERSHEY Barbara +1108 KAZAN Lainie +1109 HALLIER Lori +1110 DAVID Lolita +1111 IVEY Judith +1112 SALENGER Meredith +1113 CUSACK John +1114 WISE Ray +1115 BOTTOMS Timothy +1116 FOX Edward +1117 NAKADAI Tatsuya +1118 TATE Nick +1119 Mc DONNEL Mary +1120 GREEN Graham +1121 O'NEAL Tricia +1122 MARACHUK Steve +1123 HENRIKSEN Lance +1124 PAULL Ricky G. +1125 GRIMES Scott +1126 OPPER Don +1127 CURTIS Liane +1128 CORBIN Barry +1129 BATAILLE Julie +1130 PAGNY Florent +1131 KARYO Tcheky +1132 LANE Diane +1133 WOODS Michael +1134 SMITH Cotter +1135 NEVARGIC Peter +1136 PENN Edward +1137 LANG Stephen +1138 LEIGH Jennifer Jason +1139 ARQUETTE Alexis +1140 DOBSON Peter +1141 BALDWIN Stephen +1142 LORING James +1143 HARMON Mark +1144 THOMAS Robin +1145 LABORTEAUX Patrick +1146 NORTON Terry +1147 LEPLAT Ted +1148 ROWLANDS Gena +1149 HOLM Ian +1150 DANNER Blythe +1151 YULIN Harris +1152 CONROY Frances +1153 PARILLAUD Anne +1154 KARIO Tcheky +1155 CLAVIER Christian +1156 RENO Jean +1157 DAVIS Brad +1158 NERO Franco +1159 MALLET Laurent +1160 DEMPSEY Patrick +1161 PETERSON Amanda +1162 GAINS Courtney +1163 CASPARY Tina +1164 GREEN Seth +1165 THOMAS Henry +1166 WALLACE Dee +1167 BARRYMORE Drew +1168 MARTEL K.C. +1169 FRYE Sean +1170 MOLINA Angela +1171 EZRALOW Daniel +1172 SQUILLANTE Vittorio +1173 BONACELLI Paolo +1174 DOUGNAC Marie-Laure +1175 RUFUS +1176 STOCKWELL Dean +1177 RUEHL Mercedes +1178 FOSTER Jodie +1179 COULSON Bernie +1180 ROSSI Leo +1181 HEARN Ann +1182 MOCKY Jean-Pierre +1183 GRANDT Laura +1184 GODIN Marjorie +1185 LIGER Pascal +1186 McCOMB Heather +1187 QUESTEL Mae +1188 CURRIE Cherie +1189 KAGAN Marilyn +1190 STROH Kandice +1191 QUAID Randy +1192 VIEIRA Asia +1193 BELLAMY Ralph +1195 CLOSE Glenn +1196 ARCHER Anne +1197 LATZEN Ellen Hamilton +1198 PANKIN Stuart +1199 MASTROIANNI Marcello +1200 TROISI Massimo +1201 BACON Kevin +1202 FIRTH Colin +1203 BENING Annette +1204 BALK Fairuza +1205 JULIA Raul +1206 JENKINS Daniel +1207 FARGAS Antonio +1208 RUSSELL Kurt +1209 WALSH J.T. +1210 HOWARD Arliss +1211 MAGNUSSON Ann +1212 McDOWELL Andie +1213 GALLAGHER Peter +1214 SAN GIACOMA Laura +1215 WAWIER Ron +1216 BRAGA Sonia +1217 JONES Grace +1218 ROBERTS Tanya +1219 MACNEE Patrick +1220 BELUSHI John +1221 WALKER Kathryn +1222 MORIARTY Cathy +1223 GAVON Igor +1224 CUSAK Joan +1225 DAVIS Ossie +1226 DEE Ruby +1227 EDSON Richard +1228 ESPOSITO Giancarlo +1229 LEE Joie +1230 LEE Sipke +1231 HURT John +1232 WHALLEY-KILMER Joanne +1233 FONDA Bridget +1234 SUE Elisabeth +1235 BREWTON Maia +1236 COOGAN Keith +1237 RAPP Anthony +1238 HUSTER Francis +1239 LELOUCH Salome +1240 PREBOIST Paul +1241 CRETON Michel +1242 YORK Susannah +1243 MILLAND Ray +1244 DILLMAN Bradford +1245 GIELGUD John +1246 PORTAL Jean-Michel +1247 GASSMAN Vittorio +1248 ZETA-JONES Catherine +1249 MONTILLIER Georges +1250 PATINKIN Mandy +1251 QUINN Anthony +1252 STEIGER Rod +1253 VALLONE Raf +1254 PAPAS Irene +1255 RICHARD Pierre +1256 BOUIX Evelyne +1257 MUEL Jean-Paul +1258 CHELTON Tsilla +1259 JACOB Catherine +1260 PRAT Eric +1261 FOULON Mathieu +1262 LEDOUX Gary +1263 FEVRIER Laurence +1264 NANTY Isabelle +1265 KELLEY Deforest +1266 HUFFMAN Dustin +1267 DESOTO Rosana +1268 CAROLL Janet +1269 JACKSON Victoria +1270 ABRIL Victoria +1271 RENAUD Line +1272 COBURN James +1273 BROWN Reb +1274 HUNTER Bill +1275 FIELDS Maurie +1276 ZOUC +1277 WINLING Jean-Marie +1278 KOSTNER Kevin +1279 FREEMAN Morgan +1280 FERRER Mel +1281 DUPEREY Anny +1282 LEDOUX Fernand +1283 DENNER Charles +1284 AUCLAIR Michel +1285 HISKINS Bob +1286 FLEISCHER Charles +1287 KAYE Stubby +1288 LAW John Phillip +1289 CLEEF Lee Van +1290 PISTILLI Luigi +1291 DAWSON Anthony +1292 TORRES Jose +1293 BREGA Mario +1294 CASSOLA Carla +1295 SAVAGE Archie +1296 RUSSEL Kurt +1297 BALDWIN William +1298 JASON Jennifer +1299 SERREAU Joachim +1300 PASOTTI Felicie +1301 MANOJLOVIC Miki +1302 TRETON Gilles +1303 DAVIDOVITCH Lolita +1304 HARDIN Jerry +1305 SARTAIN Gailard +1306 JENKINS Richard +1307 HARPER James +1308 DEMUNN Jeffrey +1309 BUNTING Garland +1310 SMITH Brandon +1311 BROCKMAN Michael +1312 ROMANS Pierre +1313 HOROKS Zbigniew +1314 BONVOISIN Berangere +1315 PRIETO Aurore +1316 SUTHERLAND Kiefer +1317 ANDREWS Julie +1318 KEDROVA Lila +1319 FELMY Hansjorg +1320 TOUMANOVA Tamara +1321 KIELING Wolfgang +1322 DONATH Ludwig +1323 OPATOSHU David +1324 FISHER Gisela +1325 DALTON Timothy +1326 D'ABO Maryam +1327 BAKER Joe Don +1328 MALIK Art +1329 ASSANTE Armand +1330 O'NEAL Patrick +1331 RICHARDSON Lee +1332 CHEVIT Maurice +1333 MARTIN Steve +1334 HEADLY Glenne +1335 CURTIS Jamie Lee +1336 GODRECHE Judith +1337 BOZONNET Marcel +1338 DESNY Yvan +1339 CONRADT Malcom +1340 SALSMAN Thomas +1341 KENSIT Patsy +1342 WOLFE Traci +1343 KAHAN Steve +1344 ROLSTON Mark +1345 MORANTE Laura +1346 DELON Anthony +1347 NOSBUSCH Desiree +1348 FABBRI Jacques +1349 ROSSELINI Isabella +1350 BASIER Marianne +1351 BETTI Laura +1352 RENUCCI Roobin +1353 LOWELL Carey +1354 DAVI Robert +1355 SOTO Talisa +1356 ZERBE Anthony +1357 HARRIS Mel +1358 O'NEILL Ed +1359 LEE Jerry +1360 HANDY James +1361 DAVIS Daniel +1362 WINN Kitty +1363 VINT Alan +1364 FINNERTY Warren +1365 KURTZ Jean +1366 MAGE Paul +1367 SWAYZE Patrick +1368 MOORE Demi +1369 GOLDWYN Tony\n +1370 WASHINGTON Denzel +1371 CROWE Russell +1372 SPINELLA Stephen\n +1373 SMITH Will +1374 FIORENTINO Linda\n +1375 VAN DAMME Jean-Claude +1376 SORVINO Paul\n +1377 WAYNE John +1378 ATTENBOROUGH Richard +1379 GEESON Judy\n +1380 POSEY Parker\n +1381 MAY Mathilda\n +1382 ROYER Régis +1383 CHESNAIS Patrick\n +1384 TIMSIT Patrick +1385 FROT Catherine\n +1386 SHUE Elisabeth\n +1387 MCDONNEL Mary\n +1388 SINISE Gary +1389 GUGINO Carla\n +1390 DARY René +1391 GABIN Jean +1392 VENTURA Lino\n +1393 BROSNAN Pierce +1394 HALLAHAN Charles\n +1395 KENNEDY George +1396 LEWIS Geoffrey\n +1397 MILLER Jonny Lee +1398 BRACCO Lorraine\n +\. + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/DB/TP1_OrdresSQL/dump/cinema.film b/DB/TP1_OrdresSQL/dump/cinema.film new file mode 100755 index 0000000..1d3c295 --- /dev/null +++ b/DB/TP1_OrdresSQL/dump/cinema.film @@ -0,0 +1,432 @@ +-- +-- PostgreSQL database dump +-- + +SET client_encoding = 'SQL_ASCII'; +SET check_function_bodies = false; +SET client_min_messages = warning; + + + +-- +-- Data for Name: film; Type: TABLE DATA; Schema: limin; Owner: limin +-- + +COPY film (numf, titre, numg, annee, numr, resume) FROM stdin; +1 Poker 1 1987 1 Helene mene une double vie: hotesse guide de jour et joueuse de poker la nuit dans des cercles clandestins. +2 De guerre lasse 1 1987 2 Juin 1942, Jerome et Alice se refugient chez Charles, un industriel de Romans. +3 La maison du diable 3 1963 3 Le docteur John Markway loue Hill House une maison hantee qui symbolise le malheur et la mort. +4 Les risques du metier 1 1967 4 Jacques Doucet, instituteur d'une petite ville de normandie, est accuse par la fille du garagiste, Catherine Roussel, d'avoir tente de la violer. +5 Les trente-neuf marches 4 1936 5 +6 Arsene Lupin contre Arsene Lupin 5 1962 6 Aux funerailles d'Andre Laroche, Francois de Vierne apprend par sa mere, femme d'un magistrat, qu'il est en realite le fils du defunt. +7 Police python 357 4 1975 7 A Orleans, une nuit, l'inspecteur Ferrot est photographie par une mysterieuse jeune femme apres qu'il ait arrete deux malfaiteurs. +8 Les innocents 1 1987 53 Jeanne descend a Toulon pour assister au mariage de sa soeur avec un Nord-Africain. Elle y retrouve son frere Alain, un sour muet qu'elle affectionne particulierement et rencontre Said qui lui fait des avances. +9 Extreme prejudice 4 1986 54 Bensey est la plaque tournante d'un important trafic de drogue entre le Mexique et les Etats-Unis. Jack Benteen, le chef des Texas Rangers, cherche a demanteler le reseau qui est dirige par son ami d'enfance : Cash Bailey +10 Fanfan la tulipe 6 1952 9 Louis XV regne sur la France. Ardent coureur de jupons, Fanfan se laisse entrainer par les predictions de la bohemienne Adeline qui n'est autre que la fille du sergent recruteur La Franchise. +11 Le cauchemar de Dracula 7 1958 10 Mai 1885. Jonathan Harker arrive au chateau de Dracula dans les carpathes. Il a ete engage comme bibliothecaire, mais il nourrit le dessein d'exterminer le comte Dracula qu'il soupconne de vampirisme. +12 La charge victorieuse 1 1952 11 Septembre 1862. La guerre de Secession fait rage. Jeune Idealiste, Henry Fleming rejoint un camp d'entrainement nordiste. +13 Cayenne palace 6 1987 55 Parti en Guyane a la recherche de son pere, un bagnard evade, qu'il n'a jamais connu. Noel erre dans les ruines d'un penitencier. Recu a coups de fusils dans certains villages, il doit en plus faire face aux elements dechaines. +14 La vie en mauve 5 1980 56 Cadre moyen, George Dopler mene une vie tranquille et sans souci. Jusqu'au jour ou il envoie un fauteuil a la figure de son patron qui lui refusait une augmentation, et retrouve un poste de gerant de nuit dans un supermarche. +15 Allons z'enfants 8 1980 12 A 15 ans, Simon Chalumot, engage volontaire par son pere (ancien combattant de 14-18), est enfant de troupe de l'Ecole militaire des Andelys. Il est traite en brebis galeuse parce qu'il refuse de perdre son individualite, discute et raisonne. +16 Quasimodo 16 1939 13 Poursuivie par les gardes, Esmeralda, qui est bohemienne, trouve asile dans Notre-Dame. Frollo, epris de la jeune femme, charge Quasimodo, le bossu de Notre-Dame, de l'enlever. +17 La couleur de l'argent 5 1986 57 Mythe vivant, champion de billard a la retraite, Eddie Felson erre dans les salles de jeux. Un soir, il decouvre un jeune virtuose, Vincent, qu'il prend sous son aile et a qui il apprend l'art de l'arnaque. +18 Cluedo 5 1985 58 Nouvelle Angleterre. 1954. Six mysterieux invites sont accueillis par un majordome dans un manoir battu par les vents. Chacun d'eux se voit attribuer une nouvelle identite par leur hote, M Mort, qui les fait chanter. +19 Les diamants sont eternels 6 1971 59 Depuis quelque temps, le marche du diamant est destabilise et l'agent James Bond part en mission a Amsterdan. Prenant l'identite d'un trafiquant, il se charge de faire rentrer aux Etats Unis un important lot de pierres precieuses. +20 Promis...Jure! 5 1987 60 Affuble d'un nez que ne renierait pas Cyrano et qui le complexe, le jeune Pierre-Marie s'efforce en vain de seduire Jocelyne la plus belle fille du village. En cette periode troublee de l'occupation, il multiplie les exploits pour qu'elle le remarque. +21 Il y a maldonne 4 1987 61 Apres avoir vole un sac a main, Luc offre une montre a son ami Marco. Mais Marco se fait arreter par un flic vereux qui lui confisque ses biens. En se battant avec le policier, Luc le tue, mais c'est Marco qui est soupconne du crime. +22 Coup double 5 1986 62 Apres 30 ans de prisons, Harry Doyle et Archie Long sont liberes sur parole. Ils decouvrent avec stupeur et angoisse le monde actuel. Ritchie Evans, leur agent de tutelle, tente de les aider a se reinserer dans la vie sociale. +23 Kalidor, la legende du talisman 2 1985 63 La reine Gedren et son eminence grise, le cruel Ikol, font regner la terreur dans leur pays. Ils brulent et pillent tout sur leur passage. Ils egorgent les parents de Sonja sous les yeux de la jeune fille qui fait serment de les venger. +24 Stick, le justicier de Miami 4 1985 64 Cambrioleur hors pair, Stick retourne a Miami apres avoir purge une peine de 7 ans de prisons. Il est decide a s'acheter une conduite afin que sa fille Katie puisse etre fiere de lui. Mais des son arrivee, il tombe ds les mains de truands portoricain +25 Dandin 5 1987 65 Georges Dandin, riche paysan, s'est marie avec Angelique de Sottenville pour acquerir un vernis mondain. De son cote, Angelique n'a accepte ce mariage que pour renflouer les finances de ses parents. +26 Tout ce que vous avez toujours voulu savoir sur le sexe... 5 1972 30 Amoureux de la reine, le bouffon du roi lui fait boire une decoction aphrodisiaque qui produit immediatement son effet. Mais comment lui enlever sa ceinture de chastete ? +28 L'argent de poche 1 1976 66 Le mois de juin dans une petite ville du centre de la France. De l'ecole en passant par la rue, a la maison ou au cinema, les aventures et les emotions d'une dizaine d'enfants et d'adolescents. +29 Rocky III, l'oeil du tigre 6 1982 67 Champion du monde de boxe, categorie poids lourds, Rocky Balboa est defie par un jeune boxeur noir, Clubber Lang, qui l'accuse de n'effectuer que des matchs truques. Malgre l'avis contraire de Mickey, son vieux manager, Rocky releve le defi. +30 Haut les flingues 4 1985 68 New York annees 30. Mike et Speer ont ete collegues dans la police. Aujourd'hui, Mike est devenu prive et Speer, qui le soupconne d'etre lie avec le milieu, le suit comme son ombre. +31 Y'a bon les blancs 5 1987 69 Cinq Europeens doivent vehiculer en camion de la nourriture pour les defavorises du Sahel. Nadia, une jolie Hollandaise, se joint a cette mission humanitaire. +32 En toute innocence 1 1987 70 Dans leur maison du Bordelais, Paul, un architecte, surprend sa belle-fille, Catherine, trompant son fils Thomas.Furieux, il prend la route et fonce.C'est l'accident.Il rentre de l'hopital muet et a demi paralyse. Entre lui et Catherine c'est la guerr +33 Les visiteurs d'un autre monde 2 1979 71 Sur la pelouse d'un stade, une soucoupe volante atterrit. Tony et Tia en descendent. Extraterrestres aux superpouvoirs, ils sont venus sur Terre en touristes. +34 Merci d'avoir ete ma femme 5 1979 72 Jessica souhaite divorcer de Phil. Elle reclame sa liberte pour ecrire des chansons. Reste seul, Phil decouvre qu'elle entretenait une liaison avec son propre editeur. Decu, il part vivre a Boston ou il retrouve son frere Mickey. +35 Radio corbeau 4 1989 12 Par la voix des ondes, un commentateur fielleux deblatere sur les petites et grandes turpitudes des habitants d'une bourgade de province. Qui est ce mysterieux corbeau ? +36 Les entrailles de l'enfer 7 1981 73 En panne sur une route du Mississippi, une jeune femme est violee par une creature surgie des marais pendant que son mari est parti chercher de l'aide. 17 ans plus tard leur fils est atteint d'une maladie mysterieuse. +37 Saxo 1 1987 74 Sam Friedman, producteur musical malchanceux, decouvre, dans une boite miteuse, un couple de musiciens noirs americains prodigieux. Puppet chante d'une voix rauque, et son frere Joe joue du saxophone. Sam veut leur faire enregistrer un disque. +38 Portes disparus II 6 1985 75 En 1972, le colonel Braddock et ses hommes effectuent une mission en helicoptere au-dessus de la jungle vietnamienne. Le commando se fait prendre. 10 ans plus tard, la guerre est finie. Mais Braddock est toujours prisonnier dans le camp du colonel Yin +39 Une creature de reve 5 1985 76 Deshabilles, Gary et Wyatt sont ridiculises devant les filles de l'ecole par leurs camarades. Ils decident de se venger et programme sur leur ordinateur le portrait de la femme ideale. Un orage eclate, l'ordinateur explose et Lisa apparait. +40 After hours 5 1985 57 Paul, jeune informaticien, passe toutes ses soirees a lire dans les fast foods. Un soir, il rencontre Marcy. Elle engage la conversation puis s'eclipse mysterieusement. Paul la rappelle et va la rejoindre dans le loft qu'elle partage avec Kiki,une ami +41 Les keufs 5 1987 77 Mireille Molyneux, inspecteur de police rousse et rondelette, traque les proxenetes. A peine est-elle parvenue a mettre la main sur Charlie, un souteneur, que deux inspecteurs de l'IGS l'arretent. +42 La folle journee de Ferris Bueller 5 1986 76 Ferris Bueller joue les malades. Sa mere lui interdit d'aller au lycee. Mais sitot qu'elle a le dos tourne, Ferris se sauve. Il fait sortir sa petite amie du college et emprunte la Ferrari du pere de son copain Cameron. Le proviseur Rooney le poursui +43 Les saisons du plaisir 5 1988 78 Comme chaque annee, Charles et Emmanuelle Van Bert organisent dans leur chateau le congres des parfumeurs. A cette occasion, Charles annonce qu'il va prendre sa retraite et qu'il designera son remplacant a l'issue du symposium. +44 Les possedes 1 1987 79 Vers 1870, cinq jeunes activistes d'une ville de province russe preconisent une revolution rapide et violente. Leur meneur, Pierre, personnage froid et exalte, annonce que les indecis seront elimines. +45 Drole de couple 5 1968 80 Felix Ungar, quadragenaire popote, ne supporte pas que sa femme demande le divorce. Il tente de se suicider. Emu par son sort, son ami Oscar Maddi, journaliste sportif divorce, l'invite a venir habiter chez lui. Felix devient alors une fee du logis. +46 Le cercle rouge 4 1970 81 A Marseille, un gardien de prison propose une affaire a Corey, un truand sur le point d'etre libere. Au meme moment, dans le train qui l'emmene vers Paris, Vogel, un repris de justice, fausse compagnie au commissaire Mattei charge de l'escorter. +47 Le declin de l'empire americain 5 1986 82 Dans une maison de campagne, 4 hommes sont en train de preparer a diner. Ils parlent d'amour et de sexe. Pendant ce temps, leurs femmes discutent du meme sujet. Dominique ecrit une these sur la question. Diane raconte ses aventures sexuelles. +48 Par le fer et par le feu 6 1962 83 Aux prises avec la Prusse, la Russie et l'Autriche, et soucieuse de preserver son independance, la Pologne du XVIIe siecle n'a qu'une alliee: la France. Au sein des familles polonaises, les dissensions sont vives. +49 Y a t-il quelqu'un pour tuer ma femme ? 5 1986 84 Sam Stone s'apprete a tuer sa femme quand celle-ci est enlevee par Sandy et Ken. Trop content d'etre debarassee d'elle, Sam rechigne a payer les 500 000 dollars que reclament les ravisseurs. Il espere que ceux-ci tueront Barbara. +50 Plein sud 1 1980 85 Au moment de partir a Barcelone pour une conference, Serge Laine, jeune professeur de fac, est aborde par l'envoutante Caraol. Il quitte sa femme et part en Espagne avec cette inconnue. +51 Un poisson nomme Wanda 5 1988 130 A la suite d'un vol de diamants, George Thomason est denonce par ses complices, Wanda et son amant Otto; mais George a mis le butin a l'abri. Persuadee que l'avocat de George, Archie Leach, est au courant, Wanda decide de le seduire. +52 Birdy 1 1984 86 Dans la banlieue grise de Philadelphie, Al rencontre Birdy, un garcon timide et renferme. Al ne s'interesse qu'aux filles, Birdy reve d'etre un oiseau. Une etrange amitie nait entre les deux. Birdy essaie d'initier Al a l'elevage des pigeons. +53 A notre regrettable epoux 5 1987 87 Dix ans apres la disparition de son epoux, Hermione apprend que son mari etait un escroc de haut vol. Dans le chateau en ruines ou elle vit, il aurait cache une fortune en lingots d'or que la seconde femme de son mari vient reclamer. +54 Rocky IV 6 1985 67 Rocky Balboa mene une retraite paisible jusqu'au jour ou un boxeur sovietique, Ivan Drago, tue Appolo, son ami et ancien adversaire. Il decide de le venger, se rend en URSS, et reprend l'entrainement sous l'oeil vigilant du KGB. +55 In extremis 1 1987 88 Par amour pour Alice, Tango reussit un hold-up en se faisant passer pour un bandit en cavale, Rock. Celui-ci se lance a la poursuite de l'usurpateur et sequestre Alice. Oblige de travailler pour Rock, Tango ne tarde pas a se rebiffer et se lie d'amiti +56 Yanks 1 1979 89 En 1943, un petit village britannique vit deja a l'heure du debarquement americain. Les derniers mois de la guerre sont vus a travers les destins de 3 couples americano-anglais. +57 La maison assassinee 1 1987 90 1896, toute la famille Monge est egorgee dans un relais de poste. Seul survivant, Seraphin, nourisson de 3 semaines. 24 ans plus tard, apres avoir connu les horreurs de la guerre, Seraphin revient sur les lieux du massacre pour se venger. +58 Rio zone 1 1986 91 Fils d'une strip-teaseuse, Vinicius vit chez son oncle dans une banlieue pauvre de Rio. Saxophoniste tres doue, il reve d'enregistrer un disque. Il est amoureux de Nicinha, mais la jeune fille disparait brusquement. +59 Crocodile Dundee 6 1986 92 Une journaliste americaine s'entiche d'un bushman australien grand chasseur de crocodiles. Elle le ramene a New York. Crocodile Dundee est completement dephase et a bien du mal a s'integrer dans la vie mondaine. +60 En route pour le sud 17 1979 93 Au lendemain de la guerre de secession, Henry Moon, voleur de chevaux, est condamne a la potence a moins qu'une femme veuille bien l'epouser. Une septuagenaire, plus de premiere beaute, se devoue pour sauver le truand. +61 Paternity 5 1981 94 Lors de son 47eme anniversaire, Buddy Evans, grand financier dans le domaine sportif, constate, malgre une vie de garcon pleinement satisfaisante, que la presence d'un enfant lui manque. Il decide donc de trouver une mere porteuse. +62 On ne vit que deux fois 6 1967 33 En plein vol, la fusee americaine, Jupiter 16, disparait sans laisser de trace. Puis c'est au tour d'un vaisseau sovietique. Au sol, les radars ont enregistre la presence d'un engin non identiie. Pendant ce temps, James Bond coule des nuits paisibles. +63 Golden child: l'enfant sacre du tibet 6 1986 95 Sardo Numspa et sa bande d'illumines, fanatiques de Satan, enlevent un enfant considere comme un dieu par les Tibetains. Un detective prive de Brooklyn, Chandler, qui n'est guere porte sur le mysticisme, va se prendre au jeu. +64 Phychose III 4 1985 96 Apres un internement de 22 ans, Norman Bates, considere comme gueri, a repris la direction de son motel de sinistre reputation. En fait, Norman est toujours sujet a des nevroses obsessionnelles et sanguinaires des qu'une jeune fille l'approche +65 Mes deux hommes 5 1985 97 Julius Armbrust, cadre superieur, est un homme comble qui trompe sa femme. Mais son bonheur s'effondre quand il decouvre que sa femme Paula le trompe aussi. Il fait mine de partir en voyage pour decouvrir son rival Stephan, un peintre boheme. +66 La vie est un long fleuve tranquille 5 1988 98 Il etait une fois, dans une ville du nord, deux familles, les Le Cattaux et les Groseilles, que rien ne disposait a se rencontrer. +67 Tank 5 1983 99 Le sergent major Zack Carey arrive en Georgie avec sa femme Donna, son fils Billy et un char Sherman. Une querelle l'oppose au sherif local. Pour se venger, ce dernier fait emprisonner Billy. Zack Carey part a l'assaut du penitencier. +68 Rambo II. La mission 6 1985 67 John Rambo a ete condamne aux travaux forces. Le colonel Trautman, son ancien officier, lui propose d'accomplir une mission en echange de sa liberte et de sa reinsertion dans l'armee. Il doit se rendre au Vietnam pour retrouver des prisonniers. +69 Les mauvais garcons 1 1983 100 Mick O'Brien, jeune voyou des bas quartiers de Chicago, tue accidentellement le frere de Paco, un dealer portoricain, chef d'une bande rivale. La police reussit a mettre la main sur les 2 loubards et les emprisonnent dans la meme maison de correction. +70 La grande triche 4 1978 101 Moses Wine est detective prive. Il est engage par une ancienne amie, Lila Shea, qui soutient la candidature comme gouverneur de Miles Hawthorne. Celui-ci est attaque par un groupe de contestaires qui publi des tracts diffamatoires. +71 Rain man 12 1988 102 Charlie, homme d'affaires presse, decouvre a l'age adulte, qu'il a un frere interne dans une institution psychiatrique. Raymond, Rain man, incapable de communiquer avec autrui, a neanmoins des capacites intellectuelles surprenantes. +72 Frequence meutre 4 1988 103 Animatrice de radio la nuit, Jeanne est persecutee par une voix doucereuse et menacante a l'antenne. Certaine d'avoir affaire au meurtrier psychopathe de ses parents, elle fait appel a son frere, commissaire a la PJ. +73 Les lumieres de la ville 1 1931 26 Un vagabond rencontre une jeune aveugle qui, pour survivre, est vendeuse ambulante de fleurs. Emu par sa detresse, le clochard lui donne ses derniers dollars. +74 Le justicier de New York III 4 1985 104 Un soir, Paul Kersey retrouve le cadavre de son ami Charlie. Bien connu des services de la police new yorkaise pour avoir joue les justiciers, Kersey va etre utilise par le lieutenant Striker. +75 Blanc de Chine 4 1988 105 Saigon, avril 1975. Dans la ville en flammes, les Americains evacuent les derniers occidentaux. Parmi eux, Mathieu, 20 ans et une petite Eurasienne de 8 ans, Jay. 13 ans plus tard, les services speciaux francais le contactent. +76 La colline des hommes perdus 1 1965 106 Pendant la seconde guerre debarque, dans un camp disciplinaire anglais en Afrique, 5 hommes : 4 blancs et un noir. Charges d'un sac a dos, ils doivebt gravir la +78 Au revoir les enfants 1 1987 107 Janvier 1944. Sur le quai de la gare, Julien Quentin, 11 ans, a du mal a quitter sa mere; il retourne au college St Jean de la Croix. Un nouvel eleve arrive dans sa classe: Jean Bonnet, un garcon etrange et renferme qui ne communie jamais a l'eglise. +79 L'ami de mon amie 1 1987 108 Blanche, reveuse et prude, aime le tenebreux Alexandre. Lea, dynamique et charmeuse, vit avec Fabien, mais lui prefere Alexandre, tandis que le delaisse craque lentement pour Blanche, amie de Lea. Mais peut-on desirer l'ami de son amie. +80 Force majeure 1 1988 109 Copains de rencontre sur les routes d'Asie, Philippe et Daniel laissent a Hans le haschich qu'ils n'ont pas fume avant de repartir pour la France. 18 mois apres, un avocat d'Amnesty International leur apprend qu'il est condamne a mort comme dealer. +81 La dechirure 1 1984 110 Correspondant du New York Times au Cambodge, Sydney Schanberg suit au jour le jour le deroulement de la guerre. Tres au fait des habitudes locales, Dith Pran lui permet de reussir certains scoops. En 1975, les Kmers rouges succedent aux americains. +82 Adieu, je t'aime 1 1987 111 Michel et Nicole forment un couple ideal. Lui, la quarantaine, a un poste de PDG dans une societe d'informatique. Elle s'epanouit totalement sans l'amour de son mari. Mais Michel est attire par Philippe, un jeune informaticien. +83 Mississippi burning 1 1988 86 Ete 1964. L'Amerique est secouee par la violence et la contestation sociales. Trois jeunes militants sont venus etablir un centre d'inscription electoral pour les noirs dans une ville du Mississippi. Mais ils disparaissent mysterieusement. +84 Retour 1 1976 112 1968. La flamme au fusil, les marines americains saccagent le Viet Nam. Sally Hyde se fait engager comme benevole dans un hopital. Elle y retrouve Luke, un de ses anciens amis, infirme a vie. Au milieu des blesses, Sally prend conscience des horreurs. +85 Les temps modernes 1 1936 26 Charlot peine en usine pour un salaire de misere. Abruti, depersonnalise par le travail a la chaine, il devient un robot hagard. Ne pouvant plus supporter ces cadences, il est renvoye et echoit a l'hopital. A sa sortie, il recueille une jeune fille. +86 Eddie and the Cruisers 1 1983 113 Maggie Foley, une journaliste de television, est chargee de raconter la dramatique histoire d'Eddie and the Cruisers, un groupe rock du debut des annees 60. Son leader, Eddie Wilson, a disparu en 1964 dans un accident de voiture. +87 Corentin ou l'infortune conjugale 5 1988 114 Au XVIIe siecle, un riche boucher, Corentin, epouse la jolie mais pauvre Clemence. Terrorise par la beaute et l'innocence de sa jeune femme, il n'ose la toucher et passe ses nuits dans le lit de la servante. +88 Le flic etait presque parfait 5 1986 115 Joe Gower est un magasinier blanc de la bibliotheque municipale de New York. Il accepte de se rendre a une qudition pour le gala de la police a la place de son ami Abe Washington, un policier noir. Il doit tout faire pour ne pas etre pris au spectacle +89 Les hauts de Hurlevent 1 1939 116 La vie passionnee et dechirante d'un jeune orphelin amoureux fou de la fille de son pere adopte. D'apres le roman d'Emily Bronte. +90 Apres la guerre 1 1989 117 1944, quelque part dans la campagne francaise, deux jeunes enfants s'enfuient de chez eux apres avoir commis une betise. Au cours de leur fugue, ils rencontrent un soldat allemand deserteur. +91 Revolution 18 1986 118 1776, la nation americaine est en train de naitre. Les Americains tentent de se separer du pouvoir colonial britannique et se lancent dans une guerre qui va durer 7 ans. +92 Les annees sandwiches 1 1988 119 Victor, un adolescent candide, debarque dans les rues de Paris au cours de l'ete 1947. Perdu, il rencontre Felix dans les couloirs du metro a qui il demande son chemin. Felix et Victor se lient d'amitie. +93 Pale Rider, le cavalier solitaire 17 1985 120 Au fin fond de la Californie, eldorado des chercheurs d'or du XIXe siecle, de pauvres heres s'evertuent a creuser le sol pour quelques pepites. Un homme d'affaires sans scrupule s'installe a proximite. +94 Mean Streets 4 1973 57 Au coeur de New-York, le quartier italien vit suivant des regles a moitie americaines. Michael et Tony font partie de la botte americaine. Tous deux brassent de grandes quantites d'argent et escroquent les touristes de tous leurs dollars. +95 Flashdance 14 1983 121 Alex a la danse a fleur de peau. Le jour, elle travaille comme soudeuse, la nuit elle fait eclater sa passion dans une boite de nuit. Elle reve d'entrer a l'opera mais elle est paralysee de trac a l'idee de passer le concours d'entree. +96 Bootleggers 6 1973 122 Gator McKlusky, un conducteur casse-cou, purge une peine de prison en Arkansas pour avoir vendu du whisky de contrebande. Pendant son incarceration, il apprend que son frere a ete assassine par Connors, un sherif vereux. +97 Too much 5 1986 123 A 16 ans, lorsqu'on s'ennuie ferme dans une station balneaire anglaise, il reste une occupation qui decoit rarement : parfaire sa vie amoureuse. Lynda apprend ainsi que les bebes ne naissent pas dans les choux. +98 Le flambeur 1 1974 124 Alex Freed, enseignant americain, a deux passions dans la vie : sa maitresse Billie et le jeu. Un soir, il gagne une fortune a Las Vegas. Son engouement le pousse a miser des sommes de plus en plus forte et a emprunter a sa famille. +99 Angel heart 2 1987 86 Detective prive assez miteux, Harry Angel traine une nonchalance oisive entre deux affaires douteuses. Un soir, un homme au facies enigmatique lui propose de retrouver un ancien crooner disparu apres la seconde guerre mondiale. +100 Biggles 2 1986 71 En rentrant chez lui, Jim Ferguson est victime d'un etrange phenomene : il tombe dans des trous intertemporels. Projete en 1917, il fait connaissance de James Bigglesworth, Biggles pour les fans, un virtuose de l'aviation anglaise. +101 De bruit et de fureur 1 1988 125 Seul dans son HLM et frustre par les absences repetees de sa mere, Bruno cristallise son desespoir dans d'etranges hallucinations et se laisse entrainer par les bandes de voyous du quartier. Son existence s'embrase puis se consume. +102 Les charognards 17 1971 126 Parce qu'il veut apprendre a lire, Frank Calder, chef d'une bande de desesperados, enleve Melissa, une jeune femme qu'il croit etre une institutrice. Elle est en fait l'epouse de l'homme le plus riche du comte, Ruger. +103 Risky business 5 1983 127 BCBG, la tete bien pleine ainsi que les poches, Joel est l'archetype du bon eleve sportif, serviable, bourre d'ambition. Mais on a beau etre riche et intelligent, on n'en est pas moins titille par la bagatelle, surtout a 18 ans. +104 Camomille 1 1987 128 Un mitron, surprotege par sa mere, s'eprend d'une droguee errante surnommee Camomille. Resolu a la sortir de cette impasse, il apprend qu'elle est en fait une starlette BCBG. Enceinte et recherchee par les medias, elle doit reintegrer son milieu. +105 Monsieur Hire 1 1989 16 Un petit employe de bureau maniaque et solitaire est eperdument amoureux de sa voisine. Un crime va les rapprocher. +106 L'irlandais 1 1986 129 Lasse des nombreux carnages qu'il provoque pour le compte de l'IRA, Martin Fallon s'exile a Londres en pre-retraite. Mais ses employeurs, peu disposes a le laisser filer, decident de l'eliminer. +107 El Dorado 1 1987 131 En 1560 le roi d'Espagne envoie une expedition a la conquete de l'El Dorado, mythique royaume de l'or. Pousses par une formidable fievre, 400 hommes et femmes s'enfoncent dans la foret tropicale. +108 Y a-t'il un pilote dans l'avion 5 1980 84 Aeroport de Los Angeles. Les passagers du vol de 209 a destination de Chicago prennent progressivement place. Elaine, une des hotesses, annonce a Ted, ex pilote de chasse qu'une tragique operation de commando a traumatise, qu'elle le quitte. +109 Preuve d'amour 4 1988 132 Martin rencontre Lou, une jeune fille aux charmes tentateurs. Journaliste vivant a 400 a l'heure, Martin sent son coeur flancher devant la trop belle Lou. Mais Martin est accuse de meurtre. +110 Hair 14 1979 133 Claude, jeune americain natif de l'Oklahoma, doit passer 3 jours a New York avant de partir pour le Vietnam. Dans Central Park, il rencontre un groupe de Hippies parmi lesquels Berger qui l'incite a ne pas partir et Sheila qui le seduit. +111 Corps z'a corps 5 1987 134 Tres serieux redacteur en chef d'une revue economique et financiere, Jean Chabert se retrouve catapulte par le patron du groupe de presse aux commandes d'un journal erotique. L'ambiance aidant, le digne de Chabert se devergonde. +112 Mac Arthur, le general rebelle 10 1978 122 1942. La flotte americaine est en pleine debandade, frappee au coeur par les bombes japonaises lors de l'offensive de Peral Harbor. Mute en Australie, le general Mac Arthur doit abandonner son QG aux philippines. +113 Une nuit a l'assemblee nationale 5 1988 78 Naturiste convaincu et fondateur de nombreux camps de nudistes, Walter Arbeit est catapulte a l'Assemblee Nationale pour recevoir la legion d'honneur. Des magouilleurs sans scrupule en font l'effigie de leur campagne electorale. +114 La travestie 1 1987 12 Avocate en province, Nicole Armingault extorque de l'argent a ses amants pretextant un faux avortement, devalise le coffre de son patron et monte a Paris habillee en homme. La, elle parvient a seduire une prostituee, Myriam. +115 Les dents de la mer IV 6 1987 122 La petite station balneaire d'Amity prepare les fetes de Noel. Sean Brody est devenu sherif a la place de son pere, victime du grand requin blanc. Mais Sean est devore a son tour par un squale. +116 A fond la fac 5 1986 135 Thornton Melon n'a jamais fait d'etudes. Homme d'affaire avise, il a cree une prospere chaine de magasins. Lors d'une visite surprise a l'universite, il decouvre que son fils est un cancre. Pour l'aider a poursuivre ses etudes, il s'inscrit a la fac. +117 L'ours 6 1989 136 +118 Comme un chien enrage 1 1986 137 Dans une triste bourgade de Pennsylvanie, Brad Jr, adolescent desoeuvre, vit avec sa mere et un beau pere qu'il deteste. Un soir, il vient en aide a son demi-frere Tommy, jeune delinquant aux prises avec un arnaqueur sous le regard de Terry. +119 Suicidez-moi docteur! 5 1978 64 Sonny Lawson, agent immobilier, s'entend dire par un medecin indifferent qu'il ne lui reste qu'un an a vivre. Fou de desespoir, il ne trouve de reconfort ni aupres de l'eglise, ni aupres de sa maitresse ou de son ex-femme. Il avale des somniferes. +120 Le sicilien 1 1987 138 Alors qu'il ravitaille clandestinement un village, Salvatore Giulano abat froidement deux carabiniers venus controler le chargement. Il est blesse dans la bagarre et se refugie dans un monastere. +121 Le colosse de Rhodes 15 1960 139 Darios, jeune general athenien en visite a Rhodes, apprend l'existence d'un complot contre les Grecs. Il decide de rentrer chez lui, mais le roi a fait fermer le port, surplombe par le colosse, une gigantesque statue d'airain. +122 Sans issue 4 1985 140 Sam Quint est un voleur particulierement doue. Le gouverneur americain le sort de prison et lui promet la liberte s'il recupere dans une societe vereuse de Las Vegas une disquette qui interesse le Fisc. +124 Chocolat 1 1988 141 Le Cameroun, a la fin des annees 50, fait encore partie de l'empire colonial francais qui peu a peu se desagrege. France, petite fille silencieuse et sauvage vit avec ses parents a des kilometres de toute habitation blanche. +125 Bonjour l'angoisse 5 1988 142 Cadre dans une entreprise specialisee dans les dispositifs de securite, Michaud est un etre terne afflige d'une timidite maladive. Sur le point d'etre mis a la retraite, il se retrouve mele au hold-up d'une banque qui a loue les services de la societ +126 La vie privee d'un senateur 1 1978 143 Joe Tynan, senateur liberal de New York, marie et pere de 2 enfants, reve de faire carriere. L'occasion se presente quand le congres doit se prononcer sur la nomination a la Cour Supreme d'un candidat au passe compromettant. +127 L'ascenseur 7 1983 144 Dans un immeuble, 2 couples prennent l'ascenseur au sortir d'un restaurant. L'appareil tombe en panne entre 2 etages. Les victimes asphyxiees sont sauvees in extremis. Le lendemain, Felix Adelaar, le reparateur, ne decouvre rien d'anormal. +128 L'enfance de l'art 1 1988 145 Veilleur de nuit pour subvenir a ses etudes, Simon est eleve au Conservatoire d'art dramatique. Il quitte Martine apprentie comedienne elle aussi pour Marie, l'un des plus brillants elements de sa promotion. Elle part tourner au Maroc avec Luc Ferrand +129 Predator 2 1987 146 Leader d'une patrouille de choc, Le major Dutch Schaeffer est envoye en Amerique centrale pour delivrer des americains prisonniers des guerilleros. Ils decouvrent trois cadavres pendus par les pieds et ecorches vifs. +130 Kung-Fu master 1 1987 147 Mary-Jane, 40 ans, vit seule avec ses 2 filles, Lucy et Lou. Lors d'une boum organisee par Lucy, elle fait la connaissance de Julien, un adolescent de 15 ans. Attire par le lyceen, Mary-Jane s'arrange pour le revoir. Julien l'initie aux jeux video. +131 Nocturne indien 1 1989 7 Un homme arrive a Bombay a la recherche d'un ami disparu qui y a vecu. A travers des villes et des rencontres, le parcours interieur d'un homme. +133 Un enfant de Calabre 1 1987 148 1960, Mimi a 12 ans et habite dans un petit village de Calabre. Toutes les nuits, il court pieds nus dans la campagne, au desespoir de son pere, modeste gardien dans un hopital psychiatrique, qui reve de le voir faire des etudes. +134 La loi des seigneurs 1 1982 149 1964. C'est la rentree des classes dans une ecole militaire du sud des Etats-Unis. Les nouveaux eleves subissent un bizutage sadique. Poteete, obese, et Pearce, noir, sont victimes de cruelles brimades. Le colonel charge Will de les proteger. +135 Le dernier empereur 18 1987 150 Hiver 1950. Accuse de complicite avec les Japonais durant la guerre, Pu Yi est remis au Chinois. Soumis aux questions du commissaire du peuple, il redige son autocritique et raconte sa destinee. +136 Lucky 13 4 1983 151 Danny 17 ans, a assassine son pere. Emprisonne, il attend son verdict. Charlene, la trentaine, danseuse entretenue par Tom, un journaliste, est fascinee par Danny. Elle lui envoie des lettres d'amour. Comdamne a mort, Danny reussit a s'echapper. +137 Le complot 1 1988 152 13 decembre 1981, l'etat de guerre est decrete en Pologne. Dans les rues de Varsovie, les miliciens traquent les membres de Solidarite. En Chaire, le pere Alec appelle a la resistance. Dans l'assistance, Stefan, capitaine de la milice est fascine. +138 Top Gun 6 1986 153 +139 Quelques jours avec moi 1 1988 154 Depressif convalescent, Martial Pasquier est charge par sa famille, proprietaire d'une chaine d'hypermarches, de verifier les comptes de 5 succursales de province. Des sa premiere etape a Limoges, il decouvre les irregularites commises par Fonfrin. +140 La veuve noire 19 1986 155 New York,Dallas, Seattle : de riches industriels meurent juste apres leur mariage. A Washington, derriere son ordinateur, Alexandra Barnes est persuadee que la meme femme est coupable. A force d'obstination, elle retrouve sa trace. +141 La vie et rien d'autre 1 1989 156 1920. Une jeune bourgeoise recherche son mari disparu a Verdun. Une jeune provinciale n'a plus de nouvelles de son fiance. Leur enquete les conduit vers le commandant Dellaplane, charge d'identifier les soldats absents. +142 La folle histoire de l'espace 5 1987 157 Le vaisseau spatial de Casque noir, ame damnee du cruel president Esbroug, arrive en vue de la planete Druida. Il compte enlever la princesse Vespa, sur le point d'epouser le prince Valium et qui s'enfuit au milieu de la ceremonie. +143 Les goonies 6 1985 46 La maison des freres Walsh va etre saisie par des promoteurs. Pour empecher le drame, il faut de l'argent. Les gooners, bande d'adolescents delures, decouvrent dans le grenier une carte au tresor dessinee par le celebre pirate Willy-le-Borgne. +144 Abyss 2 1989 41 Un sous-marin nucleaire, le USS Montana, est bloque au coeur de l'ocean. +145 Drole d'endroit pour une rencontre 1 1988 158 Une nuit d'hiver sur une aire d'autoroute deserte. Une voiture s'arrete puis repart en laissant une femme blonde desemparee. Sur l'aire, France rencontre Charles, qui demonte le moteur de sa voiture. Il l'insulte et lui demande de le laisser seul. +146 Au service de sa Majeste 9 1969 159 Au volant de sa voiture, James Bond apercoit une jeune femme, Tracy, sur le point de se jeter a l'eau et la sauve du suicide. Le lendemain, il lui vient encore en aide en reglant ses dettes de jeu. A la sortie, il est entraine aupres de Draco. +147 Le bon et les mechants 1 1975 38 Mecano desoeuvre et boxeur rate, Jacques se reconvertit dans le hold-up en compagnie de Lola, prostituee, et de Simon, un copain juif. La guerre de 39-45 eclate et le trio est epingle par la police. Ils sont liberes par un ancien truand devenu flic. +148 Gremlins 2 1984 160 Un soir de decembre, l'inventeur Rand Peltzer trouve un cadeau de Noel original pour son fils dans la boutique d'un vieux chinois. C'est un +149 Indiana Jones et la derniere croisade 6 1989 36 Pour retrouver son pere disparu, Indiana Jones se lance dans la quete du Saint Graal. Elle va l'emmener des egouts de Venise jusqu'au fin fond des deserts bibliques par tous les moyens de transports imaginables en 1938. +150 La petite amie 5 1988 85 Guillaume Bertin, architecte fauche, invite a dejeuner le riche promoteur Martin Morel a qui il veut vendre un projet. Morel en profite pour inviter Bertin a la montagne pour servir de mari a sa derniere conquete, Agnes. +151 Les enfants du silence 1 1986 160 James Leed, jeune professeur brillant, vient enseigner dans une ecole de sourds et malentendants. Ses methodes peu academiques etonnent mais donnent d'excellents resultats. Un jour, il remarque Sarah Norman, une jeune sourde muette. +152 La petite fille au tambour 9 1984 162 Charlie, jeune comedienne americaine, assiste a une conference donnee par Michel, terroriste palestinien dont le visage est masque. Peu de temps apres, elle s'eprend d'un espion israelien, Joseph, en qui elle croit reconnaitre Michel. +153 La revolution francaise 1ere epoque 18 1989 2 De 1789 au 10 aout 1792, date de la destitution de Louis XVI. La prise de la Bastille, le massacre du Champ-de Mars, la fuite du roi, la victoire des armees republicaines a Valmy. +154 Hope and glory 1 1987 163 Le 3 septembre 1939, la radio annonce que l'Angleterre est entree en guerre avec l'Allemagne. Chez les Rohan, gens ordinaires, la nouvelle suscite des sentiments divers. Le pere s'engage. Entre sa mere et ses soeurs, Bill, 9 ans, joue a la guerre +155 Body double 4 1984 164 Los Angeles. Jack Scully, comedien rate, vient d'etre congedie par un realisateur. En rentrant chez lui, il decouvre sa compagne au bras d'un rival. Il part habiter chez son ami Sam Bouchard qui lui prete un luxueux appartement pour un mois. +156 The big easy 4 1986 165 Nouvelle-Orleans : le lieutenant McSwain est charge d'enqueter sur le meurtre d'un truand local. Peu scrupuleux, il touche des dessous de table.Mais l'arrivee d'Anne Osborne,jeune assistante du procureur venue enqueter sur la corruption va tout change +157 Silverado 17 1985 166 Emmet est attaque durant son sommeil par des inconnus. Il disperse la bande et reprend sa route. Dans le desert, il rencontre Paden qui vient de se faire depouiller par des hors la lois. Emmet le sauve et l'emmene a Turley ou Jacke doit y etre pendu. +158 Bagdad cafe 5 1987 167 Un couple de touristes allemands se dispute sur le bord d'une autoroute entre Disneyland et Las Vegas. Abandonne par son mari en plein desert, Jasmin echoue dans un motel tenu par Brenda, une noire acariatre : le Bagdad cafe. +159 La maison de Jade 1 1988 168 Dans sa maison, Jane Lambert, ecrivain de 40 ans assume tant bien que mal sa sterilite. Elle tombe amoureuse de Bernard qui lui fait croire a l'amour eternel. Mais comme les autres, il la quittera faute d'enfants. +160 Cinema Paradiso 1 1989 269 Rome, dans les annees 80. Salvator Di Vita, cineaste, apprend la mort d'Alfredo. Ce prenom fait resurgir l'enfanc, le village de Sicile, et surtout la salle paroissiale ou regne la haute stature d'Alfredo, le projectionniste qui a eveille sa vocation +161 La couleur du vent 1 1988 169 Louise Riviere, conseiller litteraire dans une maison d'edition, est bouleversee par le manuscrit de Paul Madison : +162 Hidden 2 1987 48 Los Angeles. Un paisible homme d'affaires attaque une banque puis vole une Ferrari pour s'enfuir. Apres une poursuite, il est abattu. Tom Beck est charge d'enqueter sur ces citoyens ordinaires qui deviennent des meurtriers avec le FBI Lloyd Gallagher. +163 Mon ami le traitre 1 1988 170 Anciens voyous, deux freres, Bosco et Georges, sont enroles dans la Gestapo pour echapper a la prison. A la liberation, ils tentent de fuir; Bosco meurt. Georges decide de se racheter avec le commandant Rove du contre espionnage. +164 Malone 4 1987 140 Malone, tueur au service de la CIA, decide de se retirer. Sous une nouvelle identite, il prend la route mais sa Mustang tombe en panne a Comestock. +165 La brulure 1 1986 171 Rachel Samstat et Mark Forman ont deja tate du mariage et jure qu'on ne les y reprendrait plus. C'est pourtant au cours d'une ceremonie de ce genre qu'ils lient connaissance. Ils ont le meme sens de l'humour, c'est le coup de foudre. +166 Y a-t'il enfin un pilote dans l'avion ? 5 1982 172 La premiere navette spatiale est sur le point de decoller. A bord, le commandant Over, obsede par les petits garcons, Elaine, responsable de l'ordinateur de bord, son ami Ted Crochet, echappe d'un asile psychiatrique, et Simon qui est amoureux d'elle +167 Jumpin'Jack Flash 5 1986 173 Terry Doolittle travaille dans une banque new-yorkaise. Un soir, sur son ecran d'ordinateur, s'inscrit un curieux SOS signe Jumpin'Jack Flash. Il provient d'un espion anglais bloque dans un pays de l'Est. +168 La lumiere du lac 1 1987 174 Marco, un jeune gigolo, se trouve mele a l'arrestation d'un truand, Pallacci. Il panique et se refugie dans un village de montagne, chez Miranda. Par son intermediaire il fait la connaissance de Carlotta, ecrivain vivant isolee au bord du lac. +169 La revolution francaise. 2eme epoque : les annees terribles 18 1989 175 Les annees terribles debutent le 13 aout 1792 avec l'incarceration de la famille royale au Temple sous la surveillance de la Commune de Paris. Ces annees verront l'affrontement de Danton, Robespierre et Camille Desmoulins. +170 Over the top 1 1987 176 Lincoln Hawk est camionneur. Divorce de Christina Cutler, fille d'une riche famille, il n'a jamais pu revoir son fils Michael qui a maintenant 12 ans. Eleve par son grand-pere, l'enfant a ete inscrit dans une academie militaire. +171 La cage aux folles III 5 1985 90 Renato et Zaza, couple d'homosexuels, ont d'enormes problemes d'argent. La mort d'un oncle de Zaza leur apporte une solution inesperee. Mais Zaza devra d'abord se marier et avoir un enfant. +172 Maurice 1 1986 177 Sur la plage, un professeur explique les choses de la vie au jeune Maurice. en 1910 a Cambridge, Maurice est devenu etudiant et se lie d'une amitie exaltee avec Clive Durham. Attire l'un vers l'autre, Clive ose le premier parler d'amour. +173 Toscanini 20 1988 178 Fils d'ouvrier, Arturo Toscanini decouvre l'opera a 8 ans en entendant la diva Nadina Bulichoff chanter Aida. A 18 ans, il est devenu violoncelliste virtuose. Refuse au concours d'entree de la Scala, il s'embarque avec une troupe d'opera pour le Bresi +174 Les envoutes 2 1982 89 Psychiatre de la brigade criminelle de New York, Cal Jamison vient de perdre accidentellement sa femme. Pour oublier le drame, il decide de demenager et s'installe avec son fils Chris. Il enquete sur le meutre d'enfants. +175 Star Trek IV : retour sur Terre 2 1986 179 XXIII eme siecle : une sonde extra-terrestre emettant un son plaintif detruit un vaisseau terrien avant de se diriger vers la Terre. Pendant ce temps, l'amiral Kirk s'apprete a affronter la cour martiale pour repondre du sabordage de l'Enterprise. +176 Ras les profs 5 1984 180 Alex Jurel est professeur depuis 15 ans au college Kennedy. Perfectionniste et passione a ses debuts, il ne croit plus a sa mission pedagogique, tout comme ses collegues. +177 Sens unique 9 1987 181 Le lieutenant Tom Farrel est acueilli en heros a Washington apres un sauvetage audacieux en mer. Il rencontre Susan Atweil qui devient sa maitresse. Affecte aupres du secretaire d'etat a la defense David Brice, il decouvre qu'il est l'amant de Susan. +178 Le retour de Max Dugan 5 1983 182 Nora McPhee est veuve. Avec son maigre salaire de professeur, elle tente d'elever Michael, son fils de 15 ans. Son pere, qui l'a abandonnee lorqu'elle etait enfant lui rend une visite surprise. Ancien gangster, il est gravement malade. +179 Une affaire de femmes 1 1988 183 Sous l'occupation, Marie, la trentaine, vit modestement avec ses deux enfants, Pierrot et Mouche. Paul, son mari, est prisonnier en Allemagne. Pour rendre service a une voisine, Marie l'aide a avorter. Peu a peu, sa reputation s'etend. +180 Camille Claudel 1 1988 184 Paris, 1885. Un jeune homme court dans la nuit. C'est Paul Claudel dont la soeur vient encore de fuguer. Passionnee de sculpture, elle s'est faufilee dans un chantier pour extraire de la terre a modeler. Elle recoit Auguste Rodin, celebre sculpteur. +181 Jardins de pierre 1 1987 185 +182 Sans peur et sans reproche 5 1988 186 A la fin du XVeme siecle, les armees du roi de France traverse l'Italie pour aller reconquerir le royaume de Naples. Bellabre, capitaine Francais plutot teigneux, decide de se venger de Terrail de Bayard qui l'a ridiculise lors d'un tournoi. +183 Les enfants de Salem 7 1987 187 Revenu d'amazonie pour s'occuper de son fils Jeremy qui souffre de problemes psychologiques, Joe Weber l'emmene a Salem dans une maison leguee par sa tante. La ville est en fait peuplee de vampires. +184 La bamba 1 1987 188 Californie, ete 1957. Ricardo Valenzuela trie des oranges pour quelques dollars. Il reve de rock and roll, de cadillac et de grand amour. Premarque par un producteur, il triomphe grace au ramake d'un folklore mexicain : la Bamba. +185 Eclair de lune 5 1987 189 Loretta a perdu son mari, ecrase sous un bus. Persuadee d'etre abonnee a la malchance, elle a decide de ne plus se marier. Elle cede pourtant aux avances d'un homme serieux au compte en banque confortable. +186 Amsterdamned 4 1987 144 L'eau glauque des canaux d'Amsterdam. Une prostituee est sauvagement assassinee sous les yeux d'une clocharde. L'inspecteur Erik Visser est charge de mener l'enquete. Il s'engage dans le labyrinthe tortueux des canaux a la recherche du meurtrier. +187 Traitre sur commande 1 1969 190 1876, Pennsylvanie. Cruellement exploites dans les mines de charbon, des immigrants irlandais fondent une organisation de sabotage pour vaincre l'oppression. James McKenna, agent secret charge de demasquer les rebelles, s'infiltre dans le groupe. +188 Agnes de Dieu 1 1985 189 Soeur Agnes est-elle une folle criminelle ou une sainte possedee de Dieu ? Soupconnee d'infanticide, la jeune novice se mure dans un silence devot. Chargee de l'enquete, le Dr Martha Livingston se heurte a la mere superieure qui protege Agnes. +189 A double tranchant 4 1986 28 L'heritiere d'une des plus grosses fortunes de Los Angeles est ferocement assassinee par un homme masque. Les soupcons se portent sur son mari Jack Forrester. Le procureur Krasny est convaincu de sa culpabilite. +190 La rancon de la liberte 6 1984 191 Josny est un garcon manque qui mene une vie d'ecoliere classique, va a la peche et vend des hamecons. Son pere Billy etant au bagne, elle vit seule avec sa grand-mere sur les bords du Mississipi. Un jour, Billy est libere. +191 Maniac cop 2 1988 192 New York baigne dans la terreur : un maniaque sanguinaire soupconne d'etre un agent de police massacre sans raison les flaneurs. Le detective Frank McRae parvient a l'identifier mais decouvre avec horreur que le meurtrier est mort depuis des annees. +192 Homeboy 1 1988 193 Johnny Walker est un loser de la boxe. Il est de ceux qui encaisse tous les coups et quolibets. Solitaire, farouche, paume, defigure il echoue dans une ville minable. Il tente de faire le point mais se laisse entrainer par un gangster miteux. +193 Iceman 2 1984 194 Une expedition scientifique au pole nord decouvre un homme de Neanderthal dans la glace depuis 20000 ans. +194 Un jour, une vie 1 1975 195 A 18 ans, Jill Kinmont accumule des victoires en ski. Toute l'equipe olympique a les yeux fixes sur elle et sur son amie Audra-Jo, grande skieuse aussi. Mais Audra-Jo est terrassee par la polio, Jill est victime d'une chute qui la laisse brisee. +195 La mouche 2 1987 196 Seth Bundle, physique de play boy, travaille en solitaire dans son labo. Expert en manipulations genetiques, il a mis au point un systeme qui permet de transferer la matiere d'un point a un autre. +196 La fissure 7 1987 197 Alors que leurs parents sont partis pour le week-end, trois adolescents decouvrent un arbre abattu par la foudre qui presente une cavite bizarre. Une succession d'etranges incidents va rendre la vie a une multitude de petits monstres tres agressifs. +197 Baxter 5 1989 198 On a beau etre chien, on n'est pas des betes pense Baxter qui en a par dessus la truffe des faceties cruelles de sa maitresse. Courtaud mais muscle, Baxter, le bull-terrier, a la langue bien pendue et la cervelle en ebullition. Il moralise sur le mond +198 La malediction du cobra 7 1979 199 Un cobra vient semer la terreur dans une petite ville. Le maire et un promoteur immobilier tentent de minimiser l'affaire. Pour le pere Farrow, le cobra est l'incarnation de Satan venu venger un druide brule vif quelques siecles plus tot. +199 Le festin de Babette 5 1987 200 Par un soir de tempete, Babette debarque sur la cote danoise avec pour seul viatique une lettre de recommandation qui lui permet de se faire engager comme gouvernante chez deux vieilles demoiselles. +200 Les cigognes n'en font qu'a leur tete 5 1989 201 40 ans, amoureux et fortunes, Marie et Jeremie vivent pourtant un drame : impossible pour eux d'avoir un enfant, et impossible de savoir pourquoi. Leur medecin leur conseille l'adoption, mais cela s'avere difficile tout comme pour une mere porteuse. +201 Voleur de desirs 1 1984 202 Lorsque Scott Muller cambriole l'appartement des Davis, il empoche machinalement le journal intime de Mickey. Il prend plus tard beaucoup de plaisirs a le lire et decouvre ses desirs, ses fantasmes, sa quete de l'homme ideal. +202 La lectrice 5 1988 203 Constance lit un roman qui raconte l'histoire de son etat. Par voie de petites annonces, Marie propose de faire des lectures a domicile. Les clients ne manquent pas. L'adolescent handicape qui admire ses jambes et les contes de Maupassant... +203 Projet X 2 1988 204 Mis a pied pour avoir emprunte un avion de chasse, Jimmy Garrett est affecte dans un centre de recherche. Ses competences techniques l'amenent a travailler dans un laboratoire qui utilise des chimpazes sur simulateur de vol. +204 Starman 2 1985 205 Une creature etrange, arrivee en pleine nuit, s'installe chez une jeune veuve en pleine nuit. Elle se transforme en humain sous les traits de son ex mari. Elle comprend qu'elle doit obeir a la copie de son mari. +205 Colere en Louisiane 1 1987 23 1972. En louisiane, un vieil ouvrier agricole noir, Mathu, tue le fils d'un metayer qui pourchassait un frere de race. Afin de le proteger, la jeune proprietaire de la plantation, Candy, alerte les amis du vieil homme qui avec le sherif s'accusent. +206 La maison de grand-mere 2 1988 206 A la mort de leur pere, 2 enfants, David et Lynn, s'installent chez leurs grands-parents dans une ferme isolee. Lors de la 1ere nuit, David reve d'un double assassinat perpetre par son grand-pere. Une inconnue rode dans la maison. +207 Je suis le seigneur du chateau 1 1989 207 Un chateau en Bretagne dans les annees 50. Au moment de mourir, Mme Breaud demande a son fils Thomas de veiller sur son pere Jean. Quand Jean engage une gouvernante, Thomas declare la guerre a son fils Charles pour les faire partir. +209 L'aventure interieure 2 1987 160 Pendleton, pilote d'essai bagarreur et alcoolique, delaisse par l'armee et par sa petite amie, sombre dans la deprime. Il accepte de commander un vaisseau miniaturise injecte dans le corps d'un lapin. Mais il est injecte dans la fesse de Jack Putter. +210 La soule 1 1989 208 1813. Ecrasees par les Anglais, les troupes de Napoleon sont expediees au bagne. Le lieutenant Pierre Cursley est resolu a punir le traitre : Francois Lemercier. 2 ans plus tard, Lemrecier est devenu coordonnier estime et champion de la soule. +211 Soleil de nuit 9 1986 209 Danseur etoile du Kirov a Leningrad, Nikolai Rodchenko est passe a l'ouest il y a 8 ans. Victime d'une grave avarie, l'avion qui l'emporte vers le Japon se pose sur une base militaire siberienne. Il est reconnu par Chaiko, colonel au KGB. +212 Froid comme la mort 4 1986 210 Katie McGovern, actrice au chomage, est appelee par le docteur Lewis, psychiatre reconverti dans la production cinematographique, pour remplacer la comedienne Julie Rose a qui elle ressemble. Mais Katie decouvre qu'elle est prisonniere du docteur. +213 Invasion USA 6 1985 211 Matt Hunter vit tranquillement en Floride loin de la civilisation. Il apprend qu'en ville des terrorristes commettent des attentats dans le but d'envahir des Etats Unis. Hunter refuse de reprendre du service jusqu'a l'assassinat de son meilleur ami. +214 La petite voleuse 1 1988 212 Abandonnee par sa mere, Janine vit en province chez son oncle et sa tante. A 16 ans, elle ne peut s'empecher de chaparder : des chaussures, de la lingerie... Le cure la mene chez les gendarmes. Elle trouve une place de bonne chez un jeune couple. +215 Les petites cheries 5 1980 213 Aux abords d'un lac, filles et garcons s'installent dans leurs camps d'ete respectifs. Tres vite, Angel, jeune sauvageonne, s'oppose a Ferry, une fille a papa. Un concours est organise pour les departager : la premiere qui perdra sa virginite. +216 La couleur pourpre 1 1985 36 1908. Celie et Nettie, 2 soeurs noires, vivent dans le sud des Etats Unis. Celie, 14 ans, a 2 enfants de son pere. A leur naissance, il les vend a un pasteur puis oblige Celie a epouser Albert, un veuf brutal. +217 Le solitaire 4 1980 214 Apres 11 annees de prison, Frank veut rattraper le temps perdu. Le jour, il dirige un garage de voitures d'occasion,; la nuit, il vole des diamants en percant des coffres forts. Il reve de se retirer. +218 September 1 1987 30 Apres une tentative de suicide, Lane passe la fin de l'ete dans sa maison du Vermont. Elle y heberge Stephanie, sa meilleure amie. Ignorant les vacances d'Howard, un voisin professeur, Lane s'est eprise de Peter, un ecrivain divorce. +219 Saigon, l'enfer pour deux flics 4 1987 215 AB. Saison 1968. Buck McGriff et Albaby Perkins, policiers militaires en civil, sont charges de retrouver l'assassin, qui semble etre un officier americain, d'une prostituee. Le seul temoin, un GI noir, est abattu avant d'avoir pu dire ce qu'il savait. +220 Poltergeist III 2 1988 216 Chicago. Bruce et Patricia Gardner recueillent leur niece Carol Anne pour lui faire oublier les cauchemars qui la hantent. Bientot d'etranges phenomenes se produisent. +221 Romuald et Juliette 5 1989 45 Depuis 10 ans, Juliette, antillaise, fais le menage dans les locaux de l'entreprise Blanlait dirige par Romuald, jeune PDG. Celui-ci est victime d'un complot organise par ses collaborateurs : il est accuse de delit d'initie par la COB. Juliette veille +208 Histoires fantastiques II 2 1986 36 +222 L'enfant du diable 2 1980 217 A la suite d'un accident qui a coute la vie a sa femme et a sa fille, John Russel s'installe dans une vieille batisse de Seattle. La nuit, des bruits etranges se font entendre. Persuade qu'il a affaire a un fantome,il organise des seances de spiritism +223 Itineraire d'un enfant gate 5 1988 38 Enfant abandonne, Sam Lion a ete recueilli et eleve dans un cirque. Une chute de trapeze l'ecarte des chapiteaux. A 16 ans, il fait fortune dans l'industrie du nettoyage. A 50 ans, riche et entoure, il decide de tout plaquer et de partir en bateau. +224 La mort en prime 2 1984 218 Otto, un jeune punk qui travaille dans un super-marche, vient de perdre son emploi. Errant dans Los Angeles, il accepte l'offre d'un inconnu qui lui propose 25 dollars pour convoyer la voiture de sa femme. En fait,l'homme est un +225 Barry Lyndon 18 1975 52 L'Irlande au XVIIIe siecle. Redmond Barry, jeune homme naif et desargente, doit prendre la suite apres avoir battu en duel le soupirant de sa cousine. Depouille par des brigands, il s'engage dans l'armee anglaise et deserte apres la 1ere bataille. +226 Traquee 4 1988 219 Unique temoin de l'assassinat de l'un de ses amis par le gangster psychopathe Joey Venza, Claire Gregory, une riche celibataire, voit sa vie menacee. Mike Keegan, policier issu d'un milieu modeste est charge de sa protection. Ils deviennent amant. +227 Good morning Vietnam 1 1988 102 1965. Adrian Cronauer est affecte a la radio des forces armees de Saigon. Excellent disc-jockey, il refuse la musique lenifiante, l'information censuree et impose le rock et des sketches delirants. Ses chefs tentent de l'interdire d'antenne. +228 Un roi a New York 5 1957 26 Chasse d'Estrovie, le roi Shadow se refugie a New York. Les services de l'immigration ne lui reservent pas l'accueil escompte. Ses deboires commencent. +229 Dragnet 5 1987 220 Flic aussi rigoureux que sinistre, Joe Friday applique la loi consciencieusement, au grand desespoir de ses coequipiers qui ne supportent pas sa morosite. Son nouveau collegue, Pep Streebek, est un jeune surexcite bagarreur. +230 Enquete sur une passion 4 1980 221 Vienne. Le psychanalyste americain Alex Linden appelle l'hopital en pleine nuit. Sa maitresse, Milena Flaherty vient de tenter de se suicider. En attendant qu'elle sorte de son coma, l'inspecteur Netrusil l'interroge. +231 Ne reveillez pas un flic qui dort 4 1988 222 Au cours d'un meme nuit, 3 caids de la pegre sont sauvagement assassines. Les tueurs sont des policiers appartenant au groupe secret +232 Le merdier 10 1977 223 Sud-Vietnam, 1964. Le major Asa Barker, un veteran, accueille de nouvelles recrues dans son detachement de Penang. Il recoit l'ordre d'occuper Muc Wa, un avant poste francais abandonne. Barker n'y voit aucun interet mais obeit et y envoie les +234 Broadcast news 5 1987 224 Tom Grunick poosede le look ideal pour une star des medias. Presentateur impeccable du JT, propulse par une jeune productrice, Jane Craig, il comprend a peine ce qu'il raconte. Aaron Altman est un journaliste talentueux mais qui passe mal a l'ecran. +235 Le deux Fragonard 1 1989 225 Honore Fragonard est un peintre sensuel et charmeur. Son cousin, Cyprien Fragonard, est un anatomiste qui disseque les corps avec maestria et delices. Honore s'eprend de Marianne, un petite lavandiere. Cyprien, lui, aimerait la decouper. +236 L'ile de Pascali 1 1987 226 1908. Depuis 20 ans, l'espion Basil Pascali envoie des rapports depuis l'ile de Nisi au sultan de Constantinople. Il loue ses services d'interpret a l'archeologue Anthony Bowles. Bowles loue bientot une idylle avec Lydia dont Pascali est amoureux. +237 Copain, copine 5 1984 227 Romantique incurable et ecrivain a ses heures, Joe travaille comme agent de securite dans un college. Il y rencontre Emily, mere celibataire d'un gamin de 10 ans brillants mais desespere. Ils se lient d'amitie. +238 Robocop 2 1987 228 XXIe siecle. Le crime regne en maitre sur la cite de Detroit. Une puissante multinationale controle la police. Elle decide d'endiguer ses pertes en creant Robocop, un androide de chair et d'acier. Murphy, policier dans le coma sert de cobaye. +239 Cyrano 1 1989 229 Cyrano est un vrai heros selon la tradition, mais aussi le premier des anti-heros. Cyrano connait l'echec, le malheur. Il est passe a cote du succes et du grand amour. +240 La main droite du diable 1 1988 19 Jeune recrue du FBI, Cathy Weaver est charge par son amant, Michael Carnes, d'infiltrer un groupe d'extreme droite. Elle se fait embaucher comme saisonniere aupres du fermier Gary Simmons. +241 Le maitre de musique 21 1987 230 Au debut du siecle, Joachim Dallayrac, chanteur lyrique adule, annonce brusquement qu'il abandonne la scene. Il se retire dans son chateau avec sa compagne Estelle pour se consacrer a la formation de son unique eleve, Sophie. +242 L'ami retrouve 1 1989 143 55 ans apres avoir quitte l'Allemagne, Henry Strauss, avocat juif new-yorkais, decide d'y retourner en quete d'un ancien camarade de classe. Exile dans sa ville natale, il se rememore cette belle amitie detruite par l'horreur nazie. +243 Frantic 4 1987 232 Apres 17 ans de mariage, Richard et Sondra Walker s'offrent une seconde lune de miel a Paris a l'occasion d'un congres de cardiologie.Des leur arrivee, une de leurs valises est echangee. Puis Sondra disparait mysterieusement. +244 Manika une vie plus tard 1 1988 233 Dans un village de pecheurs situe au sud de l'Inde, une fillette de 10 ans, Manika, elevee chez les jesuites, est persuadee d'etre la reincarnation de l'epouse d'un riche Brahmane, morte en couche. +245 Une chance pas croyable 5 1987 180 Venues a la morgue identifier le corps de Michael, victime d'un attentat, Lauren et Sandy, eleves du professeur d'art dramatique Korzenowski decouvrent qu'elles sont les maitresses du meme homme. +246 Aigle de fer 6 1985 234 Au cours d'un exercice de routine en Mediterranee, l'avion du colonel Ted Masters est abattu. Capture par un pay arabe hostile, il doit etre pendu. Son fils Doug decide d'organiser une mission de sauvetage avec ses amis les Aigles. +247 Lady Jane 16 1985 235 1552. LE monarque anglais Edouard IV est moribond. Le duc de Nothemberland complote pour que lui succede Jeanne Grey, une cousine eloignee. Il la marie de force a son fils Guilford Dudley. +248 L'empire du soleil 1 1987 36 1941, Shangai. La seconde guerre mondiale a gagne l'orient. L'occupation d'une partie de la Chine par le Japon n'affecte pas les zones libres. Enfant choye, insouciant et passionne d'aviation, Jim decouvre peu a peu la violence et la mort. +250 Les bois noirs 1 1989 236 Violette est accusee de la mort de son mari. Gustave, un perigourdain, l'avait demande en mariage apres la lecture de son journal intime oublie dans un taxi. Accueillie au domaine par la mere de Gustave, Violette supporte mal l'atmosphere du chateau. +251 Imagemaker 22 1986 237 Apres le suicide de sa femme, Roger Blackwell quitte son poste de conseiller aupres du president de la republique, gurge par une journaliste sans scrupule. Il decide de preparer un film pour denoncer la corruption politique. +252 Who's that girl 5 1987 137 Nikki a paye 4 ans de prison a la place d'un criminel dont elle est decidee a se venger. Surveillee par l'avocat d'un riche homme d'affaires, Nikki le persuade de l'aider. +253 Les eaux printanieres 1 1989 238 Jeune aristocrate russe, Dimitri Sanine entreprend de parcourir l'Europe avant de regagner ses terres. De passage en Allemagne, il tombe amoureux de Gemma, une jolie patissiere, puis de Maria, noble et sophistiquee. +254 L'arme fatale 4 1986 46 Martin Riggs, policier a Los Angeles, a perdu gout a la vie depuis la mort de sa femme. Ses tendances suicidaires lui ont valu le surnom d"Arme fatale". Il devient le partenaire de Roger Murtaugh, flic noir quinquagenaire et paisible. +255 L'invite surprise 5 1989 90 Martin, jeune homme noir sans histoire, est temoin d'un attentat. Il photographie par hasard le terroriste qui est en fait un agent de la DGSE. Il alerte la presse avec l'aide de son pere adoptif, Charles Mazenna, ancien chef de l'anti gang. +256 Faux temoin 19 1987 239 De la fenetre de son amant, Terry, Sylvia a assiste a une tentative de viol. Apprenant que la meme nuit l'agresseur a tue une autre femme et craignant la jalousie de son mari, Sylvia demande a Terry de temoigner a sa place +257 Randonnee pour un tueur 4 1988 240 Warren Stantin, un veteran du FBI, poursuit l'auteur d'un hold-up sanglant. Le meurtre d'un pecheur le met sur la piste d'un groupe de randonneurs, escorte d'une jeune uide, Sarah. Il oblige son compagnon, Knox, a l'accompagner sur les traces du tueur +258 La fin du jour 1 1939 241 Fini le temps du succes pour Saint-Clair. Il echoue a l'hospice pour comediens. Son arrivee reveille de vieilles rancoueurs tandis que l'etablissement risque de fermer faute d'argent. +259 Bapteme 1 1989 242 De 1935 a nos jours, la vie de Aline, la fille d'un cafetier de Douchy-les-Mines et de Pierre, vendeur ambulant sur les marches. Un couple ordinaire qui s'est aime follement, qui a souffert tragiquement, qui s'est dechire. +260 Razorback 2 1984 243 Au coeur de l'outback australien, une enorme bete aneantit la ferme du vieux Jake Cullen, tuant son petit fils. Deux ans plus tard, une journaliste de New York, Beth Winters, qui enquete sur le massacre des kangourous disparait. +261 Les incorruptibles 4 1987 164 Chicago 1930. Al Capone controle le jeu, la prostitution, le racket, la contrebande d'alcool. Jeune agent federal, Eliot Ness est charge de faire tomber le caid. Apres un premier echec, Ness recrute Malone, un vieux flic, Stone, tireur redoutable. +262 Attends-moi au ciel 5 1987 244 Responsable de la securite du general Franco vieillissant, Alberto decide de trouver un sosie au Caudillo. Il fait enlever Paulino, un tranquille orthopediste qui devra imiter le dictateur. +263 Brazil 2 1985 25 Brazil, cite futuriste ou tout est regle. L'etat, big brother omnipotent, controle les faits et gestes des habitants par le biais d'un systeme informatique monstrueux. Sam Lowry en est un rouage, il pianote le jour et reve d'amour la nuit. +264 A la poursuite d'Octobre rouge 0 1990 146 Sans raisons apparentes, un sous-marin nucleaire sovietique s'approche dangereusement des cotes americaines. Quelles sont ses intentions : revanche, provocation, acte de demence ou geste de paix ? +265 La fille de Jack l'eventreur 7 1971 245 Jack l'eventreur embrasse une derniere fois sa fille, Anna, et tue sa femme sous ses yeux. Des annees plus tard, le docteur Pritchard veut guerir Anna de sess pulsions criminelles. +266 Double detente 4 1988 54 Le trafiquant de drogue Viktor Rostavili abat le coequipier du capitaine de la milice moscovite Ivan Danko avant de s'enfuir a Chicago. La, il met en place un nouveau reseau en eliminant le partenaire du sergent Art Ridzik. Danko arrive a Chicago. +267 Le choix du destin 10 1977 228 1940. La Hague. un groupe d'etudiants joue au tennis quand la radio annonce que la guerre est declaree. Pour le jeune Erik, c'est la fin de la vie facile. Il devient un farouche resistant et multiplie les actions contre les nazis. +268 Ratboy 1 1986 246 Eugene, l'enfant rat, vit dans une decharge pres de Los Angeles. Il est kidnappe par deux malfrats qui alertent les medias et veulent le vendre au plus offrant. Nikki, jeune femme en quete de scoop leur ravit le monstre avec l'aide de ses 2 freres. +269 Bienvenue au paradis 10 1990 86 Pendant la deuxieme guerre mondiale, plus de 110 000 Americains d'origine japonaise ont ete internes dans des camps de concentration aux USA. +270 Sans pitie 19 1986 247 Un dealer met les policiers Eddie Jillette et Joey Collins sur la piste de Deneveux, un gros bonnet de la drogue. Ils se font passer pour des tueurs a gages pour l'approcher mais il se fait descendre par un caid adverse et Joey se fait poignarde. +271 Defense play 19 1988 248 Scott Denton est un etudiant feru d'informatique. Il rencontre Karen dont le pere, un important scientifique, travaille sur des helicopteres miniatures destines a l'armee. +272 Les sorcieres d'Eastwick 5 1987 249 Alexandra, Jane et Sukie, 3 amies celibbataires, vivent et s'ennuient a Eastwick, une petite ville puritaine. Elles se retrouvent une fois par semaine. Elles definissent l'homme ideal. Dans le meme temps, Daryl Van Horne emmenage a Eastwick. +274 Henry et June 1 1990 250 Paris 1931. La passion d'une femme pour Henry Miller et sa femme June. +275 Promotion canape 5 1990 201 Dans l'administration des Postes, la "promotion canape" est le moyen le plus radical et le moins orthodoxe de grimper les echelons de la hierarchie. +276 Wall Street 1 1987 251 Employe dans une banque de Wall Street, Bud Fox est devore par l'ambition. Il vend une information confidentielle concernant une compagnie aerienne ou travaille son pere a Gordon Gekko. Reconnaissant, Gekko prend Bud sous son aile. +277 Complot de famille 12 1976 5 Sentant sa mort prochaine, Julia Rainbird desire leguer toute sa fortune a son neveu Edward. Enfant illegitime de sa soeur, sa famille l'avait confie 40 ans plus tot aux Shoebridge. Julia engage une medium pour retrouver sa trace. +278 La terre des pharaons 16 1955 252 Egypte, 2800 avant Jesus Christ. De retour dans son pays, le pharaon Cheops offre a Vashtar, architecte esclave, de le liberer ainsi que son peuple s'il lui construit un tombeau inviolable. +279 Manhattan 1 1979 30 Isaac, 42 ans et divorce, est auteur de sketches comiques pour la television. Parrallelement, il tente d'ecrire un roman sur New York qu'il adore, sans jamais parvenir a depasser le premier chapitre. +280 Le maitre de guerre 10 1986 120 Buveur et bagarreur, le sergent en retraite Highway, decore pour ses faits d'armes en Coree et au Viet Nam, se montre peu doue pour la vie civile. Reintegre dans l'armee, il se heurte a ses superieurs qui lui confient l'instruction d'indisciplines. +281 L'orchestre rouge 9 1989 253 1937. Peu avant son execution par Staline, le general Berzine, chef des renseignements sovietiques, demande a Leopold Trepper, militant revolutionnaire juif polonais, de monter un reseau d'espionnage anti nazi a Paris, Berlin et Bruxelles. +282 The assault 1 1986 254 Les Pays Bas debut 1945. La guerre touche a sa fin. Un soir, un policier collaborateur est abattu et son corps depose devant la maison des Steenwijk. La gestapo intervient, execute la famille et brule la maison sous les yeux du cadet Anton, survivant. +283 Ironweed 1 1987 255 Octobre 1938. Apres 22 annees d'errance, Francis Phelan est de retour a Albany. Il y avait connu autrefois le bonheur aupres de sa femme Annie. Se sentant responsable de la mort de l'un de ses enfants, il avait tout plaque. +284 Comedie d'amour 1 1989 256 Paris 1933. Depuis 20 ans, l'ecrivain Paul Leautaud entretient une relation purement physique avec Anne qu'il appelel "le Fleau", epouse de son ami Henri. Anne se montre jalouse de Marie D., une bibliothecaire qui s'interesse a l'oeuvre de Leautaud. +285 Confession criminelle 4 1987 257 Vicaire d'une modeste paroisse de Detroit, le Pere Koesler est mele a une affaire de meurtre. Un maniaque assassine systematiquement des religieuses. Inconscient ou pervers, il ne craint pas venir se confesser aupres du pere Koesler. +286 Cobra 4 1986 258 Marion Cobretti, dit Cobra, appartient aux Zombies, un corps de police tres special. Il n'intervient que dans les situations d'exception. Apres avoir abattu un preneur d'otages, Cobra enquete sur l'equarisseur, un fou qui a deja fait 15 victimes. +287 Chambre a part 5 1989 259 Gert et Martin vivaient gentiment a Londres une petite vie reglee sur l'horloge de Big Ben. Bien malgre eux, ils rencontrent un couple tornade irresistible. Martin tombe amoureux fou de Marie pendant que Francis s'occupe avec Gert. +288 La derniere cible 4 1988 260 Plusieurs personnalites du show-business sont assassinees. Leurs noms figurent tous sur une liste noire etablie pour plaisanter par le realisateur Peter Swan. Charge de l'enquete, l'inspecteur Harry Callahan decouvre qu'il est egalement sur la liste. +289 Les enfants du desordre 1 1989 261 En prison, Marie, une jeune droguee, decouvre l'existence d'une compagnie theatrale qui reinsere les delinquants. A sa liberation, elle est prise en charge par les educateurs. +290 Voyageur malgre lui 1 1988 166 Auteur de guides de voyage pour ceux qui detestent les deplacements, Macon Leary est un homme desabuse et comateux depuis la mort de son fils. Sa femme va le quitter et son chien Edward deprime. Il rencontre une jeune dresseuse d'animaux, Muriel. +291 Nadine 5 1987 262 Nadine, en instance de divorce, accepte de poser nue pour un photographe. Prise de remords, elle retourne le voir et assiste a son assassinat. Paniquee, elle demande l'aide de son mari, Vernon, et s'empare par erreur de dossiers ultra secrets. +292 Le ninja blanc 6 1987 263 Dans une petite ile des caraibes, des Marines disparaissent mysterieusement. Le colonel Woodward envoie sur place deux Rangers: Joe Armstrong et Curtis Jackson. Ceux-ci ne tardent pas a decouvrir qu'ils ont ete enleves par le Lion, un trafiquant. +293 Noce blanche 1 1989 125 Professeur de philosophie a St Etienne, Franccois, la cinquantaine, marie, se prend d'amitie pour Mathilde, une de ses eleves. Il decide d'aider dans ses etudes l'adolescente perturbee et aparemment droguee. Leur complicite se transforme en passion. +294 Rien que pour vos yeux 6 1981 264 Havelock, un agent anglais, est tue alors qu'il cherche a recuperer l'ATAC, un emetteur de mise a feu des missiles nucleaires englouti dans l'epave d'un chalutier. James Bond localise son assassin en Espagne, mais celui-ci est execute a son tour. +295 Pentimento 5 1989 265 Lucie apprend de sa mere, une alcoolique extravagante, le deces de son pere qu'elle n'a jamais connu. Bouleversee, elle se rend au cimetiere mais se trompe de cortege et Charles, ke fils de l'homonyme defunt, est ravi de decouvrir une demi-soeur. +296 Un monde sans pitie 1 1989 266 Completement paume ou simplement desinvolte, Hippo passe son temps a ne rien faire a part la nouba et des parties de poker. Un jour il tombe amoureux de Nathalie, "grosse tete" BCBG et serieuse qui fuit les bohemes. +297 Epouvante sur New York 3 1982 187 Blesse au cours du hold-up d'une bijouterie, Jimmy Quinn se refugie au sommet d'un building. Il y decouvre un nid gigantesque contenant un oeuf enorme et des ossements humains. +298 Les 400 coups 1 1959 66 Antoine Doinel et son copain Rene, cancres patentes, hantent les petits cinemas de la place Clichy. Antoine decide un matin de faire l'ecole buissonniere avec Rene. Le lendemain, pour s'excuser, il affirme a son maitre que sa mere est morte. +299 Piege de cristal 6 1988 146 Un 24 decembre, le policier new-yorkais John McClane arrive a Los Angeles pour passer Noel avec ses enfants. Il rejoint son epouse Holly. Un groupe d'hommes armes fait irruption. Ls convives sont pris en otages. Seul McClane echappe aux assaillants. +300 Bandini 1 1989 268 Arturo, fils d'emigres italiens, ne reve que de base-ball et de la jolie Rosa. Mais en cet hiver 1928, Arturo perd de son insouciance lorsque son pere, macon, abandonne sa famille pour une riche veuve mal vieillie. +301 He's my girl 5 1987 270 Bryan, futur chanteur, gagne dans un concours televise un sejour a Hollywood, avec en prime la promesse d'un lancement professionnel. Seule condition a l'attribution de son prix : une presence feminine a ses cotes. Reggie, son manager, se travestit. +302 Mosquito coast 6 1986 271 Decu du monde dont il voudrait gommer les imperfections, Allie Fox, scientifique genial et marginal, part avec toute sa famille au Honduras et s'y amenage une thebaide elaboree. +303 L'homme qui voulait savoir 19 1988 272 En vacances dans le midi de la France, Saskia et Rex, des Hollandais, s'arretent dans une station-service. La jeune femme s'absente un moment sans jamais reapparaitre. +304 La discrete 5 1990 273 Pour se venger d'une femme, Antoine suit le conseil d'un de ses amis et par le biais d'un journal intime qu'il veut publier decide de seduire une jeune fille et de l'abandonner. +305 Milena 1 1991 274 La vie passionnee d'une jeune femme intelligente et brillante qui a sacrifie sa vie a ses convictions. Milena Jesenska a ete la traductrice et le grand amour epistolaire de Franz Kafka. +306 Desperate hours 1 1990 138 Michael Bosworth est un tueur dangereux. Il s'evade grace a la complicite de son avocate Nancy Breyers. Il investit le domicile de Tim et Nora Cornell qu'il prend en otage avec leur deux enfants pour attendre Nancy et fuir avec elle. +307 L'adieu au roi 10 1988 276 Le capitaine Fairbourne est parachute en fevrier 1945 au-dessus de la jungle de Borneo pour enroler les Dayaks chasseurs de tetes et en faire des combattants contre les Japonais. Leur chef est Learoyd, un ancien soldat americain deserteur. +308 Big 5 1988 173 Josh a 12 ans. Il a tour pour etre heureux sauf qu'il n'est pas assez grand pour courtiser la fille de 15 ans qu'il aime. Un magicien de carton-pate exauce son voeux d'etre grand. Contraint de quitter sa famille, il reussit dans une fabrique de jouets +309 Running man 2 1987 277 En 2019, les Etats-Unis vivent sous la dictature. Pour avoir refuse de tirer sur une foule de manifestants, le policier Ben Richards est condamne a participer au jeu televise "Running man". Il doit affronter des gladiateurs dans les rues de L.A. +310 Sur le fil du scalpel 7 1987 278 A Los Angeles, un psychopathe assassine des prostituees de facon bien specifiques et a des dates bien precises. La police est persuadee d'avoir affaire a un homme qui fete le centenaire de Jack l'eventreur. +311 Tom et Lola 2 1989 279 Depourvus de defenses immunitaires, Tom et Lola, vivent depuis leur naissance sous une bulle de plastique a l'abri des microbes. Les 2 enfants communiquent par gestes et partagent le reve de s'evader vers un pays ou l'air est pur, l'Alaska. +312 Faux-semblants 1 1988 196 Les jumeaux Beverly et Elliot Mantle, deux gynecologues de renom, partagent tout : appartement, cabinet medical et petites amies. Mais la rencontre d'une actrice, Claire Niveau, va bouleverser leur vie quotidienne et leur equilibre mental. +313 Cocktail 5 1988 181 Brian, jeune homme ambitieux, se lance a l'assaut de New-York. Apres une experience ratee dans le milieu de la finance, il accepte un emploi de barman a Manhattan. Doug, un homme solitaire et cynique, lui apprend toutes les ficelles du metier. +314 3615 code pere Noel 19 1989 280 Thomas, un gamin surdoue feru d'informatique, passe sa commande au Pere Noel par minitel. Il decide ensuite de l'attendre dans l'espoir de le capturer. Mais son message a ete intercepte par un fou dangereux qui s'introduit chez lui. +315 Objectif nucleaire 1 1989 281 Alors qu'il s'apprete a etre decore, l'eminent neurologue Alexander Brown est hante par ses souvenirs du passe. 30 ans plus tot, en 1956, il avait affecte dans l'armee pour tester la resistance d'un groupe de cobayes humains aux radiations nucleaires. +316 Mort a l'arrivee 19 1988 282 Professeur de lettres a l'universite et ecrivain repute, Dexter Cornell entre en titubant dans un commissariat pour faire une deposition sur son propre meurtre. Empoisonne a son insu, il n'a plus que 24 heures a vivre. +317 Gorilles dans la brume 6 1988 283 1966. L'Americaine Dian Fossey arrive au Zaire pour recenser et etudier les gorilles de montagne menaces de disparition par le braconnage. Chassee par la guerre civile, elle part s'installer au Rwanda. Elle fonde un centre de recherches. +318 Au fil de la vie 1 1988 284 En 1957, 2 fillettes se rencontrent sur une plage d'Atlantic City. Issue d'un milieu populaire, la deluree C.C. Bloom reve d'etre chanteuse. Hilary, plus reservee, appartient a la haute bourgeoisie. Separees, elles se retrouvent a l'age adulte. +319 Blindside 19 1987 285 Penfield Gruber, gerant d'un motel, est contacte par des truands pour espionner un de ses locataires. Il decouvre alors un complot contre une femme dont il tombe amoureux. +320 Chacun sa chance 19 1990 124 Angela Crispini, une femme mysterieuse, demande au detective prive Tom O'Toole d'enqueter sur l'assassinat d'un de ses amis. Le neveu de la victime, Felix Daniels, a ete inculpe du meurtre mais Angela est persudaee de son innocence. +321 Natty Gan 1 1986 286 Chicago 1935. Sol Gann et sa fille Natty de 13 ans vivent dans un modeste hotel. Chomeur et sans ressource, Sol part travailler comme bucheron a l'autre bout du pays en confiant Natty a la gerante de l'hotel. Mais celle-ci s'enfuit retrouver son pere. +322 Retour de la riviere Kwai 10 1988 287 En fevrier 1945, l'aviation americaine bombarde un pont sur la riviere Kwai en Thailande. les Japonais exercent aussitot des represailles sur leurs prisonniers. Ils evacuent les hommes valides vers le Japon prive de main-d'oeuvre. +323 Danse avec les loups 6 1991 288 Grande fresque sur les terres vierges de l'Amerique, ce document passionnant sur le peuple Sioux fait connaitre ces indiens victimes d'un des plus grands genocides de l'Humanite. +325 L'eveil 1 1990 173 New-York 1969. Le docteur Malcolm Sayer est un jeune et brillant neurologue que son temperament farouche et une timidite maladive ont oriente vers la recherche. Il postule un emploi et se voit confier un groupe de malades psychiques. +326 Oublier Palerme 1 1989 290 Carmine Bonavia, un jeune americain d'origine sicilienne, brigue la mairie de New York. Interviewe par une journaliste italienne, il se prononce pour une legalisation reglementee de la drogue. Il se rend a Palerme.La mafia ne tarde pas a se manifester +327 Criters II 7 1988 291 Brad Brown revient passer ses vacances a Grovers Bend, une petite ville ammericaine qui fut un an auparavant envahie par de feroces creatures cannibales, les critters. Le jour de paque, des oeufs eclosent liberant de nouveaux monstres. +328 La Baule Les-Pins 1 1989 292 1958. Frederique 13 ans et Sophie 8 ans partent en vacances a la Baule comme tous les ans. L'oncle Leon et la tante Bella les attendent comme tous les ans, mais leur mere Lena reste a Lyon pour de mysterieuses raisons et confie la garde a la Bonne. +329 La fille des collines 1 1989 293 Tom revient de la guerre d'Algerie. Son pere est mort et l'a desherite. Tous les biens sont revenus a son frere aine, Vincent, un reveur, buveur et joueur. Tom rencontre Angelina, une adolescente deluree courtisee par Vincent. +330 Lady Beware 1 1987 294 Katya Yarno est decoratrice. Sa specialite consiste a rendre attrayante des vitrines de magasins en utilisant des mannequins. Elle attire l'attention de Jack Price, un psychopathe, qui denotent une frustation sexuelle de Katya et la poursuit. +331 Derniere sortie pour Brooklyn 1 1988 295 New York, 1952. Alors que le pays ressent les contrecoups de la guerre de Coree, une greve difficile se durcit dans le quartier de Brooklyn. Autour de Harry, responsable syndical, Georgette, un jeune travesti et Tralala,une prostituee vivent ss espoir +332 Prof d'enfer pour un ete 5 1987 296 Victime d'un chantage de son proviseur, Freddy Shoop, prof de gym trop insouciant, doit sacrifier ses vacances d'ete a Hawaii pour donner des cours d'anglais a une classe d'eleves inadaptes. Il decide de se consoler en seduisant une collegue. +333 L'emissaire 9 1988 297 Le KGB met au point une operation pour compromettre en cas de besoin Jack Cavannagh, jeune politicien americain en pleine ascension. Profitant d'un voyage en Afrique du sud, ils kidnappent sa femme Caroline et la photographient ds des poses erotiques +334 Une autre femme 12 1988 30 Marion, une New-Yorkaise de 50 ans, loue un studio pour ecrire au calme son nouveau livre. Par les conduits d'aeration de l'immeuble, elle surprend les confidences d'une jeune femme a son psychiatre. Bouleversee, elle s'interroge sur elle-meme. +335 Nikita 9 1990 298 +336 L'operation corned beef 9 1990 37 L'operation corned beef est le nom de code de l'operation la plus explosive effectuee par le contre-espionnage francais depuis le Rainbow Warrior. Elle est menee par le capitaine de la DGSE Philippe Boulier, surnomme le Squale. +338 Can't buy me love 8 1987 300 Tucson, Arizona. Les eleves d'une ecoole sont divises en 2 clans: les cools et les bons eleves. Ronald Miller, qui appartient au 2eme groupe, va acheter les services de l'aguichante Cindy Mancini pour jouer le role de sa petite amie; +339 E.T. 2 1982 36 Dans une petite ville de l'Amerique, un vaisseau spatial fait un aterrissage furtif et s'esquive. Il a laisse un de ses passagers. Une famille composes d'une jeune femme et de 3 enfants est la communaute d'accueil de E.T. +340 CAMORRA 1 1985 301 Un trafiquant de la Camorra est assassine, une seringue plantee dans les testicules. Il etait avec une femme dans un hotel louche. Elle n'a rien vu. Les meutres se multiplient, signes de la meme maniere. La police ne voit rien non plus. +341 Delicatessen 2 1991 302 Dans un terrain vague noye de brume, un vieil immeuble delabre. Au rez de chaussee, l'enseigne d'une boucherie : Delicatessen. Louison, ancien clown, loue une chambre qui sert de garde manger pour le boucher. La viande, c'est le locataire. +342 Veuve mais pas trop 5 1988 303 Angela De Marco, mariee a Frank, un tueur de la mafia et mere d'un petit garcon, vit dans un monde opressant et violent. Frank ests tue par un parrain qui le surprend dans les bras de sa maitresse. Angela se croit libre et decide de refaire sa vie. +343 Les accuses 1 1988 204 Sarah Tobias est violee dans un bar par 3 hommes. L'assistance du procureur, Kathryn Murphy, est chargee de l'affaire. Les tests sanguins de la victime revelent des traces d'alcool et de marijuana qui ne plaide pas en sa faveur. +344 Il gele en enfer 4 1990 78 Tim s'evade de prison avec le projet d'attaquer un convoyeur de fonds dans une bourgade du Jura. Sur son chemin, il croise Georgia, une prostituee recherchee par la police. Ils restent ensemble, semant desordre et scandale partout ou ils passent. +345 New York stories 5 1989 57 Apprentissages: Le peintre Lionel Dobie tente de renouer avec Paulette, son assistance et sa maitresse. La vie sans Zoe; Zoe, 12 ans, vit seule dans un hotel de luxe. Le complot d'Oedipe: Sheldon, avocat juif, est tyrannise par une mere possessive. +346 Ca plane les filles 1 1980 121 Dans les faubourgs de Los Angeles, Madge, Annie et Deirdre passent la nuit chez Jeanie, sans prevenir leurs parents. Le lendemain, Annie, battue par son pere, decide de quitter le domicile familial. Les 4 filles decident de trouver un appartement. +347 Le prix de la passion 1 1988 179 Anna Dunlap, divorcee, eleve seule Molly, sa fille de 6 ans. Elle fait la connaissance de Leo dont elle tombe amoureuse. Le couple vit tres librement sa sexualite, trop librement pour Brian, l'ex epoux, qui demande la garde de l'enfant. +348 Liaison fatale 1 1987 121 Dan Gallagher, un avocat d'affaires, mene une existence sans proobleme avec sa femme et sa fille. Un week-end, il passe une nuit avec Alex Forrest. Pour Dan, il s'agit d'une aventure sans lendemain, mais Alex commence a le harceler. +349 Quelle heure est-il 5 1989 305 Marcello, riche avocat romain, rend une visite surprise a son fils Michele dans le port de Civitavecchia. Age de 30 ans, celui-ci vient de terminer ses etudes et effectue son service militaire. Les 2 hommes vont se decouvrir. +350 La vie en plus 5 1987 76 Jaake et Kristy, 2 jeunes americains, viennent de se marier. Mais Jake ne se sent pas a l'aise dans son role de mari. Pour assurer le confort de son epouse, il doit accepter du travail dans une agence publicitaire alors qu'il est encore etudiant. +351 Le silence des agneaux 0 1991 303 +352 Valmont 1 1989 133 Madame de Volanges fait sortir sa fille Cecile du couvent afin qu'elle epouse Mr de Gercourt. Pour se venger, la marquise de Merteuil, maitresse de ce dernier, fait un pacte avec le vicomte de Valmont: deflorer Cecile. +353 Deux millions de dollars aux Caraibes 6 1986 129 Apres 20 ans passes sans less prisons cubaines, Carlos se retrouve aux Etats-Unis. Il ne desire que retourner a Cuba pour retrouver sa femme. Il s'associe a Lucky Boone et a Mac, qui possedent un bateau de peche, en leur faisant miroiter un tresor. +354 Tequila sunrise 4 1988 306 Dale McKussic, ex trafiquant de drogue, tente de se ranger alors que Nick Frescia, un ami d'enfance devenu lieutenant de police ignore s'il a vraiment renonce a ses activites. En le filant, Nick rencontre Jo-Ann, directrice d'un restaurant. +356 Sexe, mensonges et video 8 1988 307 Graham Dalton revient a Baton Rouge apres une longue absence. Il est recu chez un ami, John Millaney, qui trompe sa femme Ann avec sa soeur Cynthia Bishop. Sexuellement impuissant, Graham collectionne les temoignages intimes de femmes sur cassettes. +357 Hors la vie 0 1991 308 Patrick Perrault est un photographe free-lance parti a Beyrouth couvrir l'interminable guerre. Il est pris en otage et sa vie bascule dans une longue nuit sauvage. +358 Milagro 1 1987 309 Milagro, un village du Nouveau-Mexique, est deserte par ses plus jeunes habitants. Ladd Devine, promoteur, decide d'implanter un parc touristique. Les expropriations commencent mais Joe Mondragon, un paysan, detourne l'eau du chantier pour irriguer. +359 Dangereusement votre 9 1985 264 L'agent 003 est tue apres avoir vole une puce electronique dans un centre de recherche sovietique. James Bond parvient cependant a ramener l'objet a Londres. La puce russe est identique a un prototype ultra secret mis au point par l'Angleterre. +360 Les voisins 5 1981 310 Earl et Enid Keese menent une existence routiniere dans leur petit pavillon de banlieue. L'arrivee de nouveaux voisins, Vic et Ramona, bouleversent leur vie. Vic emprunte de l'argent et les cles de voiture de Earl pendant que Ramona le seduit. +361 Working girl 5 1988 171 Tess McGill, secretaire dans une societe de courtage, reve de promotion. Mais sans diplomes et rebelle aux avances de ses superieurs, elle est mutee aux Fusions et Acquisitions, service dirige par l'elegante et cultivee Katharine Parker. +362 Do the right thing 1 1989 311 Dans un sous quartier noir de Brooklyn, La pizzeria de Sal, un Italo-Americain, est le lieu de toutes les rencontres. La vie est pittoresque, mais la canicule exacerbe les passions. +363 Scenes de menage (dans un centre commercial) 5 1991 312 Nick et Deborah fetent leur 16eme anniversaire de mariage. Les enfants sont absents; ils vont recevoir leurs meilleurs amis ett ensemble font les dernieres courses en se rememorant les instants de leur bonheur. Mais un incident enclenche la crise. +364 Scandal 1 1989 313 Au debut des annees 60, la haute societe anglaise est eclaboussee par les menees conjuguees d'une call-girl, d'un attache naval sovietique, d'un medecin mondain et d'un ministre anglais: le scandale Profumo-Keeler. +365 Nuit de folie 5 1988 314 Chris Parker, 17 ans, se resout a une triste soiree de baby-sitting apres un rendez-vous annule avec son petit ami. Elle doit garder Brad, un adolescent amoureux d'elle et sa soeur Sara. Chris recoit un appel au secours d'une amie. +366 Il y a des jours et des lunes 8 1990 38 Un soir de pleine lune, l'heure d'ete succede a l'heure d'hiver. Ca perturbe. La lune ronde attise les sentiments, exaspere la nervosite, favorise les elans passionnels. Ce jour la, une femme quitte un homme, un camionneur perd son emploi, etc. +367 GOLD 6 1974 159 Un accident survenu dans une mine pres de Johannesburg provoque la mort de Lemmer, le responsable de l'exploitation. Rod Slater se voit offrir par Manfred Steyner, le proprietaire de la mine, le poste du disparu. +368 Veraz 1 1991 315 L'amitie unit Theo, un adolescent fugueur passionne d'informatique, et Quentin, un Americain qui vit depuis la guerre dans les montagnes pyreneennes. Grace a lui, Theo apprend les vraies valeurs de la vie. +369 Les mille et une nuits 5 1989 316 An 1000. Trompe par la reine, le calife de Bagdad decide d'epouser une femme chaque soir et de l'executer a l'aube. C'est le sort reserve a Scheherazade; mais au moment d'etre decapitee, elle rencontre Jimmy Genious, exile a Londres au XXe siecle. +370 Une femme en peril 4 1987 317 New York 1951. Emily Craane, journaliste a Life, refuse de livrer des noms a la comission des affaires anti americaines. Elle perd son emploi et devient lectrice chez une personne agee. Elle decouvre de mysterieux agissements dans la maison voisine. +371 Le lion du desert 16 1979 318 En 1929, Mussolini veut mettre fin a la rebellion des bedouins de Libye menee par Omar Mukhtar, un maitre d'ecole coranique. Le general Graziani, repute pour sa cruaute, est designe pour cette mission. +372 Bienvenue a bord 5 1989 319 Martin est representant dans une petite societe d'edition dirigee par sa femme. Coince dans un embouteillage au retour d'une tournee en province, un auto-stoppeur sans gene et cynique s'invite a bord. Il provoque Martin et le remet en question. +373 Tatie Danielle 5 1990 98 Danielle Billard, vieille femme sournoise et mechante, vit dans un pavillon d'Auxerre et martyrise sa bonne de 75 ans. A sa mort, elle va s'installer a Paris chez son petit-neveu Jean-Pierre. Bien installee et choyee, elle les prend comme victime. +374 Star Trek V : l'ultime retour 2 1989 321 XXIIIe siecle. Le capitaine Kirk et son equipage doivent interrompre des vacances sur Terre pour s'embarquer sur l'Entreprise afin de sauver un groupe de diplomates retenus prisonniers par le vulcain Sybok, le demi-frere de Spock. +375 Family business 1 1989 106 Les McMullen forment une famille particuliere. Jessie, le grand-pere est un cambrioleur sur le retour. Vito, le fis, mene desormais une existence rangee. Mais Adam, le petit-fils, etudiant surdoue, est fascine par Jessie. +376 Une epoque formidable 5 1990 186 Michel, cadre superieur, perd tout : travail, femme, voiture et se retrouve a la rue. Pas facile d'etre un pauvre bien dans sa peau. +377 Faux et usage de faux 1 1990 323 Anatole Hirsch, romancier celebre, cynique et vulnerable, ne supporte plus d'etre un auteur que l'on achete mais que l'on ne lit pas. Il ecrit un nouveau roman sous le nom d'Arthus et demande a son cousin Martin d'incarner cet auteur imaginaire. +378 Ripoux contre ripoux 5 1989 324 Rene et Francois, 2 policiers, arrondissent leurs dins de mois en magouillant a Montmartre. Francois veut passer le concours de comissaire et decide de devenir honnete. Il rend le butin d'un hold-up a une commercante qui l'accuse de l'avoir garde. +379 Mort d'un soldat 1 1986 73 1942 en Australie ou l'armee de MacArthur s'est repliee. La tension regne entre les militaires et les civils apres une succession de meurtres commis par un militaire americain. +380 Trois annees 1 1990 325 Les annees 1880 a Aix-les-Bains. Fils d'un riche industriel, Alexandre fait la fete avec ses amis Constantin et Pilou. Il s'eprend de Julia, une jolie femme obsedee par le souvenir d'un soupirant disparu. Un jour, il ose lui demander sa main. +381 Robin des bois prince des voleurs 6 1991 326 Issu d'une famille riche, il perd tous ses biens mais conquiert le pouvoir. Epris de liberte, il met son existence au service d'une seule femme. Il vit en vagabond mais se comporte en seigneur. Il vole les riches pour mieux donner aux pauvres. +382 Mille milliards de dollars 4 1981 327 Un coup de telephone anonyme informe le journaliste Paul Kerjean q'un homme politique, Jean Benoit-Lambert, a recu une somme d'argent pour ceder une usine francaise au groupe etranger GTI. Kerjean publie un article qui provoque un scandale. +383 Qui veut la peau de Roger Rabbit 5 1988 328 Les toons sont des creatures fictives appartenant a l'univers du dessin anime. L'une d'elle, le lapin Roger Rabbit, engage un detective prive en chair et en os, Eddie Valiant, pour enqueter sur le comportement de sa femme, la volage Jessica. +384 La mort etait au rendez-vous 17 1967 329 Temoin et unique survivant du massacre de sa famille, le jeune Bill est resolu a retrouver les bandits et a venger les siens. Bill devient un excellent tireur. Ryan, l'un des assassins, sort de prison pret a regler leur compte a ses anciens complices +385 Backdraft 0 1991 330 Backdraft est le nom d'un feu particulierement dangereux : enferme danns une piece et prive d'oxygene, il couve en attendant d'etre libere. Au contact de l'air, il provoque une explosion. +386 Un week-end sur deux 12 1989 331 Camille Valmont, comedienne ratee, a 2 enfants, Vincent et Gaelle, qui ont ete confies a la garde de leur pere Adrian. Elle les voit un week-end sur 2. +387 Blaze 8 1989 332 1950. Fannie Belle Fleming quitte sa pauvre famille de Virginie, decidee a devenir chanteuse. De serveuse, elle devient chanteuse exotique sous le nom de Blaze Starr. Elle fait la connaissance d'Earl Long, le gouverneur de la Louisiane. +388 Docteur Petiot 1 1990 333 En 1942, dans Paris occupe, Le Dr Petiot soigne gratuitement les pauvres et vient au secours des plus demunis. Sous le nom de Dr Eugene, il pretend aider les juifs a passer en Argentine et les emmenent dans un hotel d'ou ils ne sortent jamais. +389 Young guns 17 1988 334 Au Nouveau Mexique, en 1878, Tunstall, marchand de betail philantrope, engage 6 jeunes marginaux pour proteger ses terres contre Murphy, un riche proprietaire qui veut eliminer toute concurrence. Murphy fait abattre Tunstall. +390 Le rideau dechire 9 1966 5 En congres a Copenhague, le physicien nucleaire Michael Armstrong annonce son intention de se rendre a Stockholm. Sa fiancee et assistante, Sarah Sherman? decouvre qu'il va se rendre a Berlin Est. Elle decide de le suivre. +391 Tuer n'est pas jouer 9 1987 264 A Gibraltar, au cours d'un entrainement, 3 agents secrets britanniques sont tues par un espion de l'est. Apres avoir elimine leur assassin, James Bond, se rend en Tchecoslovaquie pour organiser le passage a l'ouest du general sovietique Koskov. +392 Contre-enquete 4 1990 106 Al Reilly, jeune juge d'instruction, est charge par le Dsitrict Attorney Kevin Quinn d'enqueter sur Mike Brennan, un policier qui a abattu en etat de legitime defense un truand portoricain. Mais Reilly entend des temoignages accablant Brennan. +393 Le mari de la coiffeuse 8 1990 16 A 12 ans, Antoine eprouve ses premiers emois amoureux dans un salon de coiffure. Les charmes de madame Sheaffer le decident a devenir un jour le mari d'une coiffeuse. Approchant la cinquantaine, il realise son reve en epousant la belle Mathilde. +394 Le plus escroc des deux 5 1988 335 Lawrence Jamieson, un escroc de grande classe, exerce ses talents dans une station balneaire de la cote d'azur. Il rencontre Freddy, un arnaqueur minable, decide a s'installer dans la region. Pour s'en debarrasser, ils se lancent un defi. +395 Grandview USA 8 1984 336 Tim Pearson, lyceen a Grandview, une petite ville du Middle West, reve d'aller etudier a Miami. Apres une sortie nocturne, il embourbe la Cadillac de son pere. Il est depanne par Sam Webster, pilote de stock car, et Michelle Coddy, Mike. +396 La desenchantee 12 1990 337 Beth, une lyceenne de 17 ans, vit avec son jeune frere et sa mere malade et sans ressources. Mise au defi par son petit ami de coucher avec un homme laid et vieux, elle le quitte et seduit un garcon rencontre dans une discotheque. +397 L'arme fatale 2 4 1989 46 Martin Riggs et Roger Murtaugh ont pour mission de proteger Leo Getz, le comptable d'une organisation regnant sur le trafic de drogue. Getz a accepte de parler. Le patron du trafic est Arjen Rudd, un Sud-Africain protege par l'immunite diplomatique. +398 La femme fardee 8 1990 222 Des passagers s'embarquent sur le Narcissus pour une croisiere de luxe autour du monde. A son bord, la celebre cantatrice La Doria, son ancien amant, le chef d'orchestre Kreuze et des personnalites dont la richissime Clarisse Lethuiller. +399 Dames galantes 20 1990 338 La France est dechiree par les guerres de religion. Pierre de Bourdeille, seigneur de Brantome, s'ennuie sur les champs de bataille et decide de retourner a la cour d'Henri III pour retrouver les dames qui sont sa raison de vivre. +400 Permis de tuer 9 1989 264 James Bond assiste au mariage de son ami Felix. Mais les jeunes epoux sont elimines par un trafiquant de drogue. Bond, buleverse et furieux, decide de venger son camarade contre l'avis de ses superieurs qu'il ose affronter. +401 Chien de flic 4 1989 339 L'officier de police Dooley mene une lutte sans merci contre le trafiquant de drogue Lyman qui cherche a l'eliminer. Dooley s'adjoint la collaboration de K-9, un berger allemand. Mais individualiste, il supporte mal la presence de ce nouveau collegue +402 Panique a Needle Park 1 1967 143 Une jeune fille qui a deja eu des malheurs rencontre un garcon qui a l'air brave. Il l'amuse, il est gentil. Mais le garcon se drogue u peu, puis beaucoup. Peu a peu, l'idylle devient un enfer. Prison, prostitution, ... +324 Piranha II, les tueurs volants 2 1982 41 Dans une ile des Caraibes, le club de vacances Elysium se prepare a celebrer la grande fete du poisson. Malgre la decouverte du corps a moitie devore d'une cliente, les preparatifs se poursuivent. +403 Ghost 2 1990 342 Sam, cadre dans une banque d'affaires, vit heureux avec Molly, sa compagne. Un soir, en rentrant d'un spectacle, Sam est victime des balles d'un malfrat et meurt dans les bras de Molly. Son fantôme va rapidement s'apercevoir qui a commandité le meurtre. +404 Programmé pour tuer 23 1997 343 A, Los Angeles, en 1999, Sid 6.7 a été créée pour entraîner les forces de police. Cette image de synthèse représente tous les êtres dangereux de la planète, mais son créateur lui a donné les capacités de s'échapper de son environnement. +405 Men in black 2 1997 344 Deux agents de l'organisation secrète Men in Black, chargés de surveiller les extraterrestres présents sur Terre, luttent contre un envahisseur. +406 Piège à Hong-Kong 6 1998 345 Alors que la chine s'apprête à récuperer Hong-Kong, un agent de la CIA, officiellement patron d'une fabrique de jeans, se retrouve confronté à la maffia russe. +407 Brannighan 9 1975 346 Jim, un flic aux méthodes expéditives, se rend à Londres pour mettre la main sur Larkin et le ramener aux Etats-Unis. +408 Vous avez un message 5 1998 347 Joe Fox est propriétaire de la plus grande chaîne de librairies de Manhattan. Kathleen Kelly, elle, tient une toute petite librairie. Chacun d'eux pense avoir une vie idéale jusqu'au jour où, suite à une annonce passée sur Internet, ils font connaissance. +409 Toutes peines confondues 4 1992 203 Turston, habile agent d'Interpol, charge l'inspecteur Vade d'enquêter sur Antoine Gardella, un homme d'affaires corrompu dont les parents viennent d'être assassinés. Le jeune inspecteur se sent vite mal à l'aise dans cette mission, compliquée, dangereuse, +410 La lectrice 5 1988 203 Marie, passionnée de lecture, se propose comme lectrice à domicile. Elle va chez ses clients : un jeune garçon, la veuve d'un général hongrois et un PDG. +411 Paparazzi 5 1998 348 Après avoir assisté à un match de football au lieu d'être à son travail, Franck paraît en couverture d'un magazine et perd son emploi. Il part à la recherche du photographe responsable du cliché. +412 Le Saint 4 1997 349 Interne dans un collège anglais d'Extrême-Orient, Jean Rossi assiste à la mort d'Agnès, jeune pensionnaire dont il est épris. Plusieurs années après, à Moscou, un mystérieux individu pénêtre par effraction dans une salle des coffres. +413 Independance Day 2 1996 350 Un pilote noir et un génie de l'informatique viennent à bout d'extraterrestres s'apprêtant à exterminer la race humaine. +414 Snake Eyes 4 1998 164 A Atlantic City, le secrétaire d'Etat est victime d'un assassinat. L'inspecteur Santoro, policier corrompu, commence son enquête. +415 Touchez pas au grisbi 4 1953 351 "Max et Riton ont dérobé des lingots d'or à Orly. Max a caché le "grisbi" mais Riton dévoile le secret à sa maîtresse Josy." +416 Le Pic de Dante 24 1997 181 Rachel Wando, maire du Pic de Dante, petite ville surplombée d'un volcan, signe un contrat avec une grosse société afin de développer le tourisme. Mais le volcanologue Harry la met en garde car il craint une prochaine éruption. +417 La canardeur 6 1974 138 Poursuivi par d'anciens complices et se dissimulant sous une fausse identité de pasteur, John Thunderbolt, dit le canardeur, échappe à la mort grâce à l'intervention d'un petit truand Lightfoot. Les deux hommes sont pourchassés à travers le pays. +418 Hackers 23 1995 352 Dade Murphy a été fiché au FBI à onze ans pour avoir piraté plus de 1500 systèmes informatiques. Il continue néanmoins, avec d'autres étudiants, de s'introduire sur tous les réseaux. Un jour, le FBI les accuse d'avoir implanté un virus caable désastreux. +273 Les affranchis 0 1990 57 +\. + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/DB/TP1_OrdresSQL/dump/cinema.genre b/DB/TP1_OrdresSQL/dump/cinema.genre new file mode 100755 index 0000000..317b983 --- /dev/null +++ b/DB/TP1_OrdresSQL/dump/cinema.genre @@ -0,0 +1,47 @@ +-- +-- PostgreSQL database dump +-- + +SET client_encoding = 'SQL_ASCII'; +SET check_function_bodies = false; +SET client_min_messages = warning; + + + +-- +-- Data for Name: genre; Type: TABLE DATA; Schema: limin; Owner: limin +-- + +COPY genre (numg, nomg) FROM stdin; +1 Drame +2 Fantastique +3 Epouvante +4 Policier +5 Comedie +6 Aventure +7 Horreur +8 Etude de moeurs +9 Espionnage +10 Guerre +11 Politique +12 Psychologique +13 Dessin anime +14 Comedie musicale +15 Peplum +16 Drame historique +17 Western +18 Historique +19 Thriller +20 Chronique +21 Musical +22 Politique fiction +0 Non renseigné +23 Suspense +24 Catastrophe +\. + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/DB/TP1_OrdresSQL/dump/cinema.numero b/DB/TP1_OrdresSQL/dump/cinema.numero new file mode 100755 index 0000000..567a811 --- /dev/null +++ b/DB/TP1_OrdresSQL/dump/cinema.numero @@ -0,0 +1,26 @@ +-- +-- PostgreSQL database dump +-- + +SET client_encoding = 'SQL_ASCII'; +SET check_function_bodies = false; +SET client_min_messages = warning; + + + +-- +-- Data for Name: numero; Type: TABLE DATA; Schema: limin; Owner: limin +-- + +COPY numero (nom_table, numero) FROM stdin; +genre 25 +realis 354 +com 1399 +film 419 +\. + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/DB/TP1_OrdresSQL/dump/cinema.realis b/DB/TP1_OrdresSQL/dump/cinema.realis new file mode 100755 index 0000000..ec3eb11 --- /dev/null +++ b/DB/TP1_OrdresSQL/dump/cinema.realis @@ -0,0 +1,366 @@ +-- +-- PostgreSQL database dump +-- + +SET client_encoding = 'SQL_ASCII'; +SET check_function_bodies = false; +SET client_min_messages = warning; + + + +-- +-- Data for Name: realis; Type: TABLE DATA; Schema: limin; Owner: limin +-- + +COPY realis (numr, identr) FROM stdin; +84 ABBRAHAMS Jim +167 ADLON Percy +30 ALLEN Woody +136 ANNAUT Jean-Jacques +82 ARCAND Denys +112 ASHBY Hal +111 AUBERT Claude-Bernard +200 AXEL Gabriel +77 BALASKO Josiane +68 BENJAMIN Richard +85 BERAUD Luc +49 BERRI Claude +61 BERRY John +150 BERTOLUCCI Bernardo +31 BLIER Bertrand +12 BOISSET Yves +198 BOIVIN Jerome +163 BOORMAN John +119 BOUTRON Pierre +127 BRICKMAN Paul +125 BRISSEAU Jean-Claude +224 BROOKS James L. +157 BROOKS Mel +41 CAMERON James F. +205 CARPENTER John +4 CAYATTE Andre +83 CERCHIO Fernando +183 CHABROL Claude +47 CHAFFEY Don +26 CHAPLIN Charlie +128 CHAREF Mehdi +98 CHATILLIER Etienne +34 CHEREAU Patrice +99 CHOMSKY Marvin J. +138 CIMINO Michael +199 CLAVER Bob +187 COHEN Larry +140 COKLISS Harley +174 COMENCINI Francesca +148 COMENCINI Luigi +230 CORBIAU Gerard +7 CORNEAU Alain +1 CORSINI Catherine +132 COURTOIS Miguel +218 COX Alex +130 CRICHTON Charles +196 CRONENBERG David +215 CROWE Christopher +160 DANTE Joe +113 DAVIDSON Martin +164 DE PALMA Brian +226 DEARDEN James +141 DENIS Claire +203 DEVILLE Michel +91 DIEGUES Carlos +13 DIETERLE William +115 DINNER Michael +181 DONALDSON Roger +46 DONNER Richard +97 DORRIE Dorris +158 DUPEYRON Francois +120 EASTWOOD Clint +2 ENRICO Robert +92 FAIMAN Peter +69 FERRERI Marco +172 FINKLEMAN Ken +10 FISHER Terence +63 FLEISCHER Richard +18 FLEMING Victor +137 FOLEY James +185 FORD COPPOLA Francis +133 FORMAN Milos +19 GAVRAS Costa +33 GILBERT Lewis +25 GILLIAM Terry +170 GIOVANNI Jose +145 GIROD Francis +176 GOLAN Menahem +169 GRANIER DEFERRE Pierre +105 GRANIER-DEFERRE Denys +151 GRIFFITHS Mark +29 GUILLERMIN John +209 HACKFORD Taylor +161 HAINES Randa +134 HALIMI Andre +59 HAMILTON Guy +175 HEFFRON Richard +162 HILL George Roy +54 HILL Walter +180 HILLER Arthur +5 HITCHCOCK Alfred +129 HODGES Mike +152 HOLLAND Agnieszka +75 HOOL Lance +44 HOOPER Tobe +71 HOUGH John +117 HUBERT Jean-Loup +118 HUDSON Hugh +76 HUGUES John +159 HUNT Peter +11 HUSTON John +194 HUTTON Thimothy +177 IVORY James +9 JAQUE Christian +70 JESSUA Alain +189 JEWISON Norman +110 JOFFE Roland +109 JOLIVET Pierre +24 JONES Terry +227 JORDAN Glenn +186 JUGNOT Gerard +101 KAGAN Jeremy Paul +201 KAMINKA Didier +62 KANEW Jeff +204 KAPLAN Jonathan +166 KASDAN Lawrence +27 KERSHNER Irvin +87 KORBER Serge +15 KOTCHEFF Ted +52 KUBRICK Stanley +90 LAUTNER Georges +225 LE GUAY Philippe +16 LECONTE Patrice +123 LELAND David +38 LELOUCH Claude +139 LEONE Sergio +102 LEVINSON Barry +88 LORSAC Olivier +106 LUMET Sydney +192 LUSTIG William +121 LYNE Adrian +58 LYNN Jonathan +144 MAAS Dick +165 MACBRIDE Jim +55 MALINE Alain +107 MALLE Louis +220 MANKIEWICZ Tom +214 MANN Michael +114 MARBOEUF Jean +28 MARQUAND Richard +173 MARSHALL Penny +14 MARTIN Gene +213 MAXWELL Ronald F. +146 MC TIERNAN John +217 MEDAK Peter +126 MEDFORD Don +81 MELVILLE Jean-Pierre +135 METTER Alan +212 MILLER Claude +78 MOCKY Jean-Pierre +6 MOLINARO Edouard +60 MONNET Jacques +73 MORA Philippe +50 NEUMANN Kurt +171 NICHOLS Mike +93 NICHOLSON Jack +179 NIMOY Leonard +184 NUYTTEN Bruno +72 PAKULA Alan J. +86 PARKER Alan +195 PEERCE Larry +210 PENN Arthur +96 PERKINS Anthony +222 PINHEIRO Jose +8 PINOTEAU Claude +65 PLANCHON Roger +37 POIRE Jean-Marie +223 POST Ted +206 RADER Peter +40 RADFORD Michael +155 RAFELSON Bob +43 RAFFILL Stewart +103 RAPPENEAU Elisabeth +229 RAPPENEAU Jean-Paul +124 REISZ Karel +51 REITHERMAN Wolfgang +64 REYNOLDS Burt +191 RICKMAN Tom +95 RITCHIE Michael +190 RITT Martin +39 ROBERT Yves +149 RODDAM Frank +221 ROEG Nicholas +108 ROHMER Eric +100 ROSENTHAL Rick +182 ROSS Herbert +80 SAKS Gene +122 SARGENT Joseph +131 SAURA Carlos +154 SAUTET Claude +143 SCHATZBERG Jerry +89 SCHELSINGER John +23 SCHLONDORFF Volker +17 SCHOENDOERFFER Pierre +57 SCORSESE Martin +219 SCOTT Ridley +153 SCOTT Tony +193 SERESIN Michael +45 SERREAU Coline +216 SHERMAN Gary +48 SHOLDER Jack +208 SIBRA Michel +22 SIEGEL Don +36 SPIELBERG Steven +67 STALLONE Sylvester +94 STEINBERG David +202 STEWART Douglas Day +197 TAKACS Tibor +156 TAVERNIER Bertrand +142 TCHERNIA Pierre +53 TECHINE Andre +35 TOURNEUR Maurice +56 TRAMONT Jean-Claude +168 TRINTIGNANT Nadine +66 TRUFFAUT Francois +21 UYS Jamie +188 VALDEZ Luis +147 VARDA Agnès +32 VEBER Francis +20 VERGES Gerard +42 VERGNE Jean-Pierre +228 VERHOEVEN Paul +79 WAJDA Andrezj +207 WARGNIER Regis +104 WINNER Michael +3 WISE Robert +116 WYLER William +178 ZEFFIRELLI Franco +74 ZEITOUN Ariel +211 ZITO Joseph +232 POLANSKI Roman +233 VILLIERS Francois +234 FURIE Sidney J. +235 NUNN Trevor +236 DERAY Jacques +237 WEINER Hal +238 SKOLIMOWSKI Jerzy +239 HANSON Curtis +240 SPOTTISWOODE Roger +241 DUVIVIER Julien +242 FERET Rene +243 MULCAHY Russel +244 MERCERO Antonio +245 SASDY Peter +246 LOCKE Sondra +247 PEARCE Richard +248 MARKHAM Monte +249 MILLER George +250 KAUFMAN Philip +251 STONE Oliver +252 HAWKS Howard +253 ROUFFIO Jacques +254 RADEMAKERS Fons +255 BABENCO Hector +256 RAWSON Jean-Pierre +257 WALTON Fred +258 COSMATOS George Pan +259 CUKIER Jacky +260 VAN HORN Buddy +261 BELLON Yannick +262 BENTON Robert +263 FIRSTENBERG Sam +264 GLEN John +265 MARSHALL Tonie +266 ROCHANT Eric +268 DERUDDERE Dominique +269 TORNATORE Giuseppe +270 BEAUMONT Gabrielle +271 WEIR Peter +272 SLUIZER George +273 VINCENT Christian +274 BELMONT Vera +276 MILIUS John +277 GLASER Paul-Michael +278 HERRINGTON Rowdy +279 ARTHUYS Bertrand +280 MANZOR Rene +281 MARKLE Peter +282 MORTON Rocky +283 APTED Michael +284 MARSHALL Garry +285 LYNCH Paul +286 KAGAN Jeremy +287 McLAGLEN Andrew V. +288 COSTNER Kevin +290 ROSI Francesco +291 GARRIS Mick +292 KURYS Diane +293 DAVIS Robin +294 ARTHUR Karen +295 EDEL Uli +296 REINER Carl +297 SCHOLTZ Jan +298 BESSON Luc +299 FASSBINDER +300 RASH Steve +301 WERTMULLER Lina +302 CARO Marc +303 DEMME Jonathan +305 SCOLA Ettore +306 TOWNE Robert +307 SODERBERGH Steven +308 BAGDADI Maroun +309 REDFORD Robert +310 AVILDSEN John G. +311 LEE Spike +312 MAZURSKY Paul +313 CATON-JONES Michael +314 COLUMBUS Chris +315 CASTANO Xavier +316 DE BROCA Philippe +317 YATES Peter +318 AKKAD Mustapha +319 LECONTE Jean-Louis +321 SHATNER William +323 HEYNEMANN Laurent +324 ZIDI Claude +325 CAZENEUVE Fabrice +326 REYNOLDS Kevin +327 VERNEUIL Henri +328 ZEMECKIS Robert +329 PETRONI Giulo +330 HOWARD Ron +331 GARCIA Nicole +332 SHELTON Ron +333 DE CHALONGE Christian +334 CAIN Christopher +335 OZ Frank +336 KLEISER Randal +337 JACQUOT Benoit +338 TACCHELLA Jean-Charles +339 DANIEL Rod +342 ZUCKER Jerry +343 LEONARD Brett +344 SONNENFELD Barry +345 HARK Tsui +346 HICKOX David +347 EPHRON Nora +348 BERBERIAN Alain +349 NOYCE Phillip +350 EMMERICH Roland +351 BECKER Jacques +352 SOFTLEY Iain +353 +\. + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/DB/TP1_OrdresSQL/dump/cinema.role b/DB/TP1_OrdresSQL/dump/cinema.role new file mode 100755 index 0000000..26511af --- /dev/null +++ b/DB/TP1_OrdresSQL/dump/cinema.role @@ -0,0 +1,1876 @@ +-- +-- PostgreSQL database dump +-- + +SET client_encoding = 'SQL_ASCII'; +SET check_function_bodies = false; +SET client_min_messages = warning; + + + +-- +-- Data for Name: role; Type: TABLE DATA; Schema: limin; Owner: limin +-- + +COPY role (numc, numf) FROM stdin; +1 1 +2 1 +3 1 +4 1 +5 1 +6 2 +7 2 +3 2 +8 2 +9 3 +10 3 +11 3 +12 3 +13 3 +14 4 +15 4 +16 4 +17 4 +18 5 +19 5 +20 5 +21 5 +22 6 +23 6 +24 6 +25 6 +26 6 +27 6 +28 6 +29 7 +30 7 +31 7 +32 7 +33 7 +34 7 +35 8 +36 8 +37 8 +38 8 +22 8 +71 9 +72 9 +73 9 +74 9 +39 10 +40 10 +41 10 +42 10 +43 10 +44 10 +45 10 +46 10 +47 10 +48 10 +49 10 +50 10 +51 11 +52 11 +53 11 +54 11 +55 11 +56 11 +57 11 +58 11 +59 12 +60 12 +61 12 +62 12 +63 12 +64 12 +65 12 +66 12 +67 12 +68 12 +69 12 +70 12 +75 13 +76 13 +77 13 +78 13 +79 14 +80 14 +81 14 +82 14 +83 14 +84 15 +85 15 +86 15 +87 15 +88 15 +89 15 +90 15 +91 15 +92 15 +93 15 +94 15 +95 15 +96 15 +97 15 +98 15 +99 15 +100 16 +101 16 +102 16 +103 16 +104 16 +105 16 +106 16 +107 16 +108 16 +109 16 +110 16 +111 16 +112 16 +113 16 +114 17 +115 17 +116 17 +117 17 +118 17 +119 18 +120 18 +121 18 +122 18 +123 18 +124 18 +125 18 +126 19 +127 19 +128 19 +129 19 +130 20 +131 20 +132 20 +133 20 +134 21 +135 21 +136 21 +137 21 +138 21 +139 21 +140 22 +141 22 +142 22 +143 22 +144 22 +145 23 +146 23 +147 23 +148 23 +149 23 +150 24 +151 24 +152 24 +142 24 +153 24 +154 25 +155 25 +156 25 +157 25 +158 25 +159 26 +160 26 +161 26 +162 26 +163 26 +93 28 +165 28 +167 28 +168 28 +166 28 +169 29 +170 29 +171 29 +172 29 +173 29 +174 30 +150 30 +175 30 +120 30 +177 30 +178 30 +179 31 +180 31 +181 31 +182 31 +93 31 +183 32 +6 32 +184 32 +185 32 +186 32 +187 33 +52 33 +188 33 +189 33 +150 34 +190 34 +151 34 +142 34 +191 34 +192 34 +3 35 +154 35 +193 35 +194 35 +195 36 +196 36 +197 36 +198 37 +199 37 +200 37 +201 37 +202 37 +203 37 +204 38 +205 38 +206 38 +207 38 +208 38 +209 38 +210 39 +211 39 +212 39 +213 39 +214 39 +215 40 +216 40 +217 40 +218 40 +219 41 +220 41 +221 41 +222 41 +223 41 +224 42 +225 42 +226 42 +227 42 +228 42 +229 42 +230 42 +194 43 +231 43 +232 43 +233 43 +234 43 +235 44 +236 44 +237 44 +238 44 +239 45 +240 45 +241 45 +242 45 +243 46 +244 46 +29 46 +31 46 +245 47 +246 47 +247 47 +248 47 +249 47 +250 47 +251 47 +252 47 +253 48 +254 48 +255 48 +256 48 +257 49 +258 49 +259 49 +260 49 +261 49 +262 50 +263 50 +264 50 +265 50 +266 50 +267 52 +268 52 +269 52 +270 52 +271 52 +233 53 +272 53 +273 53 +274 53 +85 53 +169 54 +170 54 +171 54 +172 54 +275 54 +276 55 +277 55 +278 55 +279 56 +280 56 +281 56 +282 56 +283 56 +284 56 +285 57 +286 57 +287 57 +288 57 +289 57 +290 57 +291 58 +292 58 +293 58 +294 58 +295 58 +296 58 +297 59 +298 59 +299 60 +300 60 +150 61 +301 61 +302 61 +303 61 +126 62 +304 62 +305 62 +306 62 +307 62 +308 63 +309 63 +310 63 +311 64 +312 64 +313 64 +314 64 +315 64 +316 64 +317 65 +318 65 +319 65 +320 66 +321 66 +322 66 +323 67 +324 67 +325 67 +326 67 +169 68 +327 68 +328 68 +329 68 +330 68 +331 69 +332 69 +333 69 +334 70 +335 70 +336 71 +115 71 +337 71 +338 72 +339 72 +340 72 +341 73 +342 73 +343 73 +344 74 +345 74 +346 74 +347 75 +348 75 +182 75 +126 76 +349 76 +350 76 +351 76 +352 78 +353 78 +354 78 +355 79 +356 79 +357 79 +358 79 +285 80 +359 80 +360 80 +361 81 +362 81 +363 82 +364 82 +365 82 +366 82 +79 83 +367 83 +368 84 +369 84 +370 84 +341 85 +371 85 +372 85 +373 86 +374 86 +131 87 +375 87 +376 87 +377 87 +259 88 +378 88 +379 88 +380 89 +381 89 +382 90 +383 90 +384 90 +340 90 +385 91 +386 91 +387 91 +388 92 +389 92 +390 92 +174 93 +391 93 +392 93 +393 94 +394 94 +395 94 +396 95 +397 95 +398 95 +150 96 +399 96 +400 96 +401 96 +402 97 +403 97 +404 97 +405 97 +406 98 +407 98 +408 98 +409 98 +410 98 +171 98 +411 99 +393 99 +412 99 +413 100 +414 100 +415 100 +51 100 +416 101 +417 101 +418 101 +364 101 +419 102 +151 102 +79 102 +420 102 +115 103 +421 103 +422 103 +423 104 +424 104 +425 104 +426 104 +427 105 +35 105 +411 106 +401 106 +428 106 +429 106 +430 106 +431 106 +432 51 +433 51 +434 51 +435 51 +436 107 +236 107 +437 107 +438 108 +439 108 +440 108 +441 108 +442 109 +443 109 +444 109 +445 110 +446 110 +447 128 +448 110 +449 111 +450 111 +91 111 +451 111 +452 112 +453 112 +454 112 +427 113 +455 113 +233 113 +155 114 +456 114 +457 114 +458 114 +132 114 +459 114 +460 115 +461 115 +462 115 +271 115 +463 115 +464 116 +465 116 +171 116 +466 116 +467 116 +468 116 +331 118 +469 118 +470 118 +471 118 +472 118 +473 118 +150 119 +474 119 +475 119 +476 119 +477 120 +478 120 +479 120 +480 120 +481 121 +482 121 +483 121 +484 121 +485 122 +486 122 +487 122 +488 66 +489 66 +490 66 +156 66 +220 124 +479 124 +359 124 +492 124 +183 125 +265 125 +3 125 +493 125 +494 126 +495 126 +496 126 +497 127 +498 127 +499 127 +500 127 +501 127 +301 110 +502 128 +503 128 +339 128 +145 129 +172 129 +504 129 +505 129 +506 130 +507 130 +508 130 +509 131 +510 131 +511 131 +514 133 +515 133 +516 133 +517 133 +518 134 +519 134 +324 134 +520 134 +521 135 +522 135 +523 135 +524 135 +525 136 +526 136 +527 136 +528 136 +477 137 +529 137 +530 137 +480 137 +532 137 +115 138 +533 138 +534 138 +535 138 +536 138 +73 138 +538 139 +35 139 +539 139 +540 139 +541 139 +516 139 +543 140 +544 140 +545 140 +546 140 +547 140 +548 141 +549 141 +550 142 +551 142 +552 142 +553 142 +554 142 +555 142 +556 142 +557 143 +558 143 +559 143 +560 143 +529 144 +46 144 +561 144 +338 145 +562 145 +322 145 +563 145 +290 145 +564 146 +565 146 +566 146 +567 146 +568 147 +569 147 +364 147 +570 147 +571 148 +572 148 +573 148 +574 148 +575 148 +576 148 +259 148 +577 149 +126 149 +455 150 +579 150 +287 150 +580 150 +581 150 +582 150 +583 150 +584 151 +585 151 +586 151 +587 151 +588 151 +589 151 +531 152 +176 152 +542 152 +545 152 +578 153 +590 153 +359 153 +591 153 +592 153 +593 153 +594 153 +595 154 +596 154 +597 154 +598 154 +599 154 +600 155 +601 155 +602 155 +603 155 +604 155 +605 155 +82 156 +606 156 +607 156 +400 156 +434 157 +608 157 +609 157 +610 157 +216 157 +611 158 +612 158 +613 158 +614 158 +615 158 +616 158 +617 158 +618 159 +619 159 +620 159 +621 159 +548 160 +622 160 +623 160 +624 161 +625 161 +626 161 +223 161 +397 162 +629 162 +630 162 +631 162 +632 162 +633 162 +634 163 +339 163 +635 163 +636 163 +637 163 +150 164 +638 164 +639 164 +640 164 +496 165 +300 165 +641 165 +642 165 +643 165 +644 165 +439 166 +438 166 +646 166 +647 166 +440 166 +648 166 +649 166 +650 167 +651 167 +652 167 +653 167 +654 167 +655 167 +656 168 +657 168 +658 168 +659 168 +660 168 +661 169 +590 169 +359 169 +591 169 +592 169 +593 169 +169 170 +662 170 +663 170 +664 170 +665 170 +666 170 +183 171 +667 171 +668 171 +669 171 +450 171 +670 172 +671 172 +672 172 +673 172 +674 172 +675 173 +676 173 +548 173 +677 173 +678 173 +679 174 +117 174 +649 175 +680 175 +681 175 +682 175 +683 175 +71 176 +684 176 +609 177 +79 177 +686 177 +687 177 +685 178 +688 178 +386 178 +224 178 +689 178 +235 179 +359 179 +690 179 +691 179 +692 179 +693 180 +562 180 +694 180 +695 180 +696 180 +697 180 +406 181 +698 181 +699 181 +700 182 +424 182 +701 182 +391 183 +702 183 +703 183 +704 184 +333 184 +705 184 +706 184 +707 184 +708 185 +268 185 +709 185 +710 185 +711 185 +497 186 +712 186 +713 186 +714 186 +715 187 +126 187 +716 187 +368 188 +717 188 +378 188 +718 188 +719 188 +720 188 +721 189 +722 189 +723 189 +662 189 +725 189 +726 189 +727 190 +728 190 +729 190 +730 190 +731 191 +732 191 +733 191 +734 191 +411 192 +469 192 +735 192 +736 193 +737 193 +738 194 +739 194 +740 194 +741 194 +742 195 +743 195 +744 195 +745 195 +746 195 +747 195 +748 196 +749 196 +750 196 +751 197 +752 197 +753 197 +754 198 +755 198 +756 198 +450 199 +757 199 +758 199 +759 199 +760 199 +761 199 +568 200 +377 200 +762 200 +763 200 +764 200 +155 200 +765 201 +766 201 +744 201 +767 201 +768 201 +769 201 +770 202 +377 202 +771 202 +266 202 +772 202 +224 203 +773 203 +774 203 +775 204 +776 204 +777 204 +778 204 +97 35 +779 35 +780 205 +781 205 +782 205 +783 205 +784 206 +785 206 +786 206 +787 207 +788 207 +789 207 +790 207 +791 208 +792 208 +315 208 +794 208 +795 208 +82 209 +796 209 +797 209 +798 209 +799 209 +800 209 +382 210 +7 210 +593 210 +202 210 +801 211 +802 211 +803 211 +804 211 +805 211 +806 212 +807 212 +808 212 +809 212 +204 213 +810 213 +811 213 +812 213 +508 214 +813 214 +36 214 +814 215 +815 215 +816 215 +650 216 +610 216 +817 216 +818 216 +819 216 +199 216 +406 217 +821 217 +822 217 +823 217 +519 217 +824 217 +825 218 +673 218 +826 218 +827 218 +361 218 +367 219 +802 219 +608 219 +536 220 +829 220 +830 220 +831 220 +538 221 +832 221 +833 221 +834 221 +835 221 +836 221 +837 222 +838 222 +839 222 +840 223 +841 223 +842 223 +156 223 +843 224 +844 224 +845 224 +846 224 +847 225 +848 225 +849 225 +850 225 +373 226 +851 226 +852 226 +853 226 +854 227 +855 227 +856 227 +857 227 +341 228 +858 228 +859 228 +860 228 +861 228 +862 228 +863 229 +864 229 +865 229 +866 229 +867 230 +544 230 +394 230 +673 230 +243 231 +183 231 +77 231 +868 231 +869 231 +141 232 +600 232 +870 232 +871 232 +584 234 +872 234 +782 234 +873 235 +347 235 +423 235 +874 236 +309 236 +805 236 +334 237 +875 237 +829 237 +876 237 +491 238 +829 238 +454 238 +195 238 +820 238 +562 239 +286 239 +619 239 +793 239 +645 239 +543 240 +373 240 +828 240 +537 240 +877 241 +878 241 +879 241 +428 80 +688 242 +880 242 +881 242 +577 243 +882 243 +883 243 +884 243 +885 243 +886 243 +887 244 +888 244 +450 244 +258 245 +889 245 +723 245 +519 245 +893 246 +894 246 +532 246 +895 246 +896 247 +897 247 +652 247 +898 248 +899 248 +900 248 +901 248 +902 248 +903 250 +879 250 +904 250 +47 250 +397 251 +906 251 +853 251 +907 251 +908 252 +215 252 +909 252 +196 252 +910 253 +387 253 +337 253 +911 254 +610 254 +912 254 +913 254 +731 254 +914 254 +915 255 +916 255 +86 255 +668 255 +917 255 +918 256 +235 256 +919 256 +920 256 +921 257 +373 257 +922 257 +923 257 +924 258 +925 258 +926 258 +927 258 +928 259 +929 259 +930 259 +931 259 +932 259 +933 260 +934 260 +935 260 +936 260 +937 260 +938 260 +609 261 +126 261 +393 261 +939 261 +940 261 +528 261 +941 262 +942 262 +943 262 +944 262 +945 263 +393 263 +946 263 +947 263 +126 264 +948 264 +608 264 +949 264 +699 264 +950 265 +951 265 +952 265 +145 266 +953 266 +954 266 +955 266 +956 266 +957 267 +958 267 +959 267 +960 268 +961 268 +962 268 +963 268 +82 269 +964 269 +279 270 +965 270 +958 270 +966 270 +967 270 +968 271 +969 271 +970 271 +300 272 +708 272 +875 272 +971 272 +393 273 +972 273 +852 273 +973 273 +407 273 +974 274 +975 274 +976 274 +977 275 +978 275 +979 275 +980 275 +377 275 +762 275 +155 275 +982 276 +983 276 +984 276 +679 276 +686 276 +985 277 +370 277 +495 277 +282 277 +346 277 +986 277 +987 278 +988 278 +159 279 +531 279 +989 279 +174 280 +685 280 +990 280 +991 280 +992 280 +993 280 +154 281 +994 281 +995 281 +996 281 +340 281 +997 281 +959 282 +998 282 +713 282 +999 282 +300 283 +496 283 +1000 283 +1001 283 +1002 283 +1003 283 +183 284 +1004 284 +1005 284 +1006 284 +1007 284 +386 285 +142 285 +1008 285 +169 286 +146 286 +332 286 +1009 286 +1010 286 +1011 286 +427 287 +569 287 +842 287 +174 288 +1012 288 +1013 288 +1014 288 +1015 288 +1016 289 +1017 289 +869 289 +1018 289 +584 290 +1019 290 +743 290 +1020 290 +965 291 +775 291 +177 291 +1021 292 +1022 292 +1023 292 +1024 292 +1025 293 +364 293 +1026 293 +1027 294 +1028 294 +1029 294 +1030 294 +1031 294 +1032 295 +1033 295 +1034 295 +1035 296 +1036 296 +1037 296 +391 297 +1038 297 +1039 297 +223 298 +1040 298 +1041 298 +1042 298 +1043 299 +1044 299 +1045 299 +1046 299 +1047 300 +1048 300 +1049 300 +1050 300 +1051 301 +1052 301 +1053 301 +1054 301 +1055 301 +577 302 +805 302 +1056 302 +1057 302 +1058 303 +1059 303 +1060 303 +1061 303 +626 304 +1063 304 +1064 304 +635 305 +1065 305 +411 306 +1066 306 +1067 306 +851 306 +737 306 +71 307 +901 307 +1068 307 +1069 307 +1070 307 +1071 307 +1072 307 +1073 307 +1074 307 +1075 307 +864 308 +1076 308 +1077 308 +1078 308 +662 308 +1079 308 +145 309 +1080 309 +1081 309 +1082 309 +1083 310 +640 310 +633 310 +1084 311 +1085 311 +1086 311 +1087 311 +1088 311 +1089 312 +1090 312 +1091 312 +1092 312 +1093 312 +115 313 +1094 313 +1095 313 +1096 313 +1097 313 +1098 314 +1099 314 +570 314 +1100 314 +679 315 +844 315 +1101 315 +1102 315 +82 316 +797 316 +412 316 +1103 316 +1104 317 +1094 317 +9 317 +1105 317 +1106 317 +258 318 +1107 318 +828 318 +1108 318 +394 319 +1109 319 +1110 319 +543 320 +71 320 +687 320 +1111 320 +1112 321 +1113 321 +1114 321 +1108 321 +1115 322 +1116 322 +1117 322 +1118 322 +609 323 +1119 323 +1120 323 +1121 324 +1122 324 +1123 324 +1124 324 +393 325 +854 325 +823 326 +851 326 +480 326 +548 326 +1125 327 +1126 327 +1127 327 +1128 327 +6 328 +75 328 +493 328 +155 328 +541 328 +1129 328 +1130 329 +563 329 +1131 329 +201 329 +1132 330 +1133 330 +1134 330 +1135 330 +1136 330 +1137 331 +1138 331 +1139 331 +171 331 +1140 331 +1141 331 +853 331 +1142 331 +1143 332 +923 332 +1144 332 +1145 332 +1146 333 +1147 333 +487 333 +1148 334 +825 334 +79 334 +1149 334 +1150 334 +1151 334 +1152 334 +1153 335 +509 335 +1154 335 +1155 336 +1156 336 +1160 338 +1161 338 +1162 338 +1163 338 +1164 338 +1165 339 +1166 339 +1167 339 +1168 339 +1169 339 +723 339 +1170 340 +394 340 +1171 340 +1172 340 +1173 340 +886 341 +1174 341 +88 341 +221 341 +1175 341 +971 342 +267 342 +1176 342 +948 342 +1177 342 +1178 343 +533 343 +1179 343 +1180 343 +1181 343 +1182 344 +1183 344 +1184 344 +1185 344 +71 345 +216 345 +1186 345 +170 345 +159 345 +825 345 +1187 345 +1178 346 +1188 346 +1189 346 +1190 346 +1191 346 +531 347 +1013 347 +1192 347 +688 347 +1193 347 +982 348 +1195 348 +1196 348 +1197 348 +1198 348 +1199 349 +1200 349 +1153 349 +1201 350 +919 350 +948 350 +1178 351 +1067 351 +608 351 +1202 352 +1203 352 +378 352 +1204 352 +227 352 +1165 352 +1205 353 +974 353 +1206 353 +1207 353 +911 354 +971 354 +1208 354 +1205 354 +1209 354 +1210 354 +1211 354 +1083 356 +1212 356 +1213 356 +1214 356 +1215 356 +1035 357 +283 358 +1216 358 +469 358 +828 358 +601 358 +1027 359 +1217 359 +469 359 +1218 359 +1219 359 +1220 360 +1221 360 +1222 360 +863 360 +1223 360 +601 361 +577 361 +1104 361 +1224 361 +948 361 +587 361 +711 362 +1225 362 +1226 362 +1227 362 +1228 362 +1229 362 +1230 362 +258 363 +159 363 +1231 364 +1232 364 +1233 364 +1234 365 +1235 365 +1236 365 +1237 365 +198 366 +377 366 +1004 366 +1238 366 +541 366 +625 366 +1239 366 +442 366 +1240 366 +868 366 +1241 366 +1027 367 +1242 367 +1243 367 +1244 367 +1245 367 +140 368 +1246 368 +382 368 +979 369 +700 369 +904 369 +1247 369 +1248 369 +1007 369 +1249 369 +533 370 +641 370 +1250 370 +1251 371 +419 371 +1252 371 +1253 371 +1254 371 +1255 372 +340 372 +1256 372 +1257 372 +1088 372 +1258 373 +1259 373 +1260 373 +1261 373 +1262 373 +1263 373 +1264 373 +649 374 +680 374 +1265 374 +1097 374 +682 374 +126 375 +1266 375 +224 375 +1267 375 +1268 375 +1269 375 +700 376 +382 376 +1270 376 +548 377 +347 377 +201 377 +22 377 +548 378 +979 378 +265 378 +1271 378 +977 378 +1272 379 +1273 379 +1274 379 +1275 379 +549 380 +579 380 +879 380 +84 380 +1276 380 +1277 380 +1278 381 +1279 381 +262 382 +1 382 +1280 382 +1281 382 +264 382 +1282 382 +1283 382 +752 382 +1284 382 +1285 383 +121 383 +1286 383 +1287 383 +1288 384 +1289 384 +1290 384 +1291 384 +1292 384 +1293 384 +1294 384 +1295 384 +1296 385 +1297 385 +608 385 +1298 385 +393 385 +386 385 +6 386 +1299 386 +1300 386 +1301 386 +25 386 +1302 386 +114 387 +1303 387 +1304 387 +1305 387 +1306 387 +1307 387 +1308 387 +1309 387 +1310 387 +1311 387 +183 388 +1312 388 +1313 388 +1314 388 +1315 388 +844 389 +1316 389 +704 389 +983 389 +478 389 +114 390 +1317 390 +1318 390 +1319 390 +1320 390 +1321 390 +1322 390 +1323 390 +1324 390 +1325 391 +1326 391 +1327 391 +1328 391 +958 391 +71 392 +910 392 +1329 392 +1330 392 +1331 392 +787 393 +456 393 +645 393 +1332 393 +1333 394 +463 394 +1334 394 +495 394 +1335 395 +326 395 +1336 396 +1337 396 +1338 396 +1339 396 +1340 396 +911 397 +610 397 +973 397 +480 397 +598 397 +1341 397 +914 397 +1342 397 +1343 397 +1344 397 +264 398 +233 398 +339 398 +1345 398 +1346 398 +94 398 +92 398 +449 398 +1347 398 +1348 398 +382 399 +1349 399 +1350 399 +1351 399 +363 399 +1352 399 +1325 400 +1353 400 +1354 400 +1355 400 +1356 400 +823 401 +1357 401 +1358 401 +1359 401 +1360 401 +1361 401 +1134 401 +385 402 +1362 402 +1363 402 +956 402 +1364 402 +1365 402 +1366 402 +1367 403 +1368 403 +650 403 +1369 403 +1370 404 +1066 404 +1371 404 +1372 404 +485 405 +1373 405 +1374 405 +1375 406 +1376 406 +1377 407 +1378 407 +1379 407 +864 408 +797 408 +1380 408 +569 409 +285 409 +1381 409 +770 410 +1382 410 +771 410 +1383 410 +1384 411 +541 411 +6 411 +1385 411 +534 412 +1386 412 +1373 413 +742 413 +553 413 +1387 413 +268 414 +1388 414 +828 414 +1389 414 +1390 415 +1391 415 +1392 415 +1393 416 +486 416 +1394 416 +174 417 +1395 417 +775 417 +1396 417 +1397 418 +1398 418 +\. + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/DB/TP1_OrdresSQL/indexes.sql b/DB/TP1_OrdresSQL/indexes.sql new file mode 100755 index 0000000..78e741f --- /dev/null +++ b/DB/TP1_OrdresSQL/indexes.sql @@ -0,0 +1,55 @@ +-- +-- indexes.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Crée les index qui vont permettre d'accélérer les requètes +-- +-- Pour plus de détails concernant les indexes sous PostgreSQL, voir +-- la documentation (indexes.html). +-- + +-- +-- Version : 1.0 +-- +-- Fait : - +-- +-- A faire : - +-- + +-- Index pour les noms de genre +CREATE INDEX genre_nomg_idx +ON genre +USING BTREE(nomg); + +-- Index pour les noms de comédiens +CREATE INDEX com_identc_idx +ON com +USING BTREE(identc); + +-- Index pour les titres de films +CREATE INDEX film_titre_idx +ON film +USING BTREE(titre); + +-- Index pour les annees de sortie des films +CREATE INDEX film_annee_idx +ON film +USING BTREE(annee); + +-- Index pour les noms de réalisateurs +CREATE INDEX realis_identr_idx +ON realis +USING BTREE(identr); + + diff --git a/DB/TP1_OrdresSQL/insert_data.sql b/DB/TP1_OrdresSQL/insert_data.sql new file mode 100755 index 0000000..99a85fb --- /dev/null +++ b/DB/TP1_OrdresSQL/insert_data.sql @@ -0,0 +1,92 @@ +-- +-- insert_data.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Insere les donnees de la base de donnees dp +-- +-- Pour obtenir la liste des champs d'une table, on utilise la commande +-- \d du client psql +-- +-- Par exemple, \dt films donne : +-- +-- Table "public.films" +-- Column | Type | Modifiers +-- -------------+------------------------+----------- +-- numerofilm | integer | not null +-- titre | character varying(80) | +-- genre | integer | +-- anneesortie | integer | +-- realisateur | integer | +-- resume | character varying(255) | +-- Indexes: +-- "films_pkey" PRIMARY KEY, btree (numerofilm) +-- +-- + +-- +-- Version : 1.0 +-- +-- Fait : - +-- +-- A faire : - +-- + + +-- comediens => com +-- numerocomedien -> numc +-- nomcomedien -> identc +INSERT INTO com (numc, identc) +SELECT numerocomedien, nomcomedien +FROM public.comediens; + +-- genre => genre +-- numerogenre -> numg +-- nomgenre -> nomg +INSERT INTO genre (numg, nomg) +SELECT numerogenre, nomgenre +FROM public.genre; + +-- Des enregistrements de la table film font reference a un genre 0 manquant. +INSERT INTO genre (numg, nomg) +VALUES (0, 'Inconnu'); + +-- realisateurs => realis +-- numerorealisateur -> numr +-- nomrealisateur -> identr +INSERT INTO realis (numr, identr) +SELECT numerorealisateur, nomrealisateur +FROM public.realisateurs; + +-- films => film +-- numerofilm -> numf +-- titre -> titre +-- genre -> numg +-- anneesortie -> annee +-- realisateur -> numr +-- resume -> resume +INSERT INTO film (numf, titre, numg, annee, numr, resume) +SELECT numerofilm, titre, genre, anneesortie, realisateur, resume +FROM public.films; + +-- com_film => role +-- numerofilm -> numf +-- numerocomedien -> numc +-- +-- NOTE : Le film 337 n'existe pas dans la table role +INSERT INTO role (numf, numc) +SELECT numerofilm, numerocomedien +FROM public.com_film +WHERE numerofilm != 337; + + diff --git a/DB/TP1_OrdresSQL/queries.sql b/DB/TP1_OrdresSQL/queries.sql new file mode 100755 index 0000000..75b838d --- /dev/null +++ b/DB/TP1_OrdresSQL/queries.sql @@ -0,0 +1,90 @@ +-- +-- queries.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Exécute les requetes demandées dans l'énoncé +-- + +-- +-- Version : 0.0.1 +-- +-- Fait : Detail de ce qui a ete fait. +-- +-- A faire : Detail de ce qui n'a pas ete fait. +-- + +-- On ecrit dans le fichier queries.html +\o queries.html + +-- On active le mode HTML +\pset format html +\T 'width="100%"' + +-- En-tête +\qecho '' +\qecho '' +\qecho '' +\qecho 'Résultat des requètes' +\qecho '' +\qecho '' +\qecho '' + +\C '4.a - Titres des films réalisés par Woody ALLEN' +SELECT numf AS "Numéro", titre AS "Titre", annee AS "Année", nomg AS "Genre", identr AS "Réalisateur" +FROM film NATURAL JOIN genre NATURAL JOIN realis +WHERE identr = 'ALLEN Woody'; + +\C '4.b - Titres et années de sortie des films réalisés par Charlie CHAPLIN entre 1930 et 1940' +SELECT numf AS "Numéro", titre AS "Titre", annee AS "Année", nomg AS "Genre", identr AS "Réalisateur" +FROM film NATURAL JOIN genre NATURAL JOIN realis +WHERE identr = 'CHAPLIN Charlie' +AND annee BETWEEN 1930 AND 1940; + +\C '4.c - Noms des acteurs, triés par ordre alphabétique, du film "Les lumières de la ville"' +SELECT identc AS "Comédien", titre AS "Film" +FROM film NATURAL JOIN role NATURAL JOIN com +WHERE titre = 'Les lumieres de la ville' +ORDER BY identc ASC; + +\C '4.d - Titre des films d\'espionnage sortis en 1987' +SELECT numf AS "Numéro", titre AS "Titre", annee AS "Année", nomg AS "Genre", identr AS "Réalisateur" +FROM film NATURAL JOIN genre NATURAL JOIN realis +WHERE nomg = 'Espionnage' +AND annee = 1987; + +\C '4.e - Nombre de films joués par Gérard DEPARDIEU' +SELECT count(*) AS "Nombre" +FROM role +WHERE numc = (SELECT numc FROM com WHERE identc = 'DEPARDIEU Gerard'); + +\C '4.f - Noms des réalisateurs, triés par ordre alphabétique, qui sont également comédiens' +SELECT identr AS "Réalisateur" +FROM realis, com +WHERE identc = identr +ORDER BY identr ASC; + +\C '4.g - Titres des films et nom des réalisateurs des films de la série Star Trek' +SELECT numf AS "Numéro", titre AS "Titre", annee AS "Année", nomg AS "Genre", identr AS "Réalisateur" +FROM film NATURAL JOIN genre NATURAL JOIN realis +WHERE titre LIKE 'Star Trek%'; + +\C '4.h - Nom des comédiens ayant joué dans au moins 5 films' +SELECT identc AS "Nom du comédien", count(*) AS "Nombre de films" +FROM role NATURAL JOIN com +GROUP BY identc +HAVING count(*) >= 5 +ORDER BY count(*) DESC; + +\qecho '' +\qecho '' diff --git a/DB/TP1_OrdresSQL/update_data.sql b/DB/TP1_OrdresSQL/update_data.sql new file mode 100755 index 0000000..c30a590 --- /dev/null +++ b/DB/TP1_OrdresSQL/update_data.sql @@ -0,0 +1,41 @@ +-- +-- update_data.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Corrige les enregistrements relatifs au réalisateur James CAMERON : +-- suppression de 'CAMERON James' +-- + +-- +-- Version : 1.0 +-- +-- Fait : - +-- +-- A faire : - +-- + +-- Les films de 'CAMERON James' sont désormais réalisés par 'CAMERON James F.' +UPDATE film +SET numr = 41 +WHERE numr = 289; + +-- 'CAMERON James' n'a plus lieu d'exister, on le supprime +DELETE FROM realis +WHERE numr = 289; + +-- Liste des films réalisés par 'CAMERON James F.' +SELECT numf, titre, annee, identr +FROM film INNER JOIN realis USING (numr) +WHERE numr = 41; + diff --git a/DB/TP2_ServeurWeb/actorDetails.php b/DB/TP2_ServeurWeb/actorDetails.php new file mode 100755 index 0000000..3565f4a --- /dev/null +++ b/DB/TP2_ServeurWeb/actorDetails.php @@ -0,0 +1,61 @@ + + + + + + + + + + Détails d'un comédien + + + + getName()); + } + } + ?> + +

+ +

+ +

Filmographie:

+ +
    + getMoviesList(); + + if (count($movies) > 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo('
  • Aucun film trouvé
  • '); + } + ?> +
+ + + + + + diff --git a/DB/TP2_ServeurWeb/chooseActor.php b/DB/TP2_ServeurWeb/chooseActor.php new file mode 100755 index 0000000..8bd9e6d --- /dev/null +++ b/DB/TP2_ServeurWeb/chooseActor.php @@ -0,0 +1,54 @@ + + + + + + + + + + + Choix d'un comédien + + + + + +

Choix d'un comédien

+ +
+
+

+ +

+ +

+ +
+ + + + + diff --git a/DB/TP2_ServeurWeb/chooseDirector.php b/DB/TP2_ServeurWeb/chooseDirector.php new file mode 100755 index 0000000..4da60fc --- /dev/null +++ b/DB/TP2_ServeurWeb/chooseDirector.php @@ -0,0 +1,64 @@ + + + + + + + + + + + Choix d'un réalisateur + + + + + +

Choix d'un réalisateur

+ +

Formulaire pour obtenir la liste des films d'un réalisateur donné

+ +
+
+

+ +

+ +
+ + + + + diff --git a/DB/TP2_ServeurWeb/directorDetails.php b/DB/TP2_ServeurWeb/directorDetails.php new file mode 100755 index 0000000..0f880ae --- /dev/null +++ b/DB/TP2_ServeurWeb/directorDetails.php @@ -0,0 +1,62 @@ + + + + + + + + + + Détails d'un réalisateur + + + + getName()); + } + } + ?> + +

+ +

+ +

Filmographie:

+ +
    + getMoviesList(); + + if (count($movies) > 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo('
  • Aucun film trouvé
  • '); + } + + ?> +
+ + + + + + diff --git a/DB/TP2_ServeurWeb/film.txt b/DB/TP2_ServeurWeb/film.txt new file mode 100755 index 0000000..84b98f1 --- /dev/null +++ b/DB/TP2_ServeurWeb/film.txt @@ -0,0 +1,16 @@ +Ghost|Fantastique|1990|ZUCKER Jerry|Sam, cadre dans une banque d'affaires, vit heureux avec Molly, sa compagne. Un soir, en rentrant d'un spectacle, Sam est victime des balles d'un malfrat et meurt dans les bras de Molly. Son fantôme va rapidement s'apercevoir qui a commandité le meurtre.|SWAYZE Patrick|MOORE Demi|GOLDBERG Whoopi|GOLDWYN Tony +Programmé pour tuer|Suspense|1997|LEONARD Brett|A, Los Angeles, en 1999, Sid 6.7 a été créée pour entraîner les forces de police. Cette image de synthèse représente tous les êtres dangereux de la planète, mais son créateur lui a donné les capacités de s'échapper de son environnement.|WASHINGTON Denzel|LYNCH Kelly|CROWE Russell|SPINELLA Stephen +Men in black|Fantastique|1997|SONNENFELD Barry|Deux agents de l'organisation secrète Men in Black, chargés de surveiller les extraterrestres présents sur Terre, luttent contre un envahisseur.|JONES Tommy Lee|SMITH Will|FIORENTINO Linda +Piège à Hong-Kong|Aventure|1998|HARK Tsui|Alors que la chine s'apprête à récuperer Hong-Kong, un agent de la CIA, officiellement patron d'une fabrique de jeans, se retrouve confronté à la maffia russe.|VAN DAMME Jean-Claude|SORVINO Paul +Brannighan|Espionnage|1975|HICKOX David|Jim, un flic aux méthodes expéditives, se rend à Londres pour mettre la main sur Larkin et le ramener aux Etats-Unis.|WAYNE John|ATTENBOROUGH Richard|GEESON Judy +Vous avez un message|Comedie|1998|EPHRON Nora|Joe Fox est propriétaire de la plus grande chaîne de librairies de Manhattan. Kathleen Kelly, elle, tient une toute petite librairie. Chacun d'eux pense avoir une vie idéale jusqu'au jour où, suite à une annonce passée sur Internet, ils font connaissance.|HANKS Tom|RYAN Meg|POSEY Parker +Toutes peines confondues|Policier|1992|DEVILLE Michel|Turston, habile agent d'Interpol, charge l'inspecteur Vade d'enquêter sur Antoine Gardella, un homme d'affaires corrompu dont les parents viennent d'être assassinés. Le jeune inspecteur se sent vite mal à l'aise dans cette mission, compliquée, dangereuse,|DUTRONC Jacques|BRUEL Patrick|MAY Mathilda +La lectrice|Comedie|1988|DEVILLE Michel|Marie, passionnée de lecture, se propose comme lectrice à domicile. Elle va chez ses clients : un jeune garçon, la veuve d'un général hongrois et un PDG.|MIOU-MIOU|ROYER Régis|CASARES Maria|CHESNAIS Patrick +Paparazzi|Comedie|1998|BERBERIAN Alain|Après avoir assisté à un match de football au lieu d'être à son travail, Franck paraît en couverture d'un magazine et perd son emploi. Il part à la recherche du photographe responsable du cliché.|TIMSIT Patrick|LINDON Vincent|BAYE Nathalie|FROT Catherine +Le Saint|Policier|1997|NOYCE Phillip|Interne dans un collège anglais d'Extrême-Orient, Jean Rossi assiste à la mort d'Agnès, jeune pensionnaire dont il est épris. Plusieurs années après, à Moscou, un mystérieux individu pénêtre par effraction dans une salle des coffres.|KILMER Val|SHUE Elisabeth +Independance Day|Fantastique|1996|EMMERICH Roland|Un pilote noir et un génie de l'informatique viennent à bout d'extraterrestres s'apprêtant à exterminer la race humaine.|SMITH Will|GOLDBLUM Jeff|PULLMAN Bill|MCDONNEL Mary +Snake Eyes|Policier|1998|DE PALMA Brian|A Atlantic City, le secrétaire d'Etat est victime d'un assassinat. L'inspecteur Santoro, policier corrompu, commence son enquête.|CAGE Nicolas|SINISE Gary|HEARD John|GUGINO Carla +Touchez pas au grisbi|Policier|1953|BECKER Jacques|"Max et Riton ont dérobé des lingots d'or à Orly. Max a caché le "grisbi" mais Riton dévoile le secret à sa maîtresse Josy."|DARY René|GABIN Jean|VENTURA Lino +Le Pic de Dante|Catastrophe|1997|DONALDSON Roger|Rachel Wando, maire du Pic de Dante, petite ville surplombée d'un volcan, signe un contrat avec une grosse société afin de développer le tourisme. Mais le volcanologue Harry la met en garde car il craint une prochaine éruption.|BROSNAN Pierce|HAMILTON Linda|HALLAHAN Charles +La canardeur|Aventure|1974|CIMINO Michael|Poursuivi par d'anciens complices et se dissimulant sous une fausse identité de pasteur, John Thunderbolt, dit le canardeur, échappe à la mort grâce à l'intervention d'un petit truand Lightfoot. Les deux hommes sont pourchassés à travers le pays.|EASTWOOD Clint|KENNEDY George|BRIDGES Jeff|LEWIS Geoffrey +Hackers|Suspense|1995|SOFTLEY Iain|Dade Murphy a été fiché au FBI à onze ans pour avoir piraté plus de 1500 systèmes informatiques. Il continue néanmoins, avec d'autres étudiants, de s'introduire sur tous les réseaux. Un jour, le FBI les accuse d'avoir implanté un virus caable désastreux.|MILLER Jonny Lee|BRACCO Lorraine diff --git a/DB/TP2_ServeurWeb/findMovieFromTitle.php b/DB/TP2_ServeurWeb/findMovieFromTitle.php new file mode 100755 index 0000000..6108fe3 --- /dev/null +++ b/DB/TP2_ServeurWeb/findMovieFromTitle.php @@ -0,0 +1,65 @@ + + + + + + + + + + Rechercher d'un film à partir de son titre + + + + + +

Recherche d'un film à partir de son titre

+ +
+
+


+ />
+

+ +
Films dont le titre contient \"$title_part_xhtml\":

    "); + + if (count($movies) > 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo('
  • Aucun film ne correspond au critère de recherche
  • '); + } + + echo("
"); + } + ?> + + + + + diff --git a/DB/TP2_ServeurWeb/inc/Actor.inc.php b/DB/TP2_ServeurWeb/inc/Actor.inc.php new file mode 100755 index 0000000..8b04e6a --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/Actor.inc.php @@ -0,0 +1,226 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * @version 1.0 + * @access public + */ +class Actor { + /** + * The id of this actor in the database. + * + * @var integer + * @access private + */ + var $id; + + /** + * The identity of this actor in the database. + * + * @var string + * @access private + */ + var $name; + + /** + * The list of movies in which this actor appears + */ + var $movies; + + /** + * Constructs an actor using his data. + * + * @param integer $id the id of the actor. + * @param string $name the name of the actor. + * @access private + */ + function Actor($id, $name) { + $this->id = $id; + $this->name = $name; + $this->movies = NULL; + } + + /** + * Constructs an actor using its id in the database, if it doesn't exist + * it is inserted and the given number is returned. + * + * @param string $name the name of the actor + * @access public + * @static + * @returns a new actor. + */ + function newActor($name) { + $id = 0; + + // Doubles the quotes + $name_esc = pg_escape_string($name); + + $query = "SELECT numc FROM com WHERE identc = '$name_esc'"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + + // Does the director exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $id = $row[0]; + } else if ($num == 0) { + // No, insert it + $id = getNextKey('com'); + $insert = "INSERT INTO com (numc, identc) VALUES (" . $id . ", '$name_esc')"; + + if (pg_query($GLOBALS[PG_CONNECTION], $insert) === FALSE) { + die("Unable to insert new actor."); + } + + trigger_error("New actor inserted", E_USER_NOTICE); + } else { + die("'$query' returned $num lines."); + } + + // creates the object + $act = new Actor($id, $name); + + return $act; + } + + + /** + * Constructs an actor using his id in the database, if it doesn't exist + * NULL is returned + * + * @param string $id the id of the actor + * @access public + * @static + * @returns a new actor or NULL. + */ + function getActorById($id) { + + $query = "SELECT identc FROM com WHERE numc = $id"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + + // Does the actor exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $name = $row[0]; + // creates the object + $actor = new Actor($id, $name); + + } else if ($num == 0) { + // No, return NULL + $actor = NULL; + } + + return $actor; + } + + /** + * Returns the list of movies in which this actor appears. + * This method is a lazy initialization of the movies field + * + * @return movies list + */ + function getMoviesList() { + if ($this->movies == NULL) { + $this->movies = Movie::getMoviesWithActor($this->id); + } + + return $this->movies; + } + + + /** + * Returns the list of all the actors in the database and the number + * of movies associated. + * + * @return array an array of two columns, the actor and + * the number of movies. + * @static + */ + function getActors() { + $query = "SELECT numc, identc, count(numf) AS num + FROM com NATURAL JOIN role + GROUP BY numc, identc + ORDER BY identc"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Can't list actors."); + } + + $arr = Array(); + + while (($row = pg_fetch_row($res)) !== FALSE) { + $arr[] = Array(new Actor($row[0], $row[1]), $row[2]); + } + + return $arr; + } + + + /** + * Register the role of this actor in the film. + * + * @param Movie $movie the movie the actor played in. + * @access public + */ + function playIn($movie) { + $query = "INSERT INTO role (numc, numf) VALUES (" . + $this->getId() . ", " . + $movie->getId() . ")"; + + if (pg_query($GLOBALS[PG_CONNECTION], $query) === FALSE) { + die("Unable to insert new role."); + } + + trigger_error("New role inserted: " . $this->toString() . + " + " . $movie->toString(), E_USER_NOTICE); + } + + /** + * Returns the ID of this actor. + * + * @return integer the id of this actor. + * @access public + */ + function getId() { + return $this->id; + } + + /** + * Returns the identity of this actor. + * + * @return string the identity of this actor. + * @access public + */ + function getName() { + return $this->name; + } + + /** + * Returns the string representation of this actor. + * + * @return string the string representation of this actor. + * @access public + */ + function toString() { + return "Actor(" . $this->getId() . ", " . $this->getName() . ")"; + } +} +?> diff --git a/DB/TP2_ServeurWeb/inc/Connection.inc.php b/DB/TP2_ServeurWeb/inc/Connection.inc.php new file mode 100755 index 0000000..c1e7341 --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/Connection.inc.php @@ -0,0 +1,37 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Connection to the database. + */ + + +define("PG_USER", "limint"); +define("PG_SCHEMA", PG_USER); +define("PG_PASSWD", "vilest"); +define("PG_DATABASE", "cinema"); + +// Useful alias, permit : $GLOBALS[PG_CONNECTION] +define("PG_CONNECTION", "PG_CONNECTION"); + +error_reporting(E_ALL); + +$con = pg_connect('dbname=' . PG_DATABASE . ' user=' . PG_USER . ' password=' . PG_PASSWD); +if ($con === FALSE) { + die("Unable to connect to the database."); +} + +$GLOBALS[PG_CONNECTION] = $con; + diff --git a/DB/TP2_ServeurWeb/inc/Director.inc.php b/DB/TP2_ServeurWeb/inc/Director.inc.php new file mode 100755 index 0000000..b3df60a --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/Director.inc.php @@ -0,0 +1,206 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * @version 1.0 + * @access public + */ +class Director { + /** + * The id of this director in the database. + * + * @var integer + * @access private + */ + var $id; + + /** + * The identity of this director in the database. + * + * @var string + * @access private + */ + var $name; + + /** + * The movies the director shot + */ + var $movies; + + /** + * Constructs a director using his data. + * + * @param integer $id the id of the director. + * @param string $name the name of the director. + * @access private + */ + function Director($id, $name) { + $this->id = $id; + $this->name = $name; + $this->movies = NULL; + } + + /** + * Constructs a director using its id in the database, if it doesn't exist + * it is inserted and the given number is returned. + * + * @param string $name the name of the director + * @access public + * @static + * @returns a new director. + */ + function newDirector($name) { + $id = 0; + + // Doubles the quotes + $name_esc = pg_escape_string($name); + + $query = "SELECT numr FROM realis WHERE identr = '$name_esc'"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + + // Does the director exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $id = $row[0]; + } else if ($num == 0) { + // No, insert it + $id = getNextKey('realis'); + $insert = "INSERT INTO realis (numr, identr) VALUES (" . $id . ", '$name_esc')"; + + if (pg_query($GLOBALS[PG_CONNECTION], $insert) === FALSE) { + die("Unable to insert new director."); + } + + trigger_error("New director inserted", E_USER_NOTICE); + } else { + die("'$query' returned $num lines."); + } + + // creates the object + $dir = new Director($id, $name); + + return $dir; + } + + /** + * Constructs a director using his id in the database, if it doesn't exist + * NULL is returned + * + * @param string $id the id of the director. + * @access public + * @static + * @returns a new director or NULL. + */ + function getDirectorById($id) { + + $query = "SELECT identr FROM realis WHERE numr = $id"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + + // Does the director exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $name = $row[0]; + // creates the object + $director = new Director($id, $name); + + } else if ($num == 0) { + // No, return NULL + $director = NULL; + } + + return $director; + } + + + /** + * Returns the list of all the directors in the database and the number + * of movies associated. + * + * @return array an array of two columns, the director and + * the number of movies. + * @static + */ + function getDirectors() { + $query = "SELECT numr, identr, count(numf) AS num + FROM realis NATURAL JOIN film + GROUP BY numr, identr + ORDER BY identr"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Can't list directors."); + } + + $arr = Array(); + + while (($row = pg_fetch_row($res)) !== FALSE) { + $arr[] = Array(new Director($row[0], $row[1]), $row[2]); + } + + return $arr; + } + + /** + * Returns the ID of this director. + * + * @return integer the id of this director. + * @access public + */ + function getId() { + return $this->id; + } + + /** + * Returns the identity of this director. + * + * @return string the identity of this director. + * @access public + */ + function getName() { + return $this->name; + } + + /** + * Returns the string representation of this director. + * + * @return string the string representation of this director. + * @access public + */ + function toString() { + return "Director(" . $this->getId() . ", " . $this->getName() . ")"; + } + + /** + * Returns the list of movies shot by this director + * This method is a lazy initialization of the movies field + * + * @return movies list + */ + function getMoviesList() { + if ($this->movies == NULL) { + $this->movies = Movie::getMoviesOfDirector($this->id); + } + + return $this->movies; + } + +} +?> diff --git a/DB/TP2_ServeurWeb/inc/Kind.inc.php b/DB/TP2_ServeurWeb/inc/Kind.inc.php new file mode 100755 index 0000000..cc5778c --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/Kind.inc.php @@ -0,0 +1,209 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * @version 1.0 + * @access public + */ +class Kind { + /** + * The id of this kind in the database. + * + * @var integer + * @access private + */ + var $id; + + /** + * The name of this kind in the database. + * + * @var string + * @access private + */ + var $name; + + /** + * The movies of this kind + */ + var $movies; + + /** + * Constructs a kind using its data. + * + * @param integer $id the id of the kind. + * @param string $name the name of the kind. + * @access private + */ + function Kind($id, $name) { + $this->id = $id; + $this->name = $name; + $this->movies = NULL; + } + + /** + * Constructs a kind using his name in the database, if it doesn't exist + * it is inserted and the given number is returned. + * + * @param string $name the name of the kind. + * @access public + * @static + * @returns a new kind. + */ + function newKind($name) { + $id = 0; + + // Doubles the quotes + $name_esc = pg_escape_string($name); + + $query = "SELECT numg FROM genre WHERE nomg = '$name_esc'"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + + // Does the kind exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $id = $row[0]; + } else if ($num == 0) { + // No, insert it + $id = getNextKey('genre'); + $insert = "INSERT INTO genre (numg, nomg) VALUES (" . $id . ", '$name_esc')"; + + if (pg_query($GLOBALS[PG_CONNECTION], $insert) === FALSE) { + die("Unable to insert new kind."); + } + + trigger_error("New kind inserted", E_USER_NOTICE); + } else { + die("'$query' returned $num lines."); + } + + // creates the object + $kind = new Kind($id, $name); + + return $kind; + } + + + /** + * Constructs a kind using his id in the database, if it doesn't exist + * NULL is returned + * + * @param string $id the id of the kind. + * @access public + * @static + * @returns a new kind or NULL. + */ + function getKindById($id) { + + $query = "SELECT nomg FROM genre WHERE numg = $id"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + + // Does the kind exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $name = $row[0]; + // creates the object + $kind = new Kind($id, $name); + + } else if ($num == 0) { + // No, return NULL + $kind = NULL; + } + + return $kind; + } + + + /** + * Returns the list of movies of this kind + * This method is a lazy initialization of the movies field + * + * @param sort_type how to sort: 0 => ASC title, 1 => DSC year + * + * @return movies list + */ + function getMoviesList($sort_type = 0) { + if ($this->movies == NULL) { + $this->movies = Movie::getMoviesOfKind($this->id, $sort_type); + } + + return $this->movies; + } + + + /** + * Returns the list of all the kinds in the database and the number + * of movies associated. + * + * @return array an array, each element is a two columns array containing + * the kind and the number of movies. + * @static + */ + function getKinds() { + $query = "SELECT numg, nomg, count(numf) AS num + FROM genre NATURAL JOIN film + GROUP BY numg, nomg + ORDER BY nomg"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Can't list kinds."); + } + + $arr = Array(); + + while (($row = pg_fetch_row($res)) !== FALSE) { + $arr[] = Array(new Kind($row[0], $row[1]), $row[2]); + } + + return $arr; + } + + /** + * Returns the ID of this kind. + * + * @return integer the id of this kind. + * @access public + */ + function getId() { + return $this->id; + } + + /** + * Returns the identity of this kind. + * + * @return string the identity of this kind. + * @access public + */ + function getName() { + return $this->name; + } + + /** + * Returns the string representation of this kind. + * + * @return string the string representation of this kind. + * @access public + */ + function toString() { + return "Kind(" . $this->getId() . ", " . $this->getName() . ")"; + } +} +?> diff --git a/DB/TP2_ServeurWeb/inc/Movie.inc.php b/DB/TP2_ServeurWeb/inc/Movie.inc.php new file mode 100755 index 0000000..43f3f58 --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/Movie.inc.php @@ -0,0 +1,441 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * @version 1.0 + * @access public + */ +class Movie { + /** + * The id of this movie in the database. + * + * @var integer + * @access private + */ + var $id; + + /** + * The title of this movie in the database. + * + * @var string + * @access private + */ + var $title; + + /** + * The id of the kind related to this movie. + * + * @var integer + * @access private + */ + var $kind_id; + + /** + * On screen date. + * + * @var integer + * @access private + */ + var $year; + + /** + * The id of the director related to this movie. + * + * @var integer + * @access private + */ + var $dir_id; + + /** + * The text preview. + * + * @var string + * @access private + */ + var $text_preview; + + /** + * The list of actors who appears in this movie + */ + var $actors; + + /** + * Insert a new movie in the database. + * + * @param string $title the title of the movie. + * @param Kind $kind the kind of the movie. + * @param integer $year the year of the movie. + * @param Director $dir the director of the movie. + * @param string $tp the text preview of the movie. + * @param Array $actors the list of the actors of the movie. + * @return Movie the new movie. + * @access public + * @static + */ + function newMovie($title, $kind, $year, $dir, $tp, $actors) { + // Doubles the quotes + $title_esc = pg_escape_string($title); + $tp_esc = pg_escape_string($tp); + + // Insertion of the movie in the database + $id = getNextKey('film'); + $insert = "INSERT INTO film + (numf, titre, numg, annee, numr, resume) + VALUES (" . + $id . ", " . + "'$title_esc', " . + $kind->getId() . ', ' . + "$year, " . + $dir->getId() . ", " . + "'$tp_esc')"; + + if (pg_query($GLOBALS[PG_CONNECTION], $insert) === FALSE) { + die("Unable to insert new movie."); + } + + // Constructs the newly added movie. + $newMovie = new Movie($id, $title, $kind->getId(), $year, $dir->getId(), $tp); + + // Quick notice for debug + trigger_error("New movie inserted: " . $newMovie->toString(), E_USER_NOTICE); + + // Inserts the roles + foreach($actors as $actor) { + $actor->playIn($newMovie); + } + + return $newMovie; + } + + /** + * Constructs a movie from its data. + * + * @param integer $id the identifier of the movie. + * @param string $title the title of the movie. + * @param integer $kind_id the kind identifier of the movie. + * @param integer $year the year of the movie. + * @param integer $dir_id the director of the movie. + * @param string $tp the text preview of the movie. + * @access private + */ + function Movie($id, $title, $kind_id, $year, $dir_id, $tp) { + $this->id = $id; + $this->title = $title; + $this->kind_id = $kind_id; + $this->year = $year; + $this->dir_id = $dir_id; + $this->text_preview = $tp; + $this->actors = NULL; + } + + + /** + * Returns the movie having the wanted identifier. + * + * @param Director $dir the wanted identifier. + * @return the wanted movie + * @access public + * @static + */ + function getMovieById($movie_id) { + $query = "SELECT numf, titre, numg, annee, numr, resume + FROM film WHERE numf = " . $movie_id; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list movies."); + } + + // Does the movie exist in the database ? + $num = pg_num_rows($res); + if ($num == 1) { + // Yes + $row = pg_fetch_row($res); + $name = $row[0]; + // creates the object + $movie = new Movie($row[0], $row[1], $row[2], $row[3], $row[4], $row[5]); + } else if ($num == 0) { + // No, return NULL + $movie = NULL; + } + + return $movie; + } + + /** + * Returns the movies having the wanted relase date. + * + * @param year. th ewanted year + * @return array an array of movies. + * @access public + * @static + */ + function getMoviesOfYear($year) { + $arr = array(); + + $query = "SELECT numf, titre, numg, annee, numr, resume + FROM film WHERE annee = $year ORDER BY titre ASC"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list movies."); + } + + // fetch rows + while (($row = pg_fetch_row($res)) !== FALSE) { + // populate array + $arr[] = new Movie($row[0], $row[1], $row[2], $row[3], + $row[4], $row[5]); + } + + return $arr; + } + + /** + * Returns the movies having the wanted kind identifier. + * + * @param kind_id the wanted kind identifier + * @param sort_type how to sort: 0 => ASC title, 1 => DSC year + * @return array an array of movies. + * @access public + * @static + */ + function getMoviesOfKind($kind_id, $sort_type = 0) { + $arr = array(); + + $query = "SELECT numf, titre, numg, annee, numr, resume + FROM film WHERE numg = $kind_id ORDER BY "; + + + switch ($sort_type) { + case 1: + $query = $query . "annee DESC;"; + break; + default: + $query = $query . "titre ASC;"; + break; + } + + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list movies."); + } + + // fetch rows + while (($row = pg_fetch_row($res)) !== FALSE) { + // populate array + $arr[] = new Movie($row[0], $row[1], $row[2], $row[3], + $row[4], $row[5]); + } + + return $arr; + } + + /** + * Returns the movies having the wanted director. + * + * @param director_id the director identifier + * @return array an array of movies. + * @access public + * @static + */ + function getMoviesOfDirector($director_id) { + $arr = array(); + + $query = "SELECT numf, titre, numg, annee, numr, resume + FROM film WHERE numr = $director_id ORDER BY titre ASC"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list movies."); + } + + // fetch rows + while (($row = pg_fetch_row($res)) !== FALSE) { + // populate array + $arr[] = new Movie($row[0], $row[1], $row[2], $row[3], + $row[4], $row[5]); + } + + return $arr; + } + + /** + * Returns the movies in which the wanted actor play. + * + * @param actor_id the wanted actor identifier + * @return array an array of movies. + * @access public + * @static + */ + function getMoviesWithActor($actor_id) { + $arr = array(); + + $query = "SELECT f.numf, f.titre, f.numg, f.annee, f.numr, f.resume + FROM film f INNER JOIN role r ON f.numf = r.numf WHERE numc = $actor_id ORDER BY titre ASC"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list movies."); + } + + // fetch rows + while (($row = pg_fetch_row($res)) !== FALSE) { + // populate array + $arr[] = new Movie($row[0], $row[1], $row[2], $row[3], + $row[4], $row[5]); + } + + return $arr; + } + + /** + * Returns the movies with title matching the given parameter + * + * @param title_part a search criteria based on a part of the title + * @return array an array of movies. + * @access public + * @static + */ + function getMoviesWithTitleMatching($title_part) { + $arr = array(); + + $query = "SELECT numf, titre, numg, annee, numr, resume + FROM film WHERE upper(titre) LIKE upper('%" . pg_escape_string($title_part) . "%') ORDER BY titre ASC"; + + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list movies."); + } + + // fetch rows + while (($row = pg_fetch_row($res)) !== FALSE) { + // populate array + $arr[] = new Movie($row[0], $row[1], $row[2], $row[3], + $row[4], $row[5]); + } + + return $arr; + } + + + /** + * Returns the list of actors who appears in this movie + * This method is a lazy initialization of the actors field + * + * @return actors list + */ + function getActorsList() { + if ($this->actors == NULL) { + $this->actors = array(); + + $query = "SELECT c.numc, c.identc + FROM com c INNER JOIN role r ON c.numc = r.numc WHERE r.numf = $this->id ORDER BY c.identc ASC"; + + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + die("Unable to list actors."); + } + + // fetch rows + while (($row = pg_fetch_row($res)) !== FALSE) { + // populate array + $this->actors[] = new Actor($row[0], $row[1]); + } + } + + return $this->actors; + } + + /** + * Returns the ID of this movie. + * + * @return integer the id of this movie. + * @access public + */ + function getId() { + return $this->id; + } + + /** + * Returns the title of the movie. + * + * @return string the title of the movie. + * @access public + */ + function getTitle() { + return $this->title; + } + + /** + * Returns the identifier of the kind related to this movie. + * + * @return integer the identifier of kind related to this movie. + * @access public + */ + function getKindId() { + return $this->kind_id; + } + + /** + * Returns the year of the movie. + * + * @return integer the year of the movie. + * @access public + */ + function getYear() { + return $this->year; + } + + /** + * Returns the identifier of the director related to this movie. + * + * @return integer the id of the director related to this movie. + * @access public + */ + function getDirId() { + return $this->dir_id; + } + + /** + * Returns the text preview of this movie. + * + * @return integer the text preview of this movie. + * @access public + */ + function getTextPreview() { + return $this->text_preview; + } + + /** + * Returns the string representation of this movie. + * + * @return string the string representation of this movie. + * @access public + */ + function toString() { + return "Movie(" . $this->getId() . ", " . + $this->getTitle() . ', ' . + $this->getKindId() . ', ' . + $this->getYear() . ', ' . + $this->getDirId() . ')'; + } +} +?> diff --git a/DB/TP2_ServeurWeb/inc/footer.inc.xhtml b/DB/TP2_ServeurWeb/inc/footer.inc.xhtml new file mode 100755 index 0000000..b4d7653 --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/footer.inc.xhtml @@ -0,0 +1,5 @@ +

+ + Valid XHTML 1.1 + +

\ No newline at end of file diff --git a/DB/TP2_ServeurWeb/inc/util.inc.php b/DB/TP2_ServeurWeb/inc/util.inc.php new file mode 100755 index 0000000..d415f0c --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/util.inc.php @@ -0,0 +1,149 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + /** + * Creates and fill the table "numero" with pairs of table name and + * first identifier available. + * + */ +function createTableNum() { + if (!tableExists($GLOBALS[PG_CONNECTION], 'numero', PG_SCHEMA)) { + $query = 'CREATE TABLE numero ( + nom_table VARCHAR(255) PRIMARY KEY, + numero INTEGER NOT NULL DEFAULT 0);'; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if ($res === FALSE) { + // filling of the table "numero" + $liste_table = array("com" => "numc", "film" => "numf", "genre" => "numg", "realis" => "numr"); + foreach($liste_table as $key_lt => $value_lt) { + $res2 = pg_query($con, "SELECT max($value_lt) + 1 FROM $key_lt;"); + $row = pg_fetch_row($res2); + pg_query($GLOBALS[PG_CONNECTION], "INSERT INTO numero VALUES('$key_lt', $row[0]);"); + } + } else { + echo(pg_last_error($con)); + } + } +} + + +/** + * Tests if the given table name match an existant exists + * + * @param table checked table + * @param schema the schema in wich is search the table + * @return bool + */ +function tableExists($table, $schema) { + $query = "SELECT table_name + FROM information_schema.tables + WHERE table_type = 'BASE TABLE' + AND table_name = '$table' + AND table_schema = '$schema';"; + + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + $num = pg_num_rows($res); + + return $num > 0; +} + + +/** + * Return the next availlable key for the given table then + * increment the numero table, so the next call will + * return a different key (atomic transaction) + * + * @param table the table you want a key for + * @return + */ +function getNextKey($table) { + + // begin the transaction + $query = "BEGIN;"; + pg_query($GLOBALS[PG_CONNECTION], $query); + + // retrieve the key and get a lock on the concerned row + $query = "SELECT numero FROM " . PG_SCHEMA . ".numero WHERE nom_table = '$table' FOR UPDATE;"; + $res = pg_query($GLOBALS[PG_CONNECTION], $query); + if($row = pg_fetch_row($res)) { + $key = $row[0]; + } else { + echo(pg_last_error($GLOBALS[PG_CONNECTION])); + // cancel the transaction + $query = "ROLLBACK;"; + pg_query($GLOBALS[PG_CONNECTION], $query); + return 0; + } + + $new_key = $key + 1; + + // update the key + $query = "UPDATE " . PG_SCHEMA . ".numero SET numero = $new_key WHERE nom_table = '$table';"; + pg_query($GLOBALS[PG_CONNECTION], $query); + + // end the transaction and released + $query = "commit;"; + pg_query($GLOBALS[PG_CONNECTION], $query); + + return $key; +} + + +/** + * This aim to import new movies entries from a text file (utf8) + * The layout of the text file is as follow: + * title | kind | date | director | text preview (| actors)* + * + * @param fileName the name of the file to import data from + */ +function importNewMovies($fileName) { + // opening the file + $filedes = fopen($fileName, 'r') + or die("Unable to open file '$fileName'"); + + // read each line of the file + while (! feof($filedes)) { + $buffer = fgets($filedes, 2048); + + // retrieve all tokens + $data = explode('|', $buffer); + + // partial record ? skip ! + if (sizeof($data) < 5) + continue; + + // get actors + $nb_actors = sizeof($data) - 5; + $actors = array(); + + for ($i = 0; $i < $nb_actors; $i++) { + $actors[$i] = Actor::newActor($data[$i + 5]); + } + + $kind = Kind::newKind($data[1]); + $director = Director::newDirector($data[3]); + + // Movie ($conection, $title, $kind, $annee, $director, $text_preview, actors_array) + // Create a new Movie, object. If the movie doesn't exist in the database, it is inserted + Movie::newMovie($data[0], $kind, $data[2], $director, $data[4], $actors); + + } + + // close the file + fclose($filedes); +} + +?> diff --git a/DB/TP2_ServeurWeb/inc/util_xhtml.inc.php b/DB/TP2_ServeurWeb/inc/util_xhtml.inc.php new file mode 100755 index 0000000..0c2da67 --- /dev/null +++ b/DB/TP2_ServeurWeb/inc/util_xhtml.inc.php @@ -0,0 +1,103 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Write a link pointing towards the actor details page + * + * @param actor the actor + * @param listElement if true, write the link as a list element + */ +function actorToLink($actor, $listElement = FALSE) { + $actor_name = $actor->getName(); + $actor_name_xhtml = htmlspecialchars($actor_name); + $actor_id = $actor->getId(); + + if ($listElement) { + echo("
  • $actor_name_xhtml
  • "); + } else { + echo("$actor_name_xhtml"); + } +} + +/** + * Write a link pointing towards the movie details page + * + * @param movie the movie + * @param listElement if true, write the link as a list element + */ +function movieToLink($movie, $listElement = FALSE) { + $movie_title = $movie->getTitle(); + $movie_title_xhtml = htmlspecialchars($movie_title); + $movie_id = $movie->getId(); + + if ($listElement) { + echo("
  • $movie_title_xhtml
  • "); + } else { + echo("$movie_title_xhtml"); + } +} + +/** + * Write a link pointing towards the director details page + * + * @param director the director + * @param listElement if true, write the link as a list element + */ +function directorToLink($director, $listElement = FALSE) { + $director_name = $director->getName(); + $director_name_xhtml = htmlspecialchars($director_name); + $director_id = $director->getId(); + + if ($listElement) { + echo("
  • $director_name_xhtml
  • "); + } else { + echo("$director_name_xhtml"); + } +} + +/** + * Write a link pointing towards the kind details page + * + * @param kind the kind + * @param listElement if true, write the link as a list element + */ +function kindToLink($kind, $listElement = FALSE) { + $kind_name = $kind->getName(); + $kind_name_xhtml = htmlspecialchars($kind_name); + $kind_id = $kind->getId(); + + if ($listElement) { + echo("
  • $kind_name_xhtml
  • "); + } else { + echo("$kind_name_xhtml"); + } +} + +/** + * Write a link pointing towards the year details page + * + * @param year the year + * @param listElement if true, write the link as a list element + */ +function yearToLink($year, $listElement = FALSE) { + + if ($listElement) { + echo("
  • $year
  • "); + } else { + echo("$year"); + } +} + +?> diff --git a/DB/TP2_ServeurWeb/index.php b/DB/TP2_ServeurWeb/index.php new file mode 100755 index 0000000..96a12b8 --- /dev/null +++ b/DB/TP2_ServeurWeb/index.php @@ -0,0 +1,97 @@ + + + + + + + + + TP2 de Base de données: base de données cinéma + + + + +

    +TP2: Serveur Web +

    + +

    +Introduction +

    + +

    +Ces quelques pages sont écrites en PHP 4, version qui bénéficie d'une approche que l'on peut qualifier "d'orientée objet", dans notre cas largement utilisée. Elle permettent la consultation de la base de données cinéma qui elle est prise en charge par un serveur PostgreSQL. Veuillez s'il vous plait excuser la présentation particulièrement spartiate de l'ensemble, les auteurs désirant respecter la norme XHTML 1.1 dans un but purement pédagogique, choix qui implique de faire la mise en forme à l'aide de feuille de style externes répondant au doux nom de CSS, ce qui ne fait pas partie (pour l'instant) de leurs compétences. +

    + +

    +Importation de données +

    + +

    +TODO +

    + +

    +Consultation de données +

    + + + +

    +Catalogue des films +

    + + + + + + + + diff --git a/DB/TP2_ServeurWeb/kindDetails.php b/DB/TP2_ServeurWeb/kindDetails.php new file mode 100755 index 0000000..d15dcd9 --- /dev/null +++ b/DB/TP2_ServeurWeb/kindDetails.php @@ -0,0 +1,59 @@ + + + + + + + + + + Détail d'un genre + + + + getName()); + } + } + ?> + +

    + +

    + +

    Films de ce genre:

    + +
      + getMoviesList(); + + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + + + ?> +
    + + + + + + diff --git a/DB/TP2_ServeurWeb/listMovieByDirector.php b/DB/TP2_ServeurWeb/listMovieByDirector.php new file mode 100755 index 0000000..d2cc73b --- /dev/null +++ b/DB/TP2_ServeurWeb/listMovieByDirector.php @@ -0,0 +1,87 @@ + + + + + + + + + + + Liste par réalisateur + + + + + +

    Liste par réalisateur

    + +

    Formulaire pour obtenir la liste des films d'un réalisateur donné

    + +
    +
    +

    + +

    + +
    + +getMoviesList(); + echo("

    Films réalisés par: "); + directorToLink($director); + echo("

      "); + + if (count($movies) > 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo('
    • Aucun film trouvé
    • '); + } + + echo("
    "); + } + } +?> + + + + + diff --git a/DB/TP2_ServeurWeb/listMovieByKind.php b/DB/TP2_ServeurWeb/listMovieByKind.php new file mode 100755 index 0000000..14943d2 --- /dev/null +++ b/DB/TP2_ServeurWeb/listMovieByKind.php @@ -0,0 +1,87 @@ + + + + + + + + + + + Liste par genre + + + + + +

    Liste par genre

    + +

    Formulaire pour obtenir la liste des films d'un genre donné

    + +
    +
    +

    + +

    + +
    + +getMoviesList(); + echo("

    Films trouvés pour le genre: "); + kindToLink($kind); + echo("

      "); + + if (count($movies) > 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo('
    • Aucun film trouvé
    • '); + } + + echo("
    "); + } + } +?> + + + + + diff --git a/DB/TP2_ServeurWeb/listMovieWithActor.php b/DB/TP2_ServeurWeb/listMovieWithActor.php new file mode 100755 index 0000000..7806acd --- /dev/null +++ b/DB/TP2_ServeurWeb/listMovieWithActor.php @@ -0,0 +1,87 @@ + + + + + + + + + + + Liste par acteur + + + + + +

    Liste des films ou l'acteur précisé tient un role

    + +

    Formulaire pour obtenir la liste des films dans lequel joue le comédien donné

    + +
    +
    +

    + +

    + +
    + +getMoviesList(); + echo("

    Films dans lesquels à joué : "); + actorToLink($actor); + echo("

      "); + + if (count($movies) > 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo('
    • Aucun film trouvé
    • '); +k } + + echo("
    "); + } + } +?> + + + + + diff --git a/DB/TP2_ServeurWeb/movieDetails.php b/DB/TP2_ServeurWeb/movieDetails.php new file mode 100755 index 0000000..613e5b1 --- /dev/null +++ b/DB/TP2_ServeurWeb/movieDetails.php @@ -0,0 +1,111 @@ + + + + + + + + + + Détails d'un film + + + + getTitle()); + } + } + ?> + +

    + +

    + +

    Année de sortie:

    +

    + getYear(); + yearToLink($year); + ?> +

    + +

    Genre:

    +

    + getKindId(); + $kind = Kind::getKindById($kindId); + kindToLink($kind); + ?> +

    + +

    Réalisateur:

    +

    + getDirId(); + $director = Director::getDirectorById($dir_id); + if ($director == NULL) { + echo(" Réalisateur non trouvé!!"); + } else { + directorToLink($director); + } + ?> +

    + +

    Résumé:

    +

    + getTextPreview(); + + if ($resume <> NULL) { + $resume_xhtml = htmlspecialchars($resume); + echo($resume_xhtml); + } else { + echo('résumé non disponible'); + } + + ?> +

    + +

    Liste des acteurs:

    + +
      + getActorsList(); + + if (count($actors) > 0) { + foreach ($actors as $actor) { + actorToLink($actor, TRUE); + } + } else { + echo('
    • Aucun acteur trouvé
    • '); + } + + + ?> +
    + + + + + + diff --git a/DB/TP2_ServeurWeb/movie_catalog.php b/DB/TP2_ServeurWeb/movie_catalog.php new file mode 100755 index 0000000..59ee2f9 --- /dev/null +++ b/DB/TP2_ServeurWeb/movie_catalog.php @@ -0,0 +1,49 @@ + + + + + + + + + + + Catalogue des films + + + + + +

    Catalogue des films

    + +

    Catalogue de l'ensemble des films présents dant la base de données Cinéma, classés par genre, et listés par année de sortie décroissante

    + + getName()); + echo("

    $kind_name

      "); + $kind_id = $kind->getId(); + $movies = $kind->getMoviesList(1); + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + echo("
    "); + } + ?> + + + + + diff --git a/DB/TP2_ServeurWeb/yearDetails.php b/DB/TP2_ServeurWeb/yearDetails.php new file mode 100755 index 0000000..52df02b --- /dev/null +++ b/DB/TP2_ServeurWeb/yearDetails.php @@ -0,0 +1,63 @@ + + + + + + + + + + Liste des films par année de sortie + + + + + +

    + +

    + +

    Films de ce genre:

    + +
      + 0) { + foreach ($movies as $movie) { + movieToLink($movie, TRUE); + } + } else { + echo("
    • Aucun film sorti en $year n'est diponible
    • "); + } + } + + ?> +
    + + + + + + diff --git a/GL/BarrierePeage/BornePéagepasser.eps b/GL/BarrierePeage/BornePéagepasser.eps new file mode 100755 index 0000000..75c6507 --- /dev/null +++ b/GL/BarrierePeage/BornePéagepasser.eps @@ -0,0 +1,1669 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 52 20 543 822 +%%Creator: FreeHEP Graphics2D Driver +%%Producer: org.freehep.graphicsio.ps.PSGraphics2D Revision: 1.20 +%%For: +%%Title: +%%CreationDate: lundi 2 janvier 2006 16 h 22 CET +%%LanguageLevel: 3 +%%EndComments +%%BeginProlog +100 dict dup begin + +% +% File: org/freehep/graphicsio.ps/PSProlog.txt +% Author: Charles Loomis +% + +% Redefinitions which save some space in the output file. These are also +% the same as the PDF operators. +/q {gsave} def +/Q {grestore} def + +/n {newpath} def +/m {moveto} def +/l {lineto} def +/c {curveto} def +/h {closepath} def + +/re {4 -2 roll moveto + dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} def + +/f {fill} def +/f* {eofill} def +/F {gsave vg&FC fill grestore} def +/F* {gsave vg&FC eofill grestore} def + +/s {closepath stroke} def +/S {stroke} def + +/b {closepath gsave vg&FC fill grestore + gsave stroke grestore newpath} def +/B {gsave vg&FC fill grestore gsave stroke grestore newpath} def +/b* {closepath gsave vg&FC eofill grestore + gsave stroke grestore newpath} def +/B* {gsave vg&FC eofill grestore gsave stroke grestore newpath} def + +/g {1 array astore /vg&fcolor exch def} def +/G {setgray} def +/k {4 array astore /vg&fcolor exch def} def +/K {setcmykcolor} def +/rg {3 array astore /vg&fcolor exch def} def +/RG {setrgbcolor} def + +% Initialize the fill color. +0 0 0 rg + +/vg&FC {mark vg&fcolor aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/vg&DFC {/vg&fcolor exch def} def + +/vg&C {mark exch aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/w {setlinewidth} def +/j {setlinejoin} def +/J {setlinecap} def +/M {setmiterlimit} def +/d {setdash} def +/i {setflat} def + +/W {clip} def +/W* {eoclip} def + +% Setup the default graphics state. +% (black; 1 pt. linewidth; miter join; butt-ends; solid) +/defaultGraphicsState {0 g 1 w 0 j 0 J [] 0 d} def + +% Emulation of the rectangle operators for PostScript implementations +% which do not implement all Level 2 features. This is an INCOMPLETE +% emulation; only the "x y width height rect..." form is emulated. +/*rf {gsave newpath re fill grestore} def +/*rs {gsave newpath re stroke grestore} def +/*rc {newpath re clip} def +/rf /rectfill where {pop /rectfill}{/*rf} ifelse load def +/rs /rectstroke where {pop /rectstroke}{/*rs} ifelse load def +/rc /rectclip where {pop /rectclip}{/*rc} ifelse load def + +% Emulation of the selectfont operator. This includes a 20% increase in +% the fontsize which is necessary to get sizes similar to the Java fonts. +/*sf {exch findfont exch + dup type /arraytype eq {makefont}{scalefont} ifelse setfont} bind def +/sf /selectfont where {pop {1.2 mul selectfont}}{{1.2 mul *sf}} ifelse def + +% Special version of stroke which allows the dash pattern to continue +% across path segments. (This may be needed for PostScript although +% modern printers seem to do this correctly.) +/vg&stroke { + currentdash pop length 0 eq + {stroke} + { + currentdash /vg&doffset exch def pop + flattenpath + {m vg&resetdash} + {2 copy + currentpoint + 3 -1 roll sub dup mul + 3 1 roll sub dup mul + add sqrt + 3 1 roll l + currentdash 3 -1 roll add setdash} + {} + {h vg&resetdash} + pathforall + stroke + vg&resetdash + } ifelse +} def +/vg&resetdash {currentdash pop vg&doffset setdash} def + +% Initialize variables for safety. +/delta 0 def +/xv 0 def /yv 0 def /width 0 def /height 0 def + +% Initialize to portrait INTERNATIONAL (Letter-height, A4-width) page. +/pw 595 def /ph 791 def /po true def /ftp false def + +% Initialize margins to 20 points. +/ml 20 def /mr 20 def /mt 20 def /mb 20 def + +% Temporary matrices. +/smatrix 0 def /nmatrix 0 def + +% set page size (usage: setpagesize) +/setpagesize {/ph exch def /pw exch def} def + +% set page orientation (usage: portrait or landscape) +/portrait {/po true def} def +/landscape {/po false def} def + +% force natural size for image (usage: naturalsize) +/naturalsize {/ftp false def} def + +% resize image to fill page (usage: fittopage) +/fittopage {/ftp true def} def + +% set margins of the page (usage: setmargins) +/setmargins {/mr exch def /mt exch def /mb exch def /ml exch def} def + +% set the graphic's size (usage: setsize) +/setsize {/gh exch def /gw exch def} def + +% set the graphic's origin (usage: setorigin) +/setorigin {/gy exch def /gx exch def} def + +% calculate image center +/imagecenter {pw ml sub mr sub 2 div ml add + ph mt sub mb sub 2 div mb add} def + +% calculate the necessary scaling +/imagescale {po {gw}{gh} ifelse pw ml sub mr sub div + po {gh}{gw} ifelse ph mt sub mb sub div + 2 copy lt {exch} if pop + ftp not {1 2 copy lt {exch} if pop} if + 1 exch div /sfactor exch def + /gw gw sfactor mul def /gh gh sfactor mul def} def + +% calculate image origin +/imageorigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div po {add}{sub} ifelse} def + +% calculate the clipping origin +/cliporigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub floor + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div sub floor} def + +% Set the clipping region to the bounding box. +/cliptobounds {cliporigin po {gw}{gh} ifelse 1 add + po {gh}{gw} ifelse 1 add rc} def + +% set the base transformation matrix (usage: setbasematrix) +/setbasematrix {imageorigin translate + po {0}{90} ifelse rotate + sfactor sfactor neg scale + /defaultmatrix matrix currentmatrix def} def + +% The lower-right bias in drawing 1 pt. wide lines. +/bias {q 0.5 0.5 translate} def +/unbias {Q} def + +% Draw a line. (x0 y0 x1 y1 line) +/L {bias n m l S unbias} def + +% Polyline primitive. +/polyline {n m 1 exch 1 exch + {pop currentfile token pop currentfile token pop l} for + } def + +% Draw a polyline (n x0 y0 OPL x1 y1 x2 y2 ... ... xn yn) +/OPL {bias polyline S unbias} def + +% Draw a closed polyline (n x0 y0 CPL x1 y1 x2 y2 ... ... xn yn) +/CPL {bias polyline s unbias} def + +% Draw a filled polyline (n x0 y0 FPL x1 y1 x2 y2 ... ... xn yn) +/FPL {polyline h f*} def + +% Draw an oval. (x y w h OVL) +/OVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width currentlinewidth sub 2 div + height currentlinewidth sub 2 div neg + scale n 0 0 1 5 -2 roll arc + smatrix setmatrix S} def + +% Draw a filled oval. (x y w h FOVL) +/FOVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width 2 div + height 2 div neg + scale n 0 0 m 0 0 1 5 -2 roll arc + h smatrix setmatrix f} def + +% Draw a rounded rectangle. (x y w h arcwidth archeight RREC) +/RREC {matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + s} def + +% Draw a filled rounded rectangle. (x y w h arcwidth archeight FRREC) +/FRREC{matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + h f} def + +% Draw a string. (string x y STR) +/STR {q m 1 -1 scale recshow Q} def + +% Define basic plot symbols. +/xys {/siz exch def /yv exch def /xv exch def} def +/hline {xys n xv siz 2. div sub yv m siz 0 rlineto S} def +/vline {xys n xv yv siz 2. div sub m 0 siz rlineto S} def +/plus {xys n xv yv siz 2. div sub m 0 siz rlineto + xv siz 2. div sub yv m siz 0 rlineto S} def +/dot {n 2. div 0 360 arc s} def +/fdot {n 2. div 0 360 arc h f} def +/box {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rs} def +/fbox {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rf} def +/tridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto s} def +/ftridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto h f} def + +% Symbols defined in terms of the others. +/star {3 copy cross plus} def +/cross {xys q xv yv translate 45 rotate 0 0 siz plus Q} def +/diamond {xys q xv yv translate 45 rotate 0 0 siz box Q} def +/fdiamond {xys q xv yv translate 45 rotate 0 0 siz fbox Q} def +/triup {xys q xv yv translate 180 rotate 0 0 siz tridn Q} def +/ftriup {xys q xv yv translate 180 rotate 0 0 siz ftridn Q} def + +% Define the composite fonts used to print Unicode strings. +% Undefine particular values in an encoding array. +/vg&undef { {exch dup 3 -1 roll /.notdef put} forall } def +/vg&redef { {3 -1 roll dup 4 2 roll put} forall } def + +% usage: key encoding basefontname vg&newbasefont font +/vg&newbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + currentdict + end +definefont +} def + +% usage: key encoding basefontname vg&newskewedbasefont font +/vg&newskewedbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + exch FontMatrix exch matrix concatmatrix /FontMatrix exch def + currentdict + end +definefont +} def + +% usage: basekey suffix vg&nconcat name +/vg&nconcat { + 2 {dup length string cvs exch} repeat + dup length 3 -1 roll dup length 3 -1 roll add string + dup 0 4 -1 roll dup length 5 1 roll putinterval + dup 4 -2 roll exch putinterval cvn +} def + +%usage: fontname vg&skewmatrix matrix +/vg&skewmatrix { +findfont dup /FontInfo known + { + /FontInfo get dup /ItalicAngle known + { + [ 1 0 4 -1 roll /ItalicAngle get neg dup sin exch cos div 1 0 0 ] + } + {pop matrix} ifelse + } + {pop matrix} ifelse +} def + +% usage: newfontname basefontname vg&newcompositefont -- +/vg&newcompositefont { +/vg&fstyle exch def +/vg&bfont exch def +/vg&fname exch def +<< +/FontStyleBits vg&fstyle +/FontType 0 +/FontMatrix matrix +/FontName vg&fname +/FMapType 2 +/Encoding [ 0 1 255 {pop 6} for ] + dup 16#00 0 put % Latin + dup 16#03 1 put % Greek + dup 16#20 2 put % Punctuation + dup 16#21 3 put % Arrows + dup 16#22 4 put % MathOps + dup 16#27 5 put % Dingbats + +/FDepVector [ +vg&bfont /-UC-Latin vg&nconcat UCLatinEncoding +vg&bfont vg&newbasefont + +vg&bfont vg&skewmatrix +vg&bfont /-UC-Greek vg&nconcat UCGreekEncoding +/Symbol vg&newskewedbasefont + +vg&bfont /-UC-Punctuation vg&nconcat UCPunctuationEncoding +vg&bfont vg&newbasefont + +/Arrows-UC findfont +/MathOps-UC findfont +/Dingbats-UC findfont +/Undefined-UC findfont ] +>> +vg&fname exch definefont pop +} def + +% Null encoding vector (all elements set to .notdef) +/NullEncoding [ 256 {/.notdef} repeat ] def + +% Unicode Latin encoding (unicode codes \u0000-\u00ff) +/UCLatinEncoding + ISOLatin1Encoding dup length array copy + dup 16#60 /grave put + [ 16#90 16#91 16#92 16#93 16#94 16#95 16#96 + 16#97 16#98 16#9a 16#9b 16#9d 16#9e 16#9f + ] vg&undef + def + +% Unicode Greek encoding (unicode codes \u0370-\u03ff) +/UCGreekEncoding + NullEncoding dup length array copy + << 16#91 /Alpha 16#92 /Beta 16#93 /Gamma 16#94 /Delta + 16#95 /Epsilon 16#96 /Zeta 16#97 /Eta 16#98 /Theta + 16#99 /Iota 16#9a /Kappa 16#9b /Lambda 16#9c /Mu + 16#9d /Nu 16#9e /Xi 16#9f /Omicron 16#a0 /Pi + 16#a1 /Rho 16#a3 /Sigma 16#a4 /Tau 16#a5 /Upsilon + 16#a6 /Phi 16#a7 /Chi 16#a8 /Psi 16#a9 /Omega + 16#b1 /alpha 16#b2 /beta 16#b3 /gamma 16#b4 /delta + 16#b5 /epsilon 16#b6 /zeta 16#b7 /eta 16#b8 /theta + 16#b9 /iota 16#ba /kappa 16#bb /lambda 16#bc /mu + 16#bd /nu 16#be /xi 16#bf /omicron 16#c0 /pi + 16#c1 /rho 16#c2 /sigma1 16#c3 /sigma 16#c4 /tau + 16#c5 /upsilon 16#c6 /phi1 16#c7 /chi 16#c8 /psi + 16#c9 /omega 16#7e /semicolon 16#87 /dotmath 16#d1 /theta1 + 16#d2 /Upsilon1 16#d5 /phi 16#d6 /omega1 + >> vg&redef + def + +% Unicode punctuation encoding (unicode codes \u2000-\u206f) +/UCPunctuationEncoding + NullEncoding dup length array copy + << 16#10 /hyphen 16#11 /hyphen 16#12 /endash + 16#13 /emdash 16#18 /quoteleft 16#19 /quoteright + 16#1a /quotesinglbase 16#1b /quotesingle 16#1c /quotedblleft + 16#1d /quotedblright 16#1e /quotedblbase 16#1f /quotedbl + 16#20 /dagger 16#21 /daggerdbl 16#22 /bullet + 16#24 /period 16#26 /ellipsis 16#27 /periodcentered + 16#30 /perthousand 16#44 /fraction + 16#70 /zerosuperior 16#74 /foursuperior 16#75 /fivesuperior + 16#76 /sixsuperior 16#77 /sevensuperior 16#78 /eightsuperior + 16#79 /ninesuperior 16#7b /hyphensuperior 16#7d /parenleftsuperior + 16#7e /parenrightsuperior + 16#80 /zeroinferior 16#84 /fourinferior 16#85 /fiveinferior + 16#81 /oneinferior 16#82 /twoinferior 16#83 /threeinferior + 16#86 /sixinferior 16#87 /seveninferior 16#88 /eightinferior + 16#89 /nineinferior 16#8b /hypheninferior 16#8d /parenleftinferior + 16#8e /parenrightinferior + >> vg&redef + def + +% Unicode mathematical operators encoding (unicode codes \u2200-\u22ff) +/UCMathOpsEncoding + NullEncoding dup length array copy + << 16#00 /universal 16#02 /partialdiff 16#03 /existential + 16#05 /emptyset 16#06 /Delta 16#07 /gradient + 16#08 /element 16#09 /notelement 16#0b /suchthat + 16#0f /product 16#11 /summation 16#12 /minus + 16#15 /fraction 16#17 /asteriskmath 16#19 /bullet + 16#1a /radical 16#1d /proportional 16#1e /infinity + 16#20 /angle 16#23 /bar 16#27 /logicaland + 16#28 /logicalor 16#29 /intersection 16#2a /union + 16#2b /integral 16#34 /therefore 16#36 /colon + 16#3c /similar 16#45 /congruent 16#48 /approxequal + 16#60 /notequal 16#61 /equivalence 16#64 /lessequal + 16#65 /greaterequal 16#82 /propersubset 16#83 /propersuperset + 16#86 /reflexsubset 16#87 /reflexsuperset 16#95 /circleplus + 16#97 /circlemultiply 16#a5 /perpendicular 16#03 /existential + 16#c0 /logicaland 16#c1 /logicalor 16#c2 /intersection + 16#c3 /union 16#c4 /diamond 16#c5 /dotmath + >> vg&redef + def + +% Unicode arrows encoding (unicode codes \u2190-\u21ff) +% Also includes those "Letterlike" unicode characters +% which are available in the symbol font. (unicode codes \u2100-\u214f) +/UCArrowsEncoding + NullEncoding dup length array copy + << 16#11 /Ifraktur 16#1c /Rfraktur 16#22 /trademarkserif + 16#35 /aleph + 16#90 /arrowleft 16#91 /arrowup 16#92 /arrowright + 16#93 /arrowdown 16#94 /arrowboth 16#d0 /arrowdblleft + 16#d1 /arrowdblup 16#d2 /arrowdblright 16#d3 /arrowdbldown + 16#d4 /arrowdblboth + >> vg&redef + def + +/ZapfDingbats findfont /Encoding get +dup length array copy /UCDingbatsEncoding exch def +16#20 1 16#7f { + dup 16#20 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +16#a0 1 16#ff { + dup 16#40 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +UCDingbatsEncoding [ 16#c0 1 16#ff {} for ] vg&undef +[ 16#00 16#05 16#0a 16#0b 16#28 16#4c 16#4e 16#53 16#54 16#55 16#57 16#5f + 16#60 16#68 16#69 16#6a 16#6b 16#6c 16#6d 16#6e 16#6f 16#70 16#71 16#72 + 16#73 16#74 16#75 16#95 16#96 16#97 16#b0 16#bf +] vg&undef pop + +% Define the base fonts which don't change. +/Undefined-UC NullEncoding /Helvetica vg&newbasefont pop +/MathOps-UC UCMathOpsEncoding /Symbol vg&newbasefont pop +/Arrows-UC UCArrowsEncoding /Symbol vg&newbasefont pop +/Dingbats-UC UCDingbatsEncoding /ZapfDingbats vg&newbasefont pop + +% Make the SansSerif composite fonts. +/SansSerif /Helvetica 16#00 vg&newcompositefont +/SansSerif-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/SansSerif-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/SansSerif-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Serif composite fonts. +/Serif /Times-Roman 16#00 vg&newcompositefont +/Serif-Bold /Times-Bold 16#01 vg&newcompositefont +/Serif-Italic /Times-Italic 16#02 vg&newcompositefont +/Serif-BoldItalic /Times-BoldItalic 16#03 vg&newcompositefont + +% Make the Monospaced composite fonts. +/Monospaced /Courier 16#00 vg&newcompositefont +/Monospaced-Bold /Courier-Bold 16#01 vg&newcompositefont +/Monospaced-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Monospaced-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + +% Make the Dialog composite fonts. +/Dialog /Helvetica 16#00 vg&newcompositefont +/Dialog-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/Dialog-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/Dialog-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the DialogInput composite fonts. +/DialogInput /Helvetica 16#00 vg&newcompositefont +/DialogInput-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/DialogInput-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/DialogInput-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Typewriter composite fonts (JDK 1.1 only). +/Typewriter /Courier 16#00 vg&newcompositefont +/Typewriter-Bold /Courier-Bold 16#01 vg&newcompositefont +/Typewriter-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Typewriter-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + + +/cfontH { + dup /fontsize exch def /SansSerif exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHB { + dup /fontsize exch def /SansSerif-Bold exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHI { + dup /fontsize exch def /SansSerif-Italic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHBI { + dup /fontsize exch def /SansSerif-BoldItalic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def + +/cfontT { + dup /fontsize exch def /Serif exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTB { + dup /fontsize exch def /Serif-Bold exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTI { + dup /fontsize exch def /Serif-Italic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTBI { + dup /fontsize exch def /Serif-BoldItalic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def + +/cfontC { + dup /fontsize exch def /Typewriter exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCB { + dup /fontsize exch def /Typewriter-Bold exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCI { + dup /fontsize exch def /Typewriter-Italic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCBI { + dup /fontsize exch def /Typewriter-BoldItalic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def + +% Darken or lighten the current color. +/darken {0.7 exch exp 3 copy + q 4 -1 roll vg&C + currentrgbcolor 3 {4 -2 roll mul} repeat + 3 array astore Q} def + +/displayColorMap +<< /Cr [1.00 0.00 0.00] /Cg [0.00 1.00 0.00] + /Cb [0.00 0.00 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.00 0.00] /CGg [0.00 1.00 0.00] + /CGb [0.00 0.00 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.00 0.00] /CIg [0.00 1.00 0.00] + /CIb [0.00 0.00 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/printColorMap +<< /Cr [1.00 0.33 0.33] /Cg [0.33 1.00 0.33] + /Cb [0.33 0.33 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.33 0.33] /CGg [0.33 1.00 0.33] + /CGb [0.33 0.33 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.33 0.33] /CIg [0.33 1.00 0.33] + /CIb [0.33 0.33 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/grayColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [0.75] /CGg [1 ] + /CGb [0.50] /CGc [0.75] + /CGm [0.50] /CGy [1 ] + /CGo [0.75] /CGp [1 ] + /CGw [0 ] /CGgrl [0.25] + /CGgr [0.50] /CGgrd [0.75] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +/bwColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [1 ] /CGg [1 ] + /CGb [1 ] /CGc [1 ] + /CGm [1 ] /CGy [1 ] + /CGo [1 ] /CGp [1 ] + /CGw [0 ] /CGgrl [1 ] + /CGgr [1 ] /CGgrd [1 ] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +% +% The following routines handle the alignment of and printing of +% tagged strings. +% + +% Predefine the bounding box values. +/bbllx 0 def /bblly 0 def /bburx 0 def /bbury 0 def + +% This routine pops the first unicode character off of a string and returns +% the remainder of the string, the character code of first character, +% and a "true" if the string was non-zero length. +% popfirst +% popfirst +/popfirst { + dup length 1 gt + {dup 0 get /vg&fbyte exch def + dup 1 get /vg&cbyte exch def + dup length 2 sub 2 exch getinterval true} + {pop false} ifelse +} def + +% This routine shows a single unicode character given the font and +% character codes. +% unicharshow -- +/unicharshow { + 2 string + dup 0 5 -1 roll put + dup 1 4 -1 roll put + internalshow +} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and showing the string for recshow. +% internalshow -- +/internalshow {show} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and stroking various ornaments. +% internalstroke -- +/internalstroke {S} def + +% Sets up internalshow to use the null device to determine string size. +% -- nullinternalshow -- +/nullinternalshow {/internalshow {false charpath flattenpath + pathbbox updatebbox} def} def + +% Sets up internalstroke to use the null device to determine string size. +% -- nullinternalstroke -- +/nullinternalstroke { + /internalstroke {flattenpath pathbbox updatebbox} def} def + +% This routine tests to see if the character code matches the first +% character of a string. +% testchar +/testchar {exch dup 3 -1 roll 0 get eq} def + +% Raise the text baseline for superscripts. +% -- raise -- +/raise { + 0 fontsize 2 div rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-raise the text baseline for superscripts. +% -- unraise -- +/unraise { + /fontsize fontsize 1.5 mul def + 0 fontsize 2 div neg rmoveto +} def + +% Lower the text baseline for subscripts. +% -- lower -- +/lower { + 0 fontsize 3 div neg rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-lower the text baseline for subscripts. +% -- unlower -- +/unlower { + /fontsize fontsize 1.5 mul def + 0 fontsize 3 div rmoveto +} def + +% Compare the top two elements on the stack and leave only the +% larger one. +/maxval {2 copy gt {pop} {exch pop} ifelse} def + +% Tokenize a string. Do not use the usual PostScript token because +% parentheses will not be interpreted correctly because of rescanning +% of the string. +/vg&token {/vg&string exch def /vg&index -1 def /vg&level 0 def +0 2 vg&string length 2 sub { + dup dup 1 add exch vg&string exch get 8 bitshift vg&string 3 -1 roll get or + dup 16#f0fe eq {pop 1}{16#f0ff eq {-1}{0} ifelse} ifelse + /vg&level exch vg&level add def + vg&level 0 eq {/vg&index exch def exit} if pop +} for +vg&index 0 ge { + vg&string vg&index 2 add dup vg&string length exch sub getinterval + vg&index 2 gt {vg&string 2 vg&index 2 sub getinterval}{()} ifelse + true} +{false} ifelse +} bind def + +% Recursively show an unicode string. +% recshow -- +/recshow { + popfirst + { + % Test to see if this is a string attribute. + vg&fbyte 16#f0 and 16#e0 eq + { + q + + % Font style. + currentfont dup /FontStyleBits known {/FontStyleBits get}{pop 0} ifelse + vg&cbyte or vg&fontstyles exch get fontsize exch exec + + vg&token pop recshow currentpoint Q m recshow + } + { + vg&fbyte 16#F8 and 16#F0 eq { + + % Superscript and/or subscript. + vg&cbyte 16#00 eq { + vg&token pop exch vg&token pop 3 -1 roll + q raise recshow unraise currentpoint pop Q exch + q lower recshow unlower currentpoint pop Q + maxval currentpoint exch pop m recshow } if + + % Strikeout. + vg&cbyte 16#01 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll fontsize 3 div add moveto + fontsize 3 div add lineto internalstroke Q + recshow} if + + % Underline. + vg&cbyte 16#02 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dashed underline. + vg&cbyte 16#03 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J [ vg&uthick 5 mul vg&uthick 2 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dotted underline. + vg&cbyte 16#04 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 1 J [ 0 vg&uthick 3 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Thick underline. + vg&cbyte 16#05 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Gray thick underline. + vg&cbyte 16#06 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w 0.5 setgray + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Overbar. + vg&cbyte 16#07 eq { + vg&token pop dup stringsize relative 4 1 roll pop pop exch + 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + vg&uoffset neg add dup currentpoint pop exch m l internalstroke Q + recshow} if + } + { + vg&fbyte vg&cbyte unicharshow recshow + } ifelse + } ifelse + } if +} def + +% Get the underline position and thickness from the current font. +/vg&underline { + +currentfont dup /FontType get 0 eq {/FDepVector get 0 get} if +dup dup /FontInfo known { + /FontInfo get dup + dup /UnderlinePosition known { + /UnderlinePosition get /vg&uoffset exch def + } + { + pop /vg&uoffset 0 def + } ifelse + dup /UnderlineThickness known { + /UnderlineThickness get /vg&uthick exch def + } + { + pop /vg&uthick 0 def + } ifelse +} +{ + pop /vg&uoffset 0 def /vg&uthick 0 def +} ifelse +/FontMatrix get +currentfont dup /FontType get 0 eq +{/FontMatrix get matrix concatmatrix}{pop} ifelse +dup 0 vg&uoffset 3 -1 roll transform /vg&uoffset exch def pop +0 vg&uthick 3 -1 roll transform /vg&uthick exch def pop +} def + +% Make a frame with the coordinates on the stack. +% frame -- +/frame {4 copy m 3 1 roll exch l 4 -2 roll l l h} def + +% Resets the accumulated bounding box to a degenerate box at the +% current point. +% -- resetbbox -- +/resetbbox { + currentpoint 2 copy + /bbury exch def + /bburx exch def + /bblly exch def + /bbllx exch def +} def + +% Update the accumulated bounding box. +% updatebbox -- +/updatebbox { + dup bbury gt {/bbury exch def} {pop} ifelse + dup bburx gt {/bburx exch def} {pop} ifelse + dup bblly lt {/bblly exch def} {pop} ifelse + dup bbllx lt {/bbllx exch def} {pop} ifelse +} def + +% Set the bounding box to the values on the stack. +% updatebbox -- +/restorebbox { + /bbury exch def /bburx exch def /bblly exch def /bbllx exch def +} def + +% Push the accumulated bounding box onto the stack. +% -- pushbbox +/pushbbox {bbllx bblly bburx bbury} def + +% Make the relative bounding box relative to the currentpoint. +% inflate +/inflate { + 2 {fontsize 0.2 mul add 4 1 roll} repeat + 2 {fontsize 0.2 mul sub 4 1 roll} repeat +} def + +% Make the relative bounding box relative to the currentpoint. +% relative +/relative { + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll +} def + +% Returns the size of a string appropriate for recshow. +% stringsize +/stringsize { + pushbbox /internalshow load /internalstroke load 7 -1 roll + q + nulldevice 0 0 m + nullinternalshow nullinternalstroke + resetbbox + recshow + /internalstroke exch def /internalshow exch def + pushbbox 8 -4 roll restorebbox + Q +} def + +% Calculate values for string positioning. +/calcval {4 copy + 3 -1 roll sub /widy exch def sub neg /widx exch def + pop pop /dy exch def /dx exch def} def + +% Utilities to position a string. +% First letter (U=upper, C=center, B=baseline, L=lower) +% Second letter (L=left, C=center, R=right) +/align [ +{calcval dx neg widy dy add neg rmoveto} % UL +{calcval dx neg widy 2 div dy add neg rmoveto} % CL +{calcval dx neg 0 rmoveto} % BL +{calcval dx neg dy neg rmoveto} % LL +{calcval widx dx add neg widy dy add neg rmoveto} % UR +{calcval widx dx add neg widy 2 div dy add neg rmoveto} % CR +{calcval widx dx add neg 0 rmoveto} % BR +{calcval widx dx add neg dy neg rmoveto} % LR +{calcval widx 2 div dx add neg widy dy add neg rmoveto} % UC +{calcval widx 2 div dx add neg widy 2 div dy add neg rmoveto} % CC +{calcval widx 2 div dx add neg 0 rmoveto} % BC +{calcval widx 2 div dx add neg dy neg rmoveto} % LC +] def + +/vg&str {m q 1 -1 scale dup stringsize 4 copy align 11 -1 roll get exec + q inflate relative frame exch exec Q recshow Q} def + +end /procDict exch def +%%EndProlog + +%%BeginSetup +save +procDict begin +printColorMap begin +595 842 setpagesize +20 20 20 20 setmargins +0 0 setorigin +623 380 setsize +fittopage +landscape +imagescale +cliptobounds +setbasematrix +/Helvetica 10 sf +defaultGraphicsState +%%EndSetup + +0.0 0.0 0.0 RG +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +1.0 w +2 J +0 j +10.0 M +[ ] 0.0 d +1.0 1.0 1.0 RG +0.0 0.0 623.0 380.0 rf +0.0 0.0 0.0 RG +q +0 0 623 380 rc +q +1.0 1.0 1.0 RG +0.0 0.0 623.0 380.0 rf +0.0 0.0 623.0 380.0 rc +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] concat +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +newpath +30.0 -59.0 m +653.0 -59.0 l +653.0 321.0 l +30.0 321.0 l +30.0 -59.0 l +h +f +0.501961 0.501961 0.501961 RG +newpath +40.0 -49.0 m +643.0 -49.0 l +643.0 290.0 l +40.0 290.0 l +40.0 -49.0 l +h +S +[ 1.0 0.0 0.0 1.0 40.0 -48.0 ] concat +1.0 1.0 1.0 RG +newpath +126.5332 0.5 m +126.5332 10.5 l +118.5332 18.5 l +0.5 18.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +126.5332 0.5 m +126.5332 10.5 l +118.5332 18.5 l +0.5 18.5 l +0.5 0.5 l +h +S +0.501961 0.501961 0.501961 RG +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 2.0 ] concat +0.0 0.0 0.0 RG +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000P\000\351\000a\000g\000e\000:\000:\000p\000a\000s\000s\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 10.0 11.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 70.0 40.0 ] concat +1.0 1.0 0.0 RG +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 70.0 l +0.0 70.0 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 70.0 l +0.0 70.0 l +h +S +2 J +10.0 M +10.0 21.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000M\000A\000S\000S\000E\000 \000N\000i\000c\000o\000l\000a\000s) show +Q +10.0 35.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000L\000I\000M\000I\000N\000 \000T\000h\000o\000m\000a\000s) show +Q +10.0 49.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0002\000A\000 \000i\000n\000f\000o\000 \000T\000P\0003) show +Q +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 70.0 130.0 ] concat +1.0 1.0 0.0 RG +newpath +0.0 0.0 m +175.5425 0.0 l +185.5425 10.0 l +175.5425 10.0 l +175.5425 0.0 l +185.5425 10.0 l +185.5425 132.0 l +0.0 132.0 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 0.0 m +175.5425 0.0 l +185.5425 10.0 l +175.5425 10.0 l +175.5425 0.0 l +185.5425 10.0 l +185.5425 132.0 l +0.0 132.0 l +h +S +2 J +10.0 M +10.0 21.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000V\000e\000r\000s\000i\000o\000n\000 \0000\000.\0001) show +Q +10.0 35.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \0000\0004\000/\0001\0001\000/\0002\0000\0000\0005) show +Q +10.0 49.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000\351\000b\000a\000u\000c\000h\000e) show +Q +10.0 63.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000i\000l\000l\000u\000s\000t\000r\000e\000 \000u\000n\000 \000p\000a\000s\000s\000a\000g\000e\000 \000d\000e) show +Q +10.0 77.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000o\000r\000n\000e\000 \000p\000a\000r\000 \000u\000n\000 \000u\000s\000a\000g\000e\000r) show +Q +10.0 91.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000T\000o\000u\000t\000e\000 \000m\000\351\000t\000h\000o\000d\000e\000 \000a\000j\000o\000u\000t\000\351\000e\000 \000i\000c\000i) show +Q +10.0 105.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000d\000o\000i\000t\000 \000\352\000t\000r\000e\000 \000a\000j\000o\000u\000t\000\351\000e\000 \000d\000a\000n\000s\000 \000l\000a\000 \000c\000l\000a\000s\000s\000e) show +Q +10.0 119.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000P\000\351\000a\000g\000e) show +Q +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 330.0 60.0 ] concat +1.0 1.0 1.0 RG +newpath +0.0 19.5 m +0.0 19.5 l +0.0 30.269552 5.102573 39.0 11.396917 39.0 c +139.561982 39.0 l +145.856326 39.0 150.9589 30.269552 150.9589 19.5 c +150.9589 19.5 l +150.9589 8.730447 145.856326 0.0 139.561982 0.0 c +11.396917 0.0 l +5.102573 0.0 0.0 8.730447 0.0 19.5 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 19.5 m +0.0 19.5 l +0.0 30.269552 5.102573 39.0 11.396917 39.0 c +139.561982 39.0 l +145.856326 39.0 150.9589 30.269552 150.9589 19.5 c +150.9589 19.5 l +150.9589 8.730447 145.856326 0.0 139.561982 0.0 c +11.396917 0.0 l +5.102573 0.0 0.0 8.730447 0.0 19.5 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 26.2539 9.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000A\000t\000t\000e\000n\000d\000r\000e\000 \000p\000a\000i\000e\000m\000e\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 326.2539 128.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 300.0 119.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 320.0 160.0 ] concat +1.0 1.0 1.0 RG +newpath +0.0 19.5 m +0.0 19.5 l +0.0 30.269552 7.841909 39.0 17.515394 39.0 c +215.023205 39.0 l +224.696690 39.0 232.5386 30.269552 232.5386 19.5 c +232.5386 19.5 l +232.5386 8.730447 224.696690 0.0 215.023205 0.0 c +17.515394 0.0 l +7.841909 0.0 0.0 8.730447 0.0 19.5 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 19.5 m +0.0 19.5 l +0.0 30.269552 7.841909 39.0 17.515394 39.0 c +215.023205 39.0 l +224.696690 39.0 232.5386 30.269552 232.5386 19.5 c +232.5386 19.5 l +232.5386 8.730447 224.696690 0.0 215.023205 0.0 c +17.515394 0.0 l +7.841909 0.0 0.0 8.730447 0.0 19.5 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 38.2009 9.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000A\000t\000t\000e\000n\000d\000r\000e\000 \000l\000a\000 \000s\000o\000r\000t\000i\000e\000 \000d\000u\000 \000v\000\351\000h\000i\000c\000u\000l\000e) show +Q +[ 1.0 0.0 0.0 1.0 328.2009 228.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 290.0 219.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 380.0 0.0 ] concat +newpath +20.0 10.0 m +20.0 15.522847 15.522847 20.0 10.0 20.0 c +4.477152 20.0 0.0 15.522847 0.0 10.0 c +0.0 4.477152 4.477152 0.0 10.0 0.0 c +15.522847 0.0 20.0 4.477152 20.0 10.0 c +h +f +0 J +1.0 M +newpath +20.0 10.0 m +20.0 15.522847 15.522847 20.0 10.0 20.0 c +4.477152 20.0 0.0 15.522847 0.0 10.0 c +0.0 4.477152 4.477152 0.0 10.0 0.0 c +15.522847 0.0 20.0 4.477152 20.0 10.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +390.0 100.0 m +390.0 160.0 l +S +2 J +10.0 M +[ -0.0 -1.0 1.0 0.0 390.0 160.0 ] concat +newpath +10.0 5.0 m +0.0 0.0 l +10.0 -5.0 l +S +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 410.0 123.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 380.0 182.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 9.7686 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 380.0 182.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 15.5371 0.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000o\000u\000v\000r\000i\000r\000B\000a\000r\000r\000i\000\350\000r\000e\000A\000v\000a\000l\000\050\000\051) show +Q +[ 1.0 0.0 0.0 1.0 395.5371 182.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 380.0 182.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 289.0303 120.7322 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000p\000a\000i\000e\000m\000e\000n\000t\000P\000e\000r\000c\000u\000\050\000\051) show +Q +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +390.0 20.0 m +390.0 60.0 l +S +2 J +10.0 M +[ -0.0 -1.0 1.0 0.0 390.0 60.0 ] concat +newpath +10.0 5.0 m +0.0 0.0 l +10.0 -5.0 l +S +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 400.0 33.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000[) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 7.5771 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000]) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 11.1543 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000[) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 14.7314 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000 ) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 18.2119 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000]) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 21.7891 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 27.5576 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 33.3262 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 39.0947 0.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000u\000c\000l\000e\000A\000m\000o\000n\000t\000:\000:\000t\000y\000p\000e\000V\000\351\000h\000i\000c\000u\000l\000e\000\050\000\051) show +Q +[ 1.0 0.0 0.0 1.0 409.0947 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 370.0 92.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 189.4331 33.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000P\000\351\000a\000g\000e\000:\000:\000v\000\351\000h\000i\000c\000u\000l\000e\000D\000\351\000t\000e\000c\000t\000\351\000A\000m\000o\000n\000t\000\050\000\051) show +Q +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 410.0 240.0 ] concat +1.0 1.0 1.0 RG +newpath +20.0 10.0 m +20.0 15.522847 15.522847 20.0 10.0 20.0 c +4.477152 20.0 0.0 15.522847 0.0 10.0 c +0.0 4.477152 4.477152 0.0 10.0 0.0 c +15.522847 0.0 20.0 4.477152 20.0 10.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +20.0 10.0 m +20.0 15.522847 15.522847 20.0 10.0 20.0 c +4.477152 20.0 0.0 15.522847 0.0 10.0 c +0.0 4.477152 4.477152 0.0 10.0 0.0 c +15.522847 0.0 20.0 4.477152 20.0 10.0 c +h +S +2 J +10.0 M +newpath +18.0 10.5 m +18.0 14.642135 14.642135 18.0 10.5 18.0 c +6.357864 18.0 3.0 14.642135 3.0 10.5 c +3.0 6.357864 6.357864 3.0 10.5 3.0 c +14.642135 3.0 18.0 6.357864 18.0 10.5 c +h +f +[ 1.0 0.0 0.0 1.0 2.0481 25.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000F\000i\000n) show +Q +[ 1.0 0.0 0.0 1.0 380.0 299.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +420.0 200.0 m +420.0 240.0 l +S +2 J +10.0 M +[ -0.0 -1.0 1.0 0.0 420.0 240.0 ] concat +newpath +10.0 5.0 m +0.0 0.0 l +10.0 -5.0 l +S +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 430.0 213.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 400.0 272.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 9.7686 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000/) show +Q +[ 1.0 0.0 0.0 1.0 400.0 272.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 15.5371 0.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000f\000e\000r\000m\000e\000r\000B\000a\000r\000r\000i\000\350\000r\000e\000A\000v\000a\000l\000\050\000\051) show +Q +[ 1.0 0.0 0.0 1.0 415.5371 272.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 400.0 272.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 301.2241 213.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000\351\000h\000i\000c\000u\000l\000e\000D\000\351\000t\000e\000c\000t\000\351\000A\000v\000a\000l\000\050\000\051) show +Q +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.0 120.5 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 643.0 120.5 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 341.5 -49.0 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 341.5 290.0 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.0 -49.0 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 643.0 -49.0 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.0 290.0 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 643.0 290.0 ] concat +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 118.861328 290.0 ] concat +0.0 12.0 moveto +q 1 -1 scale +/Helvetica findfont 12.0 scalefont setfont +(Created with Poseidon for UML Community Edition. Not for Commercial Use.) show +Q +[ 1.0 0.0 0.0 1.0 -30.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +newpath +0.0 0.0 m +0.0 380.0 l +623.0 380.0 l +623.0 0.0 l +h +W +Q +end end restore showpage + +%%Trailer +%%EOF diff --git a/GL/BarrierePeage/Casdutilisation.eps b/GL/BarrierePeage/Casdutilisation.eps new file mode 100755 index 0000000..f30010a --- /dev/null +++ b/GL/BarrierePeage/Casdutilisation.eps @@ -0,0 +1,2634 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 20 112 575 730 +%%Creator: FreeHEP Graphics2D Driver +%%Producer: org.freehep.graphicsio.ps.PSGraphics2D Revision: 1.20 +%%For: +%%Title: +%%CreationDate: lundi 2 janvier 2006 16 h 09 CET +%%LanguageLevel: 3 +%%EndComments +%%BeginProlog +100 dict dup begin + +% +% File: org/freehep/graphicsio.ps/PSProlog.txt +% Author: Charles Loomis +% + +% Redefinitions which save some space in the output file. These are also +% the same as the PDF operators. +/q {gsave} def +/Q {grestore} def + +/n {newpath} def +/m {moveto} def +/l {lineto} def +/c {curveto} def +/h {closepath} def + +/re {4 -2 roll moveto + dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} def + +/f {fill} def +/f* {eofill} def +/F {gsave vg&FC fill grestore} def +/F* {gsave vg&FC eofill grestore} def + +/s {closepath stroke} def +/S {stroke} def + +/b {closepath gsave vg&FC fill grestore + gsave stroke grestore newpath} def +/B {gsave vg&FC fill grestore gsave stroke grestore newpath} def +/b* {closepath gsave vg&FC eofill grestore + gsave stroke grestore newpath} def +/B* {gsave vg&FC eofill grestore gsave stroke grestore newpath} def + +/g {1 array astore /vg&fcolor exch def} def +/G {setgray} def +/k {4 array astore /vg&fcolor exch def} def +/K {setcmykcolor} def +/rg {3 array astore /vg&fcolor exch def} def +/RG {setrgbcolor} def + +% Initialize the fill color. +0 0 0 rg + +/vg&FC {mark vg&fcolor aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/vg&DFC {/vg&fcolor exch def} def + +/vg&C {mark exch aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/w {setlinewidth} def +/j {setlinejoin} def +/J {setlinecap} def +/M {setmiterlimit} def +/d {setdash} def +/i {setflat} def + +/W {clip} def +/W* {eoclip} def + +% Setup the default graphics state. +% (black; 1 pt. linewidth; miter join; butt-ends; solid) +/defaultGraphicsState {0 g 1 w 0 j 0 J [] 0 d} def + +% Emulation of the rectangle operators for PostScript implementations +% which do not implement all Level 2 features. This is an INCOMPLETE +% emulation; only the "x y width height rect..." form is emulated. +/*rf {gsave newpath re fill grestore} def +/*rs {gsave newpath re stroke grestore} def +/*rc {newpath re clip} def +/rf /rectfill where {pop /rectfill}{/*rf} ifelse load def +/rs /rectstroke where {pop /rectstroke}{/*rs} ifelse load def +/rc /rectclip where {pop /rectclip}{/*rc} ifelse load def + +% Emulation of the selectfont operator. This includes a 20% increase in +% the fontsize which is necessary to get sizes similar to the Java fonts. +/*sf {exch findfont exch + dup type /arraytype eq {makefont}{scalefont} ifelse setfont} bind def +/sf /selectfont where {pop {1.2 mul selectfont}}{{1.2 mul *sf}} ifelse def + +% Special version of stroke which allows the dash pattern to continue +% across path segments. (This may be needed for PostScript although +% modern printers seem to do this correctly.) +/vg&stroke { + currentdash pop length 0 eq + {stroke} + { + currentdash /vg&doffset exch def pop + flattenpath + {m vg&resetdash} + {2 copy + currentpoint + 3 -1 roll sub dup mul + 3 1 roll sub dup mul + add sqrt + 3 1 roll l + currentdash 3 -1 roll add setdash} + {} + {h vg&resetdash} + pathforall + stroke + vg&resetdash + } ifelse +} def +/vg&resetdash {currentdash pop vg&doffset setdash} def + +% Initialize variables for safety. +/delta 0 def +/xv 0 def /yv 0 def /width 0 def /height 0 def + +% Initialize to portrait INTERNATIONAL (Letter-height, A4-width) page. +/pw 595 def /ph 791 def /po true def /ftp false def + +% Initialize margins to 20 points. +/ml 20 def /mr 20 def /mt 20 def /mb 20 def + +% Temporary matrices. +/smatrix 0 def /nmatrix 0 def + +% set page size (usage: setpagesize) +/setpagesize {/ph exch def /pw exch def} def + +% set page orientation (usage: portrait or landscape) +/portrait {/po true def} def +/landscape {/po false def} def + +% force natural size for image (usage: naturalsize) +/naturalsize {/ftp false def} def + +% resize image to fill page (usage: fittopage) +/fittopage {/ftp true def} def + +% set margins of the page (usage: setmargins) +/setmargins {/mr exch def /mt exch def /mb exch def /ml exch def} def + +% set the graphic's size (usage: setsize) +/setsize {/gh exch def /gw exch def} def + +% set the graphic's origin (usage: setorigin) +/setorigin {/gy exch def /gx exch def} def + +% calculate image center +/imagecenter {pw ml sub mr sub 2 div ml add + ph mt sub mb sub 2 div mb add} def + +% calculate the necessary scaling +/imagescale {po {gw}{gh} ifelse pw ml sub mr sub div + po {gh}{gw} ifelse ph mt sub mb sub div + 2 copy lt {exch} if pop + ftp not {1 2 copy lt {exch} if pop} if + 1 exch div /sfactor exch def + /gw gw sfactor mul def /gh gh sfactor mul def} def + +% calculate image origin +/imageorigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div po {add}{sub} ifelse} def + +% calculate the clipping origin +/cliporigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub floor + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div sub floor} def + +% Set the clipping region to the bounding box. +/cliptobounds {cliporigin po {gw}{gh} ifelse 1 add + po {gh}{gw} ifelse 1 add rc} def + +% set the base transformation matrix (usage: setbasematrix) +/setbasematrix {imageorigin translate + po {0}{90} ifelse rotate + sfactor sfactor neg scale + /defaultmatrix matrix currentmatrix def} def + +% The lower-right bias in drawing 1 pt. wide lines. +/bias {q 0.5 0.5 translate} def +/unbias {Q} def + +% Draw a line. (x0 y0 x1 y1 line) +/L {bias n m l S unbias} def + +% Polyline primitive. +/polyline {n m 1 exch 1 exch + {pop currentfile token pop currentfile token pop l} for + } def + +% Draw a polyline (n x0 y0 OPL x1 y1 x2 y2 ... ... xn yn) +/OPL {bias polyline S unbias} def + +% Draw a closed polyline (n x0 y0 CPL x1 y1 x2 y2 ... ... xn yn) +/CPL {bias polyline s unbias} def + +% Draw a filled polyline (n x0 y0 FPL x1 y1 x2 y2 ... ... xn yn) +/FPL {polyline h f*} def + +% Draw an oval. (x y w h OVL) +/OVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width currentlinewidth sub 2 div + height currentlinewidth sub 2 div neg + scale n 0 0 1 5 -2 roll arc + smatrix setmatrix S} def + +% Draw a filled oval. (x y w h FOVL) +/FOVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width 2 div + height 2 div neg + scale n 0 0 m 0 0 1 5 -2 roll arc + h smatrix setmatrix f} def + +% Draw a rounded rectangle. (x y w h arcwidth archeight RREC) +/RREC {matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + s} def + +% Draw a filled rounded rectangle. (x y w h arcwidth archeight FRREC) +/FRREC{matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + h f} def + +% Draw a string. (string x y STR) +/STR {q m 1 -1 scale recshow Q} def + +% Define basic plot symbols. +/xys {/siz exch def /yv exch def /xv exch def} def +/hline {xys n xv siz 2. div sub yv m siz 0 rlineto S} def +/vline {xys n xv yv siz 2. div sub m 0 siz rlineto S} def +/plus {xys n xv yv siz 2. div sub m 0 siz rlineto + xv siz 2. div sub yv m siz 0 rlineto S} def +/dot {n 2. div 0 360 arc s} def +/fdot {n 2. div 0 360 arc h f} def +/box {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rs} def +/fbox {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rf} def +/tridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto s} def +/ftridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto h f} def + +% Symbols defined in terms of the others. +/star {3 copy cross plus} def +/cross {xys q xv yv translate 45 rotate 0 0 siz plus Q} def +/diamond {xys q xv yv translate 45 rotate 0 0 siz box Q} def +/fdiamond {xys q xv yv translate 45 rotate 0 0 siz fbox Q} def +/triup {xys q xv yv translate 180 rotate 0 0 siz tridn Q} def +/ftriup {xys q xv yv translate 180 rotate 0 0 siz ftridn Q} def + +% Define the composite fonts used to print Unicode strings. +% Undefine particular values in an encoding array. +/vg&undef { {exch dup 3 -1 roll /.notdef put} forall } def +/vg&redef { {3 -1 roll dup 4 2 roll put} forall } def + +% usage: key encoding basefontname vg&newbasefont font +/vg&newbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + currentdict + end +definefont +} def + +% usage: key encoding basefontname vg&newskewedbasefont font +/vg&newskewedbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + exch FontMatrix exch matrix concatmatrix /FontMatrix exch def + currentdict + end +definefont +} def + +% usage: basekey suffix vg&nconcat name +/vg&nconcat { + 2 {dup length string cvs exch} repeat + dup length 3 -1 roll dup length 3 -1 roll add string + dup 0 4 -1 roll dup length 5 1 roll putinterval + dup 4 -2 roll exch putinterval cvn +} def + +%usage: fontname vg&skewmatrix matrix +/vg&skewmatrix { +findfont dup /FontInfo known + { + /FontInfo get dup /ItalicAngle known + { + [ 1 0 4 -1 roll /ItalicAngle get neg dup sin exch cos div 1 0 0 ] + } + {pop matrix} ifelse + } + {pop matrix} ifelse +} def + +% usage: newfontname basefontname vg&newcompositefont -- +/vg&newcompositefont { +/vg&fstyle exch def +/vg&bfont exch def +/vg&fname exch def +<< +/FontStyleBits vg&fstyle +/FontType 0 +/FontMatrix matrix +/FontName vg&fname +/FMapType 2 +/Encoding [ 0 1 255 {pop 6} for ] + dup 16#00 0 put % Latin + dup 16#03 1 put % Greek + dup 16#20 2 put % Punctuation + dup 16#21 3 put % Arrows + dup 16#22 4 put % MathOps + dup 16#27 5 put % Dingbats + +/FDepVector [ +vg&bfont /-UC-Latin vg&nconcat UCLatinEncoding +vg&bfont vg&newbasefont + +vg&bfont vg&skewmatrix +vg&bfont /-UC-Greek vg&nconcat UCGreekEncoding +/Symbol vg&newskewedbasefont + +vg&bfont /-UC-Punctuation vg&nconcat UCPunctuationEncoding +vg&bfont vg&newbasefont + +/Arrows-UC findfont +/MathOps-UC findfont +/Dingbats-UC findfont +/Undefined-UC findfont ] +>> +vg&fname exch definefont pop +} def + +% Null encoding vector (all elements set to .notdef) +/NullEncoding [ 256 {/.notdef} repeat ] def + +% Unicode Latin encoding (unicode codes \u0000-\u00ff) +/UCLatinEncoding + ISOLatin1Encoding dup length array copy + dup 16#60 /grave put + [ 16#90 16#91 16#92 16#93 16#94 16#95 16#96 + 16#97 16#98 16#9a 16#9b 16#9d 16#9e 16#9f + ] vg&undef + def + +% Unicode Greek encoding (unicode codes \u0370-\u03ff) +/UCGreekEncoding + NullEncoding dup length array copy + << 16#91 /Alpha 16#92 /Beta 16#93 /Gamma 16#94 /Delta + 16#95 /Epsilon 16#96 /Zeta 16#97 /Eta 16#98 /Theta + 16#99 /Iota 16#9a /Kappa 16#9b /Lambda 16#9c /Mu + 16#9d /Nu 16#9e /Xi 16#9f /Omicron 16#a0 /Pi + 16#a1 /Rho 16#a3 /Sigma 16#a4 /Tau 16#a5 /Upsilon + 16#a6 /Phi 16#a7 /Chi 16#a8 /Psi 16#a9 /Omega + 16#b1 /alpha 16#b2 /beta 16#b3 /gamma 16#b4 /delta + 16#b5 /epsilon 16#b6 /zeta 16#b7 /eta 16#b8 /theta + 16#b9 /iota 16#ba /kappa 16#bb /lambda 16#bc /mu + 16#bd /nu 16#be /xi 16#bf /omicron 16#c0 /pi + 16#c1 /rho 16#c2 /sigma1 16#c3 /sigma 16#c4 /tau + 16#c5 /upsilon 16#c6 /phi1 16#c7 /chi 16#c8 /psi + 16#c9 /omega 16#7e /semicolon 16#87 /dotmath 16#d1 /theta1 + 16#d2 /Upsilon1 16#d5 /phi 16#d6 /omega1 + >> vg&redef + def + +% Unicode punctuation encoding (unicode codes \u2000-\u206f) +/UCPunctuationEncoding + NullEncoding dup length array copy + << 16#10 /hyphen 16#11 /hyphen 16#12 /endash + 16#13 /emdash 16#18 /quoteleft 16#19 /quoteright + 16#1a /quotesinglbase 16#1b /quotesingle 16#1c /quotedblleft + 16#1d /quotedblright 16#1e /quotedblbase 16#1f /quotedbl + 16#20 /dagger 16#21 /daggerdbl 16#22 /bullet + 16#24 /period 16#26 /ellipsis 16#27 /periodcentered + 16#30 /perthousand 16#44 /fraction + 16#70 /zerosuperior 16#74 /foursuperior 16#75 /fivesuperior + 16#76 /sixsuperior 16#77 /sevensuperior 16#78 /eightsuperior + 16#79 /ninesuperior 16#7b /hyphensuperior 16#7d /parenleftsuperior + 16#7e /parenrightsuperior + 16#80 /zeroinferior 16#84 /fourinferior 16#85 /fiveinferior + 16#81 /oneinferior 16#82 /twoinferior 16#83 /threeinferior + 16#86 /sixinferior 16#87 /seveninferior 16#88 /eightinferior + 16#89 /nineinferior 16#8b /hypheninferior 16#8d /parenleftinferior + 16#8e /parenrightinferior + >> vg&redef + def + +% Unicode mathematical operators encoding (unicode codes \u2200-\u22ff) +/UCMathOpsEncoding + NullEncoding dup length array copy + << 16#00 /universal 16#02 /partialdiff 16#03 /existential + 16#05 /emptyset 16#06 /Delta 16#07 /gradient + 16#08 /element 16#09 /notelement 16#0b /suchthat + 16#0f /product 16#11 /summation 16#12 /minus + 16#15 /fraction 16#17 /asteriskmath 16#19 /bullet + 16#1a /radical 16#1d /proportional 16#1e /infinity + 16#20 /angle 16#23 /bar 16#27 /logicaland + 16#28 /logicalor 16#29 /intersection 16#2a /union + 16#2b /integral 16#34 /therefore 16#36 /colon + 16#3c /similar 16#45 /congruent 16#48 /approxequal + 16#60 /notequal 16#61 /equivalence 16#64 /lessequal + 16#65 /greaterequal 16#82 /propersubset 16#83 /propersuperset + 16#86 /reflexsubset 16#87 /reflexsuperset 16#95 /circleplus + 16#97 /circlemultiply 16#a5 /perpendicular 16#03 /existential + 16#c0 /logicaland 16#c1 /logicalor 16#c2 /intersection + 16#c3 /union 16#c4 /diamond 16#c5 /dotmath + >> vg&redef + def + +% Unicode arrows encoding (unicode codes \u2190-\u21ff) +% Also includes those "Letterlike" unicode characters +% which are available in the symbol font. (unicode codes \u2100-\u214f) +/UCArrowsEncoding + NullEncoding dup length array copy + << 16#11 /Ifraktur 16#1c /Rfraktur 16#22 /trademarkserif + 16#35 /aleph + 16#90 /arrowleft 16#91 /arrowup 16#92 /arrowright + 16#93 /arrowdown 16#94 /arrowboth 16#d0 /arrowdblleft + 16#d1 /arrowdblup 16#d2 /arrowdblright 16#d3 /arrowdbldown + 16#d4 /arrowdblboth + >> vg&redef + def + +/ZapfDingbats findfont /Encoding get +dup length array copy /UCDingbatsEncoding exch def +16#20 1 16#7f { + dup 16#20 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +16#a0 1 16#ff { + dup 16#40 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +UCDingbatsEncoding [ 16#c0 1 16#ff {} for ] vg&undef +[ 16#00 16#05 16#0a 16#0b 16#28 16#4c 16#4e 16#53 16#54 16#55 16#57 16#5f + 16#60 16#68 16#69 16#6a 16#6b 16#6c 16#6d 16#6e 16#6f 16#70 16#71 16#72 + 16#73 16#74 16#75 16#95 16#96 16#97 16#b0 16#bf +] vg&undef pop + +% Define the base fonts which don't change. +/Undefined-UC NullEncoding /Helvetica vg&newbasefont pop +/MathOps-UC UCMathOpsEncoding /Symbol vg&newbasefont pop +/Arrows-UC UCArrowsEncoding /Symbol vg&newbasefont pop +/Dingbats-UC UCDingbatsEncoding /ZapfDingbats vg&newbasefont pop + +% Make the SansSerif composite fonts. +/SansSerif /Helvetica 16#00 vg&newcompositefont +/SansSerif-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/SansSerif-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/SansSerif-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Serif composite fonts. +/Serif /Times-Roman 16#00 vg&newcompositefont +/Serif-Bold /Times-Bold 16#01 vg&newcompositefont +/Serif-Italic /Times-Italic 16#02 vg&newcompositefont +/Serif-BoldItalic /Times-BoldItalic 16#03 vg&newcompositefont + +% Make the Monospaced composite fonts. +/Monospaced /Courier 16#00 vg&newcompositefont +/Monospaced-Bold /Courier-Bold 16#01 vg&newcompositefont +/Monospaced-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Monospaced-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + +% Make the Dialog composite fonts. +/Dialog /Helvetica 16#00 vg&newcompositefont +/Dialog-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/Dialog-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/Dialog-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the DialogInput composite fonts. +/DialogInput /Helvetica 16#00 vg&newcompositefont +/DialogInput-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/DialogInput-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/DialogInput-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Typewriter composite fonts (JDK 1.1 only). +/Typewriter /Courier 16#00 vg&newcompositefont +/Typewriter-Bold /Courier-Bold 16#01 vg&newcompositefont +/Typewriter-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Typewriter-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + + +/cfontH { + dup /fontsize exch def /SansSerif exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHB { + dup /fontsize exch def /SansSerif-Bold exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHI { + dup /fontsize exch def /SansSerif-Italic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHBI { + dup /fontsize exch def /SansSerif-BoldItalic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def + +/cfontT { + dup /fontsize exch def /Serif exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTB { + dup /fontsize exch def /Serif-Bold exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTI { + dup /fontsize exch def /Serif-Italic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTBI { + dup /fontsize exch def /Serif-BoldItalic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def + +/cfontC { + dup /fontsize exch def /Typewriter exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCB { + dup /fontsize exch def /Typewriter-Bold exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCI { + dup /fontsize exch def /Typewriter-Italic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCBI { + dup /fontsize exch def /Typewriter-BoldItalic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def + +% Darken or lighten the current color. +/darken {0.7 exch exp 3 copy + q 4 -1 roll vg&C + currentrgbcolor 3 {4 -2 roll mul} repeat + 3 array astore Q} def + +/displayColorMap +<< /Cr [1.00 0.00 0.00] /Cg [0.00 1.00 0.00] + /Cb [0.00 0.00 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.00 0.00] /CGg [0.00 1.00 0.00] + /CGb [0.00 0.00 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.00 0.00] /CIg [0.00 1.00 0.00] + /CIb [0.00 0.00 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/printColorMap +<< /Cr [1.00 0.33 0.33] /Cg [0.33 1.00 0.33] + /Cb [0.33 0.33 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.33 0.33] /CGg [0.33 1.00 0.33] + /CGb [0.33 0.33 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.33 0.33] /CIg [0.33 1.00 0.33] + /CIb [0.33 0.33 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/grayColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [0.75] /CGg [1 ] + /CGb [0.50] /CGc [0.75] + /CGm [0.50] /CGy [1 ] + /CGo [0.75] /CGp [1 ] + /CGw [0 ] /CGgrl [0.25] + /CGgr [0.50] /CGgrd [0.75] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +/bwColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [1 ] /CGg [1 ] + /CGb [1 ] /CGc [1 ] + /CGm [1 ] /CGy [1 ] + /CGo [1 ] /CGp [1 ] + /CGw [0 ] /CGgrl [1 ] + /CGgr [1 ] /CGgrd [1 ] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +% +% The following routines handle the alignment of and printing of +% tagged strings. +% + +% Predefine the bounding box values. +/bbllx 0 def /bblly 0 def /bburx 0 def /bbury 0 def + +% This routine pops the first unicode character off of a string and returns +% the remainder of the string, the character code of first character, +% and a "true" if the string was non-zero length. +% popfirst +% popfirst +/popfirst { + dup length 1 gt + {dup 0 get /vg&fbyte exch def + dup 1 get /vg&cbyte exch def + dup length 2 sub 2 exch getinterval true} + {pop false} ifelse +} def + +% This routine shows a single unicode character given the font and +% character codes. +% unicharshow -- +/unicharshow { + 2 string + dup 0 5 -1 roll put + dup 1 4 -1 roll put + internalshow +} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and showing the string for recshow. +% internalshow -- +/internalshow {show} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and stroking various ornaments. +% internalstroke -- +/internalstroke {S} def + +% Sets up internalshow to use the null device to determine string size. +% -- nullinternalshow -- +/nullinternalshow {/internalshow {false charpath flattenpath + pathbbox updatebbox} def} def + +% Sets up internalstroke to use the null device to determine string size. +% -- nullinternalstroke -- +/nullinternalstroke { + /internalstroke {flattenpath pathbbox updatebbox} def} def + +% This routine tests to see if the character code matches the first +% character of a string. +% testchar +/testchar {exch dup 3 -1 roll 0 get eq} def + +% Raise the text baseline for superscripts. +% -- raise -- +/raise { + 0 fontsize 2 div rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-raise the text baseline for superscripts. +% -- unraise -- +/unraise { + /fontsize fontsize 1.5 mul def + 0 fontsize 2 div neg rmoveto +} def + +% Lower the text baseline for subscripts. +% -- lower -- +/lower { + 0 fontsize 3 div neg rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-lower the text baseline for subscripts. +% -- unlower -- +/unlower { + /fontsize fontsize 1.5 mul def + 0 fontsize 3 div rmoveto +} def + +% Compare the top two elements on the stack and leave only the +% larger one. +/maxval {2 copy gt {pop} {exch pop} ifelse} def + +% Tokenize a string. Do not use the usual PostScript token because +% parentheses will not be interpreted correctly because of rescanning +% of the string. +/vg&token {/vg&string exch def /vg&index -1 def /vg&level 0 def +0 2 vg&string length 2 sub { + dup dup 1 add exch vg&string exch get 8 bitshift vg&string 3 -1 roll get or + dup 16#f0fe eq {pop 1}{16#f0ff eq {-1}{0} ifelse} ifelse + /vg&level exch vg&level add def + vg&level 0 eq {/vg&index exch def exit} if pop +} for +vg&index 0 ge { + vg&string vg&index 2 add dup vg&string length exch sub getinterval + vg&index 2 gt {vg&string 2 vg&index 2 sub getinterval}{()} ifelse + true} +{false} ifelse +} bind def + +% Recursively show an unicode string. +% recshow -- +/recshow { + popfirst + { + % Test to see if this is a string attribute. + vg&fbyte 16#f0 and 16#e0 eq + { + q + + % Font style. + currentfont dup /FontStyleBits known {/FontStyleBits get}{pop 0} ifelse + vg&cbyte or vg&fontstyles exch get fontsize exch exec + + vg&token pop recshow currentpoint Q m recshow + } + { + vg&fbyte 16#F8 and 16#F0 eq { + + % Superscript and/or subscript. + vg&cbyte 16#00 eq { + vg&token pop exch vg&token pop 3 -1 roll + q raise recshow unraise currentpoint pop Q exch + q lower recshow unlower currentpoint pop Q + maxval currentpoint exch pop m recshow } if + + % Strikeout. + vg&cbyte 16#01 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll fontsize 3 div add moveto + fontsize 3 div add lineto internalstroke Q + recshow} if + + % Underline. + vg&cbyte 16#02 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dashed underline. + vg&cbyte 16#03 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J [ vg&uthick 5 mul vg&uthick 2 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dotted underline. + vg&cbyte 16#04 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 1 J [ 0 vg&uthick 3 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Thick underline. + vg&cbyte 16#05 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Gray thick underline. + vg&cbyte 16#06 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w 0.5 setgray + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Overbar. + vg&cbyte 16#07 eq { + vg&token pop dup stringsize relative 4 1 roll pop pop exch + 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + vg&uoffset neg add dup currentpoint pop exch m l internalstroke Q + recshow} if + } + { + vg&fbyte vg&cbyte unicharshow recshow + } ifelse + } ifelse + } if +} def + +% Get the underline position and thickness from the current font. +/vg&underline { + +currentfont dup /FontType get 0 eq {/FDepVector get 0 get} if +dup dup /FontInfo known { + /FontInfo get dup + dup /UnderlinePosition known { + /UnderlinePosition get /vg&uoffset exch def + } + { + pop /vg&uoffset 0 def + } ifelse + dup /UnderlineThickness known { + /UnderlineThickness get /vg&uthick exch def + } + { + pop /vg&uthick 0 def + } ifelse +} +{ + pop /vg&uoffset 0 def /vg&uthick 0 def +} ifelse +/FontMatrix get +currentfont dup /FontType get 0 eq +{/FontMatrix get matrix concatmatrix}{pop} ifelse +dup 0 vg&uoffset 3 -1 roll transform /vg&uoffset exch def pop +0 vg&uthick 3 -1 roll transform /vg&uthick exch def pop +} def + +% Make a frame with the coordinates on the stack. +% frame -- +/frame {4 copy m 3 1 roll exch l 4 -2 roll l l h} def + +% Resets the accumulated bounding box to a degenerate box at the +% current point. +% -- resetbbox -- +/resetbbox { + currentpoint 2 copy + /bbury exch def + /bburx exch def + /bblly exch def + /bbllx exch def +} def + +% Update the accumulated bounding box. +% updatebbox -- +/updatebbox { + dup bbury gt {/bbury exch def} {pop} ifelse + dup bburx gt {/bburx exch def} {pop} ifelse + dup bblly lt {/bblly exch def} {pop} ifelse + dup bbllx lt {/bbllx exch def} {pop} ifelse +} def + +% Set the bounding box to the values on the stack. +% updatebbox -- +/restorebbox { + /bbury exch def /bburx exch def /bblly exch def /bbllx exch def +} def + +% Push the accumulated bounding box onto the stack. +% -- pushbbox +/pushbbox {bbllx bblly bburx bbury} def + +% Make the relative bounding box relative to the currentpoint. +% inflate +/inflate { + 2 {fontsize 0.2 mul add 4 1 roll} repeat + 2 {fontsize 0.2 mul sub 4 1 roll} repeat +} def + +% Make the relative bounding box relative to the currentpoint. +% relative +/relative { + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll +} def + +% Returns the size of a string appropriate for recshow. +% stringsize +/stringsize { + pushbbox /internalshow load /internalstroke load 7 -1 roll + q + nulldevice 0 0 m + nullinternalshow nullinternalstroke + resetbbox + recshow + /internalstroke exch def /internalshow exch def + pushbbox 8 -4 roll restorebbox + Q +} def + +% Calculate values for string positioning. +/calcval {4 copy + 3 -1 roll sub /widy exch def sub neg /widx exch def + pop pop /dy exch def /dx exch def} def + +% Utilities to position a string. +% First letter (U=upper, C=center, B=baseline, L=lower) +% Second letter (L=left, C=center, R=right) +/align [ +{calcval dx neg widy dy add neg rmoveto} % UL +{calcval dx neg widy 2 div dy add neg rmoveto} % CL +{calcval dx neg 0 rmoveto} % BL +{calcval dx neg dy neg rmoveto} % LL +{calcval widx dx add neg widy dy add neg rmoveto} % UR +{calcval widx dx add neg widy 2 div dy add neg rmoveto} % CR +{calcval widx dx add neg 0 rmoveto} % BR +{calcval widx dx add neg dy neg rmoveto} % LR +{calcval widx 2 div dx add neg widy dy add neg rmoveto} % UC +{calcval widx 2 div dx add neg widy 2 div dy add neg rmoveto} % CC +{calcval widx 2 div dx add neg 0 rmoveto} % BC +{calcval widx 2 div dx add neg dy neg rmoveto} % LC +] def + +/vg&str {m q 1 -1 scale dup stringsize 4 copy align 11 -1 roll get exec + q inflate relative frame exch exec Q recshow Q} def + +end /procDict exch def +%%EndProlog + +%%BeginSetup +save +procDict begin +printColorMap begin +595 842 setpagesize +20 20 20 20 setmargins +0 0 setorigin +1099 989 setsize +fittopage +landscape +imagescale +cliptobounds +setbasematrix +/Helvetica 10 sf +defaultGraphicsState +%%EndSetup + +0.0 0.0 0.0 RG +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +1.0 w +2 J +0 j +10.0 M +[ ] 0.0 d +1.0 1.0 1.0 RG +0.0 0.0 1099.0 989.0 rf +0.0 0.0 0.0 RG +q +0 0 1099 989 rc +q +1.0 1.0 1.0 RG +0.0 0.0 1099.0 989.0 rf +0.0 0.0 1099.0 989.0 rc +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] concat +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +newpath +80.0 -188.0 m +1179.0 -188.0 l +1179.0 801.0 l +80.0 801.0 l +80.0 -188.0 l +h +f +0.501961 0.501961 0.501961 RG +newpath +90.0 -178.0 m +1169.0 -178.0 l +1169.0 770.0 l +90.0 770.0 l +90.0 -178.0 l +h +S +[ 1.0 0.0 0.0 1.0 90.0 -178.0 ] concat +1.0 1.0 1.0 RG +newpath +98.7554 0.5 m +98.7554 9.5 l +90.7554 17.5 l +0.5 17.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +98.7554 0.5 m +98.7554 9.5 l +90.7554 17.5 l +0.5 17.5 l +0.5 0.5 l +h +S +0.501961 0.501961 0.501961 RG +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 2.0 ] concat +0.0 0.0 0.0 RG +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000C\000a\000s\000 \000d\000'\000u\000t\000i\000l\000i\000s\000a\000t\000i\000o\000n) show +Q +[ 1.0 0.0 0.0 1.0 10.0 10.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 340.0 60.0 ] concat +1.0 1.0 1.0 RG +newpath +25.0 20.0 m +12.5 20.0 12.5 0.0 25.0 0.0 c +37.5 0.0 37.5 20.0 25.0 20.0 c +25.0 20.0 m +25.0 25.0 l +0.0 25.0 m +50.0 25.0 l +25.0 25.0 m +25.0 50.0 l +25.0 50.0 m +0.0 75.0 l +25.0 50.0 m +50.0 75.0 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +25.0 20.0 m +12.5 20.0 12.5 0.0 25.0 0.0 c +37.5 0.0 37.5 20.0 25.0 20.0 c +25.0 20.0 m +25.0 25.0 l +0.0 25.0 m +50.0 25.0 l +25.0 25.0 m +25.0 50.0 l +25.0 50.0 m +0.0 75.0 l +25.0 50.0 m +50.0 75.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 6.604 85.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000U\000s\000a\000g\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 260.0 248.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 120.0 -110.0 ] concat +1.0 1.0 0.0 RG +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 70.0 l +0.0 70.0 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 70.0 l +0.0 70.0 l +h +S +2 J +10.0 M +10.0 21.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000M\000A\000S\000S\000E\000 \000N\000i\000c\000o\000l\000a\000s) show +Q +10.0 35.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000L\000I\000M\000I\000N\000 \000T\000h\000o\000m\000a\000s) show +Q +10.0 49.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0002\000A\000 \000i\000n\000f\000o\000 \000T\000P\0003) show +Q +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 120.0 -20.0 ] concat +1.0 1.0 0.0 RG +newpath +0.0 0.0 m +150.1802 0.0 l +160.1802 10.0 l +150.1802 10.0 l +150.1802 0.0 l +160.1802 10.0 l +160.1802 104.0 l +0.0 104.0 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 0.0 m +150.1802 0.0 l +160.1802 10.0 l +150.1802 10.0 l +150.1802 0.0 l +160.1802 10.0 l +160.1802 104.0 l +0.0 104.0 l +h +S +2 J +10.0 M +10.0 21.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000V\000e\000r\000s\000i\000o\000n\000 \0000\000.\0001) show +Q +10.0 35.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \0002\0006\000/\0001\0000\000/\0002\0000\0000\0005) show +Q +10.0 49.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000\351\000b\000a\000u\000c\000h\000e) show +Q +10.0 63.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000P\000r\000\351\000s\000e\000n\000t\000e\000 \000l\000e\000s\000 \000i\000n\000t\000\351\000r\000a\000c\000t\000i\000o\000n\000s) show +Q +10.0 77.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000e\000n\000t\000r\000e\000 \000l\000e\000s\000 \000u\000t\000i\000l\000i\000s\000a\000t\000e\000u\000r\000 \000e\000t\000 \000l\000e) show +Q +10.0 91.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000s\000y\000s\000t\000\350\000m\000e) show +Q +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 300.0 370.0 ] concat +1.0 1.0 1.0 RG +newpath +25.0 20.0 m +12.5 20.0 12.5 0.0 25.0 0.0 c +37.5 0.0 37.5 20.0 25.0 20.0 c +25.0 20.0 m +25.0 25.0 l +0.0 25.0 m +50.0 25.0 l +25.0 25.0 m +25.0 50.0 l +25.0 50.0 m +0.0 75.0 l +25.0 50.0 m +50.0 75.0 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +25.0 20.0 m +12.5 20.0 12.5 0.0 25.0 0.0 c +37.5 0.0 37.5 20.0 25.0 20.0 c +25.0 20.0 m +25.0 25.0 l +0.0 25.0 m +50.0 25.0 l +25.0 25.0 m +25.0 50.0 l +25.0 50.0 m +0.0 75.0 l +25.0 50.0 m +50.0 75.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -2.2341 85.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000G\000u\000i\000c\000h\000e\000t\000i\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 220.0 558.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 460.0 80.0 ] concat +1.0 1.0 1.0 RG +newpath +141.2487 25.0 m +141.2487 38.807118 109.629101 50.0 70.62435 50.0 c +31.619598 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 31.619598 0.0 70.62435 0.0 c +109.629101 0.0 141.2487 11.192881 141.2487 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +141.2487 25.0 m +141.2487 38.807118 109.629101 50.0 70.62435 50.0 c +31.619598 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 31.619598 0.0 70.62435 0.0 c +109.629101 0.0 141.2487 11.192881 141.2487 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 22.6854 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000P\000a\000s\000s\000e\000r\000 \000u\000n\000e\000 \000b\000o\000r\000n\000e) show +Q +[ 1.0 0.0 0.0 1.0 402.6854 282.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 380.0 268.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 640.0 80.0 ] concat +1.0 1.0 1.0 RG +newpath +130.1822 25.0 m +130.1822 38.807118 101.039921 50.0 65.0911 50.0 c +29.142278 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 29.142278 0.0 65.0911 0.0 c +101.039921 0.0 130.1822 11.192881 130.1822 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +130.1822 25.0 m +130.1822 38.807118 101.039921 50.0 65.0911 50.0 c +29.142278 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 29.142278 0.0 65.0911 0.0 c +101.039921 0.0 130.1822 11.192881 130.1822 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 21.0647 13.5 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000P\000a\000s\000s\000e\000r\000 \000g\000u\000i\000c\000h\000e\000t) show +Q +[ 1.0 0.0 0.0 1.0 581.0647 281.5 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 560.0 268.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 640.0 190.0 ] concat +1.0 1.0 1.0 RG +newpath +148.8432 25.0 m +148.8432 38.807118 115.523514 50.0 74.4216 50.0 c +33.319685 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 33.319685 0.0 74.4216 0.0 c +115.523514 0.0 148.8432 11.192881 148.8432 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +148.8432 25.0 m +148.8432 38.807118 115.523514 50.0 74.4216 50.0 c +33.319685 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 33.319685 0.0 74.4216 0.0 c +115.523514 0.0 148.8432 11.192881 148.8432 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 23.7976 13.5 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000P\000a\000s\000s\000e\000r\000 \000t\000\351\000l\000\351\000p\000\351\000a\000g\000e) show +Q +[ 1.0 0.0 0.0 1.0 583.7976 391.5 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 560.0 378.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 640.0 -40.0 ] concat +1.0 1.0 1.0 RG +newpath +120.2765 25.45585 m +120.2765 39.514727 93.351688 50.9117 60.13825 50.9117 c +26.924811 50.9117 0.0 39.514727 0.0 25.45585 c +0.0 11.396972 26.924811 0.0 60.13825 0.0 c +93.351688 0.0 120.2765 11.396972 120.2765 25.45585 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +120.2765 25.45585 m +120.2765 39.514727 93.351688 50.9117 60.13825 50.9117 c +26.924811 50.9117 0.0 39.514727 0.0 25.45585 c +0.0 11.396972 26.924811 0.0 60.13825 0.0 c +93.351688 0.0 120.2765 11.396972 120.2765 25.45585 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 19.6141 7.4559 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000P\000a\000s\000s\000a\000g\000e\000 \000b\000o\000r\000n\000e) show +Q +0.0 25.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000a\000u\000t\000o\000m\000a\000t\000i\000q\000u\000e) show +Q +[ 1.0 0.0 0.0 1.0 579.6141 155.4559 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 560.0 148.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +650.3242 -0.2826 m +592.1044 92.6967 l +S +2 J +10.0 M +[ 0.530705 -0.847557 0.847557 0.530705 592.1044 92.6967 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +648.3967 203.4641 m +592.5578 117.0149 l +S +2 J +10.0 M +[ 0.542574 0.840008 -0.840008 0.542574 592.5578 117.0149 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +640.0 105.0 m +601.2487 105.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 601.2487 105.0 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +390.0 105.0 m +460.0 105.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 105.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 460.0 105.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 830.0 60.0 ] concat +1.0 1.0 1.0 RG +newpath +100.0 25.0 m +100.0 38.807118 77.614237 50.0 50.0 50.0 c +22.385762 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 22.385762 0.0 50.0 0.0 c +77.614237 0.0 100.0 11.192881 100.0 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +100.0 25.0 m +100.0 38.807118 77.614237 50.0 50.0 50.0 c +22.385762 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 22.385762 0.0 50.0 0.0 c +77.614237 0.0 100.0 11.192881 100.0 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 21.3809 13.5 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000P\000a\000i\000e\000m\000e\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 771.3809 261.5 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 750.0 248.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 980.0 -40.0 ] concat +1.0 1.0 1.0 RG +newpath +100.0 25.0 m +100.0 38.807118 77.614237 50.0 50.0 50.0 c +22.385762 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 22.385762 0.0 50.0 0.0 c +77.614237 0.0 100.0 11.192881 100.0 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +100.0 25.0 m +100.0 38.807118 77.614237 50.0 50.0 50.0 c +22.385762 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 22.385762 0.0 50.0 0.0 c +77.614237 0.0 100.0 11.192881 100.0 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 27.0044 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000E\000s\000p\000e\000c\000e\000s) show +Q +[ 1.0 0.0 0.0 1.0 927.0044 162.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 900.0 148.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +986.8647 -2.3573 m +923.1353 72.3573 l +S +2 J +10.0 M +[ 0.64896 -0.760823 0.760823 0.64896 923.1353 72.3573 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 960.0 60.0 ] concat +1.0 1.0 1.0 RG +newpath +119.722 25.0 m +119.722 38.807118 92.921317 50.0 59.861 50.0 c +26.800682 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 26.800682 0.0 59.861 0.0 c +92.921317 0.0 119.722 11.192881 119.722 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +119.722 25.0 m +119.722 38.807118 92.921317 50.0 59.861 50.0 c +26.800682 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 26.800682 0.0 59.861 0.0 c +92.921317 0.0 119.722 11.192881 119.722 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 19.5329 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000C\000a\000r\000t\000e\000 \000B\000a\000n\000c\000a\000i\000r\000e) show +Q +[ 1.0 0.0 0.0 1.0 899.5329 262.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 880.0 248.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +960.0 85.0016 m +930.0 85.0035 l +S +2 J +10.0 M +[ 1.0 -0.000063 0.000063 1.0 930.0 85.0035 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 960.0 150.0 ] concat +1.0 1.0 1.0 RG +newpath +164.3706 25.0 m +164.3706 38.807118 127.574987 50.0 82.1853 50.0 c +36.795612 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 36.795612 0.0 82.1853 0.0 c +127.574987 0.0 164.3706 11.192881 164.3706 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +164.3706 25.0 m +164.3706 38.807118 127.574987 50.0 82.1853 50.0 c +36.795612 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 36.795612 0.0 82.1853 0.0 c +127.574987 0.0 164.3706 11.192881 164.3706 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 26.0715 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000C\000a\000r\000t\000e\000 \000d\000'\000a\000b\000o\000n\000n\000e\000m\000e\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 906.0715 352.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 880.0 338.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +966.7706 165.0634 m +920.7282 99.5018 l +S +2 J +10.0 M +[ 0.574712 0.818356 -0.818356 0.574712 920.7282 99.5018 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +755.6161 -4.7186 m +835.1756 73.9233 l +S +2 J +10.0 M +[ ] 0.0 d +[ -0.711196 -0.702994 0.702994 -0.711196 835.1756 73.9233 ] concat +newpath +10.0 5.0 m +0.0 0.0 l +10.0 -5.0 l +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 798.9108 20.5812 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +S +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000<\000<) show +Q +[ 1.0 0.0 0.0 1.0 718.9108 208.5812 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.4883 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000i\000n\000c\000l\000u\000d\000e) show +Q +[ 1.0 0.0 0.0 1.0 718.9108 208.5812 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 62.187 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000>\000>) show +Q +[ 1.0 0.0 0.0 1.0 718.9108 208.5812 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +769.9014 102.6804 m +830.3639 88.0109 l +S +2 J +10.0 M +[ ] 0.0 d +[ -0.971806 0.235781 -0.235781 -0.971806 830.3639 88.0109 ] concat +newpath +10.0 5.0 m +0.0 0.0 l +10.0 -5.0 l +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 719.2784 76.4866 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +S +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000<\000<) show +Q +[ 1.0 0.0 0.0 1.0 639.2784 264.4866 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.4883 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000i\000n\000c\000l\000u\000d\000e) show +Q +[ 1.0 0.0 0.0 1.0 639.2784 264.4866 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 62.187 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000>\000>) show +Q +[ 1.0 0.0 0.0 1.0 639.2784 264.4866 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +788.6528 213.2128 m +960.1725 176.6191 l +S +2 J +10.0 M +[ ] 0.0 d +[ -0.97799 0.208654 -0.208654 -0.97799 960.1725 176.6191 ] concat +newpath +10.0 5.0 m +0.0 0.0 l +10.0 -5.0 l +S +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 793.6937 176.0235 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +S +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000<\000<) show +Q +[ 1.0 0.0 0.0 1.0 713.6937 364.0235 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.4883 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000i\000n\000c\000l\000u\000d\000e) show +Q +[ 1.0 0.0 0.0 1.0 713.6937 364.0235 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 62.187 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000>\000>) show +Q +[ 1.0 0.0 0.0 1.0 713.6937 364.0235 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 873.9757 199.8035 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000 ) show +Q +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 450.0 370.0 ] concat +1.0 1.0 1.0 RG +newpath +147.0216 25.0 m +147.0216 38.807118 114.109693 50.0 73.5108 50.0 c +32.911906 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 32.911906 0.0 73.5108 0.0 c +114.109693 0.0 147.0216 11.192881 147.0216 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +147.0216 25.0 m +147.0216 38.807118 114.109693 50.0 73.5108 50.0 c +32.911906 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 32.911906 0.0 73.5108 0.0 c +114.109693 0.0 147.0216 11.192881 147.0216 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 23.5308 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000A\000u\000t\000o\000r\000i\000s\000e\000r\000 \000p\000a\000s\000s\000a\000g\000e) show +Q +[ 1.0 0.0 0.0 1.0 393.5308 572.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 370.0 558.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -40.0 90.0 ] concat +0 J +1.0 M +newpath +390.0 305.0 m +490.0 305.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 305.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 490.0 305.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 460.0 430.0 ] concat +1.0 1.0 1.0 RG +newpath +131.207 25.0 m +131.207 38.807118 101.835312 50.0 65.6035 50.0 c +29.371687 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 29.371687 0.0 65.6035 0.0 c +101.835312 0.0 131.207 11.192881 131.207 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +131.207 25.0 m +131.207 38.807118 101.835312 50.0 65.6035 50.0 c +29.371687 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 29.371687 0.0 65.6035 0.0 c +101.835312 0.0 131.207 11.192881 131.207 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 21.2148 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000F\000e\000r\000m\000e\000r\000 \000l\000a\000 \000b\000o\000r\000n\000e) show +Q +[ 1.0 0.0 0.0 1.0 401.2148 632.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 380.0 618.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -40.0 90.0 ] concat +0 J +1.0 M +newpath +390.0 360.0 m +500.0083 364.6015 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 360.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 500.0083 364.6015 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 460.0 -130.0 ] concat +1.0 1.0 1.0 RG +newpath +240.0 25.0 m +240.0 38.807118 186.274169 50.0 120.0 50.0 c +53.725830 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 53.725830 0.0 120.0 0.0 c +186.274169 0.0 240.0 11.192881 240.0 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +240.0 25.0 m +240.0 38.807118 186.274169 50.0 120.0 50.0 c +53.725830 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 53.725830 0.0 120.0 0.0 c +186.274169 0.0 240.0 11.192881 240.0 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 66.4456 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000D\000e\000m\000a\000n\000d\000e\000r\000 \000d\000e\000 \000l\000'\000a\000i\000d\000e) show +Q +[ 1.0 0.0 0.0 1.0 446.4456 72.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 380.0 58.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +390.0 60.0 m +468.9783 -95.5119 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 60.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 468.9783 -95.5119 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 450.0 310.0 ] concat +1.0 1.0 1.0 RG +newpath +161.5525 25.45585 m +161.5525 39.514727 125.387741 50.9117 80.77625 50.9117 c +36.164758 50.9117 0.0 39.514727 0.0 25.45585 c +0.0 11.396972 36.164758 0.0 80.77625 0.0 c +125.387741 0.0 161.5525 11.396972 161.5525 25.45585 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +161.5525 25.45585 m +161.5525 39.514727 125.387741 50.9117 80.77625 50.9117 c +36.164758 50.9117 0.0 39.514727 0.0 25.45585 c +0.0 11.396972 36.164758 0.0 80.77625 0.0 c +125.387741 0.0 161.5525 11.396972 161.5525 25.45585 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 25.6588 7.4559 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000M\000o\000d\000i\000f\000i\000e\000r\000 \000l\000e\000 \000b\000a\000n\000d\000e\000a\000u) show +Q +0.0 25.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000a\000m\000o\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 395.6588 505.4559 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 370.0 498.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -40.0 90.0 ] concat +0 J +1.0 M +newpath +390.0 280.0 m +490.4044 247.9998 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 280.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 490.4044 247.9998 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 540.0 480.0 ] concat +1.0 1.0 1.0 RG +newpath +184.1274 25.0 m +184.1274 38.807118 142.909077 50.0 92.0637 50.0 c +41.218322 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 41.218322 0.0 92.0637 0.0 c +142.909077 0.0 184.1274 11.192881 184.1274 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +184.1274 25.0 m +184.1274 38.807118 142.909077 50.0 92.0637 50.0 c +41.218322 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 41.218322 0.0 92.0637 0.0 c +142.909077 0.0 184.1274 11.192881 184.1274 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 28.9648 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000D\000\351\000c\000l\000e\000n\000c\000h\000e\000r\000 \000u\000n\000e\000 \000a\000l\000a\000r\000m\000e) show +Q +[ 1.0 0.0 0.0 1.0 488.9648 682.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 460.0 668.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -40.0 90.0 ] concat +0 J +1.0 M +newpath +390.0 360.0 m +580.2634 413.1104 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 360.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 580.2634 413.1104 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 630.0 400.0 ] concat +1.0 1.0 1.0 RG +newpath +100.0 25.0 m +100.0 38.807118 77.614237 50.0 50.0 50.0 c +22.385762 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 22.385762 0.0 50.0 0.0 c +77.614237 0.0 100.0 11.192881 100.0 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +100.0 25.0 m +100.0 38.807118 77.614237 50.0 50.0 50.0 c +22.385762 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 22.385762 0.0 50.0 0.0 c +77.614237 0.0 100.0 11.192881 100.0 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 23.2393 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000E\000n\000c\000a\000i\000s\000s\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 573.2393 602.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 550.0 588.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -40.0 90.0 ] concat +0 J +1.0 M +newpath +390.0 335.0 m +670.0 335.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 390.0 335.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 670.0 335.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 590.0 550.0 ] concat +1.0 1.0 1.0 RG +newpath +154.6554 25.45585 m +154.6554 39.514727 120.034609 50.9117 77.3277 50.9117 c +34.620790 50.9117 0.0 39.514727 0.0 25.45585 c +0.0 11.396972 34.620790 0.0 77.3277 0.0 c +120.034609 0.0 154.6554 11.396972 154.6554 25.45585 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +154.6554 25.45585 m +154.6554 39.514727 120.034609 50.9117 77.3277 50.9117 c +34.620790 50.9117 0.0 39.514727 0.0 25.45585 c +0.0 11.396972 34.620790 0.0 77.3277 0.0 c +120.034609 0.0 154.6554 11.396972 154.6554 25.45585 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 24.6487 7.4559 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000I\000n\000i\000t\000i\000e\000r\000 \000u\000n\000 \000p\000a\000i\000e\000m\000e\000n\000t) show +Q +0.0 25.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000p\000a\000r\000 \000C\000B) show +Q +[ 1.0 0.0 0.0 1.0 534.6487 745.4559 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 510.0 738.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -40.0 90.0 ] concat +0 J +1.0 M +newpath +395.2342 362.6339 m +631.0397 481.2956 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 395.2342 362.6339 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 631.0397 481.2956 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -120.0 278.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -50.0 180.0 ] concat +0 J +1.0 M +newpath +246.25 535.0022 m +660.0 535.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 246.25 535.0022 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 12.9904 1.964 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000s\000y\000s\000t\000\350\000m\000e\000 \000s\000u\000p\000e\000r\000v\000i\000s\000e\000u\000r) show +Q +[ 1.0 0.0 0.0 1.0 116.25 903.0022 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 2.2463 1.964 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 116.25 903.0022 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 12.9903 -21.5001 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0001) show +Q +[ 1.0 0.0 0.0 1.0 116.25 903.0022 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -130.0 368.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 660.0 535.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -102.3278 -16.284 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000o\000u\000v\000r\000i\000r\000 \000u\000n\000e\000 \000b\000o\000r\000n\000e) show +Q +[ 1.0 0.0 0.0 1.0 530.0 903.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -113.0719 -16.284 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 530.0 903.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -19.9459 7.5001 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0001) show +Q +[ 1.0 0.0 0.0 1.0 530.0 903.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -130.0 368.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 337.5222 545.0011 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000S\000y\000s\000t\000\350\000m\000e\000 \000s\000u\000p\000e\000r\000v\000i\000s\000e\000u\000r\000 \000<\000-\000>\000 \000O\000u\000v\000r\000i\000r\000 \000u\000n\000e\000 \000b\000o\000r\000n\000e) show +Q +[ 1.0 0.0 0.0 1.0 207.5222 913.0011 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -130.0 368.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 610.0 690.0 ] concat +1.0 1.0 1.0 RG +newpath +140.1853 25.0 m +140.1853 38.807118 108.803751 50.0 70.09265 50.0 c +31.381548 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 31.381548 0.0 70.09265 0.0 c +108.803751 0.0 140.1853 11.192881 140.1853 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +140.1853 25.0 m +140.1853 38.807118 108.803751 50.0 70.09265 50.0 c +31.381548 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 31.381548 0.0 70.09265 0.0 c +108.803751 0.0 140.1853 11.192881 140.1853 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 22.5297 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000O\000u\000v\000r\000i\000r\000 \000u\000n\000e\000 \000b\000o\000r\000n\000e) show +Q +[ 1.0 0.0 0.0 1.0 552.5297 892.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 25.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 140.1853 25.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 70.09265 0.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 70.09265 50.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 140.1853 0.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 140.1853 50.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 50.0 ] concat +[ 1.0 0.0 0.0 1.0 530.0 878.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 590.0 630.0 ] concat +1.0 1.0 1.0 RG +newpath +194.078 25.0 m +194.078 38.807118 150.632159 50.0 97.039 50.0 c +43.445840 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 43.445840 0.0 97.039 0.0 c +150.632159 0.0 194.078 11.192881 194.078 25.0 c +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +194.078 25.0 m +194.078 38.807118 150.632159 50.0 97.039 50.0 c +43.445840 50.0 0.0 38.807118 0.0 25.0 c +0.0 11.192881 43.445840 0.0 97.039 0.0 c +150.632159 0.0 194.078 11.192881 194.078 25.0 c +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 30.4221 14.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000L\000i\000r\000e\000 \000u\000n\000 \000r\000a\000p\000p\000o\000r\000t\000 \000d\000'\000a\000l\000a\000r\000m\000e) show +Q +[ 1.0 0.0 0.0 1.0 540.4221 832.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 510.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -50.0 180.0 ] concat +0 J +1.0 M +newpath +246.25 474.8417 m +640.0 474.9975 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 246.25 474.8417 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -130.0 368.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 640.0 474.9975 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -130.0 368.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 140.0 630.0 ] concat +1.0 1.0 1.0 RG +newpath +28.125 22.5 m +14.0625 22.5 14.0625 0.0 28.125 0.0 c +42.1875 0.0 42.1875 22.5 28.125 22.5 c +28.125 22.5 m +28.125 28.125 l +0.0 28.125 m +56.25 28.125 l +28.125 28.125 m +28.125 56.25 l +28.125 56.25 m +0.0 84.375 l +28.125 56.25 m +56.25 84.375 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +28.125 22.5 m +14.0625 22.5 14.0625 0.0 28.125 0.0 c +42.1875 0.0 42.1875 22.5 28.125 22.5 c +28.125 22.5 m +28.125 28.125 l +0.0 28.125 m +56.25 28.125 l +28.125 28.125 m +28.125 56.25 l +28.125 56.25 m +0.0 84.375 l +28.125 56.25 m +56.25 84.375 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -26.5366 95.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000S\000y\000s\000t\000\350\000m\000e\000 \000s\000u\000p\000e\000r\000v\000i\000s\000e\000u\000r) show +Q +[ 1.0 0.0 0.0 1.0 60.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 60.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 56.25 45.0 ] concat +[ 1.0 0.0 0.0 1.0 60.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 28.125 90.0 ] concat +[ 1.0 0.0 0.0 1.0 60.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 28.125 90.0 ] concat +[ 1.0 0.0 0.0 1.0 60.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 28.125 0.0 ] concat +[ 1.0 0.0 0.0 1.0 60.0 818.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 406.861328 770.0 ] concat +0.0 12.0 moveto +q 1 -1 scale +/Helvetica findfont 12.0 scalefont setfont +(Created with Poseidon for UML Community Edition. Not for Commercial Use.) show +Q +[ 1.0 0.0 0.0 1.0 -80.0 188.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +newpath +0.0 0.0 m +0.0 989.0 l +1099.0 989.0 l +1099.0 0.0 l +h +W +Q +end end restore showpage + +%%Trailer +%%EOF diff --git a/GL/BarrierePeage/Domainebarrièredepéage.eps b/GL/BarrierePeage/Domainebarrièredepéage.eps new file mode 100755 index 0000000..764c71b --- /dev/null +++ b/GL/BarrierePeage/Domainebarrièredepéage.eps @@ -0,0 +1,3570 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 71 20 524 822 +%%Creator: FreeHEP Graphics2D Driver +%%Producer: org.freehep.graphicsio.ps.PSGraphics2D Revision: 1.20 +%%For: +%%Title: +%%CreationDate: lundi 2 janvier 2006 16 h 10 CET +%%LanguageLevel: 3 +%%EndComments +%%BeginProlog +100 dict dup begin + +% +% File: org/freehep/graphicsio.ps/PSProlog.txt +% Author: Charles Loomis +% + +% Redefinitions which save some space in the output file. These are also +% the same as the PDF operators. +/q {gsave} def +/Q {grestore} def + +/n {newpath} def +/m {moveto} def +/l {lineto} def +/c {curveto} def +/h {closepath} def + +/re {4 -2 roll moveto + dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} def + +/f {fill} def +/f* {eofill} def +/F {gsave vg&FC fill grestore} def +/F* {gsave vg&FC eofill grestore} def + +/s {closepath stroke} def +/S {stroke} def + +/b {closepath gsave vg&FC fill grestore + gsave stroke grestore newpath} def +/B {gsave vg&FC fill grestore gsave stroke grestore newpath} def +/b* {closepath gsave vg&FC eofill grestore + gsave stroke grestore newpath} def +/B* {gsave vg&FC eofill grestore gsave stroke grestore newpath} def + +/g {1 array astore /vg&fcolor exch def} def +/G {setgray} def +/k {4 array astore /vg&fcolor exch def} def +/K {setcmykcolor} def +/rg {3 array astore /vg&fcolor exch def} def +/RG {setrgbcolor} def + +% Initialize the fill color. +0 0 0 rg + +/vg&FC {mark vg&fcolor aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/vg&DFC {/vg&fcolor exch def} def + +/vg&C {mark exch aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/w {setlinewidth} def +/j {setlinejoin} def +/J {setlinecap} def +/M {setmiterlimit} def +/d {setdash} def +/i {setflat} def + +/W {clip} def +/W* {eoclip} def + +% Setup the default graphics state. +% (black; 1 pt. linewidth; miter join; butt-ends; solid) +/defaultGraphicsState {0 g 1 w 0 j 0 J [] 0 d} def + +% Emulation of the rectangle operators for PostScript implementations +% which do not implement all Level 2 features. This is an INCOMPLETE +% emulation; only the "x y width height rect..." form is emulated. +/*rf {gsave newpath re fill grestore} def +/*rs {gsave newpath re stroke grestore} def +/*rc {newpath re clip} def +/rf /rectfill where {pop /rectfill}{/*rf} ifelse load def +/rs /rectstroke where {pop /rectstroke}{/*rs} ifelse load def +/rc /rectclip where {pop /rectclip}{/*rc} ifelse load def + +% Emulation of the selectfont operator. This includes a 20% increase in +% the fontsize which is necessary to get sizes similar to the Java fonts. +/*sf {exch findfont exch + dup type /arraytype eq {makefont}{scalefont} ifelse setfont} bind def +/sf /selectfont where {pop {1.2 mul selectfont}}{{1.2 mul *sf}} ifelse def + +% Special version of stroke which allows the dash pattern to continue +% across path segments. (This may be needed for PostScript although +% modern printers seem to do this correctly.) +/vg&stroke { + currentdash pop length 0 eq + {stroke} + { + currentdash /vg&doffset exch def pop + flattenpath + {m vg&resetdash} + {2 copy + currentpoint + 3 -1 roll sub dup mul + 3 1 roll sub dup mul + add sqrt + 3 1 roll l + currentdash 3 -1 roll add setdash} + {} + {h vg&resetdash} + pathforall + stroke + vg&resetdash + } ifelse +} def +/vg&resetdash {currentdash pop vg&doffset setdash} def + +% Initialize variables for safety. +/delta 0 def +/xv 0 def /yv 0 def /width 0 def /height 0 def + +% Initialize to portrait INTERNATIONAL (Letter-height, A4-width) page. +/pw 595 def /ph 791 def /po true def /ftp false def + +% Initialize margins to 20 points. +/ml 20 def /mr 20 def /mt 20 def /mb 20 def + +% Temporary matrices. +/smatrix 0 def /nmatrix 0 def + +% set page size (usage: setpagesize) +/setpagesize {/ph exch def /pw exch def} def + +% set page orientation (usage: portrait or landscape) +/portrait {/po true def} def +/landscape {/po false def} def + +% force natural size for image (usage: naturalsize) +/naturalsize {/ftp false def} def + +% resize image to fill page (usage: fittopage) +/fittopage {/ftp true def} def + +% set margins of the page (usage: setmargins) +/setmargins {/mr exch def /mt exch def /mb exch def /ml exch def} def + +% set the graphic's size (usage: setsize) +/setsize {/gh exch def /gw exch def} def + +% set the graphic's origin (usage: setorigin) +/setorigin {/gy exch def /gx exch def} def + +% calculate image center +/imagecenter {pw ml sub mr sub 2 div ml add + ph mt sub mb sub 2 div mb add} def + +% calculate the necessary scaling +/imagescale {po {gw}{gh} ifelse pw ml sub mr sub div + po {gh}{gw} ifelse ph mt sub mb sub div + 2 copy lt {exch} if pop + ftp not {1 2 copy lt {exch} if pop} if + 1 exch div /sfactor exch def + /gw gw sfactor mul def /gh gh sfactor mul def} def + +% calculate image origin +/imageorigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div po {add}{sub} ifelse} def + +% calculate the clipping origin +/cliporigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub floor + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div sub floor} def + +% Set the clipping region to the bounding box. +/cliptobounds {cliporigin po {gw}{gh} ifelse 1 add + po {gh}{gw} ifelse 1 add rc} def + +% set the base transformation matrix (usage: setbasematrix) +/setbasematrix {imageorigin translate + po {0}{90} ifelse rotate + sfactor sfactor neg scale + /defaultmatrix matrix currentmatrix def} def + +% The lower-right bias in drawing 1 pt. wide lines. +/bias {q 0.5 0.5 translate} def +/unbias {Q} def + +% Draw a line. (x0 y0 x1 y1 line) +/L {bias n m l S unbias} def + +% Polyline primitive. +/polyline {n m 1 exch 1 exch + {pop currentfile token pop currentfile token pop l} for + } def + +% Draw a polyline (n x0 y0 OPL x1 y1 x2 y2 ... ... xn yn) +/OPL {bias polyline S unbias} def + +% Draw a closed polyline (n x0 y0 CPL x1 y1 x2 y2 ... ... xn yn) +/CPL {bias polyline s unbias} def + +% Draw a filled polyline (n x0 y0 FPL x1 y1 x2 y2 ... ... xn yn) +/FPL {polyline h f*} def + +% Draw an oval. (x y w h OVL) +/OVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width currentlinewidth sub 2 div + height currentlinewidth sub 2 div neg + scale n 0 0 1 5 -2 roll arc + smatrix setmatrix S} def + +% Draw a filled oval. (x y w h FOVL) +/FOVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width 2 div + height 2 div neg + scale n 0 0 m 0 0 1 5 -2 roll arc + h smatrix setmatrix f} def + +% Draw a rounded rectangle. (x y w h arcwidth archeight RREC) +/RREC {matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + s} def + +% Draw a filled rounded rectangle. (x y w h arcwidth archeight FRREC) +/FRREC{matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + h f} def + +% Draw a string. (string x y STR) +/STR {q m 1 -1 scale recshow Q} def + +% Define basic plot symbols. +/xys {/siz exch def /yv exch def /xv exch def} def +/hline {xys n xv siz 2. div sub yv m siz 0 rlineto S} def +/vline {xys n xv yv siz 2. div sub m 0 siz rlineto S} def +/plus {xys n xv yv siz 2. div sub m 0 siz rlineto + xv siz 2. div sub yv m siz 0 rlineto S} def +/dot {n 2. div 0 360 arc s} def +/fdot {n 2. div 0 360 arc h f} def +/box {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rs} def +/fbox {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rf} def +/tridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto s} def +/ftridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto h f} def + +% Symbols defined in terms of the others. +/star {3 copy cross plus} def +/cross {xys q xv yv translate 45 rotate 0 0 siz plus Q} def +/diamond {xys q xv yv translate 45 rotate 0 0 siz box Q} def +/fdiamond {xys q xv yv translate 45 rotate 0 0 siz fbox Q} def +/triup {xys q xv yv translate 180 rotate 0 0 siz tridn Q} def +/ftriup {xys q xv yv translate 180 rotate 0 0 siz ftridn Q} def + +% Define the composite fonts used to print Unicode strings. +% Undefine particular values in an encoding array. +/vg&undef { {exch dup 3 -1 roll /.notdef put} forall } def +/vg&redef { {3 -1 roll dup 4 2 roll put} forall } def + +% usage: key encoding basefontname vg&newbasefont font +/vg&newbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + currentdict + end +definefont +} def + +% usage: key encoding basefontname vg&newskewedbasefont font +/vg&newskewedbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + exch FontMatrix exch matrix concatmatrix /FontMatrix exch def + currentdict + end +definefont +} def + +% usage: basekey suffix vg&nconcat name +/vg&nconcat { + 2 {dup length string cvs exch} repeat + dup length 3 -1 roll dup length 3 -1 roll add string + dup 0 4 -1 roll dup length 5 1 roll putinterval + dup 4 -2 roll exch putinterval cvn +} def + +%usage: fontname vg&skewmatrix matrix +/vg&skewmatrix { +findfont dup /FontInfo known + { + /FontInfo get dup /ItalicAngle known + { + [ 1 0 4 -1 roll /ItalicAngle get neg dup sin exch cos div 1 0 0 ] + } + {pop matrix} ifelse + } + {pop matrix} ifelse +} def + +% usage: newfontname basefontname vg&newcompositefont -- +/vg&newcompositefont { +/vg&fstyle exch def +/vg&bfont exch def +/vg&fname exch def +<< +/FontStyleBits vg&fstyle +/FontType 0 +/FontMatrix matrix +/FontName vg&fname +/FMapType 2 +/Encoding [ 0 1 255 {pop 6} for ] + dup 16#00 0 put % Latin + dup 16#03 1 put % Greek + dup 16#20 2 put % Punctuation + dup 16#21 3 put % Arrows + dup 16#22 4 put % MathOps + dup 16#27 5 put % Dingbats + +/FDepVector [ +vg&bfont /-UC-Latin vg&nconcat UCLatinEncoding +vg&bfont vg&newbasefont + +vg&bfont vg&skewmatrix +vg&bfont /-UC-Greek vg&nconcat UCGreekEncoding +/Symbol vg&newskewedbasefont + +vg&bfont /-UC-Punctuation vg&nconcat UCPunctuationEncoding +vg&bfont vg&newbasefont + +/Arrows-UC findfont +/MathOps-UC findfont +/Dingbats-UC findfont +/Undefined-UC findfont ] +>> +vg&fname exch definefont pop +} def + +% Null encoding vector (all elements set to .notdef) +/NullEncoding [ 256 {/.notdef} repeat ] def + +% Unicode Latin encoding (unicode codes \u0000-\u00ff) +/UCLatinEncoding + ISOLatin1Encoding dup length array copy + dup 16#60 /grave put + [ 16#90 16#91 16#92 16#93 16#94 16#95 16#96 + 16#97 16#98 16#9a 16#9b 16#9d 16#9e 16#9f + ] vg&undef + def + +% Unicode Greek encoding (unicode codes \u0370-\u03ff) +/UCGreekEncoding + NullEncoding dup length array copy + << 16#91 /Alpha 16#92 /Beta 16#93 /Gamma 16#94 /Delta + 16#95 /Epsilon 16#96 /Zeta 16#97 /Eta 16#98 /Theta + 16#99 /Iota 16#9a /Kappa 16#9b /Lambda 16#9c /Mu + 16#9d /Nu 16#9e /Xi 16#9f /Omicron 16#a0 /Pi + 16#a1 /Rho 16#a3 /Sigma 16#a4 /Tau 16#a5 /Upsilon + 16#a6 /Phi 16#a7 /Chi 16#a8 /Psi 16#a9 /Omega + 16#b1 /alpha 16#b2 /beta 16#b3 /gamma 16#b4 /delta + 16#b5 /epsilon 16#b6 /zeta 16#b7 /eta 16#b8 /theta + 16#b9 /iota 16#ba /kappa 16#bb /lambda 16#bc /mu + 16#bd /nu 16#be /xi 16#bf /omicron 16#c0 /pi + 16#c1 /rho 16#c2 /sigma1 16#c3 /sigma 16#c4 /tau + 16#c5 /upsilon 16#c6 /phi1 16#c7 /chi 16#c8 /psi + 16#c9 /omega 16#7e /semicolon 16#87 /dotmath 16#d1 /theta1 + 16#d2 /Upsilon1 16#d5 /phi 16#d6 /omega1 + >> vg&redef + def + +% Unicode punctuation encoding (unicode codes \u2000-\u206f) +/UCPunctuationEncoding + NullEncoding dup length array copy + << 16#10 /hyphen 16#11 /hyphen 16#12 /endash + 16#13 /emdash 16#18 /quoteleft 16#19 /quoteright + 16#1a /quotesinglbase 16#1b /quotesingle 16#1c /quotedblleft + 16#1d /quotedblright 16#1e /quotedblbase 16#1f /quotedbl + 16#20 /dagger 16#21 /daggerdbl 16#22 /bullet + 16#24 /period 16#26 /ellipsis 16#27 /periodcentered + 16#30 /perthousand 16#44 /fraction + 16#70 /zerosuperior 16#74 /foursuperior 16#75 /fivesuperior + 16#76 /sixsuperior 16#77 /sevensuperior 16#78 /eightsuperior + 16#79 /ninesuperior 16#7b /hyphensuperior 16#7d /parenleftsuperior + 16#7e /parenrightsuperior + 16#80 /zeroinferior 16#84 /fourinferior 16#85 /fiveinferior + 16#81 /oneinferior 16#82 /twoinferior 16#83 /threeinferior + 16#86 /sixinferior 16#87 /seveninferior 16#88 /eightinferior + 16#89 /nineinferior 16#8b /hypheninferior 16#8d /parenleftinferior + 16#8e /parenrightinferior + >> vg&redef + def + +% Unicode mathematical operators encoding (unicode codes \u2200-\u22ff) +/UCMathOpsEncoding + NullEncoding dup length array copy + << 16#00 /universal 16#02 /partialdiff 16#03 /existential + 16#05 /emptyset 16#06 /Delta 16#07 /gradient + 16#08 /element 16#09 /notelement 16#0b /suchthat + 16#0f /product 16#11 /summation 16#12 /minus + 16#15 /fraction 16#17 /asteriskmath 16#19 /bullet + 16#1a /radical 16#1d /proportional 16#1e /infinity + 16#20 /angle 16#23 /bar 16#27 /logicaland + 16#28 /logicalor 16#29 /intersection 16#2a /union + 16#2b /integral 16#34 /therefore 16#36 /colon + 16#3c /similar 16#45 /congruent 16#48 /approxequal + 16#60 /notequal 16#61 /equivalence 16#64 /lessequal + 16#65 /greaterequal 16#82 /propersubset 16#83 /propersuperset + 16#86 /reflexsubset 16#87 /reflexsuperset 16#95 /circleplus + 16#97 /circlemultiply 16#a5 /perpendicular 16#03 /existential + 16#c0 /logicaland 16#c1 /logicalor 16#c2 /intersection + 16#c3 /union 16#c4 /diamond 16#c5 /dotmath + >> vg&redef + def + +% Unicode arrows encoding (unicode codes \u2190-\u21ff) +% Also includes those "Letterlike" unicode characters +% which are available in the symbol font. (unicode codes \u2100-\u214f) +/UCArrowsEncoding + NullEncoding dup length array copy + << 16#11 /Ifraktur 16#1c /Rfraktur 16#22 /trademarkserif + 16#35 /aleph + 16#90 /arrowleft 16#91 /arrowup 16#92 /arrowright + 16#93 /arrowdown 16#94 /arrowboth 16#d0 /arrowdblleft + 16#d1 /arrowdblup 16#d2 /arrowdblright 16#d3 /arrowdbldown + 16#d4 /arrowdblboth + >> vg&redef + def + +/ZapfDingbats findfont /Encoding get +dup length array copy /UCDingbatsEncoding exch def +16#20 1 16#7f { + dup 16#20 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +16#a0 1 16#ff { + dup 16#40 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +UCDingbatsEncoding [ 16#c0 1 16#ff {} for ] vg&undef +[ 16#00 16#05 16#0a 16#0b 16#28 16#4c 16#4e 16#53 16#54 16#55 16#57 16#5f + 16#60 16#68 16#69 16#6a 16#6b 16#6c 16#6d 16#6e 16#6f 16#70 16#71 16#72 + 16#73 16#74 16#75 16#95 16#96 16#97 16#b0 16#bf +] vg&undef pop + +% Define the base fonts which don't change. +/Undefined-UC NullEncoding /Helvetica vg&newbasefont pop +/MathOps-UC UCMathOpsEncoding /Symbol vg&newbasefont pop +/Arrows-UC UCArrowsEncoding /Symbol vg&newbasefont pop +/Dingbats-UC UCDingbatsEncoding /ZapfDingbats vg&newbasefont pop + +% Make the SansSerif composite fonts. +/SansSerif /Helvetica 16#00 vg&newcompositefont +/SansSerif-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/SansSerif-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/SansSerif-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Serif composite fonts. +/Serif /Times-Roman 16#00 vg&newcompositefont +/Serif-Bold /Times-Bold 16#01 vg&newcompositefont +/Serif-Italic /Times-Italic 16#02 vg&newcompositefont +/Serif-BoldItalic /Times-BoldItalic 16#03 vg&newcompositefont + +% Make the Monospaced composite fonts. +/Monospaced /Courier 16#00 vg&newcompositefont +/Monospaced-Bold /Courier-Bold 16#01 vg&newcompositefont +/Monospaced-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Monospaced-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + +% Make the Dialog composite fonts. +/Dialog /Helvetica 16#00 vg&newcompositefont +/Dialog-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/Dialog-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/Dialog-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the DialogInput composite fonts. +/DialogInput /Helvetica 16#00 vg&newcompositefont +/DialogInput-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/DialogInput-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/DialogInput-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Typewriter composite fonts (JDK 1.1 only). +/Typewriter /Courier 16#00 vg&newcompositefont +/Typewriter-Bold /Courier-Bold 16#01 vg&newcompositefont +/Typewriter-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Typewriter-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + + +/cfontH { + dup /fontsize exch def /SansSerif exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHB { + dup /fontsize exch def /SansSerif-Bold exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHI { + dup /fontsize exch def /SansSerif-Italic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHBI { + dup /fontsize exch def /SansSerif-BoldItalic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def + +/cfontT { + dup /fontsize exch def /Serif exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTB { + dup /fontsize exch def /Serif-Bold exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTI { + dup /fontsize exch def /Serif-Italic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTBI { + dup /fontsize exch def /Serif-BoldItalic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def + +/cfontC { + dup /fontsize exch def /Typewriter exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCB { + dup /fontsize exch def /Typewriter-Bold exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCI { + dup /fontsize exch def /Typewriter-Italic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCBI { + dup /fontsize exch def /Typewriter-BoldItalic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def + +% Darken or lighten the current color. +/darken {0.7 exch exp 3 copy + q 4 -1 roll vg&C + currentrgbcolor 3 {4 -2 roll mul} repeat + 3 array astore Q} def + +/displayColorMap +<< /Cr [1.00 0.00 0.00] /Cg [0.00 1.00 0.00] + /Cb [0.00 0.00 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.00 0.00] /CGg [0.00 1.00 0.00] + /CGb [0.00 0.00 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.00 0.00] /CIg [0.00 1.00 0.00] + /CIb [0.00 0.00 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/printColorMap +<< /Cr [1.00 0.33 0.33] /Cg [0.33 1.00 0.33] + /Cb [0.33 0.33 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.33 0.33] /CGg [0.33 1.00 0.33] + /CGb [0.33 0.33 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.33 0.33] /CIg [0.33 1.00 0.33] + /CIb [0.33 0.33 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/grayColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [0.75] /CGg [1 ] + /CGb [0.50] /CGc [0.75] + /CGm [0.50] /CGy [1 ] + /CGo [0.75] /CGp [1 ] + /CGw [0 ] /CGgrl [0.25] + /CGgr [0.50] /CGgrd [0.75] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +/bwColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [1 ] /CGg [1 ] + /CGb [1 ] /CGc [1 ] + /CGm [1 ] /CGy [1 ] + /CGo [1 ] /CGp [1 ] + /CGw [0 ] /CGgrl [1 ] + /CGgr [1 ] /CGgrd [1 ] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +% +% The following routines handle the alignment of and printing of +% tagged strings. +% + +% Predefine the bounding box values. +/bbllx 0 def /bblly 0 def /bburx 0 def /bbury 0 def + +% This routine pops the first unicode character off of a string and returns +% the remainder of the string, the character code of first character, +% and a "true" if the string was non-zero length. +% popfirst +% popfirst +/popfirst { + dup length 1 gt + {dup 0 get /vg&fbyte exch def + dup 1 get /vg&cbyte exch def + dup length 2 sub 2 exch getinterval true} + {pop false} ifelse +} def + +% This routine shows a single unicode character given the font and +% character codes. +% unicharshow -- +/unicharshow { + 2 string + dup 0 5 -1 roll put + dup 1 4 -1 roll put + internalshow +} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and showing the string for recshow. +% internalshow -- +/internalshow {show} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and stroking various ornaments. +% internalstroke -- +/internalstroke {S} def + +% Sets up internalshow to use the null device to determine string size. +% -- nullinternalshow -- +/nullinternalshow {/internalshow {false charpath flattenpath + pathbbox updatebbox} def} def + +% Sets up internalstroke to use the null device to determine string size. +% -- nullinternalstroke -- +/nullinternalstroke { + /internalstroke {flattenpath pathbbox updatebbox} def} def + +% This routine tests to see if the character code matches the first +% character of a string. +% testchar +/testchar {exch dup 3 -1 roll 0 get eq} def + +% Raise the text baseline for superscripts. +% -- raise -- +/raise { + 0 fontsize 2 div rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-raise the text baseline for superscripts. +% -- unraise -- +/unraise { + /fontsize fontsize 1.5 mul def + 0 fontsize 2 div neg rmoveto +} def + +% Lower the text baseline for subscripts. +% -- lower -- +/lower { + 0 fontsize 3 div neg rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-lower the text baseline for subscripts. +% -- unlower -- +/unlower { + /fontsize fontsize 1.5 mul def + 0 fontsize 3 div rmoveto +} def + +% Compare the top two elements on the stack and leave only the +% larger one. +/maxval {2 copy gt {pop} {exch pop} ifelse} def + +% Tokenize a string. Do not use the usual PostScript token because +% parentheses will not be interpreted correctly because of rescanning +% of the string. +/vg&token {/vg&string exch def /vg&index -1 def /vg&level 0 def +0 2 vg&string length 2 sub { + dup dup 1 add exch vg&string exch get 8 bitshift vg&string 3 -1 roll get or + dup 16#f0fe eq {pop 1}{16#f0ff eq {-1}{0} ifelse} ifelse + /vg&level exch vg&level add def + vg&level 0 eq {/vg&index exch def exit} if pop +} for +vg&index 0 ge { + vg&string vg&index 2 add dup vg&string length exch sub getinterval + vg&index 2 gt {vg&string 2 vg&index 2 sub getinterval}{()} ifelse + true} +{false} ifelse +} bind def + +% Recursively show an unicode string. +% recshow -- +/recshow { + popfirst + { + % Test to see if this is a string attribute. + vg&fbyte 16#f0 and 16#e0 eq + { + q + + % Font style. + currentfont dup /FontStyleBits known {/FontStyleBits get}{pop 0} ifelse + vg&cbyte or vg&fontstyles exch get fontsize exch exec + + vg&token pop recshow currentpoint Q m recshow + } + { + vg&fbyte 16#F8 and 16#F0 eq { + + % Superscript and/or subscript. + vg&cbyte 16#00 eq { + vg&token pop exch vg&token pop 3 -1 roll + q raise recshow unraise currentpoint pop Q exch + q lower recshow unlower currentpoint pop Q + maxval currentpoint exch pop m recshow } if + + % Strikeout. + vg&cbyte 16#01 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll fontsize 3 div add moveto + fontsize 3 div add lineto internalstroke Q + recshow} if + + % Underline. + vg&cbyte 16#02 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dashed underline. + vg&cbyte 16#03 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J [ vg&uthick 5 mul vg&uthick 2 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dotted underline. + vg&cbyte 16#04 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 1 J [ 0 vg&uthick 3 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Thick underline. + vg&cbyte 16#05 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Gray thick underline. + vg&cbyte 16#06 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w 0.5 setgray + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Overbar. + vg&cbyte 16#07 eq { + vg&token pop dup stringsize relative 4 1 roll pop pop exch + 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + vg&uoffset neg add dup currentpoint pop exch m l internalstroke Q + recshow} if + } + { + vg&fbyte vg&cbyte unicharshow recshow + } ifelse + } ifelse + } if +} def + +% Get the underline position and thickness from the current font. +/vg&underline { + +currentfont dup /FontType get 0 eq {/FDepVector get 0 get} if +dup dup /FontInfo known { + /FontInfo get dup + dup /UnderlinePosition known { + /UnderlinePosition get /vg&uoffset exch def + } + { + pop /vg&uoffset 0 def + } ifelse + dup /UnderlineThickness known { + /UnderlineThickness get /vg&uthick exch def + } + { + pop /vg&uthick 0 def + } ifelse +} +{ + pop /vg&uoffset 0 def /vg&uthick 0 def +} ifelse +/FontMatrix get +currentfont dup /FontType get 0 eq +{/FontMatrix get matrix concatmatrix}{pop} ifelse +dup 0 vg&uoffset 3 -1 roll transform /vg&uoffset exch def pop +0 vg&uthick 3 -1 roll transform /vg&uthick exch def pop +} def + +% Make a frame with the coordinates on the stack. +% frame -- +/frame {4 copy m 3 1 roll exch l 4 -2 roll l l h} def + +% Resets the accumulated bounding box to a degenerate box at the +% current point. +% -- resetbbox -- +/resetbbox { + currentpoint 2 copy + /bbury exch def + /bburx exch def + /bblly exch def + /bbllx exch def +} def + +% Update the accumulated bounding box. +% updatebbox -- +/updatebbox { + dup bbury gt {/bbury exch def} {pop} ifelse + dup bburx gt {/bburx exch def} {pop} ifelse + dup bblly lt {/bblly exch def} {pop} ifelse + dup bbllx lt {/bbllx exch def} {pop} ifelse +} def + +% Set the bounding box to the values on the stack. +% updatebbox -- +/restorebbox { + /bbury exch def /bburx exch def /bblly exch def /bbllx exch def +} def + +% Push the accumulated bounding box onto the stack. +% -- pushbbox +/pushbbox {bbllx bblly bburx bbury} def + +% Make the relative bounding box relative to the currentpoint. +% inflate +/inflate { + 2 {fontsize 0.2 mul add 4 1 roll} repeat + 2 {fontsize 0.2 mul sub 4 1 roll} repeat +} def + +% Make the relative bounding box relative to the currentpoint. +% relative +/relative { + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll +} def + +% Returns the size of a string appropriate for recshow. +% stringsize +/stringsize { + pushbbox /internalshow load /internalstroke load 7 -1 roll + q + nulldevice 0 0 m + nullinternalshow nullinternalstroke + resetbbox + recshow + /internalstroke exch def /internalshow exch def + pushbbox 8 -4 roll restorebbox + Q +} def + +% Calculate values for string positioning. +/calcval {4 copy + 3 -1 roll sub /widy exch def sub neg /widx exch def + pop pop /dy exch def /dx exch def} def + +% Utilities to position a string. +% First letter (U=upper, C=center, B=baseline, L=lower) +% Second letter (L=left, C=center, R=right) +/align [ +{calcval dx neg widy dy add neg rmoveto} % UL +{calcval dx neg widy 2 div dy add neg rmoveto} % CL +{calcval dx neg 0 rmoveto} % BL +{calcval dx neg dy neg rmoveto} % LL +{calcval widx dx add neg widy dy add neg rmoveto} % UR +{calcval widx dx add neg widy 2 div dy add neg rmoveto} % CR +{calcval widx dx add neg 0 rmoveto} % BR +{calcval widx dx add neg dy neg rmoveto} % LR +{calcval widx 2 div dx add neg widy dy add neg rmoveto} % UC +{calcval widx 2 div dx add neg widy 2 div dy add neg rmoveto} % CC +{calcval widx 2 div dx add neg 0 rmoveto} % BC +{calcval widx 2 div dx add neg dy neg rmoveto} % LC +] def + +/vg&str {m q 1 -1 scale dup stringsize 4 copy align 11 -1 roll get exec + q inflate relative frame exch exec Q recshow Q} def + +end /procDict exch def +%%EndProlog + +%%BeginSetup +save +procDict begin +printColorMap begin +595 842 setpagesize +20 20 20 20 setmargins +0 0 setorigin +1064 599 setsize +fittopage +landscape +imagescale +cliptobounds +setbasematrix +/Helvetica 10 sf +defaultGraphicsState +%%EndSetup + +0.0 0.0 0.0 RG +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +1.0 w +2 J +0 j +10.0 M +[ ] 0.0 d +1.0 1.0 1.0 RG +0.0 0.0 1064.0 599.0 rf +0.0 0.0 0.0 RG +q +0 0 1064 599 rc +q +1.0 1.0 1.0 RG +0.0 0.0 1064.0 599.0 rf +0.0 0.0 1064.0 599.0 rc +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] concat +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +newpath +10.0 -239.0 m +1074.0 -239.0 l +1074.0 360.0 l +10.0 360.0 l +10.0 -239.0 l +h +f +0.501961 0.501961 0.501961 RG +newpath +20.0 -229.0 m +1064.0 -229.0 l +1064.0 329.0 l +20.0 329.0 l +20.0 -229.0 l +h +S +[ 1.0 0.0 0.0 1.0 20.0 -228.0 ] concat +1.0 1.0 1.0 RG +newpath +171.7031 0.5 m +171.7031 10.5 l +163.7031 18.5 l +0.5 18.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +171.7031 0.5 m +171.7031 10.5 l +163.7031 18.5 l +0.5 18.5 l +0.5 0.5 l +h +S +0.501961 0.501961 0.501961 RG +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 2.0 ] concat +0.0 0.0 0.0 RG +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000D\000o\000m\000a\000i\000n\000e\000 \000b\000a\000r\000r\000i\000\350\000r\000e\000 \000d\000e\000 \000p\000\351\000a\000g\000e) show +Q +[ 1.0 0.0 0.0 1.0 10.0 11.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.0 88.4211 ] concat +1.0 1.0 0.0 RG +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 70.0 l +0.0 70.0 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 70.0 l +0.0 70.0 l +h +S +2 J +10.0 M +10.0 21.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000M\000A\000S\000S\000E\000 \000N\000i\000c\000o\000l\000a\000s) show +Q +10.0 35.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000L\000I\000M\000I\000N\000 \000T\000h\000o\000m\000a\000s) show +Q +10.0 49.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0002\000A\000 \000i\000n\000f\000o\000 \000T\000P\0003) show +Q +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 512.5581 66.9474 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +271.835 0.5 l +271.835 82.5 l +0.5 82.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +271.835 0.5 l +271.835 82.5 l +0.5 82.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 102.1756 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-BoldItalic findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000P\000\351\000a\000g\000e) show +Q +[ 1.0 0.0 0.0 1.0 503.5581 306.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 502.5581 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +269.835 0.5 l +269.835 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +269.835 0.5 l +269.835 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 502.5581 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 503.5581 325.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 502.5581 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +269.835 0.5 l +269.835 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +269.835 0.5 l +269.835 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 502.5581 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000e\000h\000i\000c\000u\000l\000e\000D\000e\000t\000e\000c\000t\000\351) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 92.8286 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 96.4058 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000o\000u\000c\000l\000e) show +Q +[ 1.0 0.0 0.0 1.0 603.9639 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 35.4492 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 603.9639 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 38.9297 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000u\000c\000l\000e\000M\000a\000g\000n\000e\000t\000i\000q\000u\000e) show +Q +[ 1.0 0.0 0.0 1.0 642.8936 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 603.9639 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 232.7241 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 236.3013 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 239.7817 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 747.3398 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 747.3398 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 507.5581 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 505.5581 352.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 2.0 17.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000p\000a\000i\000e\000m\000e\000n\000t\000P\000e\000r\000c\000u) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 87.5596 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 91.1367 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 94.7139 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 507.5581 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 98.1943 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 605.7524 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 605.7524 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 507.5581 369.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 505.5581 352.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 503.5581 350.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 502.5581 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 450.8837 228.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +99.5 0.5 l +99.5 69.5 l +0.5 69.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +99.5 0.5 l +99.5 69.5 l +0.5 69.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 7.2156 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000M\000a\000n\000u\000e\000l\000l\000e) show +Q +[ 1.0 0.0 0.0 1.0 441.8837 468.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 440.8837 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 440.8837 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 441.8837 487.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 440.8837 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 440.8837 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 441.8837 512.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 440.8837 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 200.0 0.0 ] concat +0 J +1.0 M +newpath +350.8837 228.0 m +350.8837 149.9474 l +S +2 J +10.0 M +[ 0.0 1.0 -1.0 -0.0 350.8837 149.9474 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 563.9535 228.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +111.0581 0.5 l +111.0581 69.5 l +0.5 69.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +111.0581 0.5 l +111.0581 69.5 l +0.5 69.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000A\000u\000t\000o\000m\000a\000t\000i\000q\000u\000e) show +Q +[ 1.0 0.0 0.0 1.0 554.9535 468.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 553.9535 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +109.0581 0.5 l +109.0581 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +109.0581 0.5 l +109.0581 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 553.9535 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 554.9535 487.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 553.9535 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +109.0581 0.5 l +109.0581 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +109.0581 0.5 l +109.0581 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 553.9535 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 554.9535 512.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 553.9535 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 697.5814 228.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +99.5 0.5 l +99.5 69.5 l +0.5 69.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +99.5 0.5 l +99.5 69.5 l +0.5 69.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 3.7083 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000T\000\351\000l\000\351\000p\000\351\000a\000g\000e) show +Q +[ 1.0 0.0 0.0 1.0 688.5814 468.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 687.5814 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 687.5814 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 688.5814 487.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 687.5814 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 687.5814 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 688.5814 512.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 687.5814 467.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 200.0 0.0 ] concat +0 J +1.0 M +newpath +497.5814 228.0 m +497.5814 149.9474 l +S +2 J +10.0 M +[ 0.0 1.0 -1.0 -0.0 497.5814 149.9474 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 934.0 77.6842 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +99.5 0.5 l +99.5 82.5 l +0.5 82.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +99.5 0.5 l +99.5 82.5 l +0.5 82.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 14.2329 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000B\000a\000r\000r\000i\000\350\000r\000e\000A\000v\000a\000l) show +Q +[ 1.0 0.0 0.0 1.0 925.0 317.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 924.0 316.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 924.0 316.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 925.0 336.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 924.0 316.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 924.0 316.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 929.0 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000o\000u\000v\000r\000i\000r) show +Q +[ 1.0 0.0 0.0 1.0 929.0 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.2026 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 929.0 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 43.7798 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 929.0 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 47.3569 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 929.0 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.8374 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 979.8374 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 979.8374 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 929.0 365.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 927.0 363.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 2.0 17.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 929.0 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000f\000e\000r\000m\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 929.0 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 44.3169 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 929.0 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 47.894 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 929.0 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 51.4712 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 929.0 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 54.9517 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 983.9517 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 983.9517 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 929.0 380.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 927.0 363.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 925.0 361.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 924.0 316.6842 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 200.0 0.0 ] concat +0 J +1.0 M +newpath +584.8931 109.8947 m +734.0 109.8947 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 584.8931 109.8947 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -0.0 -0.0 ] concat +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +f +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +S +[ 1.0 0.0 0.0 1.0 774.8931 348.8947 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 734.0 109.8947 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -77.465 -16.9628 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000a\000r\000r\000i\000e\000r\000e\000A\000v\000a\000l) show +Q +[ 1.0 0.0 0.0 1.0 924.0 348.8947 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -85.8297 -16.9628 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-) show +Q +[ 1.0 0.0 0.0 1.0 924.0 348.8947 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 553.6744 -169.2632 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +99.5 0.5 l +99.5 82.5 l +0.5 82.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +99.5 0.5 l +99.5 82.5 l +0.5 82.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 6.2407 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000B\000a\000n\000d\000e\000a\000u\000A\000m\000o\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 544.6744 70.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 543.6744 69.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 543.6744 69.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 544.6744 89.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 543.6744 69.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +97.5 0.5 l +97.5 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 543.6744 69.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000o\000u\000v\000r\000i\000r) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.2026 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 43.7798 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 47.3569 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.8374 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 599.5118 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 599.5118 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 548.6744 118.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 546.6744 116.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 2.0 17.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000f\000e\000r\000m\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 44.3169 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 47.894 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 51.4712 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 548.6744 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 54.9517 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 603.6261 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 603.6261 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 548.6744 133.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 546.6744 116.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 544.6744 114.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 543.6744 69.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 200.0 0.0 ] concat +0 J +1.0 M +newpath +363.9535 66.9474 m +363.9535 -86.2632 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 363.9535 66.9474 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ -0.0 -1.0 1.0 0.0 -0.0 0.0 ] concat +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +f +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +S +[ 1.0 0.0 0.0 1.0 553.9535 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 363.9535 -86.2632 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -88.8345 11.6471 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000a\000n\000d\000e\000a\000u\000A\000m\000o\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 553.9535 152.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -97.1992 11.6471 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-) show +Q +[ 1.0 0.0 0.0 1.0 553.9535 152.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 6.7344 12.9904 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0001) show +Q +[ 1.0 0.0 0.0 1.0 553.9535 152.7368 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 373.9535 -16.6579 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000P\000\351\000a\000g\000e\000 \000<\000-\000>\000 \000B\000a\000n\000d\000e\000a\000u\000A\000m\000o\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 563.9535 222.3421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 190.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 913.4419 206.5263 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +113.5879 0.5 l +113.5879 82.5 l +0.5 82.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +113.5879 0.5 l +113.5879 82.5 l +0.5 82.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000F\000e\000u\000D\000e\000S\000i\000g\000n\000a\000l\000i\000s\000a\000t\000i\000o\000n) show +Q +[ 1.0 0.0 0.0 1.0 904.4419 446.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 903.4419 445.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +111.5879 0.5 l +111.5879 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +111.5879 0.5 l +111.5879 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 903.4419 445.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 904.4419 465.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 903.4419 445.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +111.5879 0.5 l +111.5879 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +111.5879 0.5 l +111.5879 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 903.4419 445.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000a\000u\000t\000o\000r\000i\000s\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 56.4341 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 60.0112 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 63.5884 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 67.0688 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 975.5107 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 975.5107 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 908.4419 494.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 906.4419 492.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 2.0 17.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000r\000e\000f\000u\000s\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 46.4814 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.0586 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 53.6357 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 908.4419 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 57.1162 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 965.5581 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 965.5581 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 908.4419 509.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 906.4419 492.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 904.4419 490.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 903.4419 445.5263 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +784.8931 149.9474 m +913.4419 206.5263 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 784.8931 149.9474 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 0.915269 0.402843 -0.402843 0.915269 0.0 -0.0 ] concat +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +f +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +S +[ 1.0 0.0 0.0 1.0 774.8931 388.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 913.4419 206.5263 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 255.5814 66.9474 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +119.4409 0.5 l +119.4409 69.5 l +0.5 69.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +119.4409 0.5 l +119.4409 69.5 l +0.5 69.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 7.2576 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000B\000o\000u\000c\000l\000e\000M\000a\000g\000n\000\351\000t\000i\000q\000u\000e) show +Q +[ 1.0 0.0 0.0 1.0 246.5814 306.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 245.5814 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 19.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +117.4409 0.5 l +117.4409 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +117.4409 0.5 l +117.4409 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 245.5814 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 20.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 246.5814 325.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 245.5814 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 44.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +117.4409 0.5 l +117.4409 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +117.4409 0.5 l +117.4409 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 245.5814 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 45.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 250.5814 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000t\000y\000p\000e\000V\000\351\000h\000i\000c\000u\000l\000e) show +Q +[ 1.0 0.0 0.0 1.0 250.5814 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 76.7529 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 250.5814 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 80.3301 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 250.5814 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 83.9072 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 250.5814 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 87.3877 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000o\000i\000d) show +Q +[ 1.0 0.0 0.0 1.0 337.9691 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 337.9691 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 250.5814 354.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 248.5814 352.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 246.5814 350.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 245.5814 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +512.5581 88.4211 m +375.5223 88.4211 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 512.5581 88.4211 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ -1.0 0.0 0.0 -1.0 0.0 0.0 ] concat +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +f +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +S +[ 1.0 0.0 0.0 1.0 502.5581 327.4211 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 375.5223 88.4211 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 415.047 64.4211 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000o\000u\000c\000l\000e\000A\000v\000a\000l) show +Q +[ 1.0 0.0 0.0 1.0 405.047 303.4211 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0001 ] concat +0 J +1.0 M +newpath +512.5581 131.3684 m +375.5223 131.3684 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 512.5581 131.3684 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ -1.0 0.0 0.0 -1.0 0.0 0.0 ] concat +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +f +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +S +[ 1.0 0.0 0.0 1.0 502.5581 370.3685 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0001 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 375.5223 131.3684 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -10.0 239.0001 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 408.5372 107.3684 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000o\000u\000c\000l\000e\000A\000m\000o\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 398.5372 346.3685 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0001 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 841.4884 -51.1579 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +104.4624 0.5 l +104.4624 60.5 l +0.5 60.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +104.4624 0.5 l +104.4624 60.5 l +0.5 60.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 7.677 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000<\000<) show +Q +[ 1.0 0.0 0.0 1.0 840.1654 190.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.4883 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000i\000n\000t\000e\000r\000f\000a\000c\000e) show +Q +[ 1.0 0.0 0.0 1.0 840.1654 190.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 70.1201 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000>\000>) show +Q +[ 1.0 0.0 0.0 1.0 840.1654 190.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 832.4884 188.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 2.0 18.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000S\000y\000s\000t\000\350\000m\000e\000P\000a\000i\000e\000m\000e\000n\000t) show +Q +[ 1.0 0.0 0.0 1.0 832.4884 188.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 831.4884 187.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 35.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +102.4624 0.5 l +102.4624 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +102.4624 0.5 l +102.4624 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 831.4884 187.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 36.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 832.4884 223.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 831.4884 187.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +784.8931 66.9474 m +841.4884 9.8421 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 784.8931 66.9474 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 0.703928 -0.710271 0.710271 0.703928 -0.0 0.0 ] concat +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +f +newpath +0.0 0.0 m +10.0 -5.0 l +20.0 0.0 l +10.0 5.0 l +h +S +[ 1.0 0.0 0.0 1.0 774.8931 305.9474 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 841.4884 9.8421 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ -0.703928 0.710271 -0.710271 -0.703928 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +10.0 -5.0 m +0.0 0.0 l +h +10.0 5.0 m +0.0 0.0 l +h +f +0.0 0.0 0.0 RG +newpath +10.0 -5.0 m +0.0 0.0 l +h +10.0 5.0 m +0.0 0.0 l +h +S +[ 1.0 0.0 0.0 1.0 831.4884 248.8421 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 748.9767 -180.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +116.5083 0.5 l +116.5083 85.5 l +0.5 85.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +116.5083 0.5 l +116.5083 85.5 l +0.5 85.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 1.0 1.0 ] concat +[ 1.0 0.0 0.0 1.0 23.4753 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000<\000<) show +Q +[ 1.0 0.0 0.0 1.0 763.452 62.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.4883 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000a\000c\000t\000o\000r) show +Q +[ 1.0 0.0 0.0 1.0 763.452 62.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.5693 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000>\000>) show +Q +[ 1.0 0.0 0.0 1.0 763.452 62.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 739.9767 60.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.8608 18.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000P\000o\000s\000t\000e\000S\000u\000p\000e\000r\000v\000i\000s\000i\000o\000n) show +Q +[ 1.0 0.0 0.0 1.0 739.9767 60.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 738.9767 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 35.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +114.5083 0.5 l +114.5083 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +114.5083 0.5 l +114.5083 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 738.9767 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 36.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 739.9767 95.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 738.9767 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 60.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +114.5083 0.5 l +114.5083 0.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +114.5083 0.5 l +114.5083 0.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 738.9767 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1.0 61.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000+) show +Q +[ 1.0 0.0 0.0 1.0 743.9767 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 8.7441 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000a\000u\000t\000o\000r\000i\000s\000a\000t\000i\000o\000n) show +Q +[ 1.0 0.0 0.0 1.0 743.9767 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 72.7568 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 743.9767 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 76.334 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 743.9767 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 79.9111 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +[ 1.0 0.0 0.0 1.0 743.9767 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 83.3916 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000b\000o\000o\000l) show +Q +[ 1.0 0.0 0.0 1.0 827.3683 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 827.3683 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 743.9767 124.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 741.9767 122.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 739.9767 120.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 738.9767 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +748.9767 66.9474 m +748.9767 -94.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 748.9767 66.9474 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 748.9767 -94.0 ] concat +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.0 174.3158 ] concat +1.0 1.0 0.0 RG +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 100.0 l +0.0 100.0 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.0 0.0 m +90.0 0.0 l +100.0 10.0 l +90.0 10.0 l +90.0 0.0 l +100.0 10.0 l +100.0 100.0 l +0.0 100.0 l +h +S +2 J +10.0 M +10.0 21.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000V\000e\000r\000s\000i\000o\000n\000 \0000\000.\0001) show +Q +10.0 35.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \0000\0004\000/\0001\0001\000/\0002\0000\0000\0005) show +Q +10.0 49.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 \000\351\000b\000a\000u\000c\000h\000e) show +Q +10.0 63.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000-\000 ) show +Q +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0 J +1.0 M +newpath +621.2892 228.0 m +621.2892 149.9474 l +S +2 J +10.0 M +[ 0.0 1.0 -1.0 -0.0 621.2892 149.9474 ] concat +1.0 1.0 1.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +0.0 0.0 0.0 RG +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.0 50.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1064.0 50.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 542.0 -229.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 542.0 329.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.0 -229.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1064.0 -229.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.0 329.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 1064.0 329.0 ] concat +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 319.361328 329.0 ] concat +0.0 12.0 moveto +q 1 -1 scale +/Helvetica findfont 12.0 scalefont setfont +(Created with Poseidon for UML Community Edition. Not for Commercial Use.) show +Q +[ 1.0 0.0 0.0 1.0 -10.0 239.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +newpath +0.0 0.0 m +0.0 599.0 l +1064.0 599.0 l +1064.0 0.0 l +h +W +Q +end end restore showpage + +%%Trailer +%%EOF diff --git a/GL/BarrierePeage/Passagedusager.eps b/GL/BarrierePeage/Passagedusager.eps new file mode 100755 index 0000000..15e116e --- /dev/null +++ b/GL/BarrierePeage/Passagedusager.eps @@ -0,0 +1,1703 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 20 50 575 792 +%%Creator: FreeHEP Graphics2D Driver +%%Producer: org.freehep.graphicsio.ps.PSGraphics2D Revision: 1.20 +%%For: +%%Title: +%%CreationDate: lundi 2 janvier 2006 16 h 11 CET +%%LanguageLevel: 3 +%%EndComments +%%BeginProlog +100 dict dup begin + +% +% File: org/freehep/graphicsio.ps/PSProlog.txt +% Author: Charles Loomis +% + +% Redefinitions which save some space in the output file. These are also +% the same as the PDF operators. +/q {gsave} def +/Q {grestore} def + +/n {newpath} def +/m {moveto} def +/l {lineto} def +/c {curveto} def +/h {closepath} def + +/re {4 -2 roll moveto + dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} def + +/f {fill} def +/f* {eofill} def +/F {gsave vg&FC fill grestore} def +/F* {gsave vg&FC eofill grestore} def + +/s {closepath stroke} def +/S {stroke} def + +/b {closepath gsave vg&FC fill grestore + gsave stroke grestore newpath} def +/B {gsave vg&FC fill grestore gsave stroke grestore newpath} def +/b* {closepath gsave vg&FC eofill grestore + gsave stroke grestore newpath} def +/B* {gsave vg&FC eofill grestore gsave stroke grestore newpath} def + +/g {1 array astore /vg&fcolor exch def} def +/G {setgray} def +/k {4 array astore /vg&fcolor exch def} def +/K {setcmykcolor} def +/rg {3 array astore /vg&fcolor exch def} def +/RG {setrgbcolor} def + +% Initialize the fill color. +0 0 0 rg + +/vg&FC {mark vg&fcolor aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/vg&DFC {/vg&fcolor exch def} def + +/vg&C {mark exch aload pop + counttomark 1 eq {G} if + counttomark 3 eq {RG} if + counttomark 4 eq {K} if + cleartomark } def + +/w {setlinewidth} def +/j {setlinejoin} def +/J {setlinecap} def +/M {setmiterlimit} def +/d {setdash} def +/i {setflat} def + +/W {clip} def +/W* {eoclip} def + +% Setup the default graphics state. +% (black; 1 pt. linewidth; miter join; butt-ends; solid) +/defaultGraphicsState {0 g 1 w 0 j 0 J [] 0 d} def + +% Emulation of the rectangle operators for PostScript implementations +% which do not implement all Level 2 features. This is an INCOMPLETE +% emulation; only the "x y width height rect..." form is emulated. +/*rf {gsave newpath re fill grestore} def +/*rs {gsave newpath re stroke grestore} def +/*rc {newpath re clip} def +/rf /rectfill where {pop /rectfill}{/*rf} ifelse load def +/rs /rectstroke where {pop /rectstroke}{/*rs} ifelse load def +/rc /rectclip where {pop /rectclip}{/*rc} ifelse load def + +% Emulation of the selectfont operator. This includes a 20% increase in +% the fontsize which is necessary to get sizes similar to the Java fonts. +/*sf {exch findfont exch + dup type /arraytype eq {makefont}{scalefont} ifelse setfont} bind def +/sf /selectfont where {pop {1.2 mul selectfont}}{{1.2 mul *sf}} ifelse def + +% Special version of stroke which allows the dash pattern to continue +% across path segments. (This may be needed for PostScript although +% modern printers seem to do this correctly.) +/vg&stroke { + currentdash pop length 0 eq + {stroke} + { + currentdash /vg&doffset exch def pop + flattenpath + {m vg&resetdash} + {2 copy + currentpoint + 3 -1 roll sub dup mul + 3 1 roll sub dup mul + add sqrt + 3 1 roll l + currentdash 3 -1 roll add setdash} + {} + {h vg&resetdash} + pathforall + stroke + vg&resetdash + } ifelse +} def +/vg&resetdash {currentdash pop vg&doffset setdash} def + +% Initialize variables for safety. +/delta 0 def +/xv 0 def /yv 0 def /width 0 def /height 0 def + +% Initialize to portrait INTERNATIONAL (Letter-height, A4-width) page. +/pw 595 def /ph 791 def /po true def /ftp false def + +% Initialize margins to 20 points. +/ml 20 def /mr 20 def /mt 20 def /mb 20 def + +% Temporary matrices. +/smatrix 0 def /nmatrix 0 def + +% set page size (usage: setpagesize) +/setpagesize {/ph exch def /pw exch def} def + +% set page orientation (usage: portrait or landscape) +/portrait {/po true def} def +/landscape {/po false def} def + +% force natural size for image (usage: naturalsize) +/naturalsize {/ftp false def} def + +% resize image to fill page (usage: fittopage) +/fittopage {/ftp true def} def + +% set margins of the page (usage: setmargins) +/setmargins {/mr exch def /mt exch def /mb exch def /ml exch def} def + +% set the graphic's size (usage: setsize) +/setsize {/gh exch def /gw exch def} def + +% set the graphic's origin (usage: setorigin) +/setorigin {/gy exch def /gx exch def} def + +% calculate image center +/imagecenter {pw ml sub mr sub 2 div ml add + ph mt sub mb sub 2 div mb add} def + +% calculate the necessary scaling +/imagescale {po {gw}{gh} ifelse pw ml sub mr sub div + po {gh}{gw} ifelse ph mt sub mb sub div + 2 copy lt {exch} if pop + ftp not {1 2 copy lt {exch} if pop} if + 1 exch div /sfactor exch def + /gw gw sfactor mul def /gh gh sfactor mul def} def + +% calculate image origin +/imageorigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div po {add}{sub} ifelse} def + +% calculate the clipping origin +/cliporigin {pw ml sub mr sub 2 div ml add + po {gw}{gh} ifelse 2 div sub floor + ph mt sub mb sub 2 div mb add + po {gh}{gw} ifelse 2 div sub floor} def + +% Set the clipping region to the bounding box. +/cliptobounds {cliporigin po {gw}{gh} ifelse 1 add + po {gh}{gw} ifelse 1 add rc} def + +% set the base transformation matrix (usage: setbasematrix) +/setbasematrix {imageorigin translate + po {0}{90} ifelse rotate + sfactor sfactor neg scale + /defaultmatrix matrix currentmatrix def} def + +% The lower-right bias in drawing 1 pt. wide lines. +/bias {q 0.5 0.5 translate} def +/unbias {Q} def + +% Draw a line. (x0 y0 x1 y1 line) +/L {bias n m l S unbias} def + +% Polyline primitive. +/polyline {n m 1 exch 1 exch + {pop currentfile token pop currentfile token pop l} for + } def + +% Draw a polyline (n x0 y0 OPL x1 y1 x2 y2 ... ... xn yn) +/OPL {bias polyline S unbias} def + +% Draw a closed polyline (n x0 y0 CPL x1 y1 x2 y2 ... ... xn yn) +/CPL {bias polyline s unbias} def + +% Draw a filled polyline (n x0 y0 FPL x1 y1 x2 y2 ... ... xn yn) +/FPL {polyline h f*} def + +% Draw an oval. (x y w h OVL) +/OVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width currentlinewidth sub 2 div + height currentlinewidth sub 2 div neg + scale n 0 0 1 5 -2 roll arc + smatrix setmatrix S} def + +% Draw a filled oval. (x y w h FOVL) +/FOVL {matrix currentmatrix /smatrix exch def + /height exch def /width exch def + /yv exch def /xv exch def + width 2 div xv add height 2 div yv add translate + width 2 div + height 2 div neg + scale n 0 0 m 0 0 1 5 -2 roll arc + h smatrix setmatrix f} def + +% Draw a rounded rectangle. (x y w h arcwidth archeight RREC) +/RREC {matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + s} def + +% Draw a filled rounded rectangle. (x y w h arcwidth archeight FRREC) +/FRREC{matrix currentmatrix /smatrix exch def + 2 div /ah exch def + 2 div /aw exch def + /height exch def /width exch def + /yv exch def /xv exch def + aw ah scale matrix + currentmatrix /nmatrix exch def + smatrix setmatrix + n xv width add aw sub yv m + nmatrix setmatrix + currentpoint exch 1 add exch + currentpoint 1 add exch 1 add exch + 1 arct smatrix setmatrix + xv width add yv height add ah sub l + nmatrix setmatrix + currentpoint 1 add + currentpoint exch 1 sub exch 1 add + 1 arct smatrix setmatrix + xv aw add yv height add l + nmatrix setmatrix + currentpoint exch 1 sub exch + currentpoint exch 1 sub exch 1 sub + 1 arct smatrix setmatrix + xv yv ah add l + nmatrix setmatrix + currentpoint 1 sub + currentpoint exch 1 add exch 1 sub + 1 arct smatrix setmatrix + h f} def + +% Draw a string. (string x y STR) +/STR {q m 1 -1 scale recshow Q} def + +% Define basic plot symbols. +/xys {/siz exch def /yv exch def /xv exch def} def +/hline {xys n xv siz 2. div sub yv m siz 0 rlineto S} def +/vline {xys n xv yv siz 2. div sub m 0 siz rlineto S} def +/plus {xys n xv yv siz 2. div sub m 0 siz rlineto + xv siz 2. div sub yv m siz 0 rlineto S} def +/dot {n 2. div 0 360 arc s} def +/fdot {n 2. div 0 360 arc h f} def +/box {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rs} def +/fbox {xys n xv siz 2 sqrt div 2 div sub yv siz 2 sqrt div 2 div sub + siz 2 sqrt div dup rf} def +/tridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto s} def +/ftridn{xys n xv yv siz 3 sqrt div add m + siz 2. div neg 3 sqrt 2. div siz mul neg rlineto + siz 0 rlineto h f} def + +% Symbols defined in terms of the others. +/star {3 copy cross plus} def +/cross {xys q xv yv translate 45 rotate 0 0 siz plus Q} def +/diamond {xys q xv yv translate 45 rotate 0 0 siz box Q} def +/fdiamond {xys q xv yv translate 45 rotate 0 0 siz fbox Q} def +/triup {xys q xv yv translate 180 rotate 0 0 siz tridn Q} def +/ftriup {xys q xv yv translate 180 rotate 0 0 siz ftridn Q} def + +% Define the composite fonts used to print Unicode strings. +% Undefine particular values in an encoding array. +/vg&undef { {exch dup 3 -1 roll /.notdef put} forall } def +/vg&redef { {3 -1 roll dup 4 2 roll put} forall } def + +% usage: key encoding basefontname vg&newbasefont font +/vg&newbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + currentdict + end +definefont +} def + +% usage: key encoding basefontname vg&newskewedbasefont font +/vg&newskewedbasefont { +findfont dup length dict copy + begin + currentdict /FID undef + /Encoding exch def + dup /FontName exch def + exch FontMatrix exch matrix concatmatrix /FontMatrix exch def + currentdict + end +definefont +} def + +% usage: basekey suffix vg&nconcat name +/vg&nconcat { + 2 {dup length string cvs exch} repeat + dup length 3 -1 roll dup length 3 -1 roll add string + dup 0 4 -1 roll dup length 5 1 roll putinterval + dup 4 -2 roll exch putinterval cvn +} def + +%usage: fontname vg&skewmatrix matrix +/vg&skewmatrix { +findfont dup /FontInfo known + { + /FontInfo get dup /ItalicAngle known + { + [ 1 0 4 -1 roll /ItalicAngle get neg dup sin exch cos div 1 0 0 ] + } + {pop matrix} ifelse + } + {pop matrix} ifelse +} def + +% usage: newfontname basefontname vg&newcompositefont -- +/vg&newcompositefont { +/vg&fstyle exch def +/vg&bfont exch def +/vg&fname exch def +<< +/FontStyleBits vg&fstyle +/FontType 0 +/FontMatrix matrix +/FontName vg&fname +/FMapType 2 +/Encoding [ 0 1 255 {pop 6} for ] + dup 16#00 0 put % Latin + dup 16#03 1 put % Greek + dup 16#20 2 put % Punctuation + dup 16#21 3 put % Arrows + dup 16#22 4 put % MathOps + dup 16#27 5 put % Dingbats + +/FDepVector [ +vg&bfont /-UC-Latin vg&nconcat UCLatinEncoding +vg&bfont vg&newbasefont + +vg&bfont vg&skewmatrix +vg&bfont /-UC-Greek vg&nconcat UCGreekEncoding +/Symbol vg&newskewedbasefont + +vg&bfont /-UC-Punctuation vg&nconcat UCPunctuationEncoding +vg&bfont vg&newbasefont + +/Arrows-UC findfont +/MathOps-UC findfont +/Dingbats-UC findfont +/Undefined-UC findfont ] +>> +vg&fname exch definefont pop +} def + +% Null encoding vector (all elements set to .notdef) +/NullEncoding [ 256 {/.notdef} repeat ] def + +% Unicode Latin encoding (unicode codes \u0000-\u00ff) +/UCLatinEncoding + ISOLatin1Encoding dup length array copy + dup 16#60 /grave put + [ 16#90 16#91 16#92 16#93 16#94 16#95 16#96 + 16#97 16#98 16#9a 16#9b 16#9d 16#9e 16#9f + ] vg&undef + def + +% Unicode Greek encoding (unicode codes \u0370-\u03ff) +/UCGreekEncoding + NullEncoding dup length array copy + << 16#91 /Alpha 16#92 /Beta 16#93 /Gamma 16#94 /Delta + 16#95 /Epsilon 16#96 /Zeta 16#97 /Eta 16#98 /Theta + 16#99 /Iota 16#9a /Kappa 16#9b /Lambda 16#9c /Mu + 16#9d /Nu 16#9e /Xi 16#9f /Omicron 16#a0 /Pi + 16#a1 /Rho 16#a3 /Sigma 16#a4 /Tau 16#a5 /Upsilon + 16#a6 /Phi 16#a7 /Chi 16#a8 /Psi 16#a9 /Omega + 16#b1 /alpha 16#b2 /beta 16#b3 /gamma 16#b4 /delta + 16#b5 /epsilon 16#b6 /zeta 16#b7 /eta 16#b8 /theta + 16#b9 /iota 16#ba /kappa 16#bb /lambda 16#bc /mu + 16#bd /nu 16#be /xi 16#bf /omicron 16#c0 /pi + 16#c1 /rho 16#c2 /sigma1 16#c3 /sigma 16#c4 /tau + 16#c5 /upsilon 16#c6 /phi1 16#c7 /chi 16#c8 /psi + 16#c9 /omega 16#7e /semicolon 16#87 /dotmath 16#d1 /theta1 + 16#d2 /Upsilon1 16#d5 /phi 16#d6 /omega1 + >> vg&redef + def + +% Unicode punctuation encoding (unicode codes \u2000-\u206f) +/UCPunctuationEncoding + NullEncoding dup length array copy + << 16#10 /hyphen 16#11 /hyphen 16#12 /endash + 16#13 /emdash 16#18 /quoteleft 16#19 /quoteright + 16#1a /quotesinglbase 16#1b /quotesingle 16#1c /quotedblleft + 16#1d /quotedblright 16#1e /quotedblbase 16#1f /quotedbl + 16#20 /dagger 16#21 /daggerdbl 16#22 /bullet + 16#24 /period 16#26 /ellipsis 16#27 /periodcentered + 16#30 /perthousand 16#44 /fraction + 16#70 /zerosuperior 16#74 /foursuperior 16#75 /fivesuperior + 16#76 /sixsuperior 16#77 /sevensuperior 16#78 /eightsuperior + 16#79 /ninesuperior 16#7b /hyphensuperior 16#7d /parenleftsuperior + 16#7e /parenrightsuperior + 16#80 /zeroinferior 16#84 /fourinferior 16#85 /fiveinferior + 16#81 /oneinferior 16#82 /twoinferior 16#83 /threeinferior + 16#86 /sixinferior 16#87 /seveninferior 16#88 /eightinferior + 16#89 /nineinferior 16#8b /hypheninferior 16#8d /parenleftinferior + 16#8e /parenrightinferior + >> vg&redef + def + +% Unicode mathematical operators encoding (unicode codes \u2200-\u22ff) +/UCMathOpsEncoding + NullEncoding dup length array copy + << 16#00 /universal 16#02 /partialdiff 16#03 /existential + 16#05 /emptyset 16#06 /Delta 16#07 /gradient + 16#08 /element 16#09 /notelement 16#0b /suchthat + 16#0f /product 16#11 /summation 16#12 /minus + 16#15 /fraction 16#17 /asteriskmath 16#19 /bullet + 16#1a /radical 16#1d /proportional 16#1e /infinity + 16#20 /angle 16#23 /bar 16#27 /logicaland + 16#28 /logicalor 16#29 /intersection 16#2a /union + 16#2b /integral 16#34 /therefore 16#36 /colon + 16#3c /similar 16#45 /congruent 16#48 /approxequal + 16#60 /notequal 16#61 /equivalence 16#64 /lessequal + 16#65 /greaterequal 16#82 /propersubset 16#83 /propersuperset + 16#86 /reflexsubset 16#87 /reflexsuperset 16#95 /circleplus + 16#97 /circlemultiply 16#a5 /perpendicular 16#03 /existential + 16#c0 /logicaland 16#c1 /logicalor 16#c2 /intersection + 16#c3 /union 16#c4 /diamond 16#c5 /dotmath + >> vg&redef + def + +% Unicode arrows encoding (unicode codes \u2190-\u21ff) +% Also includes those "Letterlike" unicode characters +% which are available in the symbol font. (unicode codes \u2100-\u214f) +/UCArrowsEncoding + NullEncoding dup length array copy + << 16#11 /Ifraktur 16#1c /Rfraktur 16#22 /trademarkserif + 16#35 /aleph + 16#90 /arrowleft 16#91 /arrowup 16#92 /arrowright + 16#93 /arrowdown 16#94 /arrowboth 16#d0 /arrowdblleft + 16#d1 /arrowdblup 16#d2 /arrowdblright 16#d3 /arrowdbldown + 16#d4 /arrowdblboth + >> vg&redef + def + +/ZapfDingbats findfont /Encoding get +dup length array copy /UCDingbatsEncoding exch def +16#20 1 16#7f { + dup 16#20 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +16#a0 1 16#ff { + dup 16#40 sub exch + UCDingbatsEncoding exch get + UCDingbatsEncoding 3 1 roll put +} for +UCDingbatsEncoding [ 16#c0 1 16#ff {} for ] vg&undef +[ 16#00 16#05 16#0a 16#0b 16#28 16#4c 16#4e 16#53 16#54 16#55 16#57 16#5f + 16#60 16#68 16#69 16#6a 16#6b 16#6c 16#6d 16#6e 16#6f 16#70 16#71 16#72 + 16#73 16#74 16#75 16#95 16#96 16#97 16#b0 16#bf +] vg&undef pop + +% Define the base fonts which don't change. +/Undefined-UC NullEncoding /Helvetica vg&newbasefont pop +/MathOps-UC UCMathOpsEncoding /Symbol vg&newbasefont pop +/Arrows-UC UCArrowsEncoding /Symbol vg&newbasefont pop +/Dingbats-UC UCDingbatsEncoding /ZapfDingbats vg&newbasefont pop + +% Make the SansSerif composite fonts. +/SansSerif /Helvetica 16#00 vg&newcompositefont +/SansSerif-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/SansSerif-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/SansSerif-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Serif composite fonts. +/Serif /Times-Roman 16#00 vg&newcompositefont +/Serif-Bold /Times-Bold 16#01 vg&newcompositefont +/Serif-Italic /Times-Italic 16#02 vg&newcompositefont +/Serif-BoldItalic /Times-BoldItalic 16#03 vg&newcompositefont + +% Make the Monospaced composite fonts. +/Monospaced /Courier 16#00 vg&newcompositefont +/Monospaced-Bold /Courier-Bold 16#01 vg&newcompositefont +/Monospaced-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Monospaced-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + +% Make the Dialog composite fonts. +/Dialog /Helvetica 16#00 vg&newcompositefont +/Dialog-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/Dialog-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/Dialog-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the DialogInput composite fonts. +/DialogInput /Helvetica 16#00 vg&newcompositefont +/DialogInput-Bold /Helvetica-Bold 16#01 vg&newcompositefont +/DialogInput-Italic /Helvetica-Oblique 16#02 vg&newcompositefont +/DialogInput-BoldItalic /Helvetica-BoldOblique 16#03 vg&newcompositefont + +% Make the Typewriter composite fonts (JDK 1.1 only). +/Typewriter /Courier 16#00 vg&newcompositefont +/Typewriter-Bold /Courier-Bold 16#01 vg&newcompositefont +/Typewriter-Italic /Courier-Oblique 16#02 vg&newcompositefont +/Typewriter-BoldItalic /Courier-BoldOblique 16#03 vg&newcompositefont + + +/cfontH { + dup /fontsize exch def /SansSerif exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHB { + dup /fontsize exch def /SansSerif-Bold exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHI { + dup /fontsize exch def /SansSerif-Italic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def +/cfontHBI { + dup /fontsize exch def /SansSerif-BoldItalic exch sf + /vg&fontstyles [{cfontH} {cfontHB} {cfontHI} {cfontHBI}] def +} def + +/cfontT { + dup /fontsize exch def /Serif exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTB { + dup /fontsize exch def /Serif-Bold exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTI { + dup /fontsize exch def /Serif-Italic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def +/cfontTBI { + dup /fontsize exch def /Serif-BoldItalic exch sf + /vg&fontstyles [{cfontT} {cfontTB} {cfontTI} {cfontTBI}] def +} def + +/cfontC { + dup /fontsize exch def /Typewriter exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCB { + dup /fontsize exch def /Typewriter-Bold exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCI { + dup /fontsize exch def /Typewriter-Italic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def +/cfontCBI { + dup /fontsize exch def /Typewriter-BoldItalic exch sf + /vg&fontstyles [{cfontC} {cfontCB} {cfontCI} {cfontCBI}] def +} def + +% Darken or lighten the current color. +/darken {0.7 exch exp 3 copy + q 4 -1 roll vg&C + currentrgbcolor 3 {4 -2 roll mul} repeat + 3 array astore Q} def + +/displayColorMap +<< /Cr [1.00 0.00 0.00] /Cg [0.00 1.00 0.00] + /Cb [0.00 0.00 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.00 0.00] /CGg [0.00 1.00 0.00] + /CGb [0.00 0.00 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.00 0.00] /CIg [0.00 1.00 0.00] + /CIb [0.00 0.00 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/printColorMap +<< /Cr [1.00 0.33 0.33] /Cg [0.33 1.00 0.33] + /Cb [0.33 0.33 1.00] /Cc [1.00 0.00 0.00 0.00] + /Cm [0.00 1.00 0.00 0.00] /Cy [0.00 0.00 1.00 0.00] + /Co [1.00 0.78 0.00] /Cp [1.00 0.67 0.67] + /Cw [1 ] /Cgrl [0.75] + /Cgr [0.50] /Cgrd [0.25] + /Ck [0 ] + /CGr [1.00 0.33 0.33] /CGg [0.33 1.00 0.33] + /CGb [0.33 0.33 1.00] /CGc [1.00 0.00 0.00 0.00] + /CGm [0.00 1.00 0.00 0.00] /CGy [0.00 0.00 1.00 0.00] + /CGo [1.00 0.78 0.00] /CGp [1.00 0.67 0.67] + /CGw [1 ] /CGgrl [0.75] + /CGgr [0.50] /CGgrd [0.25] + /CGk [0 ] + /CIr [1.00 0.33 0.33] /CIg [0.33 1.00 0.33] + /CIb [0.33 0.33 1.00] /CIc [1.00 0.00 0.00 0.00] + /CIm [0.00 1.00 0.00 0.00] /CIy [0.00 0.00 1.00 0.00] + /CIo [1.00 0.78 0.00] /CIp [1.00 0.67 0.67] + /CIw [1 ] /CIgrl [0.75] + /CIgr [0.50] /CIgrd [0.25] + /CIk [0 ] +>> def + +/grayColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [0.75] /CGg [1 ] + /CGb [0.50] /CGc [0.75] + /CGm [0.50] /CGy [1 ] + /CGo [0.75] /CGp [1 ] + /CGw [0 ] /CGgrl [0.25] + /CGgr [0.50] /CGgrd [0.75] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +/bwColorMap +<< /Cr [0 ] /Cg [0 ] + /Cb [0 ] /Cc [0 ] + /Cm [0 ] /Cy [0 ] + /Co [0 ] /Cp [0 ] + /Cw [0 ] /Cgrl [0 ] + /Cgr [0 ] /Cgrd [0 ] + /Ck [0 ] + /CGr [1 ] /CGg [1 ] + /CGb [1 ] /CGc [1 ] + /CGm [1 ] /CGy [1 ] + /CGo [1 ] /CGp [1 ] + /CGw [0 ] /CGgrl [1 ] + /CGgr [1 ] /CGgrd [1 ] + /CGk [1 ] + /CIr [1 ] /CIg [1 ] + /CIb [1 ] /CIc [1 ] + /CIm [1 ] /CIy [1 ] + /CIo [1 ] /CIp [1 ] + /CIw [1 ] /CIgrl [1 ] + /CIgr [1 ] /CIgrd [1 ] + /CIk [1 ] +>> def + +% +% The following routines handle the alignment of and printing of +% tagged strings. +% + +% Predefine the bounding box values. +/bbllx 0 def /bblly 0 def /bburx 0 def /bbury 0 def + +% This routine pops the first unicode character off of a string and returns +% the remainder of the string, the character code of first character, +% and a "true" if the string was non-zero length. +% popfirst +% popfirst +/popfirst { + dup length 1 gt + {dup 0 get /vg&fbyte exch def + dup 1 get /vg&cbyte exch def + dup length 2 sub 2 exch getinterval true} + {pop false} ifelse +} def + +% This routine shows a single unicode character given the font and +% character codes. +% unicharshow -- +/unicharshow { + 2 string + dup 0 5 -1 roll put + dup 1 4 -1 roll put + internalshow +} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and showing the string for recshow. +% internalshow -- +/internalshow {show} def + +% This is an internal routine to alternate between determining the +% bounding box for stringsize and stroking various ornaments. +% internalstroke -- +/internalstroke {S} def + +% Sets up internalshow to use the null device to determine string size. +% -- nullinternalshow -- +/nullinternalshow {/internalshow {false charpath flattenpath + pathbbox updatebbox} def} def + +% Sets up internalstroke to use the null device to determine string size. +% -- nullinternalstroke -- +/nullinternalstroke { + /internalstroke {flattenpath pathbbox updatebbox} def} def + +% This routine tests to see if the character code matches the first +% character of a string. +% testchar +/testchar {exch dup 3 -1 roll 0 get eq} def + +% Raise the text baseline for superscripts. +% -- raise -- +/raise { + 0 fontsize 2 div rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-raise the text baseline for superscripts. +% -- unraise -- +/unraise { + /fontsize fontsize 1.5 mul def + 0 fontsize 2 div neg rmoveto +} def + +% Lower the text baseline for subscripts. +% -- lower -- +/lower { + 0 fontsize 3 div neg rmoveto + /fontsize fontsize 2 mul 3 div def + currentfont /FontName get fontsize sf +} def + +% Un-lower the text baseline for subscripts. +% -- unlower -- +/unlower { + /fontsize fontsize 1.5 mul def + 0 fontsize 3 div rmoveto +} def + +% Compare the top two elements on the stack and leave only the +% larger one. +/maxval {2 copy gt {pop} {exch pop} ifelse} def + +% Tokenize a string. Do not use the usual PostScript token because +% parentheses will not be interpreted correctly because of rescanning +% of the string. +/vg&token {/vg&string exch def /vg&index -1 def /vg&level 0 def +0 2 vg&string length 2 sub { + dup dup 1 add exch vg&string exch get 8 bitshift vg&string 3 -1 roll get or + dup 16#f0fe eq {pop 1}{16#f0ff eq {-1}{0} ifelse} ifelse + /vg&level exch vg&level add def + vg&level 0 eq {/vg&index exch def exit} if pop +} for +vg&index 0 ge { + vg&string vg&index 2 add dup vg&string length exch sub getinterval + vg&index 2 gt {vg&string 2 vg&index 2 sub getinterval}{()} ifelse + true} +{false} ifelse +} bind def + +% Recursively show an unicode string. +% recshow -- +/recshow { + popfirst + { + % Test to see if this is a string attribute. + vg&fbyte 16#f0 and 16#e0 eq + { + q + + % Font style. + currentfont dup /FontStyleBits known {/FontStyleBits get}{pop 0} ifelse + vg&cbyte or vg&fontstyles exch get fontsize exch exec + + vg&token pop recshow currentpoint Q m recshow + } + { + vg&fbyte 16#F8 and 16#F0 eq { + + % Superscript and/or subscript. + vg&cbyte 16#00 eq { + vg&token pop exch vg&token pop 3 -1 roll + q raise recshow unraise currentpoint pop Q exch + q lower recshow unlower currentpoint pop Q + maxval currentpoint exch pop m recshow } if + + % Strikeout. + vg&cbyte 16#01 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll fontsize 3 div add moveto + fontsize 3 div add lineto internalstroke Q + recshow} if + + % Underline. + vg&cbyte 16#02 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dashed underline. + vg&cbyte 16#03 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J [ vg&uthick 5 mul vg&uthick 2 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Dotted underline. + vg&cbyte 16#04 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 1 J [ 0 vg&uthick 3 mul] 0 d + vg&underline vg&uthick w + currentpoint 4 -2 roll vg&uoffset add moveto + vg&uoffset add lineto internalstroke Q + recshow} if + + % Thick underline. + vg&cbyte 16#05 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Gray thick underline. + vg&cbyte 16#06 eq { + vg&token pop currentpoint 3 -1 roll recshow + q 0 J vg&underline vg&uthick 2 mul w 0.5 setgray + currentpoint 4 -2 roll vg&uoffset vg&uthick 2 div sub add moveto + vg&uoffset vg&uthick 2 div sub add lineto internalstroke Q + recshow} if + + % Overbar. + vg&cbyte 16#07 eq { + vg&token pop dup stringsize relative 4 1 roll pop pop exch + 3 -1 roll recshow + q 0 J vg&underline vg&uthick w + vg&uoffset neg add dup currentpoint pop exch m l internalstroke Q + recshow} if + } + { + vg&fbyte vg&cbyte unicharshow recshow + } ifelse + } ifelse + } if +} def + +% Get the underline position and thickness from the current font. +/vg&underline { + +currentfont dup /FontType get 0 eq {/FDepVector get 0 get} if +dup dup /FontInfo known { + /FontInfo get dup + dup /UnderlinePosition known { + /UnderlinePosition get /vg&uoffset exch def + } + { + pop /vg&uoffset 0 def + } ifelse + dup /UnderlineThickness known { + /UnderlineThickness get /vg&uthick exch def + } + { + pop /vg&uthick 0 def + } ifelse +} +{ + pop /vg&uoffset 0 def /vg&uthick 0 def +} ifelse +/FontMatrix get +currentfont dup /FontType get 0 eq +{/FontMatrix get matrix concatmatrix}{pop} ifelse +dup 0 vg&uoffset 3 -1 roll transform /vg&uoffset exch def pop +0 vg&uthick 3 -1 roll transform /vg&uthick exch def pop +} def + +% Make a frame with the coordinates on the stack. +% frame -- +/frame {4 copy m 3 1 roll exch l 4 -2 roll l l h} def + +% Resets the accumulated bounding box to a degenerate box at the +% current point. +% -- resetbbox -- +/resetbbox { + currentpoint 2 copy + /bbury exch def + /bburx exch def + /bblly exch def + /bbllx exch def +} def + +% Update the accumulated bounding box. +% updatebbox -- +/updatebbox { + dup bbury gt {/bbury exch def} {pop} ifelse + dup bburx gt {/bburx exch def} {pop} ifelse + dup bblly lt {/bblly exch def} {pop} ifelse + dup bbllx lt {/bbllx exch def} {pop} ifelse +} def + +% Set the bounding box to the values on the stack. +% updatebbox -- +/restorebbox { + /bbury exch def /bburx exch def /bblly exch def /bbllx exch def +} def + +% Push the accumulated bounding box onto the stack. +% -- pushbbox +/pushbbox {bbllx bblly bburx bbury} def + +% Make the relative bounding box relative to the currentpoint. +% inflate +/inflate { + 2 {fontsize 0.2 mul add 4 1 roll} repeat + 2 {fontsize 0.2 mul sub 4 1 roll} repeat +} def + +% Make the relative bounding box relative to the currentpoint. +% relative +/relative { + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll + currentpoint 3 -1 roll add 3 1 roll add exch 4 2 roll +} def + +% Returns the size of a string appropriate for recshow. +% stringsize +/stringsize { + pushbbox /internalshow load /internalstroke load 7 -1 roll + q + nulldevice 0 0 m + nullinternalshow nullinternalstroke + resetbbox + recshow + /internalstroke exch def /internalshow exch def + pushbbox 8 -4 roll restorebbox + Q +} def + +% Calculate values for string positioning. +/calcval {4 copy + 3 -1 roll sub /widy exch def sub neg /widx exch def + pop pop /dy exch def /dx exch def} def + +% Utilities to position a string. +% First letter (U=upper, C=center, B=baseline, L=lower) +% Second letter (L=left, C=center, R=right) +/align [ +{calcval dx neg widy dy add neg rmoveto} % UL +{calcval dx neg widy 2 div dy add neg rmoveto} % CL +{calcval dx neg 0 rmoveto} % BL +{calcval dx neg dy neg rmoveto} % LL +{calcval widx dx add neg widy dy add neg rmoveto} % UR +{calcval widx dx add neg widy 2 div dy add neg rmoveto} % CR +{calcval widx dx add neg 0 rmoveto} % BR +{calcval widx dx add neg dy neg rmoveto} % LR +{calcval widx 2 div dx add neg widy dy add neg rmoveto} % UC +{calcval widx 2 div dx add neg widy 2 div dy add neg rmoveto} % CC +{calcval widx 2 div dx add neg 0 rmoveto} % BC +{calcval widx 2 div dx add neg dy neg rmoveto} % LC +] def + +/vg&str {m q 1 -1 scale dup stringsize 4 copy align 11 -1 roll get exec + q inflate relative frame exch exec Q recshow Q} def + +end /procDict exch def +%%EndProlog + +%%BeginSetup +save +procDict begin +printColorMap begin +595 842 setpagesize +20 20 20 20 setmargins +0 0 setorigin +567 425 setsize +fittopage +landscape +imagescale +cliptobounds +setbasematrix +/Helvetica 10 sf +defaultGraphicsState +%%EndSetup + +0.0 0.0 0.0 RG +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +1.0 w +2 J +0 j +10.0 M +[ ] 0.0 d +1.0 1.0 1.0 RG +0.0 0.0 567.0 425.0 rf +0.0 0.0 0.0 RG +q +0 0 567 425 rc +q +1.0 1.0 1.0 RG +0.0 0.0 567.0 425.0 rf +0.0 0.0 567.0 425.0 rc +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] concat +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +newpath +260.0 -39.0 m +827.0 -39.0 l +827.0 386.0 l +260.0 386.0 l +260.0 -39.0 l +h +f +0.501961 0.501961 0.501961 RG +newpath +270.0 -29.0 m +817.0 -29.0 l +817.0 355.0 l +270.0 355.0 l +270.0 -29.0 l +h +S +[ 1.0 0.0 0.0 1.0 510.0 20.0 ] concat +1.0 1.0 1.0 RG +newpath +69.9248 0.5 m +69.9248 305.5 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +69.9248 0.5 m +69.9248 305.5 l +S +0.501961 0.501961 0.501961 RG +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +127.778799 0.5 l +127.778799 25.5 l +0.5 25.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +127.778799 0.5 l +127.778799 25.5 l +0.5 25.5 l +h +S +0.501961 0.501961 0.501961 RG +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 4.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +0.501961 0.501961 0.501961 RG +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 0.0 0.0 RG +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000L\000i\000f\000e\000l\000i\000n\000e\000_\0006) show +Q +newpath +0.0 12.5 m +50.987792 12.5 l +S +[ 1.0 0.0 0.0 1.0 256.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.9878 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +newpath +0.0 12.5 m +3.480468 12.5 l +S +[ 1.0 0.0 0.0 1.0 256.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 54.4683 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Italic findfont 11.0 scalefont setfont +(\000B\000o\000r\000n\000e\000P\000\351\000a\000g\000e) show +Q +newpath +0.0 12.5 m +61.810546 12.5 l +S +[ 1.0 0.0 0.0 1.0 310.4683 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 256.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 254.0 63.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 250.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 250.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 59.1394 183.5237 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +9.5 0.5 l +9.5 100.9763 l +0.5 100.9763 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +9.5 0.5 l +9.5 100.9763 l +0.5 100.9763 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 250.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 300.0 20.0 ] concat +1.0 1.0 1.0 RG +newpath +91.3203 0.5 m +91.3203 305.5 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +91.3203 0.5 m +91.3203 305.5 l +S +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +167.0039 0.5 l +167.0039 25.5 l +0.5 25.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +167.0039 0.5 l +167.0039 25.5 l +0.5 25.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 4.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000u\000n\000e\000B\000o\000u\000c\000l\000e) show +Q +newpath +0.0 12.5 m +54.634765 12.5 l +S +[ 1.0 0.0 0.0 1.0 46.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 54.6348 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +newpath +0.0 12.5 m +3.480468 12.5 l +S +[ 1.0 0.0 0.0 1.0 46.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 58.1152 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000B\000o\000u\000c\000l\000e\000M\000a\000g\000n\000\351\000t\000i\000q\000u\000e) show +Q +newpath +0.0 12.5 m +97.388671 12.5 l +S +[ 1.0 0.0 0.0 1.0 104.1152 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 46.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 44.0 63.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 40.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 660.0 20.0 ] concat +1.0 1.0 1.0 RG +newpath +63.9824 0.5 m +63.9824 305.5 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +[ 5.0 5.0 ] 0.0 d +newpath +63.9824 0.5 m +63.9824 305.5 l +S +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +0.5 0.5 m +118.2178 0.5 l +118.2178 25.5 l +0.5 25.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +0.5 0.5 m +118.2178 0.5 l +118.2178 25.5 l +0.5 25.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 5.5 ] concat +1.0 1.0 1.0 RG +newpath +7.5 4.0 m +5.0 4.0 5.0 0.0 7.5 0.0 c +10.0 0.0 10.0 4.0 7.5 4.0 c +7.5 4.0 m +7.5 5.0 l +2.5 5.0 m +12.5 5.0 l +7.5 5.0 m +7.5 10.0 l +7.5 10.0 m +2.5 15.0 l +7.5 10.0 m +12.5 15.0 l +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +7.5 4.0 m +5.0 4.0 5.0 0.0 7.5 0.0 c +10.0 0.0 10.0 4.0 7.5 4.0 c +7.5 4.0 m +7.5 5.0 l +2.5 5.0 m +12.5 5.0 l +7.5 5.0 m +7.5 10.0 l +7.5 10.0 m +2.5 15.0 l +7.5 10.0 m +12.5 15.0 l +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 400.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 20.0 4.0 ] concat +[ 1.0 0.0 0.0 1.0 2.0 2.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000u\000n\000U\000s\000a\000g\000e\000r) show +Q +newpath +0.0 12.5 m +50.445312 12.5 l +S +[ 1.0 0.0 0.0 1.0 422.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 50.4453 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000:) show +Q +newpath +0.0 12.5 m +3.480468 12.5 l +S +[ 1.0 0.0 0.0 1.0 422.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 53.9258 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000U\000s\000a\000g\000e\000r) show +Q +newpath +0.0 12.5 m +36.791992 12.5 l +S +[ 1.0 0.0 0.0 1.0 475.9258 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 422.0 65.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 420.0 63.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 400.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 400.0 59.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 270.0 -29.0 ] concat +1.0 1.0 1.0 RG +newpath +113.1563 0.5 m +113.1563 10.5 l +105.1563 18.5 l +0.5 18.5 l +0.5 0.5 l +h +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +113.1563 0.5 m +113.1563 10.5 l +105.1563 18.5 l +0.5 18.5 l +0.5 0.5 l +h +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 4.0 2.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000P\000a\000s\000s\000a\000g\000e\000 \000d\000'\000u\000s\000a\000g\000e\000r) show +Q +[ 1.0 0.0 0.0 1.0 10.0 10.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 421.0 203.5237 ] concat +0 J +1.0 M +newpath +-37.2481 0.0 m +148.1394 0.0 l +S +2 J +10.0 M +[ -1.0 0.0 0.0 -1.0 148.1394 0.0 ] concat +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 161.0 242.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 3.7205 -23.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0001\000\051\000 ) show +Q +[ 1.0 0.0 0.0 1.0 164.7205 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 14.0132 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif-Bold findfont 11.0 scalefont setfont +(\000.) show +Q +[ 1.0 0.0 0.0 1.0 164.7205 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 16.731 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000e\000h\000i\000c\000u\000l\000e\000D\000e\000t\000e\000c\000t\000\351) show +Q +[ 1.0 0.0 0.0 1.0 181.4515 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 84.0845 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\050) show +Q +[ 1.0 0.0 0.0 1.0 181.4515 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 87.6616 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000 ) show +Q +[ 1.0 0.0 0.0 1.0 269.1131 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 181.4515 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 91.1421 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000\051) show +Q +[ 1.0 0.0 0.0 1.0 181.4515 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 181.4515 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 164.7205 219.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 161.0 242.5237 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 421.0 305.0 ] concat +0 J +1.0 M +[ 10.0 10.0 ] 0.0 d +newpath +148.1394 0.0 m +-37.2481 0.0 l +S +2 J +10.0 M +[ ] 0.0 d +[ 1.0 0.0 0.0 1.0 -37.2481 0.0 ] concat +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +f +newpath +12.0 -6.0 m +0.0 0.0 l +12.0 6.0 l +h +S +[ 1.0 0.0 0.0 1.0 161.0 344.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 6.3968 -15.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\0002\000\051\000 ) show +Q +[ 1.0 0.0 0.0 1.0 167.3968 329.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 14.0132 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +0 J +1.0 M +newpath +S +2 J +10.0 M +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +1.0 1.0 1.0 RG +newpath +f +0.0 0.0 0.0 RG +newpath +S +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] concat +0.0 11.0 moveto +q 1 -1 scale +/SansSerif findfont 11.0 scalefont setfont +(\000v\000e\000h\000i\000c\000u\000l\000e\000D\000e\000t\000e\000c\000t\000\351) show +Q +[ 1.0 0.0 0.0 1.0 181.41 329.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 181.41 329.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 167.3968 329.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 161.0 344.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 270.0 163.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 817.0 163.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 543.5 -29.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 543.5 355.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 270.0 -29.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 817.0 -29.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 270.0 355.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 817.0 355.0 ] concat +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 320.861328 355.0 ] concat +0.0 12.0 moveto +q 1 -1 scale +/Helvetica findfont 12.0 scalefont setfont +(Created with Poseidon for UML Community Edition. Not for Commercial Use.) show +Q +[ 1.0 0.0 0.0 1.0 -260.0 39.0 ] defaultmatrix matrix concatmatrix setmatrix +[ 1.0 0.0 0.0 1.0 0.0 0.0 ] defaultmatrix matrix concatmatrix setmatrix +newpath +0.0 0.0 m +0.0 425.0 l +567.0 425.0 l +567.0 0.0 l +h +W +Q +end end restore showpage + +%%Trailer +%%EOF diff --git a/GL/BarrierePeage/barrierePeage.zuml b/GL/BarrierePeage/barrierePeage.zuml new file mode 100755 index 0000000..8ce5db9 Binary files /dev/null and b/GL/BarrierePeage/barrierePeage.zuml differ diff --git a/GL/BarrierePeage/barrierePeage2.zuml b/GL/BarrierePeage/barrierePeage2.zuml new file mode 100755 index 0000000..cd6cd2b Binary files /dev/null and b/GL/BarrierePeage/barrierePeage2.zuml differ diff --git a/GL/BarrierePeage/barrierePeage3.zuml b/GL/BarrierePeage/barrierePeage3.zuml new file mode 100755 index 0000000..4450b12 Binary files /dev/null and b/GL/BarrierePeage/barrierePeage3.zuml differ diff --git a/GL/BarrierePeage/barrierePeage4.zuml b/GL/BarrierePeage/barrierePeage4.zuml new file mode 100755 index 0000000..2c469e5 Binary files /dev/null and b/GL/BarrierePeage/barrierePeage4.zuml differ diff --git a/GL/BarrierePeage/barrierePeage5.zuml b/GL/BarrierePeage/barrierePeage5.zuml new file mode 100755 index 0000000..9ed4d49 Binary files /dev/null and b/GL/BarrierePeage/barrierePeage5.zuml differ diff --git a/GL/BarrierePeage/rapport.sxw b/GL/BarrierePeage/rapport.sxw new file mode 100755 index 0000000..03e0828 Binary files /dev/null and b/GL/BarrierePeage/rapport.sxw differ diff --git a/GUI/TP-Painter/MyPainter.cpp b/GUI/TP-Painter/MyPainter.cpp new file mode 100755 index 0000000..f96488f --- /dev/null +++ b/GUI/TP-Painter/MyPainter.cpp @@ -0,0 +1,81 @@ + /** + * #(@)MyPainter.cpp ENSICAEN 2005-02-22 + * + * @author MASSE Nicolas (2004-Groupe4-LIMIN) + * @author LIMIN Thomas (2004-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait: Detail de ce qui a ete fait. + * + * @Afaire: Detail de ce qui n'a pas ete fait. + */ + + +#include "MyPainter.h" +#include +#include + + +MyPainter::MyPainter() { + QMenuBar * menu = new QMenuBar(this); + QPopupMenu * file = new QPopupMenu( menu ); + menu->insertItem( "&File", file ); +} + + +void MyPainter::paintEvent (QPaintEvent * e) { + + QPainter paint(this); + paint.fillRect(this->rect(), Qt::black); + + + if(!_points.empty()) { + + paint.setPen(Qt::green); + + std::list::iterator it = _points.begin(); + std::list::iterator end = _points.end(); + + + QPoint a = *it; + QPoint b; + + + for (++it; it != end; ++it) { + QPoint b = *it; + paint.drawLine(a, b); + a = b; + } + + } + +} + +void MyPainter::mousePressEvent ( QMouseEvent * e ) { + QPoint o(e->pos()); + _points.push_back(o); + update(); +} + diff --git a/GUI/TP-Painter/MyPainter.h b/GUI/TP-Painter/MyPainter.h new file mode 100755 index 0000000..7adf4cd --- /dev/null +++ b/GUI/TP-Painter/MyPainter.h @@ -0,0 +1,66 @@ + /** + * #(@)MyPainter.h ENSICAEN 2006-02-22 + * + * @author MASSE Nicolas (2004-Groupe4-LIMIN) + * @author LIMIN Thomas (2004-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait: Detail de ce qui a ete fait. + * + * @Afaire: Detail de ce qui n'a pas ete fait. + */ + +#ifndef _MYPAINTER_H_ +#define _MYPAINTER_H_ + +#include +#include + +class MyPainter : public QWidget { + + // Pour indiquer a "moc" que cette classe + // possede des signaux et des slots. + Q_OBJECT + + public: + + MyPainter(); + + + protected: + + virtual void paintEvent (QPaintEvent * e); + + void mousePressEvent ( QMouseEvent * e ); + + + private: + std::list _points; + + +}; + + +#endif /* _MYPAINTER_H_ */ diff --git a/GUI/TP-Painter/myPainter.cpp b/GUI/TP-Painter/myPainter.cpp new file mode 100755 index 0000000..cf0f34d --- /dev/null +++ b/GUI/TP-Painter/myPainter.cpp @@ -0,0 +1,57 @@ + /** + * #(@)myPainter.cpp ENSICAEN 2006-02-22 + * + * @author MASSE Nicolas (2004-Groupe4-LIMIN) + * @author LIMIN Thomas (2004-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait: Detail de ce qui a ete fait. + * + * @Afaire: Detail de ce qui n'a pas ete fait. + */ + + +#include +#include "MyPainter.h" + +int main(int argc, char * argv[]) { + QApplication app(argc,argv); + QWidget * mainWidget = new MyPainter(); + + // Connecte le signal askForQuit() émit par + // le Widget principal au slot quit() de l'objet + // application. + QObject::connect(mainWidget,SIGNAL(askForQuit()), + &app,SLOT(quit())); + + // Precise a l'objet application quel est le widget de + // la fenetre principale. + app.setMainWidget(mainWidget); + // Provoque l'affichage de la fenetre principale. + mainWidget->show(); + + // Passe la main a la boucle d'evenements. + return app.exec(); +} diff --git a/GUI/TP-Painter/myPainter.pro b/GUI/TP-Painter/myPainter.pro new file mode 100755 index 0000000..3fdef47 --- /dev/null +++ b/GUI/TP-Painter/myPainter.pro @@ -0,0 +1,5 @@ +TEMPLATE = app +CONFIG += qt warn_on release +SOURCES = myPainter.cpp MyPainter.cpp +HEADERS = MyPainter.h +TARGET = myPainter \ No newline at end of file diff --git a/GUI/TP1/ColorWidget.cpp b/GUI/TP1/ColorWidget.cpp new file mode 100755 index 0000000..7a3a0cf --- /dev/null +++ b/GUI/TP1/ColorWidget.cpp @@ -0,0 +1,27 @@ +#include "ColorWidget.h" + + + +ColorWidget::ColorWidget(QWidget * parent):QWidget(parent) +{ + setBackgroundMode(NoBackground); + theColor = new QColor(10,20,30); +} + +void ColorWidget::paintEvent(QPaintEvent * ) +{ + QPainter painter(this); + // painter.fillRect(2,2,10,10,QBrush(QColor(10,20,30))); + painter.fillRect(rect(),QBrush(*theColor)); +} + +void ColorWidget::changeColor() +{ + int r = rand()%255; + int g = rand()%255; + int b = rand()%255; + + theColor->setRgb(r,g,b); + paintEvent(0); + emit colorChanged(r,g,b); +} diff --git a/GUI/TP1/ColorWidget.h b/GUI/TP1/ColorWidget.h new file mode 100755 index 0000000..d5e79b2 --- /dev/null +++ b/GUI/TP1/ColorWidget.h @@ -0,0 +1,67 @@ +/** + * @file ColorWidget.h + * @author Sebastien Fourey + * @date Mon Jan 3 2005 + * + * @brief Classe implementant un Widget qui se remplit + * avec une couleur de fond et change celle-ci de maniere + * aleatoire lorsque qu'un slot (une methode) est appelee. + * + */ + +#ifndef COLORWIDGET_H +#define COLORWIDGET_H +#include +#include +#include +#include + +/** + * Widget personnalise qui se remplit d'une couleur + * et change celle-ci aleatoirement sur demande. + * + */ +class ColorWidget : public QWidget { + // Pour indiquer a "moc" que cette classe + // possede des signaux et des slots. + Q_OBJECT + +public: + + ColorWidget():theColor(0) { } + ColorWidget(QWidget *); + ~ColorWidget() { delete theColor; } + +protected: + /** + * Implemente la reponse du Widget aux + * evenement de rafraichissement. + * @param e L'evenement recu. + */ + void paintEvent(QPaintEvent*); + +public slots: + + /** + * Slot declanchant le changement de la couleur + * par tirage aleatoire. + */ + void changeColor(); + +signals: + + /** + * Signal emit lorsque la couleur a ete changee. + * + * @param int Composante rouge. + * @param int Composant verte. + * @param int Composante bleue. + */ + void colorChanged(int r, int g, int b); +private: + QColor * theColor; +}; + +#endif + + diff --git a/GUI/TP1/MainWidget.cpp b/GUI/TP1/MainWidget.cpp new file mode 100755 index 0000000..d5268d5 --- /dev/null +++ b/GUI/TP1/MainWidget.cpp @@ -0,0 +1,89 @@ +#include "MainWidget.h" + +MainWidget::MainWidget() { + + setGeometry(100,100,300,300); + + label = new QLabel("Colors, signals, and slots",this); + label->setGeometry(10,10,290,30); + label->setFont(QFont("Arial",14,QFont::Bold)); + + lineDisplay = new QLineEdit("",this); + lineDisplay->setGeometry(50,110,200,30); + lineDisplay->setAlignment(Qt::AlignHCenter); + lineDisplay->setReadOnly(true); + + lineDisplay2 = new QLineEdit("Mon Super Widget",this); + lineDisplay2->setGeometry(50,70,200,30); + lineDisplay2->setAlignment(Qt::AlignHCenter); + lineDisplay2->setReadOnly(true); + + colorWidget = new ColorWidget(this); + colorWidget->setGeometry(100,160,80,30); + + pushButtonRandomColor = new QPushButton("Random color",this); + pushButtonRandomColor->setGeometry(60,200,160,30); + + pushButtonQuit = new QPushButton("Quitter",this); + pushButtonQuit->setGeometry(100,250,80,30); + + QObject::connect(pushButtonQuit,SIGNAL(clicked()), + this,SLOT(quitPressed())); + + QObject::connect(pushButtonRandomColor,SIGNAL(clicked()), + colorWidget,SLOT(changeColor())); + + QObject::connect(colorWidget,SIGNAL(colorChanged(int,int,int)), + this,SLOT(colorChanged(int,int,int))); + + + +// setMouseTracking(true); + setCaption("pouet"); + + displayPosition = false; +} + +void MainWidget::quitPressed() +{ + emit askForQuit(); +} + +void MainWidget::colorChanged(int r, int g, int b) +{ + char texte[255]; + sprintf(texte,"Color: R(%d) G(%d) B(%d)",r,g,b); + lineDisplay->setText(texte); +} + +void MainWidget::mouseMoveEvent(QMouseEvent * e) { + if (displayPosition) { + char texte[255]; + sprintf(texte,"(%d, %d)",e->x(), e->y()); + lineDisplay2->setText(texte); + } +} + + +void MainWidget::mousePressEvent(QMouseEvent * e) { + displayPosition = true; + + switch (e->button()) { + case Qt::LeftButton: + lineDisplay2->setAlignment(Qt::AlignLeft); + break; + case Qt::RightButton: + lineDisplay2->setAlignment(Qt::AlignRight); + break; + case Qt::MidButton: + lineDisplay2->setAlignment(Qt::AlignHCenter); + break; + default: + break; + } +} + +void MainWidget::mouseReleaseEvent(QMouseEvent * e) { + displayPosition = false; +} + diff --git a/GUI/TP1/MainWidget.h b/GUI/TP1/MainWidget.h new file mode 100755 index 0000000..5c5eab9 --- /dev/null +++ b/GUI/TP1/MainWidget.h @@ -0,0 +1,55 @@ +/** + * @file MainWidget.h + * @author Sebastien Fourey + * @date Jan 3 2005 + * + * @brief Classe Widget principal de l'application + * + */ + +#ifndef MAINWIDGET_H +#define MAINWIDGET_H +#include +#include +#include +#include +using namespace std; + +#include "ColorWidget.h" + +/** + * Classe du widget de la fenetre principale + * de l'application. + */ +class MainWidget : public QWidget { + + // Pour indiquer a "moc" que cette classe + // possede des signaux et des slots. + Q_OBJECT + + +public: + MainWidget(); + +signals: + void askForQuit(); + +public slots: + void quitPressed(); + void colorChanged(int r, int g, int b); + +protected: + void mouseMoveEvent(QMouseEvent * e); + void mousePressEvent(QMouseEvent * e); + void mouseReleaseEvent(QMouseEvent * e); + +private: + QLabel *label; + QPushButton *pushButtonQuit, *pushButtonRandomColor; + QLineEdit *lineDisplay; + QLineEdit *lineDisplay2; + ColorWidget * colorWidget; + bool displayPosition; +}; + +#endif diff --git a/GUI/TP1/main.cpp b/GUI/TP1/main.cpp new file mode 100755 index 0000000..de7b2ae --- /dev/null +++ b/GUI/TP1/main.cpp @@ -0,0 +1,35 @@ +/** + * @file main.cc + * @author Sebastien Fourey + * @date Mon Jan 3 2005 + * + * @brief Programme principale d'un exemple + * d'application Qt. + * + */ + +#include +#include "MainWidget.h" +#include "ColorWidget.h" + +int +main(int argc, char * argv[]) +{ + QApplication app(argc,argv); + QWidget * mainWidget = new MainWidget(); + + // Connecte le signal askForQuit() émit par + // le Widget principal au slot quit() de l'objet + // application. + QObject::connect(mainWidget,SIGNAL(askForQuit()), + &app,SLOT(quit())); + + // Precise a l'objet application quel est le widget de + // la fenetre principale. + app.setMainWidget(mainWidget); + // Provoque l'affichage de la fenetre principale. + mainWidget->show(); + + // Passe la main a la boucle d'evenements. + return app.exec(); +} diff --git a/GUI/TP1/main.pro b/GUI/TP1/main.pro new file mode 100755 index 0000000..aa794e3 --- /dev/null +++ b/GUI/TP1/main.pro @@ -0,0 +1,5 @@ +TEMPLATE = app +CONFIG += qt warn_on release +SOURCES = MainWidget.cpp ColorWidget.cpp main.cpp +HEADERS = MainWidget.h ColorWidget.h +TARGET = main diff --git a/GUI/TP2/CodeValidator.cpp b/GUI/TP2/CodeValidator.cpp new file mode 100755 index 0000000..30d24af --- /dev/null +++ b/GUI/TP2/CodeValidator.cpp @@ -0,0 +1,19 @@ + +#include "CodeValidator.h" + + +CodeValidator::CodeValidator(QObject * parent, const char * name) + : QRegExpValidator(QRegExp("\\d{1,10}[A-Za-z]"), parent, name) { +}; + +QValidator::State CodeValidator::validate(QString & input, int & pos) { + QValidator::State st = QRegExpValidator::validate(input, pos); + + if (st != QValidator::Invalid) { + unsigned int sl = input.length(); + + } + + return st; + +} diff --git a/GUI/TP2/CodeValidator.h b/GUI/TP2/CodeValidator.h new file mode 100755 index 0000000..d87f651 --- /dev/null +++ b/GUI/TP2/CodeValidator.h @@ -0,0 +1,18 @@ +#ifndef CODEVALIDATOR_H +#define CODEVALIDATOR_H + +#include + +class CodeValidator : public QRegExpValidator { + + public: + + CodeValidator(QObject * parent, const char * name = 0); + + QValidator::State validate(QString & input, int & pos); + +}; + + + +#endif /* CODEVALIDATOR_H */ diff --git a/GUI/TP2/MainWidget.cpp b/GUI/TP2/MainWidget.cpp new file mode 100755 index 0000000..54fa8bb --- /dev/null +++ b/GUI/TP2/MainWidget.cpp @@ -0,0 +1,125 @@ +#include "MainWidget.h" + +#include +#include +#include +#include "CodeValidator.h" + +MainWidget::MainWidget() { + + this->setGeometry(10,10,300,350); + + int initialFontSize = 12; + + _label = new QLabel("Widgets, signaux, slots, couleurs, fontes", this); + _label->setGeometry(10,10,280,40); + _label->setFont(QFont("Arial", initialFontSize, QFont::Normal)); + + + _rwTextInput = new QLineEdit("",this); + _rwTextInput->setGeometry(50,70,200,30); + _rwTextInput->setAlignment(Qt::AlignLeft); + + // expression régulière correspondant à la validation simple + //QRegExp rx("\\d|\\w*"); + QValidator * vd = new CodeValidator(this); + _rwTextInput->setValidator(vd); + + _roTextInput = new QLineEdit("",this); + _roTextInput->setGeometry(50,110,200,30); + _roTextInput->setAlignment(Qt::AlignLeft); + _roTextInput->setReadOnly(true); + + QObject::connect(_rwTextInput, SIGNAL(textChanged(const QString &)), + this, SLOT(setText(const QString &))); + + _pushButtonColor = new QPushButton("Couleur",this); + _pushButtonColor->setGeometry(70,150,160,30); + QObject::connect(_pushButtonColor, SIGNAL(clicked()), this, SLOT(btColorPressed())); + + _chooseColor = new QComboBox(false, this); + _chooseColor->setGeometry(90,190,120,30); + _chooseColor->insertItem(QString("Black")); + _chooseColor->insertItem(QString("Blue")); + _chooseColor->insertItem(QString("Green")); + _chooseColor->insertItem(QString("Red")); + _chooseColor->insertItem(QString("Yellow")); + + QObject::connect(_chooseColor, SIGNAL(activated(int)), this, SLOT(colorChanged(int))); + + _slider = new QSlider(6, 20, 1, initialFontSize, Qt::Horizontal, this); + _slider->setGeometry(60,260,170,20); + + _lcd = new QLCDNumber(2, this); + _lcd->setGeometry(230, 245, 40, 40); + _lcd->display(initialFontSize); + QObject::connect(_slider, SIGNAL(valueChanged(int)), + _lcd, SLOT(display(int))); + + + QObject::connect(_slider, SIGNAL(valueChanged(int)), + this, SLOT(fontSizeChanged(int))); + + + _pushButtonQuit = new QPushButton("Quitter",this); + _pushButtonQuit->setGeometry(100,290,80,30); + + QObject::connect(_pushButtonQuit,SIGNAL(clicked()), + this,SLOT(quitPressed())); + + // QObject::connect(_pushButtonColor,SIGNAL(clicked()), + // colorWidget,SLOT(changeColor())); + + //QObject::connect(colorWidget,SIGNAL(colorChanged(int,int,int)), + // this,SLOT(colorChanged(int,int,int))); + + +} + +void MainWidget::quitPressed() { + emit askForQuit(); +} + + + +void MainWidget::setText(const QString & s) { + _roTextInput->setText(s.upper()); +} + +void MainWidget::fontSizeChanged(int fontSize) { + _roTextInput->setFont(QFont("Arial", fontSize ,QFont::Normal)); +} + +void MainWidget::colorChanged(int colorIndex) { + QColor c; + switch(colorIndex) { + case 0: + c = Qt::black; + break; + case 1: + c = Qt::blue; + break; + case 2: + c = Qt::green; + break; + case 3: + c = Qt::red; + break; + case 4: + c = Qt::yellow; + break; + default: + c = Qt::black; + } + + _currentColor = c; + _roTextInput->setPaletteForegroundColor(c); +} + +void MainWidget::btColorPressed() { + QColor c = QColorDialog::getColor(_currentColor); + if (c.isValid()) { + _currentColor = c; + _roTextInput->setPaletteForegroundColor(c); + } +} diff --git a/GUI/TP2/MainWidget.h b/GUI/TP2/MainWidget.h new file mode 100755 index 0000000..b6f73c1 --- /dev/null +++ b/GUI/TP2/MainWidget.h @@ -0,0 +1,51 @@ + +#ifndef MAINWIDGET_H +#define MAINWIDGET_H +#include +#include +#include +#include +#include +#include +#include + +/** + * Classe du widget de la fenetre principale + * de l'application. + */ +class MainWidget : public QWidget { + + // Pour indiquer a "moc" que cette classe + // possede des signaux et des slots. + Q_OBJECT + + +public: + MainWidget(); + +signals: + void askForQuit(); + +public slots: + + void quitPressed(); + void setText(const QString & s); + void fontSizeChanged(int fontSize); + void colorChanged(int colorIndex); + void btColorPressed(); + + +private: + + QLabel * _label; + QLineEdit * _rwTextInput; + QLineEdit * _roTextInput; + QPushButton * _pushButtonColor; + QPushButton * _pushButtonQuit; + QComboBox * _chooseColor; + QSlider * _slider; + QLCDNumber * _lcd; + QColor _currentColor; +}; + +#endif diff --git a/GUI/TP2/main.cpp b/GUI/TP2/main.cpp new file mode 100755 index 0000000..9a79e6e --- /dev/null +++ b/GUI/TP2/main.cpp @@ -0,0 +1,34 @@ +/** + * @file main.cc + * @author Sebastien Fourey + * @date Mon Jan 3 2005 + * + * @brief Programme principale d'un exemple + * d'application Qt. + * + */ + +#include +#include "MainWidget.h" + +int +main(int argc, char * argv[]) +{ + QApplication app(argc,argv); + QWidget * mainWidget = new MainWidget(); + + // Connecte le signal askForQuit() émis par + // le Widget principal au slot quit() de l'objet + // application. + QObject::connect(mainWidget,SIGNAL(askForQuit()), + &app,SLOT(quit())); + + // Precise a l'objet application quel est le widget de + // la fenetre principale. + app.setMainWidget(mainWidget); + // Provoque l'affichage de la fenetre principale. + mainWidget->show(); + + // Passe la main a la boucle d'evenements. + return app.exec(); +} diff --git a/GUI/TP2/main.pro b/GUI/TP2/main.pro new file mode 100755 index 0000000..1202c9b --- /dev/null +++ b/GUI/TP2/main.pro @@ -0,0 +1,5 @@ +TEMPLATE = app +CONFIG += qt warn_on release +SOURCES = MainWidget.cpp CodeValidator.cpp main.cpp +HEADERS = CodeValidator.h MainWidget.h +TARGET = main diff --git a/GUI/TP3/calc/COPYING b/GUI/TP3/calc/COPYING new file mode 100755 index 0000000..5b6e7c6 --- /dev/null +++ b/GUI/TP3/calc/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, 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 show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/GUI/TP3/calc/Doxyfile b/GUI/TP3/calc/Doxyfile new file mode 100755 index 0000000..0de97f9 --- /dev/null +++ b/GUI/TP3/calc/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = calc.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/nicolas/svn_mirror/tp7/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/nicolas/svn_mirror/ENSI_2ndY/GUI/TP3/calc +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = calc.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/GUI/TP3/calc/Makefile b/GUI/TP3/calc/Makefile new file mode 100755 index 0000000..7eced60 --- /dev/null +++ b/GUI/TP3/calc/Makefile @@ -0,0 +1,51 @@ +############################################################################# +# Makefile for building: calc +# Generated by qmake (1.07a) (Qt 3.3.4) on: Thu Feb 16 15:05:01 2006 +# Project: calc.pro +# Template: subdirs +# Command: $(QMAKE) -o Makefile calc.pro +############################################################################# + +MAKEFILE = Makefile +QMAKE = qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +INSTALL_FILE= +INSTALL_DIR = +SUBTARGETS = \ + sub-src + +first: all + +all: Makefile $(SUBTARGETS) + +src/$(MAKEFILE): + @$(CHK_DIR_EXISTS) "src" || $(MKDIR) "src" + cd src && $(QMAKE) src.pro -o $(MAKEFILE) +sub-src: src/$(MAKEFILE) FORCE + cd src && $(MAKE) -f $(MAKEFILE) + +Makefile: calc.pro /usr/qt/3/mkspecs/linux-g++/qmake.conf + $(QMAKE) -o Makefile calc.pro +qmake: qmake_all + @$(QMAKE) -o Makefile calc.pro + +all: $(SUBTARGETS) +qmake_all: src/$(MAKEFILE) + ( [ -d src ] && cd src ; grep "^qmake_all:" $(MAKEFILE) && $(MAKE) -f $(MAKEFILE) qmake_all; ) || true +clean uicables mocables uiclean mocclean lexclean yaccclean : qmake_all FORCE + ( [ -d src ] && cd src ; $(MAKE) -f $(MAKEFILE) $@; ) || true +uninstall_subdirs: qmake_all FORCE + ( [ -d src ] && cd src ; $(MAKE) -f $(MAKEFILE) uninstall; ) || true +install_subdirs: qmake_all FORCE + ( [ -d src ] && cd src ; $(MAKE) -f $(MAKEFILE) install; ) || true +distclean: qmake_all FORCE + ( [ -d src ] && cd src ; $(MAKE) -f $(MAKEFILE) $@; $(DEL_FILE) $(MAKEFILE); ) || true + +install: install_subdirs + +uninstall: uninstall_subdirs + +FORCE: + diff --git a/GUI/TP3/calc/calc.kdevelop b/GUI/TP3/calc/calc.kdevelop new file mode 100755 index 0000000..9fb533c --- /dev/null +++ b/GUI/TP3/calc/calc.kdevelop @@ -0,0 +1,125 @@ + + + + Nicolas MASSE + nicolas27.masse@laposte.net + 0.1 + KDevTrollProject + C++ + + Qt + + + + + + + + + + false + false + + + *.o,*.lo,CVS + false + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + w3c-dom-level2-html + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + ruby + ruby_bugs + sdl + stl + w3c-svg + sw + w3c-uaag10 + wxwidgets_bugs + + + KDE Libraries (Doxygen) + + + + + + + + + + ./bin/calc + + executable + + + src + + + + + + + + + + + + + + Doxygen Documentation Collection + calc.tag + + + + Calc + calc + Calc + CALC + Nicolas MASSE + nicolas27.masse@laposte.net + GPL + COPYING + 0.1 + 2006 + /home/nicolas/svn_mirror/ENSI_2ndY/GUI/TP3/calc + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + diff --git a/GUI/TP3/calc/calc.kdevses b/GUI/TP3/calc/calc.kdevses new file mode 100755 index 0000000..f513785 --- /dev/null +++ b/GUI/TP3/calc/calc.kdevses @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GUI/TP3/calc/calc.pro b/GUI/TP3/calc/calc.pro new file mode 100755 index 0000000..8feb4aa --- /dev/null +++ b/GUI/TP3/calc/calc.pro @@ -0,0 +1,2 @@ +TEMPLATE=subdirs +SUBDIRS=src diff --git a/GUI/TP3/calc/src/CalcGUI.cpp b/GUI/TP3/calc/src/CalcGUI.cpp new file mode 100755 index 0000000..8c3fa52 --- /dev/null +++ b/GUI/TP3/calc/src/CalcGUI.cpp @@ -0,0 +1,147 @@ +/** + * #(@)CalcGUI.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Implementation of the CalcGUI class. + */ + +/* + * @version 0.0.1 + * + * @done all + * + * @todo none + */ + + +#include "CalcGUI.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +static char * labels[4][4] = { + {"7", "8", "9", "+"}, + {"4", "5", "6", "-"}, + {"1", "2", "3", "/"}, + {"0", ".", "=", "*"} + }; + +static enum ButtonID ids[4][4] = { + {Button_7, Button_8, Button_9, Button_Plus}, + {Button_4, Button_5, Button_6, Button_Minus}, + {Button_1, Button_2, Button_3, Button_Divide}, + {Button_0, Button_Dot, Button_Equal, Button_Multiply} + }; + +CalcGUI::CalcGUI() + : QMainWindow() { + + // Main widget + QWidget * central = new QWidget(this); + this->setCentralWidget(central); + + // Vertical layout + QVBoxLayout * vbox1 = new QVBoxLayout(central); + + // Display + this->lbl1 = new QLabel(central); + this->lbl1->setText(ctr.getText()); + vbox1->addWidget(lbl1); + + // Button group + QButtonGroup * group = new QButtonGroup(central); + vbox1->addWidget(group); + connect(group, SIGNAL(clicked(int)), this, SLOT(buttonClicked(int))); + + QGridLayout * grid = new QGridLayout(group, 4, 4); + + // Buttons + for (int c = 0; c < 4; c++) { + for (int r = 0; r < 4; r++) { + QPushButton * bt = new QPushButton(tr(labels[r][c]), group); + bt->setAccel(tr(labels[r][c])); + grid->addItem(new QWidgetItem(bt), r, c); + } + } + + // Erase button + QPushButton * btC = new QPushButton(tr("C"), central); + btC->setAccel(tr("C")); + vbox1->addWidget(btC); + connect(btC, SIGNAL(clicked()), this, SLOT(cButtonClicked())); + + // Quit button + QPushButton * btQuit = new QPushButton(tr("Quit"), central); + vbox1->addWidget(btQuit); + connect(btQuit, SIGNAL(clicked()), this, SLOT(quitApp())); + + // File menu + QPopupMenu * fileMenu = new QPopupMenu(); + QAction * quitAction = new QAction(tr("&Quit"), tr("Alt+X"), this); + quitAction->setStatusTip(tr("Exit application")); + quitAction->addTo(fileMenu); + connect(quitAction, SIGNAL(activated()), this, SLOT(quitApp())); + + // Help menu + QPopupMenu * helpMenu = new QPopupMenu(); + QAction * aboutAction = new QAction(tr("&About"), tr("F1"), this); + aboutAction->setStatusTip(tr("Display help")); + aboutAction->addTo(helpMenu); + connect(aboutAction, SIGNAL(activated()), this, SLOT(displayHelp())); + + // Menu bar + QMenuBar * menu = new QMenuBar(this); + menu->insertItem(tr("&File"), fileMenu); + menu->insertSeparator(); + menu->insertItem(tr("&Help"), helpMenu); +} + + +CalcGUI::~CalcGUI() {} + +void CalcGUI::buttonClicked( int n ) { + if (ctr.command(ids[n % 4][n / 4])) { + updateLabel(); + } +} + +void CalcGUI::cButtonClicked( void ) { + if (ctr.command(Button_C)) { + updateLabel(); + } +} + +void CalcGUI::quitApp( void ) { + QApplication::exit(); +} + +void CalcGUI::displayHelp( void ) { + QMessageBox::information(this, "About", "(C) 2006 - Thomas LIMIN & Nicolas MASSE", QMessageBox::Ok); +} + +void CalcGUI::updateLabel( void ) { + this->lbl1->setText(ctr.getText()); +} + + + diff --git a/GUI/TP3/calc/src/CalcGUI.h b/GUI/TP3/calc/src/CalcGUI.h new file mode 100755 index 0000000..6acc8d8 --- /dev/null +++ b/GUI/TP3/calc/src/CalcGUI.h @@ -0,0 +1,90 @@ +/** + * #(@)CalcGUI.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * GUI of the calc. + */ + +#include + + +/* + * @version 0.0.1 + * + * @done all + * + * @todo none + */ + + + +#ifndef CALCGUI_H +#define CALCGUI_H + +#include +#include +#include + + +#include "Controller.h" + +/** + * @author Nicolas MASSE + */ +class CalcGUI : public QMainWindow { + Q_OBJECT + +public: + /** + * Constructs a new GUI. + */ + CalcGUI(); + + /** + * Destructs the GUI. + */ + ~CalcGUI(); + +public slots: + /** + * Called when a digit button is pressed. + */ + void buttonClicked(int n); + + /** + * Called when cancel button pressed. + */ + void cButtonClicked(void); + + /** + * Called to quit the app. + */ + void quitApp(void); + + /** + * Called in order to display help. + */ + void displayHelp(void); + + /** + * Updates the label of the calc. + */ + void updateLabel(void); + +private: + Controller ctr; + QLabel * lbl1; +}; + +#endif /* CALCGUI_H */ diff --git a/GUI/TP3/calc/src/Controller.cpp b/GUI/TP3/calc/src/Controller.cpp new file mode 100755 index 0000000..70870d8 --- /dev/null +++ b/GUI/TP3/calc/src/Controller.cpp @@ -0,0 +1,117 @@ +/* -*- c-basic-offset: 3 -*- + * Controller.cpp GREYC Image 2004-3-12 + * + * @author Sebastien Fourey + * + * GREYC Image - ENSICAEN + * 6, Boulevard Marechal Juin + * F-14050 Caen Cedex + * + */ +#include "Controller.h" + + + +Controller::Controller() { + text = "0"; + operation = 0; + newNumber = true; +} + +bool +Controller::command(ButtonID n) +{ + switch (n) { + case Button_0: + case Button_1: + case Button_2: + case Button_3: + case Button_4: + case Button_5: + case Button_6: + case Button_7: + case Button_8: + case Button_9: + return addChar('0' + static_cast( n )); + + case Button_Dot: + return addChar('.'); + + case Button_Plus: + case Button_Minus: + case Button_Multiply: + case Button_Divide: + if (!newNumber) achieveEqual(); + memory = text.toDouble(); + operation = n; + newNumber = true; + return true; + + case Button_C: + text = "0"; + newNumber = true; + operation = 0; + return true; + + case Button_Equal: + return achieveEqual(); + } + return false; +} + +bool +Controller::achieveEqual() +{ + double operande = 0; + double result = 0; + if (!operation) return false; + + operande = text.toDouble(); + + switch (operation) { + case Button_Plus: + result = memory + operande; + break; + case Button_Minus: + result = memory - operande; + break; + case Button_Divide: + result = memory / operande; + break; + case Button_Multiply: + result = memory * operande; + break; + } + + text = QString("%1").arg(result,0,'f'); + newNumber = true; + operation = 0; + return true; +} + +bool +Controller::addChar(char c) +{ + + if (c == '.' && text.contains('.') ) return false; + + if ( text == "0" && c == '0') return false ; + + if ( ((text == "0") || newNumber) && c != '0' && c != '.') { + text = c; + newNumber = false; + return true; + } + + if (newNumber) { + text = ""; + } + text += c; + newNumber = false; + return true; +} + +QString +Controller::getText() const { + return text; +} diff --git a/GUI/TP3/calc/src/Controller.h b/GUI/TP3/calc/src/Controller.h new file mode 100755 index 0000000..74dbe25 --- /dev/null +++ b/GUI/TP3/calc/src/Controller.h @@ -0,0 +1,81 @@ +/* -*- c-basic-offset: 3 -*- + * Controller.h GREYC Image 2004-3-12 + * + * @author Sebastien Fourey + * + * GREYC Image - ENSICAEN + * 6, Boulevard Marechal Juin + * F-14050 Caen Cedex + * + */ +#ifndef CONTROLLER_H +#define CONTROLLER_H + +#include +#include +#include +using namespace std; + +enum ButtonID { Button_0 = 0, + Button_1, + Button_2, + Button_3, + Button_4, + Button_5, + Button_6, + Button_7, + Button_8, + Button_9, + Button_Dot, + Button_Plus, + Button_Minus, + Button_Divide, + Button_Multiply, + Button_Equal, + Button_C }; + +class Controller { + public: + Controller(); + + /** + * Effectue une operation. + * + * @param c Le code de l'operation. (ButtonID) + * @return true si le texte a ete modifie, false sinon. + */ + bool command(ButtonID c); + + /** + * Permet de consulter le texte courant de l'affichage. + * + * @return Le texte courant de l'affichage. + */ + QString getText() const; + + private: + + /** + * Ajoute un caractere a l'affichage. + * + * @param c Le caractere a ajouter. + * @return true si l'affichage a ete modifie, false sinon (par exemple + * si c est un pointet que le texte en contient deja un). + */ + bool addChar(char c); + + /** + * Effectue une operation en attente de la seconde operande. + * + * @return true si une operation etait effectivement en attente, + * false sinon. + */ + bool achieveEqual(); + + QString text; /* Le texte de l'affichage */ + double memory; /* La premiere operande d'une operation en attente */ + char operation; /* Code d'une operation en attente */ + bool newNumber; /* Drapeau marquant le debut de la saisie d'un nouveau nombre */ +}; + +#endif diff --git a/GUI/TP3/calc/src/Makefile b/GUI/TP3/calc/src/Makefile new file mode 100755 index 0000000..3887aba --- /dev/null +++ b/GUI/TP3/calc/src/Makefile @@ -0,0 +1,149 @@ +############################################################################# +# Makefile for building: ../bin/calc +# Generated by qmake (1.07a) (Qt 3.3.4) on: Thu Feb 16 16:42:39 2006 +# Project: src.pro +# Template: app +# Command: $(QMAKE) -o Makefile src.pro +############################################################################# + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +LEX = flex +YACC = yacc +CFLAGS = -pipe -Wall -W -O2 -march=athlon-xp -pipe -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -DQT_THREAD_SUPPORT +CXXFLAGS = -pipe -Wall -W -O2 -march=athlon-xp -pipe -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -DQT_THREAD_SUPPORT +LEXFLAGS = +YACCFLAGS= -d +INCPATH = -I/usr/qt/3/mkspecs/linux-g++ -I. -I$(QTDIR)/include -I/usr/include +LINK = g++ +LFLAGS = +LIBS = $(SUBLIBS) -L$(QTDIR)/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm +AR = ar cqs +RANLIB = +MOC = $(QTDIR)/bin/moc +UIC = $(QTDIR)/bin/uic +QMAKE = qmake +TAR = tar -cf +GZIP = gzip -9f +COPY = cp -f +COPY_FILE= $(COPY) +COPY_DIR = $(COPY) -r +INSTALL_FILE= $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +DEL_FILE = rm -f +SYMLINK = ln -sf +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +HEADERS = CalcGUI.h \ + Controller.h +SOURCES = calc.cpp \ + CalcGUI.cpp \ + Controller.cpp +OBJECTS = calc.o \ + CalcGUI.o \ + Controller.o +FORMS = +UICDECLS = +UICIMPLS = +SRCMOC = moc_CalcGUI.cpp +OBJMOC = moc_CalcGUI.o +DIST = src.pro +QMAKE_TARGET = calc +DESTDIR = ../bin/ +TARGET = ../bin/calc + +first: all +####### Implicit rules + +.SUFFIXES: .c .o .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + +####### Build rules + +all: Makefile $(TARGET) + +$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) + test -d ../bin/ || mkdir -p ../bin/ + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS) + +mocables: $(SRCMOC) +uicables: $(UICDECLS) $(UICIMPLS) + +$(MOC): + ( cd $(QTDIR)/src/moc && $(MAKE) ) + +Makefile: src.pro /usr/qt/3/mkspecs/linux-g++/qmake.conf /usr/qt/3/lib/libqt-mt.prl + $(QMAKE) -o Makefile src.pro +qmake: + @$(QMAKE) -o Makefile src.pro + +dist: + @mkdir -p .tmp/calc && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/calc/ && ( cd `dirname .tmp/calc` && $(TAR) calc.tar calc && $(GZIP) calc.tar ) && $(MOVE) `dirname .tmp/calc`/calc.tar.gz . && $(DEL_FILE) -r .tmp/calc + +mocclean: + -$(DEL_FILE) $(OBJMOC) + -$(DEL_FILE) $(SRCMOC) + +uiclean: + +yaccclean: +lexclean: +clean: mocclean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) ../bin/$(TARGET) $(TARGET) + + +FORCE: + +####### Compile + +calc.o: calc.cpp CalcGUI.h \ + Controller.h + +CalcGUI.o: CalcGUI.cpp CalcGUI.h \ + Controller.h + +Controller.o: Controller.cpp Controller.h + +moc_CalcGUI.o: moc_CalcGUI.cpp CalcGUI.h Controller.h + +moc_CalcGUI.cpp: $(MOC) CalcGUI.h + $(MOC) CalcGUI.h -o moc_CalcGUI.cpp + +####### Install + +install: + +uninstall: + diff --git a/GUI/TP3/calc/src/calc.cpp b/GUI/TP3/calc/src/calc.cpp new file mode 100755 index 0000000..2a7fce0 --- /dev/null +++ b/GUI/TP3/calc/src/calc.cpp @@ -0,0 +1,37 @@ +/** + * #(@)calc.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "CalcGUI.h" + +#include +#include +#include + + +/** + * Entry point of the app. + */ +int main(int argc, char *argv[]) { + QApplication app( argc, argv ); + CalcGUI gui; + + app.setMainWidget(&gui); + gui.show(); + + return app.exec(); +} diff --git a/GUI/TP3/calc/src/src.pro b/GUI/TP3/calc/src/src.pro new file mode 100755 index 0000000..d9c1022 --- /dev/null +++ b/GUI/TP3/calc/src/src.pro @@ -0,0 +1,16 @@ +# File generated by kdevelop's qmake manager. +# ------------------------------------------- +# Subdir relative project main directory: ./src +# Target is an application: ../bin/calc + +HEADERS += CalcGUI.h \ + Controller.h +SOURCES += calc.cpp \ + CalcGUI.cpp \ + Controller.cpp +TARGET = ../bin/calc +CONFIG += release \ +warn_on \ +qt \ +x11 +TEMPLATE = app diff --git a/GUI/TP3/calc/templates/cpp b/GUI/TP3/calc/templates/cpp new file mode 100755 index 0000000..102ff47 --- /dev/null +++ b/GUI/TP3/calc/templates/cpp @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + diff --git a/GUI/TP3/calc/templates/h b/GUI/TP3/calc/templates/h new file mode 100755 index 0000000..3e1bb3d --- /dev/null +++ b/GUI/TP3/calc/templates/h @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + diff --git a/GUI/TP4/COPYING b/GUI/TP4/COPYING new file mode 100755 index 0000000..5b6e7c6 --- /dev/null +++ b/GUI/TP4/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, 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 show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/GUI/TP4/Doxyfile b/GUI/TP4/Doxyfile new file mode 100755 index 0000000..bd9f67e --- /dev/null +++ b/GUI/TP4/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = tp4.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/users/nicolas/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/users/nicolas/svn_mirror/ENSI_2ndY/GUI/tp4 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = tp4.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/GUI/TP4/exemple.html b/GUI/TP4/exemple.html new file mode 100755 index 0000000..41d51d8 --- /dev/null +++ b/GUI/TP4/exemple.html @@ -0,0 +1,33 @@ + + + + +

    Lorem ipsum dolor sit amet

    + +

    consectetuer adipiscing elit

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque tempor massa eget nibh. Etiam non nisl. Nullam lectus purus, blandit id, tincidunt id, iaculis in, mi. In fermentum euismod dolor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam sit amet pede in nisi ullamcorper pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin ut eros et lacus tempor rhoncus. Praesent eu arcu a mauris lacinia condimentum. Integer rhoncus.

    + +

    Suspendisse eu magna

    +

    Suspendisse eu magna. Curabitur vestibulum. Suspendisse potenti. Sed pede. Nunc ante. In fermentum, nisi mattis aliquam facilisis, ipsum quam adipiscing enim, vel hendrerit massa leo id tortor. Integer bibendum laoreet nunc. Etiam mollis, urna quis mattis accumsan, sapien tellus convallis justo, aliquet gravida nisi nulla vitae arcu. Sed mauris urna, eleifend ut, suscipit sit amet, cursus vel, leo. Pellentesque ante mi, ornare eu, blandit id, consectetuer sed, massa. Nulla a sapien. Vivamus rhoncus mauris. Proin vel nisl ac urna mollis consequat. Vestibulum bibendum. Donec malesuada scelerisque nisl. Integer ut nunc ac massa posuere eleifend. Integer ultrices.

    + +

    Praesent vulputate placerat lacus

    +

    Praesent vulputate placerat lacus. Nam rutrum, dui id tristique mattis, enim ligula dapibus ante, vel bibendum dui est in urna. Etiam elementum. Etiam aliquam, odio sit amet sagittis posuere, orci leo lobortis odio, sed consequat urna diam quis augue. Etiam diam. Duis eu mauris et felis lobortis dignissim. Phasellus iaculis mauris in dui. Cras quis libero et nunc consequat condimentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris iaculis eros eu lacus. Vivamus egestas porttitor urna. Morbi vehicula iaculis magna. Curabitur sodales, ante ut porta pharetra, est eros vestibulum magna, at suscipit nunc est nec urna. Ut pede ante, lobortis id, condimentum ac, mattis et, augue. Pellentesque sed enim. Vestibulum neque. Maecenas laoreet dolor at enim.

    + +

    Curabitur sodales

    +
      +
    • Lorem ipsum dolor sit amet, consectetuer adipiscing elit. +
    • Duis dictum rhoncus libero. +
    • Integer mattis dapibus eros. +
    • Donec vestibulum sollicitudin lorem. +
    • Vestibulum nonummy arcu id pede. +
    • Maecenas sed lorem vel mi pretium ultricies. +
    • Aenean aliquam orci eget odio. +
    + +

    Mauris iaculis eros eu lacus

    +
    + + +
    Loremipsum
    Praesent placerat
    + + \ No newline at end of file diff --git a/GUI/TP4/src/ChildWindow.cpp b/GUI/TP4/src/ChildWindow.cpp new file mode 100755 index 0000000..d870ef9 --- /dev/null +++ b/GUI/TP4/src/ChildWindow.cpp @@ -0,0 +1,154 @@ +/** + * #(@)ChildWindow.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + +#include "ChildWindow.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +using namespace std; + +// Alloue de l'espace pour la variable statique +int ChildWindow::nDocuments = 1; + +ChildWindow::ChildWindow(QWidget * parent) : QMainWindow(parent, 0, WDestructiveClose) { + this->initWidgets(); + + this->setCaption(QString("Nouveau document ").append(QString::number(ChildWindow::nDocuments))); + ChildWindow::nDocuments++; + + this->show(); +} + +ChildWindow::ChildWindow(QWidget * parent, const QString & fileName) : QMainWindow(parent, 0, WDestructiveClose) { + this->initWidgets(); + + if (_docModel->load(fileName)) { + this->setCaption(fileName); + this->show(); + } else { + // Erreur, on ferme la fenêtre + this->close(); + QMessageBox::critical(parent, "Impossible de charger le fichier", "Une erreur est survenue lors de l'ouverture du fichier."); + } +} + +void ChildWindow::initWidgets() { + QSplitter * splitter = new QSplitter(this); + this->setCentralWidget(splitter); + + // Shows the status bar + QStatusBar * statusBar = this->statusBar(); + statusBar->show(); + + QTabWidget * tw = new QTabWidget(splitter); + + _editor = new SourceEditor(tw); + _docModel = new HTMLDocModel(_editor); + _formattedView = new FormattedView(tw); + + _statView = new StatView(_docModel, statusBar); + statusBar->addWidget(_statView, 0, true); + + _overView = new OverView(splitter); + + tw->addTab(_editor, "Code source"); + tw->addTab(_formattedView, "Rendu WYSIWYG"); + + connect(_editor, SIGNAL(textChanged()), + this, SLOT(textWindowViewDataModified())); + + connect(_docModel, SIGNAL(sourceChanged(QString *)), + _formattedView, SLOT(sourceChanged(QString *))); + + connect(_docModel, SIGNAL(sourceChanged(QString *)), + _overView, SLOT(sourceChanged(QString *))); + + connect(_docModel, SIGNAL(sourceChanged(QString *)), + _statView, SLOT(sourceChanged(QString *))); + +} + +void ChildWindow::closeEvent(QCloseEvent * e) { + if (_docModel->isModified()) { // modifié ? + int res = QMessageBox::question(this, "Enregistrement", "Le fichier a été modifié, voulez-vous enregistrer les modifications ?", QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); + if (res == QMessageBox::Yes) { + if (this->save()) { // enregistrement ok ? + e->accept(); // on ferme la fenêtre + } else { + e->ignore(); // on refuse la fermeture de fenêtre + } + } else if (res == QMessageBox::No) { + e->accept(); + } else { // cancel + e->ignore(); + } + } else { + e->accept(); + } +} + +bool ChildWindow::save() { + bool ret = false; + + if (_docModel->filename()) { // déjà un nom de fichier ? + ret = _docModel->save(); + } else { + ret = this->saveAs(); + } + + if (ret) { + this->statusBar()->message("Enregistrement... Ok", 5000); + } else { + this->statusBar()->message("Enregistrement... Erreur", 5000); + } + + return ret; +} + +bool ChildWindow::saveAs() { + bool ret = false; + + QString filename = QFileDialog::getSaveFileName(0, "HTML documents (*.htm *.html)", this); + if (filename != "") { + if (_docModel->saveAs(filename)) { + this->setCaption(filename); + ret = true; + } else { + ret = false; + } + } + + return ret; +} + +void ChildWindow::textWindowViewDataModified() { + _docModel->changeSource(_editor->text()); + _docModel->setNumLines(_editor->lines()); +} diff --git a/GUI/TP4/src/ChildWindow.h b/GUI/TP4/src/ChildWindow.h new file mode 100755 index 0000000..40349af --- /dev/null +++ b/GUI/TP4/src/ChildWindow.h @@ -0,0 +1,125 @@ +/** + * #(@)ChildWindow.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#ifndef CHILDWINDOW_H +#define CHILDWINDOW_H + +#include +#include + +#include "sourceeditor.h" +#include "htmldocmodel.h" +#include "formattedview.h" +#include "overview.h" +#include "statview.h" + +/** + * Cette classe représentes les fenêtres filles MDI. Elles permettent + * d'éditer du code HTML. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class ChildWindow : public QMainWindow { + + Q_OBJECT + +public: + /** + * Construit une nouvelle fenêtre avec une page HTML vierge. + */ + ChildWindow(QWidget * parent); + + /** + * Construit une nouvelle fenêtre et charge le fichier spécifié. + */ + ChildWindow(QWidget * parent, const QString & fileName); + + /* + * @see QT's doc + */ + void closeEvent(QCloseEvent *); + + /** + * Enregistre le fichier source. + * + * @return true si le fichier a été enregistré, false sinon + */ + bool save(); + + /** + * Enregistre le fichier source en demandant le nom de fichier + * à l'utilisateur. + * + * @return true si le fichier a été enregistré, false sinon + */ + bool saveAs(); + +protected: + +public slots: + + /** + * Ce slot est déclenché lorsque le champ d'édition du code source + * est modifié. + */ + void textWindowViewDataModified(); + +private: + /** + * Initialise les widgets. + */ + void initWidgets(); + + /** + * Nombre de documents créés depuis le lancement du programme. + */ + static int nDocuments; + + /** + * Champ d'édition du code source. + */ + SourceEditor * _editor; + + /** + * Le modèle. + */ + HTMLDocModel * _docModel; + + /** + * Une vue, affiche la page formatée. + */ + FormattedView * _formattedView; + + /** + * Une vue d'ensemble de la page. + */ + OverView * _overView; + + /** + * Affiche des statistiques concernant le texte. + */ + StatView * _statView; +}; + + +#endif /* CHILDWINDOW_H */ diff --git a/GUI/TP4/src/MainWindow.cpp b/GUI/TP4/src/MainWindow.cpp new file mode 100755 index 0000000..98f2b9c --- /dev/null +++ b/GUI/TP4/src/MainWindow.cpp @@ -0,0 +1,152 @@ +/** + * #(@)MainWindow.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#include "MainWindow.h" + +#include +#include +#include +#include +#include + +#include +using namespace std; + +MainWindow::MainWindow() { + _workspace = new QWorkspace(this); + this->setCentralWidget(_workspace); + + QPopupMenu * fileMenu = new QPopupMenu(this); + fileMenu->insertItem("&Nouveau", this, SLOT(newDoc()), QKeySequence("CTRL+N")); + fileMenu->insertItem("&Ouvrir...", this, SLOT(load()), QKeySequence("CTRL+O")); + fileMenu->insertItem("&Enregistrer", this, SLOT(save()), QKeySequence("CTRL+S")); + fileMenu->insertItem("Enre&gistrer sous...", this, SLOT(saveAs())); + fileMenu->insertItem("&Fermer", this, SLOT(closeWindow()), QKeySequence("CTRL+W")); + fileMenu->insertItem("&Quitter", this, SLOT(quit()), QKeySequence("CTRL+Q")); + this->menuBar()->insertItem("&Fichier", fileMenu); + + _windowsMenu = new QPopupMenu(this); + _windowsMenu->setCheckable( TRUE ); + connect(_windowsMenu, SIGNAL(aboutToShow()), + this, SLOT(windowsMenuAboutToShow())); + this->menuBar()->insertItem("Fenê&tre", _windowsMenu); + + QPopupMenu * aboutMenu = new QPopupMenu(this); + aboutMenu->insertItem("&A propos", this, SLOT(about())); + this->menuBar()->insertItem("&Aide", aboutMenu); + + // le file dialog de l'application + _fileDialog = new QFileDialog(this); + _fileDialog->addFilter("HTML documents (*.htm *.html)"); + connect(_fileDialog, SIGNAL(fileSelected(const QString &)), + this, SLOT(load(const QString &))); + +} + +void MainWindow::load(const QString & filename) { + ChildWindow * child = new ChildWindow(_workspace, filename); +} + +void MainWindow::closeEvent(QCloseEvent * e) { + // On ferme toutes les fenêtres + QWidgetList windows = _workspace->windowList(); + for (int i = 0; i < int(windows.count()); ++i) { + windows.at(i)->close(); + } + + // TODO : contrôler s'il reste encore des fenêtres ouvertes + e->accept(); +} + +ChildWindow * MainWindow::newDoc() { + ChildWindow * child = new ChildWindow(_workspace); + return child; +} + +void MainWindow::windowsMenuAboutToShow() { + _windowsMenu->clear(); + int cascadeId = _windowsMenu->insertItem("&Cascade", _workspace, SLOT(cascade())); + int tileId = _windowsMenu->insertItem("&Tile", _workspace, SLOT(tile())); + + if (_workspace->windowList().isEmpty()) { + _windowsMenu->setItemEnabled( cascadeId, FALSE ); + _windowsMenu->setItemEnabled( tileId, FALSE ); + } + + _windowsMenu->insertSeparator(); + QWidgetList windows = _workspace->windowList(); + for ( int i = 0; i < int(windows.count()); ++i ) { + int id = _windowsMenu->insertItem(windows.at(i)->caption(), + this, SLOT(windowsMenuActivated( int ) ) ); + _windowsMenu->setItemParameter(id, i ); + _windowsMenu->setItemChecked( id, _workspace->activeWindow() == windows.at(i) ); + } +} + +void MainWindow::load() { + _fileDialog->show(); +} + +void MainWindow::save() { + ChildWindow * win = dynamic_cast(_workspace->activeWindow()); + if (win) { + win->save(); + } +} + +void MainWindow::saveAs() { + ChildWindow * win = dynamic_cast(_workspace->activeWindow()); + if (win) { + win->saveAs(); + } +} + +void MainWindow::closeWindow() { + // TODO Si il n'y a pas de fenetre a fermer, le menu devrait être désactivé. + QWidget * win = _workspace->activeWindow(); + if (win) { + win->close(); + } +} + +void MainWindow::about() { + QMessageBox::about(this, "A propos...", "(C)2006 Thomas LIMIN & Nicolas MASSE"); +} + +void MainWindow::quit() { + // On ferme toutes les fenêtres + QWidgetList windows = _workspace->windowList(); + for (int i = 0; i < int(windows.count()); ++i) { + windows.at(i)->close(); + } + + // TODO : contrôler s'il reste encore des fenêtres ouvertes + emit askForQuit(); +} + +void MainWindow::windowsMenuActivated(int id) { + QWidget* w = _workspace->windowList().at(id); + if (w) { + w->showNormal(); + w->setFocus(); + } +} diff --git a/GUI/TP4/src/MainWindow.h b/GUI/TP4/src/MainWindow.h new file mode 100755 index 0000000..1556c3c --- /dev/null +++ b/GUI/TP4/src/MainWindow.h @@ -0,0 +1,138 @@ +/** + * #(@)MainWindow.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ChildWindow.h" + +/** + * La fenêtre principale du projet. + */ +class MainWindow : public QMainWindow { + + Q_OBJECT + +signals: + /** + * Cette classe émet ce signal lorsqu'elle veut que l'application se termine. + */ + void askForQuit(); + +public: + + /** + * Construit une nouvelle fenêtre. + */ + MainWindow(); + +protected: + + /* + * @see QT's doc + */ + void closeEvent(QCloseEvent *); + +private slots: + + /** + * Ce slot est activé par la fenêtre de sélection de fichiers + * lorsque qu'un fichier est sélectionné. + */ + void load(const QString & filename); + + /** + * Créé un nouveau document vierge. + */ + ChildWindow * newDoc(); + + /** + * Cette slot est activé lorsque le menu "fenêtre" est sur le + * point d'être activé, afin de remettre celui-ci à jour. + */ + void windowsMenuAboutToShow(); + + /** + * Propose à l'utilisateur d'ouvrir un fichier. + */ + void load(); + + /** + * Enregistre le fichier. + */ + void save(); + + /** + * Enregistre le fichier en demandant à l'utilisateur de + * choisir un nom de fichier. + */ + void saveAs(); + + /** + * Quitte l'application. + */ + void quit(); + + /** + * Ferme la fenetre fille active + */ + void closeWindow(); + + /** + * Affiche des information à propos de ce logiciel. + */ + void about(); + + /** + * Lorsqu'un item du menu windows est cliqué, ce slot est activé. + */ + void windowsMenuActivated(int id); + +private: + + /** + * L'espace de travail de l'application. + */ + QWorkspace * _workspace; + + /** + * Le menu "fenêtre" + */ + QPopupMenu * _windowsMenu; + + /** + * La fenêtre de sélection de fichiers. + */ + QFileDialog * _fileDialog; +}; + + +#endif /* MAINWINDOW_H */ diff --git a/GUI/TP4/src/formattedview.cpp b/GUI/TP4/src/formattedview.cpp new file mode 100755 index 0000000..855c194 --- /dev/null +++ b/GUI/TP4/src/formattedview.cpp @@ -0,0 +1,41 @@ +/** + * #(@)formattedview.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#include "formattedview.h" + +FormattedView::FormattedView(QWidget *parent, const char *name) + : QTextEdit(parent, name) { + + this->setTextFormat(Qt::RichText); + this->setReadOnly(true); +} + + +FormattedView::~FormattedView() {} + +void FormattedView::sourceChanged(QString * text) { + this->setText(*text); +} + + diff --git a/GUI/TP4/src/formattedview.h b/GUI/TP4/src/formattedview.h new file mode 100755 index 0000000..3ca5962 --- /dev/null +++ b/GUI/TP4/src/formattedview.h @@ -0,0 +1,56 @@ +/** + * #(@)formattedview.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#ifndef FORMATEDVIEW_H +#define FORMATEDVIEW_H + +#include + +/** + * Cette classe affiche la page HTML formatée. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class FormattedView : public QTextEdit { + Q_OBJECT + +public slots: + /** + * Ce slot est déclenché lorsque le code source la page a été + * modifié. + */ + void sourceChanged(QString * text); + +public: + /** + * Construit une nouvelle vue. + */ + FormattedView(QWidget *parent = 0, const char *name = 0); + + ~FormattedView(); + +}; + +#endif diff --git a/GUI/TP4/src/htmldocmodel.cpp b/GUI/TP4/src/htmldocmodel.cpp new file mode 100755 index 0000000..3f06112 --- /dev/null +++ b/GUI/TP4/src/htmldocmodel.cpp @@ -0,0 +1,135 @@ +/** + * #(@)htmldocmodel.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + +#include "htmldocmodel.h" + +#include + +HTMLDocModel::HTMLDocModel(SourceEditor * editor) + : QObject() { + + this->_source = new QString(); + this->_filename = 0; + this->_numLines = 0; + this->_editor = editor; + this->_modified = false; +} + + +HTMLDocModel::~HTMLDocModel() { + delete this->_source; +} + +QString * HTMLDocModel::getSource() const { + return this->_source; +} + +void HTMLDocModel::changeSource(const QString & string) { + delete this->_source; + this->_source = new QString(string); + this->_modified = true; + + this->update(); +} + +void HTMLDocModel::setNumLines( int lines ) { + this->_numLines = lines; +} + +int HTMLDocModel::numLines( ) { + return this->_numLines; +} + +int HTMLDocModel::numChars( ) { + if (_source) { + return this->_source->length(); + } else { + return 0; + } +} + +void HTMLDocModel::setFilename(const QString & name) { + delete this->_filename; + this->_filename = new QString(name); +} + +QString * HTMLDocModel::filename() { + return this->_filename; +} + +bool HTMLDocModel::save() { + bool ret = false; + + QFile file(*_filename); + file.open(IO_WriteOnly); + + if (file.isOpen()) { // ouverture réussie ? + QTextStream stream(&file); + + stream << *_source; + + file.close(); + this->_modified = false; + + ret = true; + } + + return ret; +} + +bool HTMLDocModel::load( const QString & fileName ) { + bool ret = false; + + QFile file(fileName); + file.open(IO_ReadOnly); + + if (file.isOpen()) { // ouverture réussie ? + QByteArray arr = file.readAll(); + QString data(arr.data()); + file.close(); + this->changeSource(data); + _editor->setText(data); + + this->setFilename(fileName); + this->_modified = false; + + ret = true; + } + + return ret; +} + +bool HTMLDocModel::saveAs(const QString & fileName) { + this->setFilename(fileName); + return this->save(); +} + +bool HTMLDocModel::isModified( ) { + return this->_modified; +} + +void HTMLDocModel::update( ) { + emit sourceChanged(this->_source); +} + diff --git a/GUI/TP4/src/htmldocmodel.h b/GUI/TP4/src/htmldocmodel.h new file mode 100755 index 0000000..b9becf5 --- /dev/null +++ b/GUI/TP4/src/htmldocmodel.h @@ -0,0 +1,148 @@ +/** + * #(@)htmldocmodel.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#ifndef HTMLDOCMODEL_H +#define HTMLDOCMODEL_H + +#include +#include + +#include "sourceeditor.h" + +/** + * Le modèle MVC du projet. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class HTMLDocModel : public QObject { + Q_OBJECT + +signals: + /** + * Ce slot est déclenché lorsque le code source la page a été + * modifié. + */ + void sourceChanged(QString * source); + +public: + /** + * Construit un nouveau modèle. + */ + HTMLDocModel(SourceEditor * editor); + + /** + * Détruit le modèle. + */ + ~HTMLDocModel(); + + /** + * Retourne le code source de la page. + */ + QString * getSource() const; + + /** + * Définit le nombre de lignes dans la page. + */ + void setNumLines(int lines); + + /** + * Retourne le nombre de lignes dans le code source de la page. + */ + int numLines(); + + /** + * Retourne le nombre de caractères dans le code source de la page. + */ + int numChars(); + + /** + * Définit le nom de fichier de la page HTML. + */ + void setFilename(const QString & name); + + /** + * Retourne le nom de fichier de la page HTML. + */ + QString * filename(); + + /** + * Retourne l'état de modification de la copie du fichier en mémoire. + */ + bool isModified(); + +public slots: + /** + * Change le code source de la page + */ + void changeSource(const QString & string); + + /** + * Enregistre le code source de la page sur le disque. + */ + bool save(); + + /** + * Charge le code source de la page. + */ + bool load(const QString & fileName); + + /** + * Enregistre le code source de la page dans le fichier spécifié. + */ + bool saveAs(const QString & fileName); + + /** + * Prévient les écouteurs que le code source a été modifié. + */ + void update(); + +private: + /** + * L'éditeur de code source. + */ + SourceEditor * _editor; + + /** + * Le code source de la page. + */ + QString * _source; + + /** + * Le nom de fichier. + */ + QString * _filename; + + /** + * Le nombre de lignes dans le code source de la page. + */ + int _numLines; + + /** + * État de modification de la page. + */ + bool _modified; +}; + +#endif diff --git a/GUI/TP4/src/main.cpp b/GUI/TP4/src/main.cpp new file mode 100755 index 0000000..59ec053 --- /dev/null +++ b/GUI/TP4/src/main.cpp @@ -0,0 +1,53 @@ +/** + * #(@)main.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#include +#include + +#include "MainWindow.h" + + +int main(int argc, char * argv[]) { + + // réglage du charset avec lequel QT lit les chaine de type C dans le code + QTextCodec * codec = QTextCodec::codecForName("utf8"); + QTextCodec::setCodecForCStrings (codec); + + QApplication app(argc, argv); + QWidget * mainWindow = new MainWindow(); + + // Connecte le signal askForQuit() émis par + // le Widget principal au slot quit() de l'objet + // application. + QObject::connect(mainWindow, SIGNAL(askForQuit()), + &app, SLOT(quit())); + + // Precise a l'objet application quel est le widget de + // la fenetre principale. + app.setMainWidget(mainWindow); + + // Provoque l'affichage de la fenetre principale. + mainWindow->show(); + + // Passe la main a la boucle d'evenements. + return app.exec(); +} diff --git a/GUI/TP4/src/overview.cpp b/GUI/TP4/src/overview.cpp new file mode 100755 index 0000000..e051873 --- /dev/null +++ b/GUI/TP4/src/overview.cpp @@ -0,0 +1,41 @@ +/** + * #(@)overview.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#include "overview.h" + +OverView::OverView(QWidget *parent, const char *name) + : QTextEdit(parent, name) { + this->setTextFormat(Qt::RichText); + this->setReadOnly(true); + this->zoomTo(4); +} + + +OverView::~OverView() {} + + +void OverView::sourceChanged(QString * text) { + this->setText(*text); +} + diff --git a/GUI/TP4/src/overview.h b/GUI/TP4/src/overview.h new file mode 100755 index 0000000..cbe150e --- /dev/null +++ b/GUI/TP4/src/overview.h @@ -0,0 +1,54 @@ +/** + * #(@)overview.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + +#ifndef OVERVIEW_H +#define OVERVIEW_H + +#include + +/** + * Cette classe est une vue d'ensemble de la page HTML. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class OverView : public QTextEdit { + Q_OBJECT + +public slots: + /** + * Ce slot est activé lorsque le code source de la page HTML a changé. + */ + void sourceChanged(QString * text); + +public: + /** + * Créé une nouvelle vue d'ensemble. + */ + OverView(QWidget *parent = 0, const char *name = 0); + + ~OverView(); + +}; + +#endif diff --git a/GUI/TP4/src/sourceeditor.cpp b/GUI/TP4/src/sourceeditor.cpp new file mode 100755 index 0000000..69f1929 --- /dev/null +++ b/GUI/TP4/src/sourceeditor.cpp @@ -0,0 +1,36 @@ +/** + * #(@)sourceeditor.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#include "sourceeditor.h" + +SourceEditor::SourceEditor(QWidget *parent, const char *name) + : QTextEdit(parent, name) { + + this->setTextFormat(Qt::PlainText); +} + + +SourceEditor::~SourceEditor() {} + + diff --git a/GUI/TP4/src/sourceeditor.h b/GUI/TP4/src/sourceeditor.h new file mode 100755 index 0000000..7d42bff --- /dev/null +++ b/GUI/TP4/src/sourceeditor.h @@ -0,0 +1,46 @@ +/** + * #(@)sourceeditor.h ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#ifndef SOURCEEDITOR_H +#define SOURCEEDITOR_H + +#include + +/** + * Cette classe est l'éditeur de code source de l'application. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class SourceEditor : public QTextEdit { + Q_OBJECT +public: + SourceEditor(QWidget *parent = 0, const char *name = 0); + + ~SourceEditor(); + +}; + +#endif /* SOURCEEDITOR_H */ diff --git a/GUI/TP4/src/src.pro b/GUI/TP4/src/src.pro new file mode 100755 index 0000000..6579779 --- /dev/null +++ b/GUI/TP4/src/src.pro @@ -0,0 +1,27 @@ +# File generated by kdevelop's qmake manager. +# ------------------------------------------- +# Subdir relative project main directory: ./src +# Target is an application: ../bin/tp4 + +HEADERS += htmldocmodel.h \ + ChildWindow.h \ + MainWindow.h \ + sourceeditor.h \ + formattedview.h \ + overview.h \ + statview.h +SOURCES += main.cpp \ + htmldocmodel.cpp \ + ChildWindow.cpp \ + MainWindow.cpp \ + sourceeditor.cpp \ + formattedview.cpp \ + overview.cpp \ + statview.cpp +QMAKE_CXXFLAGS_RELEASE += -ggdb +TARGET = ../bin/tp4 +CONFIG += release \ +warn_on \ +qt \ +thread +TEMPLATE = app diff --git a/GUI/TP4/src/statview.cpp b/GUI/TP4/src/statview.cpp new file mode 100755 index 0000000..5362e50 --- /dev/null +++ b/GUI/TP4/src/statview.cpp @@ -0,0 +1,43 @@ +/** + * #(@)statview.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#include "statview.h" + +StatView::StatView(HTMLDocModel * model, QWidget *parent, const char *name) + : QLabel(parent, name) { + + this->_docModel = model; +} + + +StatView::~StatView() {} + +void StatView::sourceChanged(QString * /* text */) { + QString lignes = QString::number(this->_docModel->numLines()); + QString cars = QString::number(this->_docModel->numChars()); + + this->setText(QString("Lignes : ") + lignes + QString(" / Caractères : ") + cars); +} + + diff --git a/GUI/TP4/src/statview.h b/GUI/TP4/src/statview.h new file mode 100755 index 0000000..a282dd4 --- /dev/null +++ b/GUI/TP4/src/statview.h @@ -0,0 +1,63 @@ +/** + * #(@)statview.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#ifndef STATVIEW_H +#define STATVIEW_H + +#include + +#include "htmldocmodel.h" + +/** + * Cette classe est une vue statistique de la page HTML. + * Elle affiche le nombre de caractères et de lignes dans + * le code source de la page. Les objets de cette classe + * sont destinés à être placés dans une barre d'état. + * + * @author Nicolas MASSE + * @author Thomas LIMIN + */ +class StatView : public QLabel { + + Q_OBJECT + +public slots: + /** + * Ce slot est activé lorsque le code source de la page HTML a changé. + */ + void sourceChanged(QString * text); + +public: + StatView(HTMLDocModel * model, QWidget *parent = 0, const char *name = 0); + + ~StatView(); + +private: + /** + * Le modèle. + */ + HTMLDocModel * _docModel; +}; + +#endif diff --git a/GUI/TP4/templates/cpp b/GUI/TP4/templates/cpp new file mode 100755 index 0000000..102ff47 --- /dev/null +++ b/GUI/TP4/templates/cpp @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + diff --git a/GUI/TP4/templates/h b/GUI/TP4/templates/h new file mode 100755 index 0000000..3e1bb3d --- /dev/null +++ b/GUI/TP4/templates/h @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + diff --git a/GUI/TP4/tp4.kdevelop b/GUI/TP4/tp4.kdevelop new file mode 100755 index 0000000..975f97a --- /dev/null +++ b/GUI/TP4/tp4.kdevelop @@ -0,0 +1,189 @@ + + + + Nicolas MASSE and Thomas LIMIN + nicolas27.masse@laposte.net + 0.1 + KDevTrollProject + C++ + + Qt + + . + false + + + kdevsubversion + + + + + + + + false + false + + + false + *.o,*.lo,CVS + false + + + + + bash + bash_bugs + clanlib + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + qt-kdev3 + ruby + ruby_bugs + sdl + stl + sw + w3c-dom-level2-html + w3c-svg + w3c-uaag10 + wxwidgets_bugs + + + KDE Libraries (Doxygen) + + + + + + + + /usr/bin/ + true + false + false + + + + + + false + true + 10 + + + + + + bin/tp4 + + executable + / + false + true + + + + src + + + true + 1 + false + + 0 + + + + + + + + + + + + + + + + + + Doxygen Documentation Collection + tp4.tag + + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + true + 3 + /usr/qt/3 + + + + set + m_,_ + theValue + true + true + + + + + .h + .cpp + + + + false + false + + TP4 + 0.1 + + + + + + + + + false + false + false + 0 + false + false + false + false + + + diff --git a/GUI/TP4/tp4.pro b/GUI/TP4/tp4.pro new file mode 100755 index 0000000..20f1cba --- /dev/null +++ b/GUI/TP4/tp4.pro @@ -0,0 +1,6 @@ +SUBDIRS += src +TEMPLATE = subdirs +CONFIG += release \ + warn_on \ + qt \ + thread diff --git a/GUI/TP5/COPYING b/GUI/TP5/COPYING new file mode 100755 index 0000000..5b6e7c6 --- /dev/null +++ b/GUI/TP5/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, 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 show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/GUI/TP5/Doxyfile b/GUI/TP5/Doxyfile new file mode 100755 index 0000000..c2f5eea --- /dev/null +++ b/GUI/TP5/Doxyfile @@ -0,0 +1,275 @@ +# Doxyfile 1.4.1-KDevelop + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = tp5.kdevelop +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = /home/users/nicolas/svn_mirror/poubi64.nmasse.homeip.net/studies/ENSI_2ndY/GUI/TP4/ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = /home/users/nicolas/svn_mirror/poubi64.nmasse.homeip.net/studies/ENSI_2ndY/GUI/tp5 +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox \ + *.C \ + *.CC \ + *.C++ \ + *.II \ + *.I++ \ + *.H \ + *.HH \ + *.H++ \ + *.CS \ + *.PHP \ + *.PHP3 \ + *.M \ + *.MM \ + *.C \ + *.H \ + *.tlh \ + *.diff \ + *.patch \ + *.moc \ + *.xpm \ + *.dox +RECURSIVE = yes +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = yes +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = tp5.tag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/GUI/TP5/snapshot.png b/GUI/TP5/snapshot.png new file mode 100755 index 0000000..6dd12d3 Binary files /dev/null and b/GUI/TP5/snapshot.png differ diff --git a/GUI/TP5/src/facture.ui b/GUI/TP5/src/facture.ui new file mode 100755 index 0000000..1c6c2c5 --- /dev/null +++ b/GUI/TP5/src/facture.ui @@ -0,0 +1,546 @@ + +Facture + + + FactureForm + + + + 0 + 0 + 970 + 725 + + + + Form1 + + + + unnamed + + + + groupBox3 + + + Aperçu facture + + + + unnamed + + + + factureView + + + + 7 + 7 + 0 + 0 + + + + + 360 + 500 + + + + + + + + editionFrame + + + + 4 + 5 + 0 + 0 + + + + NoFrame + + + Plain + + + + unnamed + + + + clientLabel + + + <h1><p align="center">Client</h1></p> + + + + + frame11 + + + NoFrame + + + Raised + + + + unnamed + + + + prenomEdit + + + + + prenomLabel + + + <p align="right">Prénom</p> + + + + + villeLabel + + + <p align="right">Ville</p> + + + + + nomEdit + + + + + adresse1Edit + + + + + adresse2Edit + + + + + cpEdit + + + + + villeEdit + + + + + cpLabel + + + <p align="right">CP</p> + + + + + adresse2Label + + + <p align="right">Adresse 2</p> + + + + + adresse1Label + + + <p align="right">Adresse 1</p> + + + + + nomLabel + + + <p align="right">Nom</p> + + + + + + + ligneEntreClientEtArticles + + + HLine + + + Sunken + + + Horizontal + + + + + articlesLabel + + + <h1><p align="center">Articles</p></h1> + + + + + + Code + + + + + Désignation + + + + + Quantité + + + + + Unité HT + + + + + Total HT + + + + factureTable + + + + 4 + 7 + 1 + 0 + + + + Default + + + 15 + + + 5 + + + SingleRow + + + + + + + + + MenuBar + + + + + + + + + + + + + + + + + + + + + + + FactureView +
    factureview.h
    + + -1 + -1 + + 0 + + 5 + 5 + 0 + 0 + + image0 +
    +
    + + + + fileNewAction + + + New + + + &New + + + Ctrl+N + + + + + fileOpenAction + + + + + + Open + + + &Open... + + + Ctrl+O + + + + + fileSaveAction + + + + + + Save + + + &Save + + + Ctrl+S + + + + + fileSaveAsAction + + + Save As + + + Save &As... + + + + + + + + filePrintAction + + + + + + Print + + + &Print... + + + Ctrl+P + + + + + fileExitAction + + + Exit + + + E&xit + + + Ctrl+Q + + + + + helpAboutAction + + + About + + + &About + + + + + + + + editClearAllAction + + + Clear All + + + Clear &All + + + Ctrl+L + + + + + + 789c534e494dcbcc4b554829cdcdad8c2fcf4c29c95030e0524611cd48cd4ccf28010a1797249664262b2467241641a592324b8aa363156c15aab914146aadb90067111b1f + + + + + fileNewAction + activated() + FactureForm + fileNew() + + + fileOpenAction + activated() + FactureForm + fileOpen() + + + fileSaveAction + activated() + FactureForm + fileSave() + + + fileSaveAsAction + activated() + FactureForm + fileSaveAs() + + + filePrintAction + activated() + FactureForm + filePrint() + + + fileExitAction + activated() + FactureForm + fileExit() + + + helpAboutAction + activated() + FactureForm + helpAbout() + + + nomEdit + textChanged(const QString&) + FactureForm + nomChanged(const QString&) + + + prenomEdit + textChanged(const QString&) + FactureForm + prenomChanged(const QString&) + + + adresse1Edit + textChanged(const QString&) + FactureForm + adresse1Changed(const QString&) + + + adresse2Edit + textChanged(const QString&) + FactureForm + adresse2Changed(const QString&) + + + cpEdit + textChanged(const QString&) + FactureForm + cpChanged(const QString&) + + + villeEdit + textChanged(const QString&) + FactureForm + villeChanged(const QString&) + + + factureTable + valueChanged(int,int) + FactureForm + tableChanged(int,int) + + + editClearAllAction + activated() + FactureForm + editClearAll() + + + + nomEdit + prenomEdit + adresse1Edit + adresse2Edit + cpEdit + villeEdit + factureTable + + + fileNew() + fileOpen() + fileSave() + fileSaveAs() + filePrint() + fileExit() + helpAbout() + editClearAll() + nomChanged(const QString & s) + prenomChanged(const QString & s) + adresse1Changed(const QString & s) + adresse2Changed(const QString & s) + cpChanged(const QString & s) + villeChanged(const QString & s) + tableChanged(int row, int col) + + + + + factureview.h + +
    diff --git a/GUI/TP5/src/factureimpl.cpp b/GUI/TP5/src/factureimpl.cpp new file mode 100755 index 0000000..6e46ab2 --- /dev/null +++ b/GUI/TP5/src/factureimpl.cpp @@ -0,0 +1,123 @@ +/** + * #(@)factureimpl.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + + +#include "factureimpl.h" +#include "factureview.h" + +#include + +#include +using namespace std; + +FactureImpl::FactureImpl(QWidget* parent, const char* name, WFlags fl) + : Facture(parent,name,fl) { + + _model = new FactureModel(this); + this->factureView->setModel(_model); +} + +FactureImpl::~FactureImpl() { + delete _model; +} + +/*$SPECIALIZATION$*/ +void FactureImpl::helpAbout() { + QMessageBox::about(this, "A propos...", "(C)2006 Thomas LIMIN & Nicolas MASSE"); +} + +void FactureImpl::fileExit() { + this->close(); +} + +void FactureImpl::filePrint() { + QMessageBox::warning(this, "Not yet implemented...", "Not yet implemented !"); +} + +void FactureImpl::fileSaveAs() { + QMessageBox::warning(this, "Not yet implemented...", "Not yet implemented !"); +} + +void FactureImpl::fileSave() { + QMessageBox::warning(this, "Not yet implemented...", "Not yet implemented !"); +} + +void FactureImpl::fileOpen() { + QMessageBox::warning(this, "Not yet implemented...", "Not yet implemented !"); +} + +void FactureImpl::fileNew() { + QMessageBox::warning(this, "Not yet implemented...", "Not yet implemented !"); +} + +void FactureImpl::editClearAll() { + QMessageBox::warning(this, "Not yet implemented...", "Not yet implemented !"); +} + +void FactureImpl::nomChanged( const QString & s ) { + _model->setNom(s); +} + +void FactureImpl::villeChanged( const QString & s ) { + _model->setVille(s); +} + +void FactureImpl::prenomChanged( const QString & s ) { + _model->setPrenom(s); +} + +void FactureImpl::adresse1Changed( const QString & s ) { + _model->setAdresse1(s); +} + +void FactureImpl::adresse2Changed( const QString & s ) { + _model->setAdresse2(s); +} + +void FactureImpl::cpChanged( const QString & s ) { + _model->setCodePostal(s); +} + +void FactureImpl::tableChanged(int row, int col) { + + switch (col) { + case 2: + case 3: + case 4: + { // les colonnes 2, 3 et 4 sont liées + QString q = this->factureTable->text(row, 2); + QString p = this->factureTable->text(row, 3); + + double res = p.toDouble() * q.toDouble(); + this->factureTable->setText(row, 4, QString::number(res)); + _model->celluleChangee(row, 4); + _model->celluleChangee(row, col); + } + break; + default: + _model->celluleChangee(row, col); + break; + } + +} + diff --git a/GUI/TP5/src/factureimpl.h b/GUI/TP5/src/factureimpl.h new file mode 100755 index 0000000..63f6595 --- /dev/null +++ b/GUI/TP5/src/factureimpl.h @@ -0,0 +1,79 @@ +/** + * #(@)factureimpl.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + + +#ifndef FACTUREIMPL_H +#define FACTUREIMPL_H + +#include "facture.h" + +#include "facturemodel.h" +class FactureModel; + +/** + * Cette classe dérive de la classe d'interface graphique créée par + * Qt Designer. Elle implémente les actions liées aux évenements de + * l'interface graphique. + */ +class FactureImpl : public Facture { + Q_OBJECT + +public: + FactureImpl(QWidget* parent = 0, const char* name = 0, WFlags fl = 0); + ~FactureImpl(); + /*$PUBLIC_FUNCTIONS$*/ + +public slots: + /*$PUBLIC_SLOTS$*/ + virtual void helpAbout(); + virtual void fileExit(); + virtual void filePrint(); + virtual void fileSaveAs(); + virtual void editClearAll(); + virtual void fileSave(); + virtual void fileOpen(); + virtual void fileNew(); + +protected: + /*$PROTECTED_FUNCTIONS$*/ + +protected slots: + virtual void nomChanged(const QString & s); + virtual void prenomChanged(const QString & s); + virtual void adresse1Changed(const QString & s); + virtual void adresse2Changed(const QString & s); + virtual void cpChanged(const QString & s); + virtual void villeChanged(const QString & s); + virtual void tableChanged(int row, int col); + +protected slots: + /*$PROTECTED_SLOTS$*/ + +private: + /** + * Le modèle du MVC + */ + FactureModel * _model; +}; + +#endif + diff --git a/GUI/TP5/src/facturemodel.cpp b/GUI/TP5/src/facturemodel.cpp new file mode 100755 index 0000000..6500399 --- /dev/null +++ b/GUI/TP5/src/facturemodel.cpp @@ -0,0 +1,113 @@ +/** + * #(@)facturemodel.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#include "facturemodel.h" + +#include +using namespace std; + +FactureModel::FactureModel(FactureImpl * facture, QObject * parent, const char * name) : QObject(parent, name) { + this->_ui = facture; +} + + +FactureModel::~FactureModel() {} + + + +const QString & FactureModel::nom() const { + return _nom; +} + + +void FactureModel::setNom(const QString& theValue) { + _nom = theValue; + this->notify(); +} + + +const QString & FactureModel::prenom() const { + return _prenom; +} + + +void FactureModel::setPrenom(const QString& theValue) { + _prenom = theValue; + this->notify(); +} + + +const QString & FactureModel::adresse1() const { + return _adresse1; +} + + +void FactureModel::setAdresse1(const QString& theValue) { + _adresse1 = theValue; + this->notify(); +} + + +const QString & FactureModel::adresse2() const { + return _adresse2; +} + + +void FactureModel::setAdresse2(const QString& theValue) { + _adresse2 = theValue; + this->notify(); +} + + +const QString & FactureModel::codePostal() const { + return _codePostal; +} + + +void FactureModel::setCodePostal(const QString& theValue) { + _codePostal = theValue; + this->notify(); +} + + +const QString & FactureModel::ville() const { + return _ville; +} + + +void FactureModel::setVille(const QString& theValue) { + _ville = theValue; + this->notify(); +} + +void FactureModel::celluleChangee(int row, int col) { + _table[row][col] = _ui->factureTable->text(row, col); + this->notify(); +} + +void FactureModel::notify() { + emit factureChanged(); +} + +const QString & FactureModel::cellule(int row, int col) const { + return _table[row][col]; +} diff --git a/GUI/TP5/src/facturemodel.h b/GUI/TP5/src/facturemodel.h new file mode 100755 index 0000000..bb3da61 --- /dev/null +++ b/GUI/TP5/src/facturemodel.h @@ -0,0 +1,84 @@ +/** + * #(@)facturemodel.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#ifndef FACTUREMODEL_H +#define FACTUREMODEL_H + +#include +#include +#include + +#include "factureimpl.h" +class FactureImpl; + +#define NUM_LIGNES_DANS_FACTURE 15 + +/** + * Le modèle du MVC. + * + * @author Nicolas MASSÉ + */ +class FactureModel : public QObject { + Q_OBJECT + +signals: + /** + * Emit lorsque le modèle à changé. + */ + void factureChanged(); + +public: + FactureModel(FactureImpl * facture, QObject * parent = 0, const char * name = 0); + + ~FactureModel(); + + const QString & nom() const; + const QString & prenom() const; + const QString & adresse1() const; + const QString & adresse2() const; + const QString & codePostal() const; + const QString & ville() const; + const QString & cellule(int row, int col) const; + +public slots: + void setNom(const QString& theValue); + void setPrenom(const QString& theValue); + void setAdresse1(const QString& theValue); + void setAdresse2(const QString& theValue); + void setCodePostal(const QString& theValue); + void setVille(const QString& theValue); + void celluleChangee(int row, int col); + +private: + void notify(); + + QString _nom; + QString _prenom; + QString _adresse1; + QString _adresse2; + QString _codePostal; + QString _ville; + FactureImpl * _ui; + QString _table[NUM_LIGNES_DANS_FACTURE][5]; +}; + +#endif diff --git a/GUI/TP5/src/factureview.cpp b/GUI/TP5/src/factureview.cpp new file mode 100755 index 0000000..7ab4320 --- /dev/null +++ b/GUI/TP5/src/factureview.cpp @@ -0,0 +1,178 @@ +/** + * #(@)factureview.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#include "factureview.h" + +FactureView::FactureView(QWidget* parent, const char* name, WFlags fl) + : QWidget(parent, name, fl), _model(0) { +} + + +FactureView::~FactureView() {} + +void FactureView::setModel(FactureModel * model) { + // on déconnecte l'ancien modèle + if (this->_model != 0) { + disconnect(this->_model, SIGNAL(factureChanged()), + this, SLOT(updateFacture())); + this->_model = 0; + } + + // et on connecte le nouveau + this->_model = model; + connect(this->_model, SIGNAL(factureChanged()), + this, SLOT(updateFacture())); + + // on recalcule l'aperçu + this->updateFacture(); +} + +void FactureView::updateFacture() { + this->repaint(); +} + +void FactureView::drawFacture(QPainter & painter) { + QRect bounds = painter.window(); + QFont font(painter.font()); + + painter.fillRect(bounds, QColor(255, 255, 255)); + + if (this->_model) { + this->drawHeader(painter); + painter.setFont(font); + this->drawTable(painter); + } + +} + +void FactureView::drawHeader(QPainter & painter) { + QRect bounds = painter.window(); + QFont font(painter.font()); + int w = bounds.width(); + int h = bounds.height(); + + painter.setBrush(QColor(220, 220, 220)); + font.setPointSize(int(0.02 * h)); + QFontMetrics fm(font); + + QString nom_prenom = _model->nom() + " " + _model->prenom(); + QString cp_ville = _model->codePostal() + " " + _model->ville(); + + int max = 0; + int tmp = 0; + + tmp = fm.width(nom_prenom); + if (tmp > max) { + max = tmp; + } + tmp = fm.width(_model->adresse1()); + if (tmp > max) { + max = tmp; + } + tmp = fm.width(_model->adresse2()); + if (tmp > max) { + max = tmp; + } + tmp = fm.width(cp_ville); + if (tmp > max) { + max = tmp; + } + + painter.drawRoundRect (int(0.05 * w), int(0.02 * h), int(max + 0.08 * w), int(0.15 * h), 15 , 35); + painter.setFont(font); + painter.drawText(int(0.08 * w), int(0.055 * h), nom_prenom); + painter.drawText(int(0.08 * w), int(0.085 * h), _model->adresse1()); + painter.drawText(int(0.08 * w), int(0.115 * h), _model->adresse2()); + painter.drawText(int(0.08 * w), int(0.145 * h), cp_ville); +} + +void FactureView::drawTable(QPainter & painter) { + QRect bounds = painter.window(); + QFont font(painter.font()); + int w = bounds.width(); + int h = bounds.height(); + + int top = int(0.2 * h); + int left = int(0.05 * w); + int right = int(0.95 * w); + int bottom = int(0.8 * h); + int height = bottom - top; + int width = right - left; + int cwidth = int(0.15 * w); + int s3 = right - cwidth; + int s2 = s3 - cwidth; + int s1 = s2 - cwidth; + int lheight = int(0.04 * h); + int hs1 = top + lheight; + + painter.setBrush(QColor(200, 200, 200)); + + painter.drawRect(left, top, width, height); + painter.drawLine(s1, top, s1, bottom); + painter.drawLine(s2, top, s2, bottom); + painter.drawLine(s3, top, s3, bottom); + painter.drawLine(left, hs1, right, hs1); + + painter.drawRect(s3, bottom + lheight, cwidth, lheight); + painter.drawRect(s3, bottom + 3 * lheight, cwidth, lheight); + + + font.setPixelSize(lheight / 3); + painter.setFont(font); + + this->drawTableLine(painter, 0, "Produit", "Quantite", "Unite (H.T.)", "Prix H.T."); + for (int i = 0; i < NUM_LIGNES_DANS_FACTURE; ++i) { + this->drawTableLine(painter, i + 1, _model->cellule(i, 1), + _model->cellule(i, 2), + _model->cellule(i, 3), + _model->cellule(i, 4)); + + } +} + +void FactureView::drawTableLine(QPainter & painter, int n, const QString & p, const QString & q, const QString & u, const QString & m) { + QRect bounds = painter.window(); + QFont font(painter.font()); + int w = bounds.width(); + int h = bounds.height(); + + int top = int(0.2 * h); + int left = int(0.05 * w); + int right = int(0.95 * w); + int cwidth = int(0.15 * w); + int s3 = right - cwidth; + int s2 = s3 - cwidth; + int s1 = s2 - cwidth; + int lheight = int(0.04 * h); + + int y = top + lheight + int((lheight * n) / 1.5); + + painter.drawText(int(left + 0.01 * w), int(y - lheight / 3), p); + painter.drawText(int(s1 + 0.01 * w), int(y - lheight / 3), q); + painter.drawText(int(s2 + 0.01 * w), int(y - lheight / 3), u); + painter.drawText(int(s3 + 0.01 * w), int(y - lheight / 3), m); +} + +void FactureView::paintEvent(QPaintEvent *) { + QPainter painter(this); + this->drawFacture(painter); +} diff --git a/GUI/TP5/src/factureview.h b/GUI/TP5/src/factureview.h new file mode 100755 index 0000000..e7539e4 --- /dev/null +++ b/GUI/TP5/src/factureview.h @@ -0,0 +1,72 @@ +/** + * #(@)factureview.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#ifndef FACTUREVIEW_H +#define FACTUREVIEW_H + +#include "facturemodel.h" + +#include +#include +#include + + +/** + * Cette classe est une vue du MVC. + * + * @author Nicolas MASSÉ + */ +class FactureView : public QWidget { + + Q_OBJECT + +public: + FactureView(QWidget* parent = 0, + const char* name = 0, WFlags fl = 0); + + ~FactureView(); + + /** + * Définit le modèle du MVC. + */ + void setModel(FactureModel * model); + + /** + * Méthode appelée par Qt afin de rafraichir. + */ + virtual void paintEvent(QPaintEvent *); + +public slots: + /** + * Mets à jour l'aperçu de la facture. + */ + void updateFacture(); + +private: + void drawFacture(QPainter & painter); + void drawHeader(QPainter & painter); + void drawTable(QPainter & painter); + void drawTableLine(QPainter & painter, int n, const QString & p, const QString & q, const QString & u, const QString & h); + FactureModel * _model; +}; + +#endif diff --git a/GUI/TP5/src/mywidget.h b/GUI/TP5/src/mywidget.h new file mode 100755 index 0000000..8768a0e --- /dev/null +++ b/GUI/TP5/src/mywidget.h @@ -0,0 +1,22 @@ +/** + * #(@)mywidget.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + diff --git a/GUI/TP5/src/src.pro b/GUI/TP5/src/src.pro new file mode 100755 index 0000000..71bab29 --- /dev/null +++ b/GUI/TP5/src/src.pro @@ -0,0 +1,15 @@ +# File generated by kdevelop's qmake manager. +# ------------------------------------------- +# Subdir relative project main directory: ./src +# Target is an application: ../bin/tp5 + +FORMS += facture.ui +HEADERS += facturemodel.h \ + factureimpl.h \ + factureview.h \ + mywidget.h +SOURCES += tp5.cpp \ + facturemodel.cpp \ + factureimpl.cpp \ + factureview.cpp +TARGET=../bin/tp5 diff --git a/GUI/TP5/src/tp5.cpp b/GUI/TP5/src/tp5.cpp new file mode 100755 index 0000000..eee1706 --- /dev/null +++ b/GUI/TP5/src/tp5.cpp @@ -0,0 +1,33 @@ +/** + * #(@)tp5.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + +#include +#include "factureimpl.h" + +int main(int argc, char ** argv) { + QApplication a(argc, argv); + FactureImpl w; + w.show(); + a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); + return a.exec(); +} + diff --git a/GUI/TP5/templates/cpp b/GUI/TP5/templates/cpp new file mode 100755 index 0000000..ad93e2d --- /dev/null +++ b/GUI/TP5/templates/cpp @@ -0,0 +1,22 @@ +/** + * #(@)nomfichier.cpp ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + diff --git a/GUI/TP5/templates/h b/GUI/TP5/templates/h new file mode 100755 index 0000000..0813a2d --- /dev/null +++ b/GUI/TP5/templates/h @@ -0,0 +1,22 @@ +/** + * #(@)nomfichier.h ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/* + * @version 0.0.1 + * + * @done - + * + * @todo - + */ + diff --git a/GUI/TP5/tp5.kdevelop b/GUI/TP5/tp5.kdevelop new file mode 100755 index 0000000..9b9014c --- /dev/null +++ b/GUI/TP5/tp5.kdevelop @@ -0,0 +1,142 @@ + + + + Nicolas MASSÉ + nicolas27.masse@laposte.net + 0.1 + KDevTrollProject + C++ + + Qt + + kdevsubversion + + + + + + + + + false + false + + + *.o,*.lo,CVS + false + false + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + w3c-dom-level2-html + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + kde2book + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + ruby + ruby_bugs + sdl + stl + w3c-svg + sw + w3c-uaag10 + wxwidgets_bugs + + + KDE Libraries (Doxygen) + + + + + + + + + + ./bin/tp5 + + executable + + + src + + + + + + + + + + + + + + + + Doxygen Documentation Collection + tp5.tag + + + + tp5 + tp5 + Tp5 + TP5 + Nicolas MASSÉ + nicolas27.masse@laposte.net + GPL + COPYING + 0.1 + 2006 + /home/users/nicolas/svn_mirror/poubi64.nmasse.homeip.net/studies/ENSI_2ndY/GUI/tp5 + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + + set + m_,_ + theValue + false + false + + + + + + + + diff --git a/GUI/TP5/tp5.pro b/GUI/TP5/tp5.pro new file mode 100755 index 0000000..8feb4aa --- /dev/null +++ b/GUI/TP5/tp5.pro @@ -0,0 +1,2 @@ +TEMPLATE=subdirs +SUBDIRS=src diff --git a/IntelligentSystem/TP1/examples/banque.txt b/IntelligentSystem/TP1/examples/banque.txt new file mode 100755 index 0000000..bc15595 --- /dev/null +++ b/IntelligentSystem/TP1/examples/banque.txt @@ -0,0 +1,11 @@ +(revenu proprietaire endettement avis-pret) +((bas non important non) + (moyen non important non) + (eleve non important non) + (eleve non faible non) + (bas non faible non) + (moyen non faible non) + (bas oui important non) + (moyen oui important non) + (eleve oui important oui) + (moyen oui faible oui)) diff --git a/IntelligentSystem/TP1/examples/carte-credit.txt b/IntelligentSystem/TP1/examples/carte-credit.txt new file mode 100755 index 0000000..721b512 --- /dev/null +++ b/IntelligentSystem/TP1/examples/carte-credit.txt @@ -0,0 +1,18 @@ +(revenu promo-magazine promo-affiche assurance-vie sexe age assurance-carte-credit) + +((eleve Oui Non Non Homme age-moyen Non) +(moyen Oui Oui Oui Femme age-moyen Non) +(eleve Non Non Non Homme age-moyen Non) +(moyen Oui Oui Oui Homme age-moyen Oui) +(tres-eleve Oui Non Oui Femme assez-jeune Non) +(bas Non Non Non Femme age-mur Non) +(moyen Oui Non Oui Homme assez-jeune Oui) +(bas Non Oui Non Homme jeune Non) +(moyen Oui Non Non Homme age-moyen Non) +(moyen Oui Oui Oui Femme age-moyen Non) +(eleve Non Oui Oui Femme age-moyen Non) +(bas Non Oui Oui Homme jeune Non) +(tres-eleve Oui Oui Oui Femme assez-jeune Non) +(eleve Non Oui Non Homme age-mur Non) +(bas Non Non Oui Femme jeune Oui)) + diff --git a/IntelligentSystem/TP1/examples/meteo-tp.txt b/IntelligentSystem/TP1/examples/meteo-tp.txt new file mode 100755 index 0000000..7556cd9 --- /dev/null +++ b/IntelligentSystem/TP1/examples/meteo-tp.txt @@ -0,0 +1,15 @@ +(aspect-ciel temperature humidite venteux meteo) +((Ensoleille Chaude Forte Faux Desagreable) + (Ensoleille Chaude Forte Vrai Desagreable) + (Ensoleille Douce Forte Faux Desagreable) + (Ensoleille Douce Normale Vrai Agreable) + (Ensoleille Fraiche Normale Faux Agreable) + (Nuageux Chaude Forte Faux Agreable) + (Nuageux Chaude Normale Faux Agreable) + (Nuageux Douce Forte Vrai Agreable) + (Nuageux Fraiche Normale Vrai Agreable) + (Pluvieux Douce Forte Faux Agreable) + (Pluvieux Douce Forte Vrai Desagreable) + (Pluvieux Douce Normale Faux Agreable) + (Pluvieux Fraiche Normale Faux Agreable) + (Pluvieux Fraiche Normale Vrai Desagreable) ) \ No newline at end of file diff --git a/IntelligentSystem/TP1/main.lisp b/IntelligentSystem/TP1/main.lisp new file mode 100755 index 0000000..83b387f --- /dev/null +++ b/IntelligentSystem/TP1/main.lisp @@ -0,0 +1,170 @@ +;;;; +;;;; main.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + + +;;; +;;; Main program +;;; + +;; Load package definitions +(load "packages.lisp") + +;; Load MOP stuff +(load "meta/main.lisp") + +;; Load decision tree stuff +(load "tree/main.lisp") + + +;; Imports package +(use-package :net.homeip.nmasse.lisp.tp1.tree) + + + +;;; +;;; Decision trees +;;; + + + +;; +;; Example database "METEO-TP" +;; +(let ((weather-db nil) + (weather-tree nil) + (q1 nil) + (q2 nil)) + + (format t ">>> Example database : METEO-TP~%~%") + (setq weather-db + (load-examples 'meteo-tp "examples/meteo-tp.txt")) + (print weather-db) + + (format t ">>> Decision tree : METEO-TP~%~%") + (setq weather-tree + (build-tree weather-db)) + (print weather-tree) + (format t "~%~%>>> End of decision tree : METEO-TP~%~%") + + (format t ">>> Queries : METEO-TP~%~%") + (setq q1 + '((aspect-ciel "PLUVIEUX") (venteux "VRAI"))) + (setq q2 + '((aspect-ciel "NUAGEUX"))) + + (loop for q + in (list q1 q2) + do (format t ">>> The query : ~s returned : ~s~%" + q + (decide weather-tree q))) + + (format t "~%>>> End of queries : METEO-TP~%~%")) + + + + + +;; +;; Example database "CARD" +;; +(let ((card-db nil) + (card-tree nil)) + + (format t ">>> Example database : CREDIT-CARD~%") + (setq card-db + (load-examples 'credit-card "examples/carte-credit.txt")) + (print card-db) + + (format t "~%>>> Decision tree : CREDIT-CARD~%~%") + (setq card-tree + (build-tree card-db)) + (print card-tree) + (format t "~%~%>>> End of decision tree : CREDIT-CARD~%~%")) + + +;; +;; Example database "BANK" +;; +(let ((bank-db nil) + (bank-tree nil)) + + (format t ">>> Example database : BANK~%") + (setq bank-db + (load-examples 'bank "examples/banque.txt")) + (print bank-db) + + (format t "~%>>> Decision tree : BANK~%~%") + (setq bank-tree + (build-tree bank-db)) + (print bank-tree) + (format t "~%~%>>> End of decision tree : BANK~%~%")) + + + +;;; +;;; Arbre de decision "Voyage" +;;; +(let ((arbre nil) + (client1 nil) + (client2 nil) + (client3 nil) + (client4 nil) + (client5 nil) + (client6 nil)) + + (setq arbre '(preference + ((equal :val-att "sport") (Alpes)) + ((equal :val-att "detente") + (budget ((< :val-att 10000) (Espagne)) + ((and (>= :val-att 10000) + (<= :val-att 20000)) (Antilles)) + (( > :val-att 20000) (Seychelles)))) + ((equal :val-att "culture") + (age ((<= :val-att 30)(Mexique)) + ((> :val-att 30) (Egypte)))))) + + + ; un client pour les Alpes + (setq client1 + '((age 25) (preference "sport"))) + + ; un client pour l'Espagne + (setq client2 + '((age 35) (preference "detente") (budget 9000))) + + ; un client pour les Antilles + (setq client3 + '((age 35) (preference "detente") (budget 20000))) + + ; un client pour les Seychelles + (setq client4 + '((age 35) (preference "detente") (budget 20001))) + + ; un client pour le Mexique + (setq client5 + '((age 23) (preference "culture") (budget 9000))) + + ; un client pour l'Egypte + (setq client6 + '((age 42) (preference "culture") (budget 9000))) + + (loop for client + in (list client1 client2 client3 client4 client5 client6) + do (format t + ">>> Le client dont les preferences sont : ~%~s~%>>> decide d'aller a :~%~s~%~%" + client + (decide arbre client))) + + +) + diff --git a/IntelligentSystem/TP1/meta/classes.lisp b/IntelligentSystem/TP1/meta/classes.lisp new file mode 100755 index 0000000..db34b10 --- /dev/null +++ b/IntelligentSystem/TP1/meta/classes.lisp @@ -0,0 +1,72 @@ +;;;; +;;;; classes.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + + +;;;; +;;;; Package definition +;;;; + +(in-package :net.homeip.nmasse.lisp.tp1.meta) + + +;;;; +;;;; Classes definition +;;;; + + +;;; +;;; This slot meta-object implements a reflex in order to keep a set of +;;; all the values of this slot +;;; +(defclass generic-example-direct-slot-definition + (clos:standard-direct-slot-definition) + () + (:documentation "This slot meta-object implements a reflex in order to + keep a set of all the values of this slot") +) + +;;; +;;; This is a class metaobject, it allows reflexes when creating and +;;; initializing the slots of its objects. +;;; +(defclass generic-example-class (standard-class) + ((attributes + :reader read-attributes + :writer write-attributes + :initform nil + :documentation "A map of attribute's names with a set + of their values") + (class-attribute + :reader read-class-attribute + :writer write-class-attribute + :initform nil + :documentation "The name of the attribute which holds the decision.") + (att-names + :reader attribute-names + :writer write-attribute-names + :initform nil + :documentation "The list of all the attribute names.")) + (:documentation "This is a metaclass object.")) + +;;; +;;; Base class of all examples, its purpose is mainly type checking. +;;; +(defclass generic-example () + () + (:documentation "")) + + + + + + diff --git a/IntelligentSystem/TP1/meta/generic-example.lisp b/IntelligentSystem/TP1/meta/generic-example.lisp new file mode 100755 index 0000000..d49ec8c --- /dev/null +++ b/IntelligentSystem/TP1/meta/generic-example.lisp @@ -0,0 +1,160 @@ +;;;; +;;;; generic-example.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + + +;;;; +;;;; Package definition +;;;; + +(in-package :net.homeip.nmasse.lisp.tp1.meta) + + + +;;;; +;;;; Exported methods +;;;; + + +;;; +;;; Constructs a new class which represents a specific example. +;;; +(defmethod build-class (name attributes) + (let ((class nil)) + + (setq class + (clos:ensure-class name + ':direct-superclasses '(generic-example) + ':direct-slots (mapcar #'build-slot-definition + attributes) + ':metaclass 'generic-example-class)) + + ;; Sets the attributes list + (write-attribute-names attributes class) + + ;; Sets the class attribute + (write-class-attribute (car (last attributes)) class) + class)) + +;;; +;;; Constructs a new example. +;;; +(defmethod build-example (classname example attributes) + (apply 'make-instance + (cons classname (mapcan + #'(lambda (att val) + (list + (intern (format nil "ATTRIBUTE-~s" att) + "KEYWORD") + val)) + attributes + example)))) + +;;; +;;; Returns the value of the requested attribute. +;;; +(defmethod read-attribute ((name symbol) + (oself generic-example)) + + (loop for slot in (clos:class-direct-slots (class-of oself)) + if (eql (clos:slot-definition-name slot) name) + return (apply (car (clos:slot-definition-readers slot)) + (list oself)))) + +;;; +;;; Returns a set of the values of the requested attribute. +;;; +(defmethod values-of-attribute ((name symbol) + (class generic-example-class)) + (second + (assoc name (read-attributes class)))) + + + +;;;; +;;;; Intern methods +;;;; + + +;;; +;;; This method is part of a reflex, it keeps up to date a set of all the +;;; values of each attribute. +;;; +;;; attribute: the attribute name +;;; value: the value of this attribute +;;; class: the class meta-object of this example +;;; +;;; returns: nothing interesting +;;; +(defmethod new-example ((attribute symbol) + value + (class generic-example-class)) + + (let* ((attributes + (read-attributes class)) + (values + (second (assoc attribute attributes)))) + + (if values + (if (not (member value values)) + (setf (second (assoc attribute attributes)) (cons value values))) + (write-attributes (cons + (cons attribute + (list (list value))) + attributes) + class)))) + +;;; +;;; This method is called when a new value is affected to a slot +;;; +(defmethod (setf clos:slot-value-using-class) :around + (newvalue (class generic-example-class) object slot) + + ;; reflex + (new-example (clos:slot-definition-name slot) newvalue class) + (call-next-method)) + + +;;; +;;; Establishes the class used to represent the slots +;;; of a "generic-example-class" class. +;;; +(defmethod clos:direct-slot-definition-class :around + ((instance generic-example-class) &rest other-args) + + ;; a generic-example-direct-slot-definition is used for direct-slots + (find-class 'generic-example-direct-slot-definition)) + +;;; +;;; Builds a slot definition using its name. +;;; +(defmethod build-slot-definition (name) + (list + ':name name + ':type 'symbol + ;; Upper chars are important + ':readers (list + (make-symbol (format nil "READ-ATTRIBUTE-~s" name))) + ':initargs (list + (intern (format nil "ATTRIBUTE-~s" name) "KEYWORD")))) + +;;; +;;; Prints a generic-example on a stream. +;;; +(defmethod print-object :around ((oself generic-example) fd) + (format fd "[Example ~s: " (class-name (class-of oself))) + (loop for slot in (clos:class-direct-slots (class-of oself)) do + (format fd "~s " + (apply (car (clos:slot-definition-readers slot)) + (list oself)))) + (format fd "]")) + diff --git a/IntelligentSystem/TP1/meta/main.lisp b/IntelligentSystem/TP1/meta/main.lisp new file mode 100755 index 0000000..9e8f49e --- /dev/null +++ b/IntelligentSystem/TP1/meta/main.lisp @@ -0,0 +1,16 @@ +;;;; +;;;; main.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + +(load "meta/classes.lisp") +(load "meta/generic-example.lisp") + diff --git a/IntelligentSystem/TP1/packages.lisp b/IntelligentSystem/TP1/packages.lisp new file mode 100755 index 0000000..6235b62 --- /dev/null +++ b/IntelligentSystem/TP1/packages.lisp @@ -0,0 +1,36 @@ +;;;; +;;;; packages.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + + +;;; +;;; Packages definitions +;;; + +(defpackage :net.homeip.nmasse.lisp.tp1.meta + (:use :common-lisp) + (:export :build-class + :build-example + :read-attribute + :generic-example + :values-of-attribute + :write-class-attribute + :read-class-attribute + :attribute-names)) + +(defpackage :net.homeip.nmasse.lisp.tp1.tree + (:use :common-lisp + :net.homeip.nmasse.lisp.tp1.meta) + (:export :load-examples + :build-tree + :decide)) + diff --git a/IntelligentSystem/TP1/trace.txt b/IntelligentSystem/TP1/trace.txt new file mode 100755 index 0000000..a4b5ba4 --- /dev/null +++ b/IntelligentSystem/TP1/trace.txt @@ -0,0 +1,187 @@ +>>> Example database : METEO-TP + + +[Example METEO-TP: PLUVIEUX FRAICHE NORMALE VRAI DESAGREABLE ] +[Example METEO-TP: PLUVIEUX FRAICHE NORMALE FAUX AGREABLE ] +[Example METEO-TP: PLUVIEUX DOUCE NORMALE FAUX AGREABLE ] +[Example METEO-TP: PLUVIEUX DOUCE FORTE VRAI DESAGREABLE ] +[Example METEO-TP: PLUVIEUX DOUCE FORTE FAUX AGREABLE ] +[Example METEO-TP: NUAGEUX FRAICHE NORMALE VRAI AGREABLE ] +[Example METEO-TP: NUAGEUX DOUCE FORTE VRAI AGREABLE ] +[Example METEO-TP: NUAGEUX CHAUDE NORMALE FAUX AGREABLE ] +[Example METEO-TP: NUAGEUX CHAUDE FORTE FAUX AGREABLE ] +[Example METEO-TP: ENSOLEILLE FRAICHE NORMALE FAUX AGREABLE ] +[Example METEO-TP: ENSOLEILLE DOUCE NORMALE VRAI AGREABLE ] +[Example METEO-TP: ENSOLEILLE DOUCE FORTE FAUX DESAGREABLE ] +[Example METEO-TP: ENSOLEILLE CHAUDE FORTE VRAI DESAGREABLE ] +[Example METEO-TP: ENSOLEILLE CHAUDE FORTE FAUX DESAGREABLE ] + >>> Decision tree : METEO-TP + + + + + + + + + + + + + + + + + +(ASPECT-CIEL + ((EQUAL :VAL-ATT "PLUVIEUX") + (VENTEUX ((EQUAL :VAL-ATT "VRAI") (DESAGREABLE)) + ((EQUAL :VAL-ATT "FAUX") (AGREABLE)))) + ((EQUAL :VAL-ATT "NUAGEUX") (AGREABLE)) + ((EQUAL :VAL-ATT "ENSOLEILLE") + (HUMIDITE ((EQUAL :VAL-ATT "NORMALE") (AGREABLE)) + ((EQUAL :VAL-ATT "FORTE") (DESAGREABLE))))) + +>>> End of decision tree : METEO-TP + +>>> Queries : METEO-TP + +>>> The query : ((ASPECT-CIEL "PLUVIEUX") (VENTEUX "VRAI")) returned : DESAGREABLE +>>> The query : ((ASPECT-CIEL "NUAGEUX")) returned : AGREABLE + +>>> End of queries : METEO-TP + +>>> Example database : CREDIT-CARD + +[Example CREDIT-CARD: BAS NON NON OUI FEMME JEUNE OUI ] +[Example CREDIT-CARD: ELEVE NON OUI NON HOMME AGE-MUR NON ] +[Example CREDIT-CARD: TRES-ELEVE OUI OUI OUI FEMME ASSEZ-JEUNE NON ] +[Example CREDIT-CARD: BAS NON OUI OUI HOMME JEUNE NON ] +[Example CREDIT-CARD: ELEVE NON OUI OUI FEMME AGE-MOYEN NON ] +[Example CREDIT-CARD: MOYEN OUI OUI OUI FEMME AGE-MOYEN NON ] +[Example CREDIT-CARD: MOYEN OUI NON NON HOMME AGE-MOYEN NON ] +[Example CREDIT-CARD: BAS NON OUI NON HOMME JEUNE NON ] +[Example CREDIT-CARD: MOYEN OUI NON OUI HOMME ASSEZ-JEUNE OUI ] +[Example CREDIT-CARD: BAS NON NON NON FEMME AGE-MUR NON ] +[Example CREDIT-CARD: TRES-ELEVE OUI NON OUI FEMME ASSEZ-JEUNE NON ] +[Example CREDIT-CARD: MOYEN OUI OUI OUI HOMME AGE-MOYEN OUI ] +[Example CREDIT-CARD: ELEVE NON NON NON HOMME AGE-MOYEN NON ] +[Example CREDIT-CARD: MOYEN OUI OUI OUI FEMME AGE-MOYEN NON ] +[Example CREDIT-CARD: ELEVE OUI NON NON HOMME AGE-MOYEN NON ] + +>>> Decision tree : CREDIT-CARD + + + + + + + + + + + + + + + + + + + + + + + + + + + +(REVENU + ((EQUAL :VAL-ATT "BAS") + (PROMO-AFFICHE ((EQUAL :VAL-ATT "OUI") (NON)) + ((EQUAL :VAL-ATT "NON") + (ASSURANCE-VIE ((EQUAL :VAL-ATT "OUI") (OUI)) + ((EQUAL :VAL-ATT "NON") (NON)))))) + ((EQUAL :VAL-ATT "TRES-ELEVE") (NON)) + ((EQUAL :VAL-ATT "MOYEN") + (SEXE ((EQUAL :VAL-ATT "FEMME") (NON)) + ((EQUAL :VAL-ATT "HOMME") + (ASSURANCE-VIE ((EQUAL :VAL-ATT "OUI") (OUI)) + ((EQUAL :VAL-ATT "NON") (NON)))))) + ((EQUAL :VAL-ATT "ELEVE") (NON))) + +>>> End of decision tree : CREDIT-CARD + +>>> Example database : BANK + +[Example BANK: MOYEN OUI FAIBLE OUI ] +[Example BANK: ELEVE OUI IMPORTANT OUI ] +[Example BANK: MOYEN OUI IMPORTANT NON ] +[Example BANK: BAS OUI IMPORTANT NON ] +[Example BANK: MOYEN NON FAIBLE NON ] +[Example BANK: BAS NON FAIBLE NON ] +[Example BANK: ELEVE NON FAIBLE NON ] +[Example BANK: ELEVE NON IMPORTANT NON ] +[Example BANK: MOYEN NON IMPORTANT NON ] +[Example BANK: BAS NON IMPORTANT NON ] + +>>> Decision tree : BANK + + + + + + + + + + + + + + + + + +(PROPRIETAIRE + ((EQUAL :VAL-ATT "OUI") + (REVENU ((EQUAL :VAL-ATT "ELEVE") (OUI)) + ((EQUAL :VAL-ATT "MOYEN") + (ENDETTEMENT ((EQUAL :VAL-ATT "FAIBLE") (OUI)) + ((EQUAL :VAL-ATT "IMPORTANT") (NON)))) + ((EQUAL :VAL-ATT "BAS") (NON)))) + ((EQUAL :VAL-ATT "NON") (NON))) + +>>> End of decision tree : BANK + +>>> Le client dont les preferences sont : +((AGE 25) (PREFERENCE "sport")) +>>> decide d'aller a : +ALPES + +>>> Le client dont les preferences sont : +((AGE 35) (PREFERENCE "detente") (BUDGET 9000)) +>>> decide d'aller a : +ESPAGNE + +>>> Le client dont les preferences sont : +((AGE 35) (PREFERENCE "detente") (BUDGET 20000)) +>>> decide d'aller a : +ANTILLES + +>>> Le client dont les preferences sont : +((AGE 35) (PREFERENCE "detente") (BUDGET 20001)) +>>> decide d'aller a : +SEYCHELLES + +>>> Le client dont les preferences sont : +((AGE 23) (PREFERENCE "culture") (BUDGET 9000)) +>>> decide d'aller a : +MEXIQUE + +>>> Le client dont les preferences sont : +((AGE 42) (PREFERENCE "culture") (BUDGET 9000)) +>>> decide d'aller a : +EGYPTE + diff --git a/IntelligentSystem/TP1/tree/classes.lisp b/IntelligentSystem/TP1/tree/classes.lisp new file mode 100755 index 0000000..35efd00 --- /dev/null +++ b/IntelligentSystem/TP1/tree/classes.lisp @@ -0,0 +1,40 @@ +;;;; +;;;; classes.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + + +;;;; +;;;; Packages definitions +;;;; + +(in-package :net.homeip.nmasse.lisp.tp1.tree) + +;;;; +;;;; Class definitions +;;;; + +(defclass example-set () + ((examples + :type list + :initform nil + :reader read-examples + :writer write-examples + :initarg :examples + :documentation "A set of examples.") + (class + :initform nil + :reader read-class + :initarg :class + :documentation "The class metaobject of the examples.")) + (:documentation "Represents a set of examples.")) + + diff --git a/IntelligentSystem/TP1/tree/decision-tree-builder.lisp b/IntelligentSystem/TP1/tree/decision-tree-builder.lisp new file mode 100755 index 0000000..c05e2a1 --- /dev/null +++ b/IntelligentSystem/TP1/tree/decision-tree-builder.lisp @@ -0,0 +1,209 @@ +;;;; +;;;; decision-tree-builder.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + +;;;; +;;;; Packages definitions +;;;; + +(in-package :net.homeip.nmasse.lisp.tp1.tree) + +;;;; +;;;; Exported methods +;;;; + +;;; +;;; Loads an examples' database +;;; +(defun load-examples (classname filename) + (with-open-file (fd filename :direction :input) + (let ((attributes + (read fd)) + (examples + (read fd)) + (example-set + nil)) + + ;; Makes a new class + (setq example-set (make-instance 'example-set + :class (build-class classname attributes))) + + ;; Builds examples + (loop for ex in examples do + (add-example (build-example classname ex attributes) + example-set)) + + example-set))) + + +;;; +;;; Builds the decision tree. +;;; +(defmethod build-tree ((examples example-set)) + (build examples (remove (read-class-attribute (read-class examples)) + (attribute-names (read-class examples))))) + + +;;;; +;;;; Hidden methods +;;;; + +;;; +;;; Compute the logarithm in base 2 +;;; +(defun xlog2 (x) + (if (eql x 0) + 0 + (* x + (/ (log x) + (log 2))))) + +;;; +;;; Computes the entropy of a set of examples distributed in +;;; N1, N2 ... examples of each class. +;;; +;;; nb-total: number of examples. +;;; l-repartition: the distribution of the examples in each class +;;; returns: the entropy of the set. +;;; +(defun compute-entropy ((nb-total integer) + (l-repartition list)) + (cond + ((null l-repartition) 0) + ((= 0 nb-total) 1) + (t (+ (- (xlog2 (/ (car l-repartition) + nb-total))) + (compute-entropy nb-total + (cdr l-repartition)))))) + +;;; +;;; Computes the entropy of a list of examples. +;;; +;;; examples: the list of examples +;;; returns: the entropy of the set (between 0 et 1) +;;; +(defun entropy ((examples example-set)) + (if (consp (read-examples examples)) + (compute-entropy + (length (read-examples examples)) + (repartition (read-class-attribute (read-class examples)) examples)) + 0)) + +;;; +;;; Cuts the examples' set on the values of the specified attribute. +;;; +;;; exemples: the example-set +;;; attribute: the attribute on which we cut +;;; returns: a list of sets +;;; +(defun cut ((examples example-set) + (attribute symbol)) + + (loop for val + in (values-of-attribute attribute + (read-class examples)) + collect (let ((tmp + (make-instance 'example-set + :class (read-class examples)))) + + (loop for ex + in (read-examples examples) + do (if (eq val (read-attribute attribute ex)) + (add-example ex tmp))) + tmp))) + + + +;;; +;;; Cuts the examples' set on the values of the specified attribute, +;;; and computes the entropy of the resulting sets. +;;; +;;; exemples: the example-set +;;; attribute: the attribute on which we cut +;;; returns: a list of sets +;;; +(defun entropy-after-cut ((examples example-set) + (attribute symbol)) + + (let ((repartition nil) + (nb-examples 0)) + + (setq nb-examples + (length (read-examples examples))) + + (setq repartition + (loop for a-set + in (cut examples attribute) + collect (repartition (read-class-attribute (read-class a-set)) + a-set))) + + (loop for p + in repartition + sum (* (/ (apply '+ p) + nb-examples) + (apply 'compute-entropy + (cons (apply '+ p) (list p))))))) + +;;; +;;; Builds the decision tree +;;; +(defun build ((examples example-set) + (l-natt list)) + (cond + ; If the entropy is 0, then it's a leaf + ((= 0 (entropy examples)) + (format t "~%" + (read-attribute (read-class-attribute (read-class examples)) + (car (read-examples examples)))) + (list (read-attribute (read-class-attribute (read-class examples)) + (car (read-examples examples))))) + (t + (let ((attMin nil) + (mini 1)) + + (loop for cut + in l-natt + do (let ((entropy nil)) + (setq entropy + (entropy-after-cut examples cut)) + (if (> mini entropy) + (progn + (setq attMin cut) + (setq mini entropy))))) + (let ((tree nil)) + ; Attribute + (format t "~%" + attMin + mini) + (setq tree + (cons attMin + (loop for i + in (cut examples attMin) + collect (progn + (format t "~%" + (read-attribute attMin (car (read-examples i)))) + (list (list 'equal + :val-att + (string (read-attribute attMin (car (read-examples i))))) + (build i (remove attMin l-natt))))))) + tree))))) + +;;; +;;; Saves the tree in a file. +;;; +(defun save-tree ((tree list) + (file string)) + + (with-open-file (fd file :direction :output) + (format fd "~s" tree))) + + diff --git a/IntelligentSystem/TP1/tree/decision-tree.lisp b/IntelligentSystem/TP1/tree/decision-tree.lisp new file mode 100755 index 0000000..54e886f --- /dev/null +++ b/IntelligentSystem/TP1/tree/decision-tree.lisp @@ -0,0 +1,77 @@ +;;;; +;;;; decision-tree.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + +;;;; +;;;; Packages definitions +;;;; + +(in-package :net.homeip.nmasse.lisp.tp1.tree) + +;;;; +;;;; Exported methods +;;;; + +;;; +;;; Retourne la meilleure destination pour un client +;;; suivant un arbre de décision donné +;;; +(defmethod decide (arbre client) + (if (null (cdr arbre)) + ;; si la liste ne contient qu'un élement, alors une feuille est atteinte + ;; et la destination toute trouvée => on retourne cette destination + (car arbre) + ;; sinon on lance l'évaluation du test d'un critère sur la liste des + ;; valeurs possibles pour ce critère + (evalueCritere (cdr arbre) client (car arbre)))) + + +;;;; +;;;; Hidden methods +;;;; + +;;; +;;; Pour un critère donné, evalue les clauses +;;; lorsque qu'une clause est vérifiée, la fonction decide +;;; est appelée su rle sous arbre correspondant +;;; +(defmethod evalueCritere (clauses client attribut) + (cond + ; si il ne reste plus de clauses, ben souci... + ((null clauses) + (print "Souci, aucune possibilité ne correspond au client")) + ; on evalue la première clause après substitution de la variable par la + ; valeur fournie par le client, si elle est vraie on prend une décision + ; sur le sous arbre + ((eval (subst (trouveAttribut attribut client) :val-att (caar clauses) )) + (decide (cadar clauses) client)) + (t + (evalueCritere (cdr clauses) client attribut)))) + + +;;; +;;; Trouve pour un critère donné la valeur correspondant au client +;;; +(defmethod trouveAttribut (n l) + (cond + ; si la liste est vide => echec de la recherche, retourne nil + ((null l) + nil) + ; on teste le premier element (nom attribut) du premier + ; couple nom / att de la liste + ((eq (caar l) n) + (cadar l)) + ; si le premier couple de la liste n'est pas le bon, on relance + ; récursivement trouveAttribut sur le reste de la liste + (t + (trouveAttribut n (cdr l))))) + diff --git a/IntelligentSystem/TP1/tree/example-set.lisp b/IntelligentSystem/TP1/tree/example-set.lisp new file mode 100755 index 0000000..9d2fb50 --- /dev/null +++ b/IntelligentSystem/TP1/tree/example-set.lisp @@ -0,0 +1,52 @@ +;;;; +;;;; example-set.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + + +;;;; +;;;; Packages definitions +;;;; + +(in-package :net.homeip.nmasse.lisp.tp1.tree) + +;;; +;;; Adds an example to this example-set. +;;; +(defmethod add-example ((example generic-example) + (oself example-set)) + + (write-examples + (cons example (read-examples oself)) + oself)) + +;;; +;;; Prints an example-set on the specified stream. +;;; +(defmethod print-object :around ((oself example-set) + fd) + (loop for ex in (read-examples oself) do + (format fd "~s~%" ex))) + +;;; +;;; Computes the repartition of the examples after +;;; a cut on the specified attribute +;;; +(defmethod repartition ((attribute symbol) + (oself example-set)) + (loop for value + in (values-of-attribute attribute + (read-class oself)) + collect (loop for ex + in (read-examples oself) + count (eql (read-attribute attribute ex) + value)))) + diff --git a/IntelligentSystem/TP1/tree/main.lisp b/IntelligentSystem/TP1/tree/main.lisp new file mode 100755 index 0000000..124577c --- /dev/null +++ b/IntelligentSystem/TP1/tree/main.lisp @@ -0,0 +1,18 @@ +;;;; +;;;; main.lisp ENSICAEN 2006-02-01 +;;;; +;;;; @author MASSE Nicolas (2005-Groupe4-LIMIN) +;;;; @author LIMIN Thomas (2005-Groupe4-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. + +(load "tree/classes.lisp") +(load "tree/example-set.lisp") +(load "tree/decision-tree-builder.lisp") +(load "tree/decision-tree.lisp") + diff --git a/IntelligentSystem/TP2/bateaux_dico.lsp b/IntelligentSystem/TP2/bateaux_dico.lsp new file mode 100755 index 0000000..4898e8b --- /dev/null +++ b/IntelligentSystem/TP2/bateaux_dico.lsp @@ -0,0 +1,35 @@ +(bateau oui non) +(voiles oui non) +(sport oui non) +(voilier non non) +(plaisance oui non) +(est-habitable oui non) +(de-croisiere non non) +(se-porte non non) +(moteur oui non) +(bateau-a-moteur non non) +(voilier-mixte non non) +(timonerie oui non) +(lourd oui non) +(nombre-de-mats=1 oui non) +(un-mat oui non) +(deux-mats oui non) +(mat-d-artimon-inferieur-a-mat-d-avant oui non) +(goelette non oui) +(artimon-derriere-la-barre oui non) +(yawl non oui) +(ketch non oui) +(foc oui non) +(trinquette oui non) +(cotre non oui) +(sloop non oui) +(ventru oui non) +(large oui non) +(fifty non oui) +(quille oui non) +(quillard non oui) +(deux-coques oui non) +(catamaran non oui) +(trois-coques oui non) +(trimaran non oui) + diff --git a/IntelligentSystem/TP2/bateaux_faits.lsp b/IntelligentSystem/TP2/bateaux_faits.lsp new file mode 100755 index 0000000..2e176c1 --- /dev/null +++ b/IntelligentSystem/TP2/bateaux_faits.lsp @@ -0,0 +1,12 @@ +(bateau vrai) +(voiles vrai) +(de-croisiere vrai) +(nombre-de-mats=1 faux) +(moteur vrai) +(un-mat faux) +;(voilier) +;(mat-d-artimon-inferieur-a-mat-d-avant vrai) +;(trois-coques faux) +;(deux-coques vrai) +;(est-habitable vrai) +;(plaisance vrai) \ No newline at end of file diff --git a/IntelligentSystem/TP2/bateaux_regles b/IntelligentSystem/TP2/bateaux_regles new file mode 100755 index 0000000..1cdb828 --- /dev/null +++ b/IntelligentSystem/TP2/bateaux_regles @@ -0,0 +1,19 @@ +(si bateau et voiles et sport alors voilier) +(si bateau et plaisance et voiles alors voilier) +(si est-habitable alors de-croisiere et non se-porte) +(si bateau et moteur alors bateau-a-moteur) +(si voiles et bateau-a-moteur et de-croisiere alors voilier-mixte) +(si voilier et de-croisiere et timonerie et lourd alors voilier-mixte) +(si voilier et nombre-de-mats=1 alors un-mat) +(si voilier et non nombre-de-mats=1 alors deux-mats) +(si deux-mats et mat-d-artimon-inferieur-a-mat-d-avant alors non goelette) +(si deux-mats et non mat-d-artimon-inferieur-a-mat-d-avant alors goelette) +(si non goelette et artimon-derriere-la-barre alors yawl) +(si non goelette et non artimon-derriere-la-barre alors ketch) +(si un-mat et foc et trinquette alors cotre) +(si un-mat et foc et non trinquette alors sloop) +(si voilier-mixte et ventru et large alors fifty) +(si voilier et quille alors quillard) +(si voilier et deux-coques alors catamaran) +(si voilier et trois-coques alors trimaran) + diff --git a/IntelligentSystem/TP2/bateaux_regles.lsp b/IntelligentSystem/TP2/bateaux_regles.lsp new file mode 100755 index 0000000..f25fb61 --- /dev/null +++ b/IntelligentSystem/TP2/bateaux_regles.lsp @@ -0,0 +1,19 @@ +(R1 ((bateau) (voiles) (sport)) ((voilier))) +(R2 ((bateau) (plaisance) (voiles)) ((voilier))) +(R3 ((est-habitable)) ((de-croisiere) (non se-porte))) +(R4 ((bateau) (moteur)) ((bateau-a-moteur))) +(R5 ((voiles) (bateau-a-moteur) (de-croisiere)) ((voilier-mixte))) +(R6 ((voilier) (de-croisiere) (timonerie) (lourd)) ((voilier-mixte))) +(R7 ((voilier) (nombre-de-mats=1)) ((un-mat))) +(R8 ((voilier) (non nombre-de-mats=1)) ((deux-mats))) +(R9 ((deux-mats) (mat-d-artimon-inferieur-a-mat-d-avant)) ((non goelette))) +(R10 ((deux-mats) (non mat-d-artimon-inferieur-a-mat-d-avant)) ((goelette))) +(R11 ((non goelette) (artimon-derriere-la-barre)) ((yawl))) +(R12 ((non goelette) (non artimon-derriere-la-barre)) ((ketch))) +(R13 ((un-mat) (foc) (trinquette)) ((cotre))) +(R14 ((un-mat) (foc) (non trinquette)) ((sloop))) +(R15 ((voilier-mixte) (ventru) (large)) ((fifty))) +(R16 ((voilier) (quille)) ((quillard))) +(R17 ((voilier) (deux-coques)) ((catamaran))) +(R18 ((voilier) (trois-coques)) ((trimaran))) + diff --git a/IntelligentSystem/TP2/exemple_de_regles b/IntelligentSystem/TP2/exemple_de_regles new file mode 100755 index 0000000..9bbdd62 --- /dev/null +++ b/IntelligentSystem/TP2/exemple_de_regles @@ -0,0 +1,14 @@ +Construction d'une base de règle + +Tarification du transport + +si (age > 60 et retraite) alors carte-vermeil +si (nb-enfant > 5) alors reduction-famille-nombreuse +si (poids-chat < 10 et griffe-limée) alors chat-special +si (carte-vermeil et chat-special) alors chat-demi-tarif +si (age < 10 et ) alors gratuité +si (famille-nombreuse et periode-scolaire) alors reduction-vacances +si (age < 26 et age >= 10 et carte-jeune) alors tarif-bleu +si (tarif-bleu et trajet > 100) alors rafraichissement-offert + +etc... \ No newline at end of file diff --git a/IntelligentSystem/TP2/packages.lsp b/IntelligentSystem/TP2/packages.lsp new file mode 100755 index 0000000..9178a09 --- /dev/null +++ b/IntelligentSystem/TP2/packages.lsp @@ -0,0 +1,2 @@ +;; Définition du package utilisé pour le tp6 +(defpackage :tp6 (:use :common-lisp )) diff --git a/IntelligentSystem/TP2/se.lsp b/IntelligentSystem/TP2/se.lsp new file mode 100755 index 0000000..f684d76 --- /dev/null +++ b/IntelligentSystem/TP2/se.lsp @@ -0,0 +1,240 @@ +#| + | #(@)se.lisp ENSICAEN 2006-02-01 + | + | @author MASSE Nicolas (2005-Groupe4-LIMIN) + | @author LIMIN Thomas (2005-Groupe4-MASSE) + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + +(in-package :tp6) + +(load "metaclos.lsp") + + +;;;; Définition de la classe attribut +(make-class attribut (unite) ( (demandable symbol ) (demande symbol) (but symbol ) (valeur)) "" ) + + +;;;; Crée une instance d'attribut à partir des données présentes dans la +;;;; liste lst : (nom-attribut, booléen est-demandable?, booléen est-un-but?) +(defun make-attribute-from-list (lst) + (make-instance 'attribut + :nom (car lst) + :demandable (cadr lst) + :but (caddr lst) + ) +) + + +;;;; Charge dans l'environnement tous les attributs présents dans le fichier +;;;; nommé filename. +(defun load-attributes-from-file (filename) + (let ((attribute nil)) + (with-open-file (fd filename :direction :input) + (setq attribute (read fd nil 'eof)) + (loop until (eq attribute 'eof) do + (make-attribute-from-list attribute) + (setq attribute (read fd nil 'eof)))))) + + +;;;; Définition de la classe règle +(make-class regle (unite) ( (declenchable symbol 'faux) (active symbol 'faux) (conditions list) (conclusions list)) "") + + +;;;; Crée une instance de règle à partir des données présentes dans la +;;;; liste lst : (nom-règle, liste-de-conditions, liste-de-conclusions) +(defun make-regle-from-list (lst) + (make-instance 'regle + :nom (car lst) + :conditions (cadr lst) + :conclusions (caddr lst))) + + +;;;; Charge dans l'environnement toute les règles présentes dans le fichier +;;;; nommé filename. +(defun load-regles-from-file (filename) + (let ((regle nil)) + (with-open-file (fd filename :direction :input) + (setq regle (read fd nil 'eof)) + (loop until (eq regle 'eof) do + (make-regle-from-list regle) + (setq regle (read fd nil 'eof)))))) + + +;;;; Associe un fait, c'est à dire une valeur connue d'un attribut à un +;;;; instant donné, a l'attribut correspondant => donne une valeur à un +;;;; attribut. +(defun set-attribut-avec-fait (lst) + (setf (valeur (l-objet (car lst))) + (cadr lst))) + + +;;;; Associe aux attributs correspondants les fait présents dans le +;;;; fichier nommé filename. +(defun load-faits-from-file (filename) + (let ((fait nil)) + (with-open-file (fd filename :direction :input) + (setq fait (read fd nil 'eof)) + (loop until (eq fait 'eof) do + (set-attribut-avec-fait fait) + (setq fait (read fd nil 'eof)))))) + + +;;;; Teste si la règle est déclenchable. C'est le cas si toute +;;;; les conditions de la règle sont vérifiées. +(defmethod regle-declenchablep ((oself regle)) + (if (not (eql (declenchable oself) 'vrai)) + (let + ((res t)) + (loop for x in (conditions oself) do + (setf res + (and (condition-verifp x) + res))) + (if res + (progn + (setf (declenchable oself) + 'vrai) + (format t "Règle ~a déclenchable~%" (nom oself)) + t) + (progn + (setf (declenchable oself) + 'faux) + nil))) + (not (eql 'vrai (active oself))))) + + +;;;; Vérifie si une condition est réalisée. C'est le cas lorsque l'attribut +;;;; cité dans la condition est valué et que sa valeur entraine la réalisation +;;;; de la condition. +(defun condition-verifp (condition) + (if (eql 'non (car condition)) + ; regle négative + (if (eql 'faux (valeur (l-objet (cadr condition)))) + t + nil) + ; règle affirmative + (if (eql 'vrai (valeur (l-objet (car condition)))) + t + nil))) + + +;;;; Ajoute dans la base de fait de l'environnement le fait apporté par le +;;;; parametre conclusion. +(defun appliquer-conclusion (conclusion) + (let ((att nil) (val nil)) + (if (eql 'non (car conclusion)) + ; fait négatif + (progn + (setf att (l-objet (cadr conclusion))) + (setf val 'faux)) + ; fait affirmatif + (progn + (setf att (l-objet (car conclusion))) + (setf val 'vrai))) + (setf (valeur att) val) + (format t " ~a: ~a" (nom att) val) + (and (eql (but att) 'OUI) (eql val 'VRAI)))) + + +;;;; Applique la règle (si elle n'est pas déjà active) => ajoute les faits +;;;; amenés par les conclusions de la règle. +(defmethod appliquer-regle ((oself regle)) + (if (regle-declenchablep oself) + (let ((but nil)) + (format t "application de ~s: ~a =>" (nom oself) (conditions oself)) + (loop for x in (conclusions oself) do + (setf but (or + (appliquer-conclusion x) + but)) + (setf (active oself) + 'vrai)) + (format t "~%") + (if but + (format t "la règle ~a a démontré un but~%" (nom oself))) + but))) + + +;;;; Vérifie si l'attribut est demandable à l'utilisateur +(defmethod demandablep ((oself attribut)) + (and (not (eql 'VRAI (demande oself))) + (eql 'OUI (demandable oself)))) + +;;;; Demande à l'utilisateur de donner une valeur a +;;;; l'attribut et retourne t si l'utilisateur a fourni une valeur +;;;; (par opposition à la valeur "je ne sais pas") +(defmethod demande-a-utilisateur ((oself attribut)) + (let ((rep nil)(rep-donnee nil)) + (loop until rep-donnee do + (format t + "A votre avis l'attribut ~s est il \"vrai\" ou \"faux\" ou \"?\" => je ne sais pas ?~%" + (nom oself)) + (setf rep (read-line)) + (cond + ((equal "vrai" rep) + (setf (valeur oself) 'VRAI) + (setf (demande oself) 'VRAI) + (setf rep-donnee t)) + ((equal "faux" rep) + (setf (valeur oself) 'FAUX) + (setf (demande oself) 'VRAI) + (setf rep-donnee t)) + ((equal "?" rep) + (setf (valeur oself) nil) + (setf (demande oself) 'VRAI) + (setf rep-donnee t)))) + (not (equal "?" rep)))) + + +;;;; Parcours la liste de règle à la recherche de règles applicables, et les +;;;; applique jusqu'à l'obtemption d'un but ou la saturation de la base de +;;;; faits (= plus de nouvelles règles applicables). +(defun moteur-inference () + ; parcours des règles pour voir celle qui sont applicables + (let ((etat nil) (reg-dec nil) (but-demontre nil)) + (loop until etat do + ; premier passage sur toutes les règles + (dolist (re (les-instances 'regle)) + (if (regle-declenchablep re) + (progn + ; ajout de la règle sur la pile des règles déclanchables + (push re reg-dec)))) + + ; application des règles déclenchables et vérification + ; de la déclenchabilité des règle encore inactive + (loop while (and (null etat) (consp reg-dec)) do + ; utilisation & suppression du haut de la pile + (setf but-demontre (or (appliquer-regle (pop reg-dec)) but-demontre)) + (dolist (re (les-instances 'regle)) + (if (regle-declenchablep re) + ; ajout de la regle dans la liste des regle demandables + (push re reg-dec)))) + (if but-demontre + (setf etat 'reussite) + ; demander un fait supplémentaire + (let ((attrs nil) (attr nil) (rep nil)) + (setf attrs (les-instances 'attribut)) + (loop until (or etat rep) do + (setf attr (car attrs)) + (setf attrs (cdr attrs)) + (if (null attr) + (setf etat 'echec) + (progn + ; recherche d'un attribut demandable + (loop until (or etat (and (eql nil (valeur attr)) (demandablep attr))) do + (setf attr (car attrs)) + (setf attrs (cdr attrs)) + (if (null attr) + (setf etat 'echec))) + (if (null etat) + (setf rep (demande-a-utilisateur attr))))))))) + (cond + ((eql 'reussite etat) + (format t "RÉUSSITE: le but a été démontré~%")) + ((eql 'echec etat) + (format t "ÉCHEC: la base de fait est saturée ou les faits sont insuffisants~%"))))) \ No newline at end of file diff --git a/IntelligentSystem/TP2/test-se.lsp b/IntelligentSystem/TP2/test-se.lsp new file mode 100755 index 0000000..567c277 --- /dev/null +++ b/IntelligentSystem/TP2/test-se.lsp @@ -0,0 +1,11 @@ +(load 'packages.lsp) +(load 'se.lsp) + +(in-package :tp6) +(load-attributes-from-file "bateaux_dico.lsp" ) +(load-regles-from-file "bateaux_regles.lsp" ) +(load-faits-from-file "bateaux_faits.lsp" ) + +(format t "~%~%~%~%") + +(moteur-inference) diff --git a/IntelligentSystem/TP2/traces b/IntelligentSystem/TP2/traces new file mode 100755 index 0000000..0cc0cfd --- /dev/null +++ b/IntelligentSystem/TP2/traces @@ -0,0 +1,17 @@ + + + + +Règle R4 déclenchable +application de R4: ((BATEAU) (MOTEUR)) => BATEAU-A-MOTEUR: VRAI +Règle R5 déclenchable +application de R5: ((VOILES) (BATEAU-A-MOTEUR) (DE-CROISIERE)) => VOILIER-MIXTE: VRAI +A votre avis l'attribut TROIS-COQUES est il "vrai" ou "faux" ou "?" => je ne sais pas ? +A votre avis l'attribut DEUX-COQUES est il "vrai" ou "faux" ou "?" => je ne sais pas ? +A votre avis l'attribut QUILLE est il "vrai" ou "faux" ou "?" => je ne sais pas ? +A votre avis l'attribut LARGE est il "vrai" ou "faux" ou "?" => je ne sais pas ? +A votre avis l'attribut VENTRU est il "vrai" ou "faux" ou "?" => je ne sais pas ? +Règle R15 déclenchable +application de R15: ((VOILIER-MIXTE) (VENTRU) (LARGE)) => FIFTY: VRAI +la règle R15 a démontré un but +RÉUSSITE: le but a été démontré diff --git a/Java/Makefile b/Java/Makefile new file mode 100755 index 0000000..0f825d6 --- /dev/null +++ b/Java/Makefile @@ -0,0 +1,18 @@ +all: + @echo "Usage: make javadoc" + +javadoc: + @find . -type d -name 'src' -o -name 'TP1' |while read dir; do \ + dest="javadoc/$$(echo $$dir |sed 's/\/src//')"; \ + mkdir -p "$$dest"; \ + if ls $$dir/*.java &>/dev/null; then \ + javadoc -private -d "$$dest" -sourcepath "$$dir" "$$(cd $$dir && echo *.java)"; \ + else \ + javadoc -private -d "$$dest" -sourcepath "$$dir" -subpackages "$$(cd $$dir && echo * |sed 's/ /:/g')"; \ + fi ; \ + done + +clean: + rm -rf javadoc + +.PHONY: javadoc all clean diff --git a/Java/TP1/ex1/JavaVersC.c b/Java/TP1/ex1/JavaVersC.c new file mode 100755 index 0000000..c13a9a3 --- /dev/null +++ b/Java/TP1/ex1/JavaVersC.c @@ -0,0 +1,29 @@ + /** + * #(@)JavaVersC.c ENSICAEN 2005-02-27 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +/** + * Implémentation en C d'une fonction native Java + * (affichage de bonjour) + */ + + +#include +#include "JavaVersC.h" + + + +JNIEXPORT void JNICALL Java_JavaVersC_bonjour(JNIEnv * env, jobject obj) { + fprintf(stdout, "Bonjour\n"); +} diff --git a/Java/TP1/ex1/JavaVersC.h b/Java/TP1/ex1/JavaVersC.h new file mode 100755 index 0000000..4802de6 --- /dev/null +++ b/Java/TP1/ex1/JavaVersC.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class JavaVersC */ + +#ifndef _Included_JavaVersC +#define _Included_JavaVersC +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: JavaVersC + * Method: bonjour + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_JavaVersC_bonjour + (JNIEnv *, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Java/TP1/ex1/JavaVersC.java b/Java/TP1/ex1/JavaVersC.java new file mode 100755 index 0000000..f23c36b --- /dev/null +++ b/Java/TP1/ex1/JavaVersC.java @@ -0,0 +1,45 @@ +/** + * #(@)JavaVersC.java ENSICAEN 2005-02-27 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package ex1; + +/** + * Exemple du cours: affichage d'une chaine de caractères + */ + +public class JavaVersC { + + public static void main(String[] args) { + new JavaVersC().bonjour(); + } + + public native void bonjour(); + + static { + try { + System.loadLibrary("JavaVersC"); + } catch (SecurityException e) { + System.err.println(e.getMessage()); + System.exit(1); + } catch (UnsatisfiedLinkError e) { + System.err.println(e.getMessage()); + System.exit(1); + } catch (NullPointerException e) { + System.err.println("Error, System.loadLibrary called with null libname"); + System.exit(1); + } + } + +} + diff --git a/Java/TP1/ex1/Makefile b/Java/TP1/ex1/Makefile new file mode 100755 index 0000000..d345b41 --- /dev/null +++ b/Java/TP1/ex1/Makefile @@ -0,0 +1,44 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description du makefile +# + +CC = gcc +LD = gcc +CFLAGS = -Wall -fpic +CPPFLAGS = -I/opt/jdk1.5.0_01/include/ -I/opt/jdk1.5.0_01/include/linux + + +all : JavaVersC.class libJavaVersC.so + + +JavaVersC.class : %.class : %.java + javac $< + +JavaVersC.o : %.o : %.c %.h + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< + +libJavaVersC.so : JavaVersC.o + $(LD) -shared $^ -o $@ + +clean: + rm -f *.o *.so *.class + +distclean: clean + rm -f *~ + +.PHONY: all clean distclean + diff --git a/Java/TP1/ex2/Login.java b/Java/TP1/ex2/Login.java new file mode 100755 index 0000000..e12a079 --- /dev/null +++ b/Java/TP1/ex2/Login.java @@ -0,0 +1,60 @@ +/* + * #(@)Login.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package ex2; + +import java.io.*; + +/** + * Programme d'authentification qui lit sur l'entree standard un couple + * login/mot de passe et qui l'authentifie en utilisant une methode native. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +class Login { + + /* Chargement de la librarie partagee */ + static { + System.loadLibrary("login"); + } + + /** La methode est implementee dans la librairie liblogin.so */ + native static boolean validate(String login, String passwd); + + /** Point d'entree du programme */ + public static void main(String[] args) throws Exception { + InputStreamReader isr = new InputStreamReader(System.in); + BufferedReader br = new BufferedReader(isr); + String login = null; + String passwd = null; + + /* Demande du login */ + System.out.print("Login: "); + login = br.readLine(); + + /* Demande du mot de passe */ + System.out.print("Passwd: "); + passwd = br.readLine(); + + System.out.println(); + + /* Validation */ + if (validate(login, passwd)) { + System.out.println("Welcome " + login + " !"); + } else { + Thread.sleep(2000); + System.out.println("Wrong login/passwd !"); + } + } +} + diff --git a/Java/TP1/ex2/Makefile b/Java/TP1/ex2/Makefile new file mode 100755 index 0000000..4ef5ecb --- /dev/null +++ b/Java/TP1/ex2/Makefile @@ -0,0 +1,54 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Construit l'exercice 2 du TP1 sur JNI. Construit la librairie partagee +# et le programme java. +# + +# +# Version : 0.0.1 +# +# Fait : - +# +# A faire : - +# + + +CC = gcc +JAVAC = javac +JAVAH = javah + +CFLAGS = -Wall -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux -g +LDFLAGS = -fpic -lpam_misc +JAVACFLAGS = +JAVAHFLAGS = + + +all: Login.class liblogin.so + +liblogin.so: login.c Login.h + $(CC) $(CFLAGS) $(LDFLAGS) -shared -lpam -o $@ $< + +Login.class: Login.java + $(JAVAC) $(JAVACFLAGS) $< + +Login.h: Login.java + $(JAVAH) $(JAVAHFLAGS) -o $@ Login + +clean: + rm -f login.so Login.h Login.class + +.PHONY: all clean + diff --git a/Java/TP1/ex2/login.c b/Java/TP1/ex2/login.c new file mode 100755 index 0000000..9458c46 --- /dev/null +++ b/Java/TP1/ex2/login.c @@ -0,0 +1,102 @@ +/** + * #(@)login.c ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Definition des methodes natives qui seront inclues dans la librairie + * chargee par le programme Login ecrit en java. + */ + +#include +#include + +#include +#include + +#include "Login.h" + +/* + * @version 0.0.1 + * + * @Fait - + * + * @Afaire Lecture a partir du fichier + */ + +static int conversationFct(int num_msg, const struct pam_message ** msg, + struct pam_response ** resp, void * appdata_ptr) { + char * pass = (char *) appdata_ptr; + size_t len = strlen(pass); + + switch (msg[num_msg - 1]->msg_style) { + case PAM_PROMPT_ECHO_OFF: + (*resp) = malloc(sizeof(struct pam_response)); + (*resp)[num_msg - 1].resp = malloc(len + 1); + strncpy((*resp)[num_msg - 1].resp, pass, len + 1)[len] = '\0'; + (*resp)[num_msg - 1].resp_retcode = 0; + + break; + default: + break; + } + + return PAM_SUCCESS; +} + + +int validate(const char * login, const char * pass) { + int res; + pam_handle_t * pamHandle = NULL; + struct pam_conv pamConversation = {conversationFct, (void *) pass}; + + printf("login: %s\n", login); + res = pam_start("java_login", login, &pamConversation, &pamHandle); + printf("pam_start: %s\n", pam_strerror(pamHandle, res)); + + res = pam_authenticate(pamHandle, 0); + printf("pam_authenticate: %s\n", pam_strerror(pamHandle, res)); + + res = pam_acct_mgmt(pamHandle, 0); + printf("pam_acct_mgmt: %s\n", pam_strerror(pamHandle, res)); + + res = pam_end(pamHandle, res); + printf("pam_end: %s\n", pam_strerror(pamHandle, res)); + + return 0; +} + +/* + * @see Login.h + */ +JNIEXPORT jboolean JNICALL Java_Login_validate + (JNIEnv * env, jclass class, jstring login, jstring passwd) { + /* Copie des chaines passees en parametre */ + const char * l = (*env)->GetStringUTFChars(env, login, 0); + const char * p = (*env)->GetStringUTFChars(env, passwd, 0); + jboolean ret; + + /* Creation du booleen retourne */ + if (validate(l, p)) { + ret = JNI_TRUE; + } else { + ret = JNI_FALSE; + } + + /* On libere les copies des chaine de caracteres */ + (*env)->ReleaseStringUTFChars(env, login, l); + (*env)->ReleaseStringUTFChars(env, passwd, p); + + return ret; +} + + diff --git a/Java/TP1/ex2/test.c b/Java/TP1/ex2/test.c new file mode 100755 index 0000000..5d0b161 --- /dev/null +++ b/Java/TP1/ex2/test.c @@ -0,0 +1,60 @@ +/** + * #(@)nomfichier.c ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include +#include +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + +int validate(char *, char *); + +void * pam_test(void * arg) { + char ** env = __environ; + + do { + printf("%s\n", *env); + } while (*(env++)); + + if (validate("visiteur", "ok")) { + printf("pouet\n"); + } +} + + +int main() { + pthread_t th; + + pthread_create(&th, NULL, pam_test, NULL); + pthread_join(th, NULL); + + return 0; +} diff --git a/Java/TP1/ex3/Makefile b/Java/TP1/ex3/Makefile new file mode 100755 index 0000000..e04486f --- /dev/null +++ b/Java/TP1/ex3/Makefile @@ -0,0 +1,45 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description du makefile +# + +CC = gcc +LD = gcc +CFLAGS = -Wall -fpic +CPPFLAGS = -I/opt/jdk1.5.0_01/include/ -I/opt/jdk1.5.0_01/include/linux + + +all : ReadFile.class libReadFile.so + + + +ReadFile.class : %.class : %.java + javac $< + +ReadFile.o : %.o : %.c %.h + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< + +libReadFile.so : ReadFile.o + $(LD) -shared $^ -o $@ + +clean: + rm -f *.o *.so *.class + +distclean: clean + rm -f *~ + +.PHONY: all clean distclean + diff --git a/Java/TP1/ex3/ReadFile.c b/Java/TP1/ex3/ReadFile.c new file mode 100755 index 0000000..745a874 --- /dev/null +++ b/Java/TP1/ex3/ReadFile.c @@ -0,0 +1,62 @@ + /** + * #(@)ReadFile.h ENSICAEN 2005-02-20 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +/** + * Implémentation en C d'une fonction native Java + * (lecture d'un fichier) + */ + + +#include +#include "ReadFile.h" + + +#include +#include +#include +#include + +JNIEXPORT jbyteArray JNICALL Java_ReadFile_readFile(JNIEnv * env, jobject obj, jstring filename) { + jbyteArray ba = NULL; + const char * fname = (*env)->GetStringUTFChars(env, filename, JNI_FALSE); + FILE * stream = fopen(fname, "r"); + + if (stream != NULL) { + + // récupération de la taille du fichier + struct stat s; + stat(fname, &s); + + // création d'un noujeau tableau Java d'octet + ba = (*env)->NewByteArray(env, s.st_size); + + // allocation d'un espace temporaire pour stocker le contenu du fichier + unsigned char * buff = (unsigned char *) malloc(sizeof(unsigned char) * s.st_size); + + // lecture du fichier et copie dans le buffer + fread(buff, sizeof(unsigned char), s.st_size, stream); + + // copie du buffer dans le tableau Java + (*env)->SetByteArrayRegion(env, ba, 0, s.st_size, buff); + + // libération du buffer & fermeture du fichier + free(buff); + fclose(stream); + } + + // libération de la chaine nom du fichier + (*env)->ReleaseStringUTFChars(env, filename, JNI_FALSE); + return ba; +} diff --git a/Java/TP1/ex3/ReadFile.h b/Java/TP1/ex3/ReadFile.h new file mode 100755 index 0000000..ad85ce2 --- /dev/null +++ b/Java/TP1/ex3/ReadFile.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class ReadFile */ + +#ifndef _Included_ReadFile +#define _Included_ReadFile +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: ReadFile + * Method: readFile + * Signature: (Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_ReadFile_readFile + (JNIEnv *, jobject, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Java/TP1/ex3/ReadFile.java b/Java/TP1/ex3/ReadFile.java new file mode 100755 index 0000000..926d2e5 --- /dev/null +++ b/Java/TP1/ex3/ReadFile.java @@ -0,0 +1,56 @@ +/** + * #(@)ReadFile.java ENSICAEN 2005-02-20 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package ex3; + +/** + * Ecriture d'une classe ReadFile capable de lire et d'afficher à l'écran + * le contenu d'un fichier. La lecture du fichier proprement dite sera + * effectuées par uen fonction native et retournera le fichier sous la forme + * d'un tableau de bytes + */ + +public class ReadFile { + + public static void main(String[] args) { + if (args.length < 1) { + System.err.println("Usage : java ReadFile "); + } else { + byte[] tableau = new ReadFile().readFile(args[0]); + if (tableau != null) { + System.out.println(new String(tableau)); + } + } + } + + public native byte[] readFile(String filename); + + + static { + try { + System.loadLibrary("ReadFile"); + } catch (SecurityException e) { + System.err.println(e.getMessage()); + System.exit(1); + } catch (UnsatisfiedLinkError e) { + System.err.println(e.getMessage()); + System.exit(1); + } catch (NullPointerException e) { + System.err.println("Error, System.loadLibrary called with null libname"); + System.exit(1); + } + } + +} + diff --git a/Java/TP2/build.xml b/Java/TP2/build.xml new file mode 100755 index 0000000..66a1c7b --- /dev/null +++ b/Java/TP2/build.xml @@ -0,0 +1,69 @@ + + + + + + Builds, tests, and runs the project BeanTests. + + + diff --git a/Java/TP2/nbproject/build-impl.xml b/Java/TP2/nbproject/build-impl.xml new file mode 100755 index 0000000..c2dd7ae --- /dev/null +++ b/Java/TP2/nbproject/build-impl.xml @@ -0,0 +1,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + diff --git a/Java/TP2/nbproject/genfiles.properties b/Java/TP2/nbproject/genfiles.properties new file mode 100755 index 0000000..ff168d2 --- /dev/null +++ b/Java/TP2/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=8c30d493 +build.xml.script.CRC32=c8de4fa6 +build.xml.stylesheet.CRC32=d5b6853a +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=8c30d493 +nbproject/build-impl.xml.script.CRC32=6ec94a64 +nbproject/build-impl.xml.stylesheet.CRC32=d7756595 diff --git a/Java/TP2/nbproject/private/private.properties b/Java/TP2/nbproject/private/private.properties new file mode 100755 index 0000000..dd1e034 --- /dev/null +++ b/Java/TP2/nbproject/private/private.properties @@ -0,0 +1,4 @@ +application.args= +javac.debug=true +javadoc.preview=true +user.properties.file=/home/nicolas/.netbeans/5.0beta/build.properties diff --git a/Java/TP2/nbproject/private/private.xml b/Java/TP2/nbproject/private/private.xml new file mode 100755 index 0000000..241c8c6 --- /dev/null +++ b/Java/TP2/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Java/TP2/nbproject/project.properties b/Java/TP2/nbproject/project.properties new file mode 100755 index 0000000..3cf1baf --- /dev/null +++ b/Java/TP2/nbproject/project.properties @@ -0,0 +1,56 @@ +application.args= +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/BeanTests.jar +dist.javadoc.dir=${dist.dir}/javadoc +jar.compress=true +javac.classpath=\ + ${libs.swing-layout.classpath} +# Space-separated list of extra javac options +javac.compilerargs=-Xlint:unchecked +javac.deprecation=false +javac.source=${default.javac.source} +javac.target=${default.javac.target} +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath} +javadoc.additionalparam= +javadoc.author=true +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=true +javadoc.splitindex=true +javadoc.use=true +javadoc.version=true +javadoc.windowtitle= +main.class=mybeans.Main +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +src.dir=src +test.src.dir=test diff --git a/Java/TP2/nbproject/project.xml b/Java/TP2/nbproject/project.xml new file mode 100755 index 0000000..f2010b1 --- /dev/null +++ b/Java/TP2/nbproject/project.xml @@ -0,0 +1,22 @@ + + + org.netbeans.modules.java.j2seproject + + + + + BeanTests + 1.6.5 + + + + + + + + + + + + + diff --git a/Java/TP2/src/mybeans/ImageBean.java b/Java/TP2/src/mybeans/ImageBean.java new file mode 100755 index 0000000..dccb0aa --- /dev/null +++ b/Java/TP2/src/mybeans/ImageBean.java @@ -0,0 +1,124 @@ +/* + * #(@)ImageBean.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import java.beans.*; +import java.awt.*; +import java.awt.image.*; +import java.io.Serializable; +import java.util.*; + +/** + * Cette classe se conforme à la spécification JavaBean. C'est un afficheur + * d'images. Elle génère des évènements ImageChangedEvent reçu par des objets + * de type ImageChangedListener lorsque l'image à afficher change. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class ImageBean extends Canvas implements Serializable { + /** Le nom de l'image à afficher, valeur implicite : null */ + public static final String PROP_IMAGE_FILENAME = "imageFileName"; + private String imageFileName; + + /** Le contenu de l'image */ + private Image img; + + /** Aide à la propagation d'évènements */ + private PropertyChangeSupport propertySupport; + + /** La liste de tous les écouteurs */ + private java.util.List listenerList; + + /** Construit un nouvel afficheur */ + public ImageBean() { + this.propertySupport = new PropertyChangeSupport(this); + this.listenerList = new ArrayList(); + } + + /** + * Getter pour le nom de fichier. + */ + public String getImageFileName() { + return this.imageFileName; + } + + /** + * Setter pour le nom de fichier. + */ + public void setImageFileName(String value) { + String oldValue = this.imageFileName; + this.imageFileName = value; + + this.img = java.awt.Toolkit.getDefaultToolkit().getImage(this.imageFileName); + + this.repaint(); + + this.propertySupport.firePropertyChange(PROP_IMAGE_FILENAME, oldValue, value); + this.fireImageChangedEvent(); + } + + /** + * Enregistre un nouvel écouteur de changement de propriété. + */ + public void addPropertyChangeListener(PropertyChangeListener listener) { + this.propertySupport.addPropertyChangeListener(listener); + } + + /** + * Enlève un écouteur de changement de propriété précédemment enregistré. + */ + public void removePropertyChangeListener(PropertyChangeListener listener) { + this.propertySupport.removePropertyChangeListener(listener); + } + + /** + * Enregistre un nouvel écouteur de changement d'image. + */ + public void addImageChangedListener(ImageChangedListener ice) { + this.listenerList.add(ice); + } + + /** + * Enlève un écouteur de changement d'image précédemment enregistré. + */ + public void removeImageChangedListener(ImageChangedListener ice) { + this.listenerList.remove(ice); + } + + /** + * Provoque l'émission d'évènements de changement d'image. + */ + private void fireImageChangedEvent() { + ImageChangedEvent evt = new ImageChangedEvent(this, this.imageFileName, this.img); + + ListIterator li = this.listenerList.listIterator(); + ImageChangedListener ice; + + while (li.hasNext()) { + ice = li.next(); + ice.imageChanged(evt); + } + } + + /** + * Affiche le composant à l'écran. + */ + public void paint(Graphics g) { + g.clearRect(0, 0, this.getWidth(), this.getHeight()); + + if (img != null) { + g.drawImage(img, 0, 0, this); + } + } +} diff --git a/Java/TP2/src/mybeans/ImageChangedEvent.java b/Java/TP2/src/mybeans/ImageChangedEvent.java new file mode 100755 index 0000000..22b8346 --- /dev/null +++ b/Java/TP2/src/mybeans/ImageChangedEvent.java @@ -0,0 +1,48 @@ +/* + * #(@)ImageChangedEvent.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import java.util.*; +import java.awt.*; + +/** + * Représente un changement d'images dans la classe ImageIterator. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class ImageChangedEvent extends EventObject { + /** Le nom du nouveau fichier image */ + private String fileName; + + /** Le contenu de la nouvelle image */ + private Image image; + + /** Construit un nouvel évènement. */ + public ImageChangedEvent(Object source, String fileName, Image img) { + super(source); + + this.fileName = fileName; + this.image = img; + } + + /** Getter pour le nom de fichier */ + public String getFileName() { + return fileName; + } + + /** Getter pour le contenu de l'image */ + public Image getImage() { + return image; + } +} diff --git a/Java/TP2/src/mybeans/ImageChangedListener.java b/Java/TP2/src/mybeans/ImageChangedListener.java new file mode 100755 index 0000000..3da20b6 --- /dev/null +++ b/Java/TP2/src/mybeans/ImageChangedListener.java @@ -0,0 +1,31 @@ +/* + * #(@)ImageChangedListener.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + + +import java.util.*; + +/** + * Spécifie la méthode appelée lors d'un changement d'image dans la classe + * ImageIterator. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public interface ImageChangedListener extends EventListener { + /** + * Cette méthode est appelée lors d'un changement d'image dans + * la classe ImageIterator. + */ + public void imageChanged(ImageChangedEvent evt); +} diff --git a/Java/TP2/src/mybeans/ImageDisplayer.form b/Java/TP2/src/mybeans/ImageDisplayer.form new file mode 100755 index 0000000..f82894d --- /dev/null +++ b/Java/TP2/src/mybeans/ImageDisplayer.form @@ -0,0 +1,240 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/Java/TP2/src/mybeans/ImageDisplayer.java b/Java/TP2/src/mybeans/ImageDisplayer.java new file mode 100755 index 0000000..c815cd2 --- /dev/null +++ b/Java/TP2/src/mybeans/ImageDisplayer.java @@ -0,0 +1,279 @@ +/* + * #(@)ImageDisplayer.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import javax.swing.*; +import java.beans.*; + +/** + * Cette classe à été construite à l'aide de l'IDE netbeans, les variables + * membres, la méthode initComponents() et les autres méthodes privées sont + * auto-générés. Cette classe lie les beans développés dans ce TP au sein + * d'un interface graphique. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class ImageDisplayer extends JPanel { + + /** + * Construit un nouveau composant. + */ + public ImageDisplayer() { + initComponents(); + + // Enregistrement de l'écouteur + this.ibImage.addImageChangedListener(this.lblImage); + } + + /** This method is called from within the constructor to initialize + * the form. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + itImage = new mybeans.ImageIterator(); + timer = new mybeans.TimerBean(); + btDebut = new javax.swing.JButton(); + btPrec = new javax.swing.JButton(); + btSuiv = new javax.swing.JButton(); + btFin = new javax.swing.JButton(); + lblImage = new mybeans.LabelBean(); + ibImage = new mybeans.ImageBean(); + sldDelai = new javax.swing.JSlider(); + lblDelai = new javax.swing.JLabel(); + lblValeur = new javax.swing.JLabel(); + chkBoucle = new javax.swing.JCheckBox(); + chkDiapo = new javax.swing.JCheckBox(); + + itImage.setDirName("/usr/share/pixmaps"); + itImage.setLoop(chkBoucle.isSelected()); + itImage.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + itImagePropertyChange(evt); + } + }); + + timer.setDiaporama(chkDiapo.isSelected()); + timer.setMain(new Runnable() {public void run() {itImage.next();}}); + timer.setTime(sldDelai.getValue()); + timer.addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + timerPropertyChange(evt); + } + }); + + btDebut.setText("D\u00e9but"); + btDebut.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btDebutActionPerformed(evt); + } + }); + + btPrec.setText("Pr\u00e9c\u00e9dent"); + btPrec.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btPrecActionPerformed(evt); + } + }); + + btSuiv.setText("Suivant"); + btSuiv.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btSuivActionPerformed(evt); + } + }); + + btFin.setText("Fin"); + btFin.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btFinActionPerformed(evt); + } + }); + + lblImage.setBackground(new java.awt.Color(153, 153, 153)); + lblImage.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true)); + lblImage.setText(" "); + + ibImage.setImageFileName("/usr/share/pixmaps/gaim.png"); + ibImage.addImageChangedListener(new mybeans.ImageChangedListener() { + public void imageChanged(mybeans.ImageChangedEvent evt) { + ibImageImageChanged(evt); + } + }); + + sldDelai.setMaximum(60); + sldDelai.setMinimum(3); + sldDelai.setValue(15); + sldDelai.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + sldDelaiStateChanged(evt); + } + }); + + lblDelai.setText("D\u00e9lai entre les images"); + + lblValeur.setText("15"); + + chkBoucle.setText("Boucle"); + chkBoucle.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); + chkBoucle.setMargin(new java.awt.Insets(0, 0, 0, 0)); + chkBoucle.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + chkBoucleStateChanged(evt); + } + }); + + chkDiapo.setText("Diaporama"); + chkDiapo.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); + chkDiapo.setMargin(new java.awt.Insets(0, 0, 0, 0)); + chkDiapo.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + chkDiapoStateChanged(evt); + } + }); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(chkBoucle) + .add(48, 48, 48) + .add(chkDiapo)) + .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(lblDelai) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 375, Short.MAX_VALUE) + .add(lblValeur) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(sldDelai, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 345, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(lblImage, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 887, Short.MAX_VALUE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)) + .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(ibImage, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 887, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(btDebut) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(159, 159, 159) + .add(btPrec))) + .add(83, 83, 83) + .add(btSuiv) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 418, Short.MAX_VALUE) + .add(btFin))) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED))) + .add(658, 658, 658) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(btDebut) + .add(btFin)) + .add(btPrec) + .add(btSuiv)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(ibImage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 320, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(lblImage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(lblValeur) + .addContainerGap()) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(sldDelai, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(lblDelai) + .add(7, 7, 7) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(chkBoucle) + .add(chkDiapo)) + .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))) + ); + } + // //GEN-END:initComponents + + private void chkDiapoStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_chkDiapoStateChanged + timer.setDiaporama(chkDiapo.isSelected()); + }//GEN-LAST:event_chkDiapoStateChanged + + private void chkBoucleStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_chkBoucleStateChanged + itImage.setLoop(chkBoucle.isSelected()); + }//GEN-LAST:event_chkBoucleStateChanged + + private void timerPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_timerPropertyChange + if (evt.getPropertyName().equals(TimerBean.PROP_TIME)) { + lblValeur.setText(Integer.toString(timer.getTime())); + } + }//GEN-LAST:event_timerPropertyChange + + private void sldDelaiStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_sldDelaiStateChanged + timer.setTime(sldDelai.getValue()); + }//GEN-LAST:event_sldDelaiStateChanged + + private void ibImageImageChanged(mybeans.ImageChangedEvent evt) {//GEN-FIRST:event_ibImageImageChanged + + }//GEN-LAST:event_ibImageImageChanged + + private void btSuivActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSuivActionPerformed + itImage.next(); + }//GEN-LAST:event_btSuivActionPerformed + + private void btPrecActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPrecActionPerformed + itImage.prev(); + }//GEN-LAST:event_btPrecActionPerformed + + private void itImagePropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_itImagePropertyChange + if (evt.getPropertyName().equals(ImageIterator.PROP_CUR_IMAGE)) { + String file = (String) evt.getNewValue(); + ibImage.setImageFileName(file); + } + }//GEN-LAST:event_itImagePropertyChange + + private void btFinActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btFinActionPerformed + itImage.end(); + }//GEN-LAST:event_btFinActionPerformed + + private void btDebutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDebutActionPerformed + itImage.start(); + }//GEN-LAST:event_btDebutActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton btDebut; + private javax.swing.JButton btFin; + private javax.swing.JButton btPrec; + private javax.swing.JButton btSuiv; + private javax.swing.JCheckBox chkBoucle; + private javax.swing.JCheckBox chkDiapo; + private mybeans.ImageBean ibImage; + private mybeans.ImageIterator itImage; + private javax.swing.JLabel lblDelai; + private mybeans.LabelBean lblImage; + private javax.swing.JLabel lblValeur; + private javax.swing.JSlider sldDelai; + private mybeans.TimerBean timer; + // End of variables declaration//GEN-END:variables + +} diff --git a/Java/TP2/src/mybeans/ImageFileFilter.java b/Java/TP2/src/mybeans/ImageFileFilter.java new file mode 100755 index 0000000..e197098 --- /dev/null +++ b/Java/TP2/src/mybeans/ImageFileFilter.java @@ -0,0 +1,35 @@ +/* + * #(@)ImageFileFilter.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + + +package mybeans; + +import java.io.*; + +/** + * Filtre les fichiers d'un répertoire, afin de ne laisser passer que les + * fichiers image (*.png, *.jpg, *.gif). + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class ImageFileFilter implements FilenameFilter { + + /** Constructeur implicite */ + public ImageFileFilter() { + } + + /** @see FileNameFilter */ + public boolean accept(File dir, String name) { + return name.endsWith(".png") || name.endsWith(".jpg") || name.endsWith(".gif"); + } +} diff --git a/Java/TP2/src/mybeans/ImageIterator.java b/Java/TP2/src/mybeans/ImageIterator.java new file mode 100755 index 0000000..a64942d --- /dev/null +++ b/Java/TP2/src/mybeans/ImageIterator.java @@ -0,0 +1,192 @@ +/* + * #(@)ImageIterator.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import java.beans.*; +import java.io.*; + +/** + * Cette classe se conforme à la spécification JavaBean. Il permet de parcourir + * les images présentes dans un répertoire. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class ImageIterator extends Object implements Serializable { + + /** Le nom du répertoire à parcourir, valeur implicite : null */ + public static final String PROP_DIR_NAME = "dirName"; + private String dirName; + + /** Le nom de l'image courante, valeur implicite : première image du + * répertoire, propriété en lecture seule. */ + public static final String PROP_CUR_IMAGE = "curImage"; + private String curImage; + + /** En fin de liste, retourne au début si vrai. Valeur implicite : faux */ + public static final String PROP_LOOP = "loop"; + private boolean loop; + + /** La liste des images contenues dans le répertoire */ + private File[] imageList; + + /** La position courante dans la liste des répertoires */ + private int imageIdx; + + /** Aide à la propagation d'évènements */ + private PropertyChangeSupport propertySupport; + + /** + * Constructeur par défaut. + */ + public ImageIterator() { + this.propertySupport = new PropertyChangeSupport(this); + this.loop = false; + this.curImage = null; + this.dirName = null; + + this.initialize(); + } + + /** + * Getter pour la propriété "dirName". + */ + public String getDirName() { + return this.dirName; + } + + /** + * Getter pour la propriété "curImage". + */ + public String getCurImage() { + return this.curImage; + } + + /** + * Getter pour la propriété "loop". + */ + public boolean isLoop() { + return this.loop; + } + + /** + * Setter pour la propriété "dirName". + */ + public void setDirName(String value) { + String oldValue = this.dirName; + this.dirName = value; + + this.initialize(); + + this.propertySupport.firePropertyChange(PROP_DIR_NAME, oldValue, value); + } + + /** + * Setter pour la propriété "curImage". + */ + private void setCurImage(String value) { + String oldValue = this.curImage; + this.curImage = value; + + this.propertySupport.firePropertyChange(PROP_CUR_IMAGE, oldValue, value); + } + + /** + * Setter pour la propriété "loop". + */ + public void setLoop(boolean val) { + boolean oldValue = this.loop; + this.loop = val; + + this.propertySupport.firePropertyChange(PROP_LOOP, oldValue, val); + } + + /** + * Place cet iterateur au début de la liste. + */ + public void start() { + if (imageList != null) { + imageIdx = 0; + setCurImage(imageList[imageIdx].getAbsolutePath()); + } + } + + /** + * Place cet itérateur à la fin de la liste. + */ + public void end() { + if (imageList != null) { + imageIdx = imageList.length - 1; + setCurImage(imageList[imageIdx].getAbsolutePath()); + } + } + + /** + * Place cet itérateur sur l'image précédente. + */ + public void prev() { + if (imageList != null) { + if (imageIdx == 0 && isLoop()) { + end(); + } else if (imageIdx != 0) { + setCurImage(imageList[--imageIdx].getAbsolutePath()); + } + } + } + + /** + * Place cet itérateur sur l'image suivante. + */ + public void next() { + if (imageList != null) { + if (imageIdx == imageList.length - 1 && isLoop()) { + start(); + } else if (imageIdx != imageList.length - 1) { + setCurImage(imageList[++imageIdx].getAbsolutePath()); + } + } + } + + /** + * Construit la liste des fichiers images du répertoire. + */ + private void initialize() { + if (dirName == null) { + imageList = null; + imageIdx = 0; + setCurImage(null); + } else { + imageList = new File(dirName).listFiles(new ImageFileFilter()); + imageIdx = 0; + if (imageList.length != 0) { + curImage = null; + } else { + imageList = null; + } + } + } + + /** + * Enregistre un nouvel écouteur d'évènements. + */ + public void addPropertyChangeListener(PropertyChangeListener listener) { + propertySupport.addPropertyChangeListener(listener); + } + + /** + * Enlève un écouteur d'évènements précédemment enregistré. + */ + public void removePropertyChangeListener(PropertyChangeListener listener) { + propertySupport.removePropertyChangeListener(listener); + } +} diff --git a/Java/TP2/src/mybeans/LabelBean.java b/Java/TP2/src/mybeans/LabelBean.java new file mode 100755 index 0000000..416790b --- /dev/null +++ b/Java/TP2/src/mybeans/LabelBean.java @@ -0,0 +1,56 @@ +/* + * #(@)LabelBean.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import java.beans.*; +import java.util.*; +import javax.swing.*; +import java.io.Serializable; +import java.awt.*; + +/** + * Cette classe est un écouteur d'ImageIterator. Elle réagit aux changements + * d'image en affichant le nom de l'image, sa hauteur et sa largeur. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class LabelBean extends JLabel implements Serializable, ImageChangedListener { + /** Le nom du fichier à afficher. */ + private String file; + + /** Le constructeur par défaut. */ + public LabelBean() { } + + /** + * Cette méthode est invoquée lorsque l'image courante d'un ImageIterator a + * changé. + */ + public void imageChanged(ImageChangedEvent evt) { + file = evt.getFileName(); + int h = evt.getImage().getHeight(this); + int w = evt.getImage().getWidth(this); + + this.setText(file + "(" + h + "x" + w + ")"); + } + + /** + * Méthode à usage interne, appelée lorsque les dimensions de l'image sont + * disponibles. + */ + public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) { + this.setText(file + "(" + h + "x" + w + ")"); + + return true; + } +} diff --git a/Java/TP2/src/mybeans/Main.java b/Java/TP2/src/mybeans/Main.java new file mode 100755 index 0000000..2c89de0 --- /dev/null +++ b/Java/TP2/src/mybeans/Main.java @@ -0,0 +1,33 @@ +/* + * #(@)Main.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import javax.swing.*; + +/** + * Point d'entrée du TP, permet de tester l'interface graphique. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public abstract class Main { + public static void main(String[] args) { + ImageDisplayer id = new ImageDisplayer(); + JFrame jf = new JFrame(); + jf.setContentPane(id); + jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + jf.setSize(640, 480); + jf.setVisible(true); + } + +} diff --git a/Java/TP2/src/mybeans/TimerBean.java b/Java/TP2/src/mybeans/TimerBean.java new file mode 100755 index 0000000..4fc8b44 --- /dev/null +++ b/Java/TP2/src/mybeans/TimerBean.java @@ -0,0 +1,147 @@ +/* + * #(@)TimerBean.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import java.beans.*; +import java.io.Serializable; + +/** + * Cette classe se conforme à la spécification JavaBean. C'est un déclencheur + * d'évènements, tous les "time" secondes l'objet "main" de type "Runnable" + * est exécuté si la propriété booléenne "diaporama" est vraie. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class TimerBean extends Object implements Serializable, Runnable { + /** Génère les évènements si vrai, valeur implicite : faux */ + public static final String PROP_DIAPORAMA = "diaporama"; + private boolean diaporama; + + /** Délai en secondes entre chaque évènement, valeur implicite : 1s */ + public static final String PROP_TIME = "time"; + private int time; + + /** Code à executer, valeur implicite : null */ + public static final String PROP_MAIN = "main"; + private Runnable main; + + /** Aide à la propagation d'évènements */ + private PropertyChangeSupport propertySupport; + + /** Thread générateur d'évènements */ + private Thread thread; + + /** + * Construit un nouveau TimerBean. + */ + public TimerBean() { + this.propertySupport = new PropertyChangeSupport(this); + + this.diaporama = false; + this.time = 1; + this.main = null; + + this.thread = new Thread(this); + this.thread.start(); + } + + /** + * Getter pour la propriété "diaporama". + */ + public boolean isDiaporama() { + return diaporama; + } + + /** + * Getter pour la propriété "time". + */ + public int getTime() { + return time; + } + + /** + * Getter pour la propriété "main". + */ + public Runnable getMain() { + return main; + } + + /** + * Setter pour la propriété "diaporama". + */ + public synchronized void setDiaporama(boolean newVal) { + boolean oldValue = this.diaporama; + this.diaporama = newVal; + + this.propertySupport.firePropertyChange(PROP_DIAPORAMA, oldValue, newVal); + + this.notify(); + } + + /** + * Setter pour la propriété "main". + */ + public synchronized void setMain(Runnable newMain) { + Runnable oldValue = this.main; + this.main = newMain; + + this.propertySupport.firePropertyChange(PROP_MAIN, oldValue, newMain); + } + + /** + * Setter pour la propriété "time". + */ + public synchronized void setTime(int newTime) { + int oldValue = this.time; + this.time = newTime; + + propertySupport.firePropertyChange(PROP_TIME, oldValue, newTime); + } + + /** + * Enregistre un nouvel écouteur d'évènements. + */ + public synchronized void addPropertyChangeListener(PropertyChangeListener listener) { + this.propertySupport.addPropertyChangeListener(listener); + } + + /** + * Enlève un écouteur d'évènements précédemment enregistré. + */ + public synchronized void removePropertyChangeListener(PropertyChangeListener listener) { + this.propertySupport.removePropertyChangeListener(listener); + } + + /** + * Cette méthode est à usage interne uniquement. + */ + public void run() { + while (true) { + while (! isDiaporama()) { + synchronized(this) { + try { + wait(); + } catch (InterruptedException ignored) {} + } + } + try { + Thread.sleep(getTime() * 1000); + if (main != null) { + main.run(); + } + } catch (InterruptedException ignored) {} + } + } + +} diff --git a/Java/TP2/src/mybeans/TimerBean.png b/Java/TP2/src/mybeans/TimerBean.png new file mode 100755 index 0000000..b7ff719 Binary files /dev/null and b/Java/TP2/src/mybeans/TimerBean.png differ diff --git a/Java/TP2/src/mybeans/TimerBeanBeanInfo.java b/Java/TP2/src/mybeans/TimerBeanBeanInfo.java new file mode 100755 index 0000000..2a9091d --- /dev/null +++ b/Java/TP2/src/mybeans/TimerBeanBeanInfo.java @@ -0,0 +1,53 @@ +/* + * #(@)TimerBeanBeanInfo.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package mybeans; + +import java.awt.Image; +import java.beans.BeanDescriptor; +import java.beans.SimpleBeanInfo; +import java.beans.BeanInfo; +import java.beans.EventSetDescriptor; +import java.beans.MethodDescriptor; +import java.beans.PropertyDescriptor; + +/** + * Décrit le bean TimerBean. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ +public class TimerBeanBeanInfo extends SimpleBeanInfo { + private Image icon; + + /** + * Creates a new instance of TimerBeanBeanInfo + */ + public TimerBeanBeanInfo() { + this.icon = loadImage("TimerBean.png"); + } + + public Image getIcon(int iconKind) { + Image ret = null; + + switch (iconKind) { + case ICON_COLOR_32x32: + ret = this.icon; + break; + default: + break; + } + + return ret; + } + +} diff --git a/Java/TP3/CineJava/build.xml b/Java/TP3/CineJava/build.xml new file mode 100755 index 0000000..b351981 --- /dev/null +++ b/Java/TP3/CineJava/build.xml @@ -0,0 +1,69 @@ + + + + + + Builds, tests, and runs the project CineJava. + + + diff --git a/Java/TP3/CineJava/manifest.mf b/Java/TP3/CineJava/manifest.mf new file mode 100755 index 0000000..328e8e5 --- /dev/null +++ b/Java/TP3/CineJava/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Java/TP3/CineJava/nbproject/build-impl.xml b/Java/TP3/CineJava/nbproject/build-impl.xml new file mode 100755 index 0000000..6e6994e --- /dev/null +++ b/Java/TP3/CineJava/nbproject/build-impl.xml @@ -0,0 +1,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + diff --git a/Java/TP3/CineJava/nbproject/genfiles.properties b/Java/TP3/CineJava/nbproject/genfiles.properties new file mode 100755 index 0000000..065cb64 --- /dev/null +++ b/Java/TP3/CineJava/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=aef8cc15 +build.xml.script.CRC32=58841f06 +build.xml.stylesheet.CRC32=d5b6853a +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=aef8cc15 +nbproject/build-impl.xml.script.CRC32=0b92f55a +nbproject/build-impl.xml.stylesheet.CRC32=b4de0fc8 diff --git a/Java/TP3/CineJava/nbproject/private/private.properties b/Java/TP3/CineJava/nbproject/private/private.properties new file mode 100755 index 0000000..503f767 --- /dev/null +++ b/Java/TP3/CineJava/nbproject/private/private.properties @@ -0,0 +1,5 @@ +application.args= +file.reference.pg73jdbc3.jar=/usr/share/jdbc3-postgresql-1/lib/pg73jdbc3.jar +javac.debug=true +javadoc.preview=true +user.properties.file=/home/nicolas/.netbeans/5.0beta2/build.properties diff --git a/Java/TP3/CineJava/nbproject/private/private.xml b/Java/TP3/CineJava/nbproject/private/private.xml new file mode 100755 index 0000000..d1dcee0 --- /dev/null +++ b/Java/TP3/CineJava/nbproject/private/private.xml @@ -0,0 +1,12 @@ + + + + + file:/home/limint/ENSI/2A/Java/TP3_JDBC/CineJava/src/cinejava/Actor.java + file:/home/limint/ENSI/2A/Java/TP3_JDBC/CineJava/src/cinejava/CineJavaFrame.java + file:/home/limint/ENSI/2A/Java/TP3_JDBC/CineJava/src/cinejava/GestionBase.java + file:/home/limint/ENSI/2A/Java/TP3_JDBC/CineJava/src/cinejava/Main.java + file:/home/limint/ENSI/2A/Java/TP3_JDBC/CineJava/src/cinejava/Movie.java + file:/home/limint/ENSI/2A/Java/TP3_JDBC/CineJava/src/cinejava/Resultat.java + + diff --git a/Java/TP3/CineJava/nbproject/project.properties b/Java/TP3/CineJava/nbproject/project.properties new file mode 100755 index 0000000..2b1217d --- /dev/null +++ b/Java/TP3/CineJava/nbproject/project.properties @@ -0,0 +1,62 @@ +application.args= +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/CineJava.jar +dist.javadoc.dir=${dist.dir}/javadoc +file.reference.pg73jdbc3.jar=../../../../../../../usr/share/jdbc3-postgresql-1/lib/pg73jdbc3.jar +jar.compress=false +javac.classpath=\ + ${libs.swing-layout.classpath}:\ + ${libs.PostgreSQL.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# Property libs.PostgreSQL.classpath is set here just to make sharing of project simpler. +# The library definition has always preference over this property. +libs.PostgreSQL.classpath=../../../../java/postgresql-8.1-404.jdbc3.jar +main.class=cinejava.Main +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs=-Djdbc.drivers=org.postgresql.Driver -Dcinema.db-url=jdbc:postgresql://localhost/cinema?user=limint&password=vilest +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +src.dir=src +test.src.dir=test diff --git a/Java/TP3/CineJava/nbproject/project.xml b/Java/TP3/CineJava/nbproject/project.xml new file mode 100755 index 0000000..0751364 --- /dev/null +++ b/Java/TP3/CineJava/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + CineJava + 1.6.5 + + + + + + + + + diff --git a/Java/TP3/CineJava/src/cinejava/Actor.java b/Java/TP3/CineJava/src/cinejava/Actor.java new file mode 100755 index 0000000..fc85043 --- /dev/null +++ b/Java/TP3/CineJava/src/cinejava/Actor.java @@ -0,0 +1,121 @@ +/* + * #(@)Actor.java ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package cinejava; + +import java.sql.*; +import java.util.*; + +/** + * Represents an actor. + * + * @author Thomas LIMIN + */ +public class Actor { + + /** + * Creates a new instance of Actor + */ + public Actor(int actorId, String name) { + this.setActorId(actorId); + this.setActorName(name); + } + + /** + * Retrieve the actor with a name matching the given parameter. If more than + * one actor may be returned, an error occur so null is returned + * + * @param actorNamePart a part of the actor name + * @return an actor or null + */ + public static java.util.List getActors(String actorName) { + java.util.List result = new ArrayList(2); + PreparedStatement ppst = Actor.getStActorFromName(); + + try { + ppst.setString(1, "%" + actorName + "%"); + ResultSet rs = ppst.executeQuery(); + + while (rs.next()) { + int tmpId = rs.getInt("numc"); + String tmpName = rs.getString("identc"); + result.add(new Actor(tmpId, tmpName)); + } + + rs.close(); + + } catch (SQLException e) { + e.printStackTrace(System.err); + } + + return result; + } + + + public int getActorId() { + return this.actorId; + } + + public void setActorId(int actorId) { + this.actorId = actorId; + } + + public String getActorName() { + return this.actorName; + } + + public void setActorName(String actorName) { + this.actorName = actorName; + } + + + /** + * Return the instance (singloton) PreparedStatement that + * managed the SQL query used to retrieve actor with a matching + * name. + * + * @return the prepared statement + */ + public static PreparedStatement getStActorFromName() { + + if (Actor.stActorFromName != null) { + return Actor.stActorFromName; + } else { + try { + Actor.stActorFromName = GestionBase.getConnection().prepareStatement( + "SELECT numc, identc FROM com WHERE upper(identc) LIKE upper(?)"); + } catch (SQLException e) { + e.printStackTrace(System.err); + } + } + + return Actor.stActorFromName; + } + + /** + * Identification number of the actor + */ + private int actorId; + + /** + * Last and first name of the actor + */ + private String actorName; + + /** + * the statement needed to retrieve an actor from its name + */ + private static PreparedStatement stActorFromName = null; + +} \ No newline at end of file diff --git a/Java/TP3/CineJava/src/cinejava/CineJavaFrame.form b/Java/TP3/CineJava/src/cinejava/CineJavaFrame.form new file mode 100755 index 0000000..fe19742 --- /dev/null +++ b/Java/TP3/CineJava/src/cinejava/CineJavaFrame.form @@ -0,0 +1,143 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/Java/TP3/CineJava/src/cinejava/CineJavaFrame.java b/Java/TP3/CineJava/src/cinejava/CineJavaFrame.java new file mode 100755 index 0000000..5d4c118 --- /dev/null +++ b/Java/TP3/CineJava/src/cinejava/CineJavaFrame.java @@ -0,0 +1,242 @@ +/* + * #(@)CineJavaFrame.java ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package cinejava; + +import java.sql.SQLException; +import javax.swing.*; +import javax.swing.event.*; +import java.util.*; + +/** + * + * @author limint + */ +public class CineJavaFrame extends javax.swing.JFrame { + + /** Creates new form CineJavaFrame */ + public CineJavaFrame() { + super("CineJava"); + initComponents(); + this.listModel = null; + } + + + private ListModel getListModel() { + if (this.listModel == null) { + this.listModel = new DefaultListModel(); + } + return this.listModel; + } + + private javax.swing.ListModel findMovie() { + java.util.List actors = Actor.getActors(this.jTextField1.getText()); + javax.swing.ListModel result = null; + String message = null; + + switch(actors.size()) { + case 0: + message = "Aucun acteur trouvé"; + //this.jLabel4.repaint(); + break; + case 1: + Actor actor = actors.get(0); + java.util.List list = Movie.getMoviesWith(actor); + result = new CineJavaListModel(list); + message = "Ok: " + actor.getActorName(); + break; + default: + message = "Trop d'acteurs trouvés"; + //this.jLabel4.repaint(); + break; + } + + this.jLabel4.setText(message); + return result; + } + + + + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + jLabel1 = new javax.swing.JLabel(); + jTextField1 = new javax.swing.JTextField(); + jButton1 = new javax.swing.JButton(); + jButton2 = new javax.swing.JButton(); + jLabel2 = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + jList1 = new javax.swing.JList(); + jLabel3 = new javax.swing.JLabel(); + jButton3 = new javax.swing.JButton(); + jLabel4 = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + jLabel1.setText("Nom com\u00e9dien:"); + + jButton1.setText("Rechercher"); + jButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton1ActionPerformed(evt); + } + }); + + jButton2.setText("Effacer"); + + jLabel2.setText("Titres films:"); + + jList1.setModel(this.getListModel()); + jScrollPane1.setViewportView(jList1); + + jLabel3.setText("Statut requ\u00eate:"); + + jButton3.setText("Quitter"); + jButton3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton3ActionPerformed(evt); + } + }); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .addContainerGap() + .add(jLabel1) + .add(27, 27, 27) + .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 253, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(97, 97, 97) + .add(jButton1) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(jButton2)) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .add(141, 141, 141) + .add(jButton3)) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jLabel2) + .add(jLabel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 133, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 12, Short.MAX_VALUE) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) + .add(jLabel4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(jLabel1) + .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(jButton2) + .add(jButton1)) + .add(7, 7, 7) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(jLabel2) + .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .add(10, 10, 10) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) + .add(jLabel3) + .add(jLabel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 16, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 33, Short.MAX_VALUE) + .add(jButton3) + .addContainerGap()) + ); + pack(); + } + // //GEN-END:initComponents + + private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed + javax.swing.ListModel tmpList = this.findMovie(); + if (tmpList != null) { + this.jList1.setModel(tmpList); + this.listModel = tmpList; + } + }//GEN-LAST:event_jButton1ActionPerformed + + private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed + this.setVisible(false); + + try { + GestionBase.getConnection().close(); + } catch (SQLException e) { + System.err.println(e); + } + System.exit(0); + }//GEN-LAST:event_jButton3ActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new CineJavaFrame().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JList jList1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTextField jTextField1; + // End of variables declaration//GEN-END:variables + + private ListModel listModel; + +} + + +class CineJavaListModel implements ListModel { + + public CineJavaListModel(java.util.List list) { + this.movieList = list; + } + + public void addListDataListener(ListDataListener l) {} + + public void removeListDataListener(ListDataListener l) {} + + public Object getElementAt(int index) { + Movie m = this.movieList.get(index); + return m.getTitle(); + } + + public int getSize() { + return this.movieList.size(); + } + + private java.util.List movieList; + +} diff --git a/Java/TP3/CineJava/src/cinejava/GestionBase.java b/Java/TP3/CineJava/src/cinejava/GestionBase.java new file mode 100755 index 0000000..cf3d0a4 --- /dev/null +++ b/Java/TP3/CineJava/src/cinejava/GestionBase.java @@ -0,0 +1,80 @@ +/* + * #(@)GestionBase.java ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ +package cinejava; + + +import java.sql.*; + + +/** + * This class allows to connect to the database. + * + * @author Thomas LIMIN + * @author Nicolas MASSE + */ +public class GestionBase { + + /** + * Provide a login and password to the datase + * + * @param dbUrl data to reach the database, url formed + */ + public static void initConnection(String dbUrl) { + if (GestionBase.con == null) { + try { + GestionBase.con = DriverManager.getConnection(dbUrl); + } catch (SQLException e) { + e.printStackTrace(System.err); + throw new IllegalArgumentException(e); + } + } + } + + /** + * To retrieve the current connection + * + * @return the current connection + */ + public static Connection getConnection() { + Connection ret; + + if (GestionBase.con == null) { + throw new IllegalStateException("The database connection has been closed"); + } else { + ret = GestionBase.con; + } + + return ret; + } + + /** + * Close the current connection. + */ + public static void closeConnection() { + try { + GestionBase.getConnection().close(); + } catch (SQLException e) { + e.printStackTrace(System.err); + } + + GestionBase.con = null; + } + + + /** + * the link with the database + */ + private static Connection con = null; + +} diff --git a/Java/TP3/CineJava/src/cinejava/Main.java b/Java/TP3/CineJava/src/cinejava/Main.java new file mode 100755 index 0000000..c6bb427 --- /dev/null +++ b/Java/TP3/CineJava/src/cinejava/Main.java @@ -0,0 +1,41 @@ +/* + * #(@)Main.java ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package cinejava; + +import java.sql.*; +import javax.sql.*; +import javax.swing.*; + +/** + * Entry point of the application. + * + * @author Thomas LIMIN + */ +public class Main { + + /** + * Entry point of the application. Starts a GUI. + * + * @param args the command line arguments + */ + public static void main(String[] args) { + GestionBase.initConnection(System.getProperty("cinema.db-url")); + JFrame jf = new CineJavaFrame(); + jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + jf.pack(); + jf.setVisible(true); + } + +} diff --git a/Java/TP3/CineJava/src/cinejava/Movie.java b/Java/TP3/CineJava/src/cinejava/Movie.java new file mode 100755 index 0000000..9e529c8 --- /dev/null +++ b/Java/TP3/CineJava/src/cinejava/Movie.java @@ -0,0 +1,188 @@ +/* + * #(@)Movie.java ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package cinejava; + +import java.sql.*; +import java.util.*; + +/** + * This class represents a movie. + * + * @author Thomas LIMIN + */ +public class Movie { + + /** Creates a new instance of Movie */ + public Movie(int movieId, String title, int kindId, int year, int directorId, String synopsis) { + this.setMovieId(movieId); + this.setTitle(title); + this.setKindId(kindId); + this.setYear(year); + this.setDirectorId(directorId); + this.setSynopsis(synopsis); + } + + + /** + * Ask the database for a list of movies in which the actor appear. + * + * @param actorNamePart an actor + * @return a list of movies + */ + public static java.util.List getMoviesWith(Actor actor) { + java.util.List result = new ArrayList(8); + PreparedStatement ppst = Movie.getStMoviesWith(); + + try { + ppst.setInt(1, actor.getActorId()); + ResultSet rs = ppst.executeQuery(); + + while (rs.next()) { + int tmpMovieId = rs.getInt("numf"); + String tmpTitle = rs.getString("titre"); + int tmpKindId = rs.getInt("numg"); + int tmpYear = rs.getInt("annee"); + int tmpDirectorId = rs.getInt("numr"); + String tmpResume = rs.getString("resume"); + + result.add(new Movie(tmpMovieId, tmpTitle, tmpKindId, tmpYear, + tmpDirectorId, tmpResume)); + } + + rs.close(); + + } catch (SQLException e) { + e.printStackTrace(System.err); + } + + return result; + } + + /** + * Return the instance (singloton) PreparedStatement that + * managed the SQL query used to retrieve movies with a + * provide actor. + * + * @return the prepared statement + */ + private static PreparedStatement getStMoviesWith() { + if (Movie.stMoviesWith == null) { + try { + Movie.stMoviesWith = + GestionBase.getConnection().prepareStatement( + "SELECT numf, titre, numg, annee, numr, resume " + + "FROM film NATURAL JOIN role " + + "WHERE numc = ?"); + } catch (SQLException e) { + e.printStackTrace(System.err); + } + } + + return Movie.stMoviesWith; + } + + public int getMovieId() { + return movieId; + } + + public void setMovieId(int movieId) { + this.movieId = movieId; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getKindId() { + return kindId; + } + + public void setKindId(int kindId) { + this.kindId = kindId; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + public int getDirectorId() { + return directorId; + } + + public void setDirectorId(int directorId) { + this.directorId = directorId; + } + + public String getSynopsis() { + return synopsis; + } + + public void setSynopsis(String synopsis) { + this.synopsis = synopsis; + } + + /** + * Returns the string representation of this movie. + * + * @return the string representation of this movie + */ + public String toString() { + return this.getTitle() + ", " + this.getYear(); + } + + /** + * The identifier of the movie + */ + private int movieId; + + /** + * The title of the movie + */ + private String title; + + /** + * The identifier of this movie's kind + */ + private int kindId; + + /** + * The release year of the movie + */ + private int year; + + /** + * The movie's diretctor's identifier + */ + private int directorId; + + /** + * The synopsis of the movie + */ + private String synopsis; + + /** + * The SQL query that retrieves the movies with + * a provide actor + */ + private static PreparedStatement stMoviesWith; +} diff --git a/Java/TP3/CineServlet/build.xml b/Java/TP3/CineServlet/build.xml new file mode 100755 index 0000000..45981fc --- /dev/null +++ b/Java/TP3/CineServlet/build.xml @@ -0,0 +1,64 @@ + + + + + + Builds, tests, and runs the project CineServlet. + + + diff --git a/Java/TP3/CineServlet/conf/MANIFEST.MF b/Java/TP3/CineServlet/conf/MANIFEST.MF new file mode 100755 index 0000000..59499bc --- /dev/null +++ b/Java/TP3/CineServlet/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/Java/TP3/CineServlet/nbproject/build-impl.xml b/Java/TP3/CineServlet/nbproject/build-impl.xml new file mode 100755 index 0000000..c0d0ca9 --- /dev/null +++ b/Java/TP3/CineServlet/nbproject/build-impl.xml @@ -0,0 +1,621 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Java/TP3/CineServlet/nbproject/genfiles.properties b/Java/TP3/CineServlet/nbproject/genfiles.properties new file mode 100755 index 0000000..e89687e --- /dev/null +++ b/Java/TP3/CineServlet/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=fb23a15a +build.xml.script.CRC32=4b868858 +build.xml.stylesheet.CRC32=b4cea8bf +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=fb23a15a +nbproject/build-impl.xml.script.CRC32=9dcb0735 +nbproject/build-impl.xml.stylesheet.CRC32=a697e903 diff --git a/Java/TP3/CineServlet/nbproject/private/private.properties b/Java/TP3/CineServlet/nbproject/private/private.properties new file mode 100755 index 0000000..68d7fdb --- /dev/null +++ b/Java/TP3/CineServlet/nbproject/private/private.properties @@ -0,0 +1,6 @@ +j2ee.platform.classpath=/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/ant.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/commons-el.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/jasper-compiler.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/jasper-runtime.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/jsp-api.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/naming-factory-dbcp.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/naming-factory.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/naming-resources.jar:/opt/netbeans-5.0beta2/enterprise2/jakarta-tomcat-5.5.9/common/lib/servlet-api.jar +j2ee.server.instance=tomcat55:home=$bundled_home:base=$bundled_base +javac.debug=true +javadoc.preview=true +project.CineJava=/home/nicolas/svn_mirror/Java/TP3/CineJava +user.properties.file=/home/nicolas/.netbeans/5.0beta2/build.properties diff --git a/Java/TP3/CineServlet/nbproject/private/private.xml b/Java/TP3/CineServlet/nbproject/private/private.xml new file mode 100755 index 0000000..c1f155a --- /dev/null +++ b/Java/TP3/CineServlet/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Java/TP3/CineServlet/nbproject/project.properties b/Java/TP3/CineServlet/nbproject/project.properties new file mode 100755 index 0000000..2389ed3 --- /dev/null +++ b/Java/TP3/CineServlet/nbproject/project.properties @@ -0,0 +1,69 @@ +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.ear.classes.dir=${build.ear.web.dir}/WEB-INF/classes +build.ear.web.dir=${build.dir}/ear-module +build.generated.dir=${build.dir}/generated +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=conf +debug.classpath=${javac.classpath}:${build.classes.dir}:${build.ear.classes.dir} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +j2ee.platform=1.4 +j2ee.server.type=Tomcat55 +jar.compress=false +javac.classpath=\ + ${reference.CineJava.jar}:\ + ${libs.PostgreSQL.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.source=${default.javac.source} +javac.target=${default.javac.target} +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +jspcompilation.classpath=${jspc.classpath}:${javac.classpath} +lib.dir=${web.docbase.dir}/WEB-INF/lib +platform.active=default_platform +project.CineJava=../CineJava +reference.CineJava.jar=${project.CineJava}/dist/CineJava.jar +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running class with main method +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.root=. +src.dir=src +test.src.dir=test +war.content.additional= +war.ear.name=CineServlet.war +war.name=CineServlet.war +war.package=true +web.docbase.dir=web diff --git a/Java/TP3/CineServlet/nbproject/project.xml b/Java/TP3/CineServlet/nbproject/project.xml new file mode 100755 index 0000000..7f7071a --- /dev/null +++ b/Java/TP3/CineServlet/nbproject/project.xml @@ -0,0 +1,37 @@ + + + org.netbeans.modules.web.project + + + CineServlet + 1.6.5 + + + ${reference.CineJava.jar} + WEB-INF/lib + + + ${libs.PostgreSQL.classpath} + WEB-INF/lib + + + + + + + + + + + + + CineJava + jar + + jar + clean + jar + + + + diff --git a/Java/TP3/CineServlet/src/cineservlet/Cinema.java b/Java/TP3/CineServlet/src/cineservlet/Cinema.java new file mode 100755 index 0000000..b39267a --- /dev/null +++ b/Java/TP3/CineServlet/src/cineservlet/Cinema.java @@ -0,0 +1,119 @@ +/* + * #(@)CinemaJava.java ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe4-LIMIN) + * @author LIMIN Thomas (2005-Groupe4-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +package cineservlet; + +import java.io.*; +import java.net.*; +import java.util.*; + +import javax.servlet.*; +import javax.servlet.http.*; + +import cinejava.*; + +/** + * This servlet allows the user to show the movies in which an actor played. + * + * @author Nicolas MASSE + * @version 2006 + */ +public class Cinema extends HttpServlet { + public void init() throws ServletException { + String dburl = getInitParameter("db-url"); + String dbdriver = getInitParameter("db-driver"); + + if (dburl == null || dbdriver == null) { + return; + } + + try { + Class.forName(dbdriver); + } catch (Exception ignored) { } + + GestionBase.initConnection(dburl); + } + + /** Processes requests for both HTTP GET and POST methods. + * @param request servlet request + * @param response servlet response + */ + protected void processRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + + out.println(""); + out.println(""); + out.println("Gestion cinematographique"); + out.println(""); + out.println(""); + out.println("

    Gestion cinematographique

    "); + out.println("
    "); + out.println(""); + out.println(""); + out.println("
    "); + + String acteur = request.getParameter("acteur"); + if (acteur != null && !acteur.equals("")) { + List acteurs = Actor.getActors(acteur); + if (acteurs.size() == 0) { + out.println("

    Acteur inconnu !

    "); + } else if (acteurs.size() == 1) { + out.println("

    Filmographie :

    "); + List films = Movie.getMoviesWith((Actor) acteurs.get(0)); + + out.println("
      "); + Iterator it = films.iterator(); + while (it.hasNext()) { + out.println("
    • " + it.next() + "
    • "); + } + out.println("
    "); + } else { + out.println("

    Trop de resultats

    "); + } + } + + out.println(""); + out.println(""); + + out.close(); + } + + // + /** Handles the HTTP GET method. + * @param request servlet request + * @param response servlet response + */ + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** Handles the HTTP POST method. + * @param request servlet request + * @param response servlet response + */ + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + processRequest(request, response); + } + + /** Returns a short description of the servlet. + */ + public String getServletInfo() { + return "Database MMI"; + } + // +} diff --git a/Java/TP3/CineServlet/web/META-INF/context.xml b/Java/TP3/CineServlet/web/META-INF/context.xml new file mode 100755 index 0000000..b645269 --- /dev/null +++ b/Java/TP3/CineServlet/web/META-INF/context.xml @@ -0,0 +1,2 @@ + + diff --git a/Java/TP3/CineServlet/web/WEB-INF/web.xml b/Java/TP3/CineServlet/web/WEB-INF/web.xml new file mode 100755 index 0000000..112dee2 --- /dev/null +++ b/Java/TP3/CineServlet/web/WEB-INF/web.xml @@ -0,0 +1,30 @@ + + + This MMI allows the users to show the movies in which an actor played. + Cinema database + + + This MMI allows the users to show the movies in which an actor played. + Cinema + cineservlet.Cinema + + Database URL + db-url + jdbc:postgresql://localhost/cinema?user=cinema + + + Database driver + db-driver + org.postgresql.Driver + + + + Cinema + /Cinema + + + + 30 + + + diff --git a/Java/TP3/commandRun b/Java/TP3/commandRun new file mode 100755 index 0000000..5541a3b --- /dev/null +++ b/Java/TP3/commandRun @@ -0,0 +1 @@ +java -Djdbc.drivers=org.postgresql.Driver -Dcinema.db-url="jdbc:postgresql://localhost/cinema?user=limint&password=vilest" -cp ./CineJava/build/classes:/opt/netbeans-5.0beta/ide6/modules/ext/swing-layout-0.7.jar:/home/limint/Downloads/postgresql-8.1-404.jdbc3.jar cinejava.Main diff --git a/Java/TP3/install b/Java/TP3/install new file mode 100755 index 0000000..d3c5f11 --- /dev/null +++ b/Java/TP3/install @@ -0,0 +1,9 @@ +Decompresser l'archive de tomcat : unzip ~/downloads/jakarta-tomcat-5.5.9.zip +Aller dans le repertoire de tomcat : cd jakarta-tomcat-5.5.9 +Corriger les permissions : chmod a+x bin/*.sh +Lancer tomcat : sh bin/startup.sh +Verifier que tomcat est lance en allant a l'adresse : http://localhost:8080/ +Creer un repertoire tp3 dans webapps : cp -r webapps/servlets-examples webapps/tp3 + +Compiler avec : -cp $CATALINA_HOME/common/lib/servlet-api.jar + diff --git a/Java/TP4/NombreADeviner/build.xml b/Java/TP4/NombreADeviner/build.xml new file mode 100755 index 0000000..e314393 --- /dev/null +++ b/Java/TP4/NombreADeviner/build.xml @@ -0,0 +1,64 @@ + + + + + + Builds, tests, and runs the project NombreADeviner. + + + diff --git a/Java/TP4/NombreADeviner/conf/MANIFEST.MF b/Java/TP4/NombreADeviner/conf/MANIFEST.MF new file mode 100755 index 0000000..59499bc --- /dev/null +++ b/Java/TP4/NombreADeviner/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/Java/TP4/NombreADeviner/nbproject/build-impl.xml b/Java/TP4/NombreADeviner/nbproject/build-impl.xml new file mode 100755 index 0000000..f6839f6 --- /dev/null +++ b/Java/TP4/NombreADeviner/nbproject/build-impl.xml @@ -0,0 +1,603 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.war + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Java/TP4/NombreADeviner/nbproject/genfiles.properties b/Java/TP4/NombreADeviner/nbproject/genfiles.properties new file mode 100755 index 0000000..b49a98a --- /dev/null +++ b/Java/TP4/NombreADeviner/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=f279e697 +build.xml.script.CRC32=7b4db3f7 +build.xml.stylesheet.CRC32=b4cea8bf +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=f279e697 +nbproject/build-impl.xml.script.CRC32=f851af4f +nbproject/build-impl.xml.stylesheet.CRC32=7ba292d0 diff --git a/Java/TP4/NombreADeviner/nbproject/private/private.properties b/Java/TP4/NombreADeviner/nbproject/private/private.properties new file mode 100755 index 0000000..5ea60fb --- /dev/null +++ b/Java/TP4/NombreADeviner/nbproject/private/private.properties @@ -0,0 +1,5 @@ +j2ee.platform.classpath=/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/naming-factory-dbcp.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/jasper-compiler.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/servlet-api.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/commons-el.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/naming-factory.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/jasper-runtime.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/jsp-api.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/naming-resources.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/ant.jar +j2ee.server.instance=tomcat55:home=$bundled_home:base=$bundled_base +javac.debug=true +javadoc.preview=true +user.properties.file=/home/limint/.netbeans/5.0beta/build.properties diff --git a/Java/TP4/NombreADeviner/nbproject/private/private.xml b/Java/TP4/NombreADeviner/nbproject/private/private.xml new file mode 100755 index 0000000..31d1bf0 --- /dev/null +++ b/Java/TP4/NombreADeviner/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/home/limint/ENSI/2A/Java/TP4_ProgrammationJSP/NombreADeviner/conf/MANIFEST.MF + file:/home/limint/ENSI/2A/Java/TP4_ProgrammationJSP/NombreADeviner/src/NombreADeviner.java + file:/home/limint/ENSI/2A/Java/TP4_ProgrammationJSP/NombreADeviner/web/index.jsp + + diff --git a/Java/TP4/NombreADeviner/nbproject/project.properties b/Java/TP4/NombreADeviner/nbproject/project.properties new file mode 100755 index 0000000..4e3591b --- /dev/null +++ b/Java/TP4/NombreADeviner/nbproject/project.properties @@ -0,0 +1,65 @@ +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.ear.classes.dir=${build.ear.web.dir}/WEB-INF/classes +build.ear.web.dir=${build.dir}/ear-module +build.generated.dir=${build.dir}/generated +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=conf +debug.classpath=${javac.classpath}:${build.classes.dir}:${build.ear.classes.dir} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +j2ee.platform=1.4 +j2ee.server.type=Tomcat55 +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.source=1.4 +javac.target=1.4 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +jspcompilation.classpath=${jspc.classpath}:${javac.classpath} +lib.dir=${web.docbase.dir}/WEB-INF/lib +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running class with main method +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.root=. +src.dir=src +test.src.dir=test +war.content.additional= +war.ear.name=NombreADeviner.war +war.name=NombreADeviner.war +war.package=true +web.docbase.dir=web diff --git a/Java/TP4/NombreADeviner/nbproject/project.xml b/Java/TP4/NombreADeviner/nbproject/project.xml new file mode 100755 index 0000000..3675591 --- /dev/null +++ b/Java/TP4/NombreADeviner/nbproject/project.xml @@ -0,0 +1,21 @@ + + + org.netbeans.modules.web.project + + + + NombreADeviner + 1.6 + + + + + + + + + + + + + diff --git a/Java/TP4/NombreADeviner/src/NombreADeviner.java b/Java/TP4/NombreADeviner/src/NombreADeviner.java new file mode 100755 index 0000000..307d6ab --- /dev/null +++ b/Java/TP4/NombreADeviner/src/NombreADeviner.java @@ -0,0 +1,151 @@ +/* + * #(@)NombreADeviner.java ENSICAEN 2005-12-14 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * + * @author MASSE Nicolas (2004-Groupe4-LIMIN) + * @author LIMIN Thomas (2004-Groupe4-MASSE) + * @version 1.0 + */ + +package nad; + +import java.beans.*; +import java.io.Serializable; +import java.util.Random; + +/** + * JavaBean choisissant un nombre aléatoire + * et organisant sa decouverte par une succession + * de proposition / indices + */ +public class NombreADeviner extends Object implements Serializable { + + /** + * Constructeur sans arguments du JavaBean + */ + public NombreADeviner() { + this.rand = new Random(); + this.number = rand.nextInt(99) + 1; + this.numGuess = 0; + this.hint = null; + this.success = false; + this.propertySupport = new PropertyChangeSupport(this); + } + + /** + * Le générateur de nombles aléaoires + */ + private Random rand; + + /** + * le nombre à deviner + */ + private int number; + + + + /** + * Nombre saisi par l'utilisateur + */ + private int guess; + + /** + * Nombre d'essais + */ + private int numGuess; + + /** + * Information (nombre trop petit ou trop grand) + */ + private String hint; + + /** + * True si le nombre a été deviné, false sinon + */ + private boolean success; + + private PropertyChangeSupport propertySupport; + + public void setGuess(int guess) { + if (guess >= 1 && guess <= 100) { + // guess est dans la plage de valeur + this.guess = guess; + this.numGuess++ ; + + if (guess > this.number) { + this.hint = "Choisissez un nombre plus petit"; + } else if (guess < this.number) { + this.hint = "Choisissez un nombre plus grand"; + } else { + this.success = true; + this.hint = null; + } + } else if (guess == -1) { + // réinitialisation du bean NombreADeviner + this.success = false; + this.numGuess = 0; + this.number = rand.nextInt(99) + 1; + this.hint = null; + } + + } + + public int getGuess() { + return guess; + } + + public int getNumber() { + return number; + } + + public int getNumGuess() { + return numGuess; + } + + public String getHint() { + return hint; + } + + public boolean isSuccess() { + return success; + } + + + + /* + public static final String PROP_SAMPLE_PROPERTY = "sampleProperty"; + + private String sampleProperty; + + + public String getSampleProperty() { + return sampleProperty; + } + + public void setSampleProperty(String value) { + String oldValue = sampleProperty; + sampleProperty = value; + propertySupport.firePropertyChange(PROP_SAMPLE_PROPERTY, oldValue, sampleProperty); + } + + + public void addPropertyChangeListener(PropertyChangeListener listener) { + propertySupport.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + propertySupport.removePropertyChangeListener(listener); + } + */ + + +} diff --git a/Java/TP4/NombreADeviner/web/META-INF/context.xml b/Java/TP4/NombreADeviner/web/META-INF/context.xml new file mode 100755 index 0000000..f6ba874 --- /dev/null +++ b/Java/TP4/NombreADeviner/web/META-INF/context.xml @@ -0,0 +1,2 @@ + + diff --git a/Java/TP4/NombreADeviner/web/WEB-INF/web.xml b/Java/TP4/NombreADeviner/web/WEB-INF/web.xml new file mode 100755 index 0000000..9c98471 --- /dev/null +++ b/Java/TP4/NombreADeviner/web/WEB-INF/web.xml @@ -0,0 +1,17 @@ + + + + + + 30 + + + + + index.jsp + + + diff --git a/Java/TP4/NombreADeviner/web/index.jsp b/Java/TP4/NombreADeviner/web/index.jsp new file mode 100755 index 0000000..98736f2 --- /dev/null +++ b/Java/TP4/NombreADeviner/web/index.jsp @@ -0,0 +1,56 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + + + Nombre à deviner + + + + <% + int guess = -1; + String param = request.getParameter("guess"); + + if (param != null) { + try { + guess = Integer.parseInt(param); + } catch (NumberFormatException e) { + guess = 0; + } + } + bean1.setGuess(guess); + %> +

    Deviner un nombre

    +

    + Bienvenue au jeu "Deviner un nombre" +

    + <% + if (bean1.getNumGuess() == 0) { + + } + + if (bean1.isSuccess()) { + out.println("

    Félicitations, vous l'avez trouvé en " + bean1.getNumGuess() + " essai(s)!!

    "); + out.println("

    Cliquer ici pour un nouvel essai

    "); + + } else { + if (bean1.getNumGuess() == 0){ + out.println("

    J'ai choisi un nombre entre 1 et 100.

    "); + } else { + + out.println("

    Non, désolé, essayez encore. Conseil: " + bean1.getHint() + "

    "); + out.println("

    Vous en êtes à " + bean1.getNumGuess() + " essai(s)

    "); + } + + out.println("
    " + + "

    Choisissez un nombre:

    " + + "

    " + + "

    "); + } + %> + + diff --git a/Java/TP4/WebChat/activation.jar b/Java/TP4/WebChat/activation.jar new file mode 100755 index 0000000..ab80b38 Binary files /dev/null and b/Java/TP4/WebChat/activation.jar differ diff --git a/Java/TP4/WebChat/conf/MANIFEST.MF b/Java/TP4/WebChat/conf/MANIFEST.MF new file mode 100755 index 0000000..59499bc --- /dev/null +++ b/Java/TP4/WebChat/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/Java/TP4/WebChat/mail.jar b/Java/TP4/WebChat/mail.jar new file mode 100755 index 0000000..0c0166d Binary files /dev/null and b/Java/TP4/WebChat/mail.jar differ diff --git a/Java/TP4/WebChat/nbproject/genfiles.properties b/Java/TP4/WebChat/nbproject/genfiles.properties new file mode 100755 index 0000000..d62ea77 --- /dev/null +++ b/Java/TP4/WebChat/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=49817887 +build.xml.script.CRC32=e5490adc +build.xml.stylesheet.CRC32=b4cea8bf +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=49817887 +nbproject/build-impl.xml.script.CRC32=e93fd089 +nbproject/build-impl.xml.stylesheet.CRC32=7ba292d0 diff --git a/Java/TP4/WebChat/nbproject/private/private.properties b/Java/TP4/WebChat/nbproject/private/private.properties new file mode 100755 index 0000000..2d8ebed --- /dev/null +++ b/Java/TP4/WebChat/nbproject/private/private.properties @@ -0,0 +1,8 @@ +file.reference.jdbc3-postgresql.jar=/usr/share/jdbc3-postgresql/lib/jdbc3-postgresql.jar +j2ee.platform.classpath=/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/naming-factory-dbcp.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/jasper-compiler.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/servlet-api.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/commons-el.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/naming-factory.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/jasper-runtime.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/jsp-api.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/naming-resources.jar:/opt/netbeans-5.0beta/enterprise2/jakarta-tomcat-5.5.7/common/lib/ant.jar +j2ee.server.instance=tomcat55:home=$bundled_home:base=$bundled_base +javac.debug=true +javadoc.preview=true +libs.MyLibrary.classpath.libfile.1=/home/limint/tmp/java-tp4/WebChat/mail.jar +libs.MyLibrary.classpath.libfile.2=/home/limint/tmp/java-tp4/WebChat/activation.jar +user.properties.file=/home/limint/.netbeans/5.0beta/build.properties diff --git a/Java/TP4/WebChat/nbproject/project.properties b/Java/TP4/WebChat/nbproject/project.properties new file mode 100755 index 0000000..ed60b24 --- /dev/null +++ b/Java/TP4/WebChat/nbproject/project.properties @@ -0,0 +1,69 @@ +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.ear.classes.dir=${build.ear.web.dir}/WEB-INF/classes +build.ear.web.dir=${build.dir}/ear-module +build.generated.dir=${build.dir}/generated +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=conf +debug.classpath=${javac.classpath}:${build.classes.dir}:${build.ear.classes.dir} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +file.reference.jdbc3-postgresql.jar=../../../../../usr/share/jdbc3-postgresql/lib/jdbc3-postgresql.jar +j2ee.platform=1.4 +j2ee.server.type=Tomcat55 +jar.compress=false +javac.classpath=\ + ${libs.PostgreSQL.classpath}:\ + ${file.reference.jdbc3-postgresql.jar}:\ + ${libs.MyLibrary.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.source=1.4 +javac.target=1.4 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding= +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +jspcompilation.classpath=${jspc.classpath}:${javac.classpath} +lib.dir=${web.docbase.dir}/WEB-INF/lib +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running class with main method +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.root=. +src.dir=src +test.src.dir=test +war.content.additional= +war.ear.name=WebChat.war +war.name=WebChat.war +war.package=true +web.docbase.dir=web diff --git a/Java/TP4/WebChat/nbproject/project.xml b/Java/TP4/WebChat/nbproject/project.xml new file mode 100755 index 0000000..c147094 --- /dev/null +++ b/Java/TP4/WebChat/nbproject/project.xml @@ -0,0 +1,35 @@ + + + org.netbeans.modules.web.project + + + + + + WebChat + 1.6.5 + + + ${libs.PostgreSQL.classpath} + + + ${file.reference.jdbc3-postgresql.jar} + WEB-INF/lib + + + ${libs.MyLibrary.classpath} + WEB-INF/lib + + + + + + + + + + + + + + diff --git a/Java/TP4/WebChat/src/WebChat/JAVChat.java b/Java/TP4/WebChat/src/WebChat/JAVChat.java new file mode 100755 index 0000000..a8d71bf --- /dev/null +++ b/Java/TP4/WebChat/src/WebChat/JAVChat.java @@ -0,0 +1,337 @@ +/* + * JAVChat.java + * + * Created on 11 janvier 2006, 17:07 + */ + +package WebChat; + +import java.beans.*; +import java.util.*; +import java.io.Serializable; +import java.sql.*; +import javax.mail.*; +import javax.mail.internet.*; +import javax.activation.*; + + +/** + * This beans handle user connection, registration and mail sending + * for javchat connection system + * + * @author limint + */ +public class JAVChat extends Object implements Serializable { + + /** + * Constructor + */ + public JAVChat() { + if (JAVChat.con == null) { + try { + Class.forName("org.postgresql.Driver"); + } catch (ClassNotFoundException e) { + System.err.println(e); + } + JAVChat.initConnection("jdbc:postgresql://localhost/javchat?user=limint&password=vilest"); + } + } + + /** + * the user's nickname + */ + private String nickname; + + /** + * The user's password + */ + private String password; + + /** + * The user's first name + */ + private String firstName; + + + /** + * The user's last name + */ + private String lastName; + + /** + * The user's email + */ + private String email; + + /** + * The user's picture's url + */ + private String pictureURL; + + /** + * Use provided login and password to conect the chat user + * + * @return true if the user with given nickname and password + * is registered, false otherwise + */ + public boolean checkAccount(String nickname, String password) { + boolean result = false; + this.nickname = null; + this.password = null; + this.firstName = null; + this.lastName = null; + this.email = null; + this.pictureURL = null; + PreparedStatement ppst = JAVChat.getStCheckAccount(); + + try { + ppst.setString(1, nickname); + ResultSet rs = ppst.executeQuery(); + + if (rs.next()) { + String storedPwd = rs.getString("password"); + if (password.equals(storedPwd)) { + result = true; + this.nickname = nickname; + this.password = password; + this.firstName = rs.getString("first_name"); + this.lastName = rs.getString("last_name"); + this.email = rs.getString("email"); + this.pictureURL = rs.getString("picture_url"); + } + + } + } catch(SQLException e) { + e.printStackTrace(System.err); + } + + return result; + } + + /** + * Check if the specified user already exist in the database + * + * @param nickname the nickname to check + * @return wether the nickname is already in the database + */ + public static boolean checkExists(String nickname) { + boolean result = false; + PreparedStatement ppst = JAVChat.getStCheckAccount(); + + try { + ppst.setString(1, nickname); + ResultSet rs = ppst.executeQuery(); + + if (rs.next()) { + result = true; + } + } catch(SQLException e) { + e.printStackTrace(System.err); + } + + return result; + } + + /** + * Insert a new javchat user in the database + * + * @param nickname + * @param password + * @param first name + * @param lastname + * @param email + * @param picture_url + * @return the insert state + */ + public static boolean insertUser(String nickname, String password, String firstname, + String lastname, String email, String picture_url) { + boolean result = false; + PreparedStatement st = JAVChat.getStInsertUser(); + try { + st.setString(1, nickname); + st.setString(2, password); + st.setString(3, firstname); + st.setString(4, lastname); + st.setString(5, email); + + if (picture_url == null) { + picture_url = ""; + } + st.setString(6, picture_url); + + result = st.executeUpdate() == 1; + } catch (SQLException e) { + e.printStackTrace(); + } + + return result; + } + + + + /** + * If the provided nickname exists in the database + * and the e-mail address is fullfilled so this method + * send the password via an email to the registered + * email address + * + * @param nickname the user's nickname + */ + public static boolean sendPasswordTo(String nickname) { + boolean result = false; + PreparedStatement ppst = JAVChat.getStCheckAccount(); + + try { + ppst.setString(1, nickname); + ResultSet rs = ppst.executeQuery(); + + if (rs.next()) { + String storedPwd = rs.getString("password"); + String storedEmail = rs.getString("email"); + + Properties props = System.getProperties(); + props.put("mail.host", "mailhost.ecole.ensicaen.fr"); + props.put("mail.transport.protocol", "smtp"); + + Session mailSession = Session.getDefaultInstance(props, null); + + Message mesg = new MimeMessage(mailSession); + + mesg.setFrom(new InternetAddress("limin@ecole.ensicaen.fr")); + InternetAddress[] addresses = {new InternetAddress(storedEmail)}; + mesg.setRecipients(Message.RecipientType.TO, addresses); + mesg.setSubject("Sending of javachat password"); + mesg.setSentDate(new java.util.Date()); + mesg.setText("Hello " + nickname +" this is your password to access javchat: " + storedPwd); + Transport.send(mesg); + result = true; + } + } catch(SQLException e) { + e.printStackTrace(System.err); + } catch(MessagingException e) { + e.printStackTrace(System.err); + } + + return result; + } + + /** + * Build the SQL statement who retrieve info thanks to + * a nickname + */ + private static PreparedStatement getStCheckAccount() { + if (JAVChat.stCheckAccount == null) { + try { + JAVChat.stCheckAccount = + JAVChat.getConnection().prepareStatement( + "SELECT nickname, password, first_name, last_name, email, picture_url " + + "FROM javchat_user " + + "WHERE nickname = ?"); + } catch (SQLException e) { + e.printStackTrace(System.err); + } + } + + return JAVChat.stCheckAccount; + } + + private static PreparedStatement stCheckAccount = null; + + /** + * Build the SQL statement who inserts a new user's data; + */ + private static PreparedStatement getStInsertUser() { + if (JAVChat.stInsertUser == null) { + try { + JAVChat.stInsertUser = + JAVChat.getConnection().prepareStatement( + "INSERT INTO javchat_user " + + "(nickname, password, first_name, last_name, email, picture_url) " + + "VALUES (?, ?, ?, ?, ?, ?)"); + } catch (SQLException e) { + e.printStackTrace(System.err); + } + } + + return JAVChat.stInsertUser; + } + + private static PreparedStatement stInsertUser = null; + + + /** + * Provide a login and password to the database + * + * @param dbUrl data to reach the database, url formed + */ + public static void initConnection(String dbUrl) { + if (JAVChat.con == null) { + try { + JAVChat.con = DriverManager.getConnection(dbUrl); + } catch (SQLException e) { + e.printStackTrace(System.err); + throw new IllegalArgumentException(e); + } + } + } + + /** + * To retrieve the current connection + * + * @return the current connection + */ + public static Connection getConnection() { + Connection ret; + + if (JAVChat.con == null) { + throw new IllegalStateException("The database connection has been closed"); + } else { + ret = JAVChat.con; + } + + return ret; + } + + /** + * Close the current connection. + */ + public static void closeConnection() { + try { + JAVChat.getConnection().close(); + } catch (SQLException e) { + e.printStackTrace(System.err); + } + + JAVChat.con = null; + } + + /** + * this Connection instance is a way to reach the database + */ + private static Connection con; + + public String getNickname() { + return nickname; + } + + public String getPassword() { + return password; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + + public String getEmail() { + return email; + } + + public String getPictureURL() { + return pictureURL; + } + +} diff --git a/Java/TP4/WebChat/web/ForgotPassword.jsp b/Java/TP4/WebChat/web/ForgotPassword.jsp new file mode 100755 index 0000000..3b2316a --- /dev/null +++ b/Java/TP4/WebChat/web/ForgotPassword.jsp @@ -0,0 +1,22 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + + Did you forget your password ? + + + +

    Did you forget your password ?

    + +
    +
    +

    Nickname:

    +

    +
    +
    + + diff --git a/Java/TP4/WebChat/web/JAVirc.jsp b/Java/TP4/WebChat/web/JAVirc.jsp new file mode 100755 index 0000000..d16fd67 --- /dev/null +++ b/Java/TP4/WebChat/web/JAVirc.jsp @@ -0,0 +1,210 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + + + + + + + + <% + if (!javchat.checkAccount( + request.getParameter("nickname"), + request.getParameter("password"))) { + // authentification failed, redirect to connect.jsp + out.println(""); + out.println("acces refusé: nickname: " + request.getParameter("nickname")); + } + %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Java/TP4/WebChat/web/META-INF/context.xml b/Java/TP4/WebChat/web/META-INF/context.xml new file mode 100755 index 0000000..5f1f434 --- /dev/null +++ b/Java/TP4/WebChat/web/META-INF/context.xml @@ -0,0 +1,2 @@ + + diff --git a/Java/TP4/WebChat/web/WEB-INF/web.xml b/Java/TP4/WebChat/web/WEB-INF/web.xml new file mode 100755 index 0000000..9c98471 --- /dev/null +++ b/Java/TP4/WebChat/web/WEB-INF/web.xml @@ -0,0 +1,17 @@ + + + + + + 30 + + + + + index.jsp + + + diff --git a/Java/TP4/WebChat/web/connect.jsp b/Java/TP4/WebChat/web/connect.jsp new file mode 100755 index 0000000..3c15a0c --- /dev/null +++ b/Java/TP4/WebChat/web/connect.jsp @@ -0,0 +1,27 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + Welcome on JAVChat + + + +

    Welcome on JAVChat

    + +
    +
    +

    Nickname:

    +

    Password:

    +

    +
    +
    + +

    Don't have an account: please register

    + +

    Forgot your password? retrieve it

    + + + diff --git a/Java/TP4/WebChat/web/register.jsp b/Java/TP4/WebChat/web/register.jsp new file mode 100755 index 0000000..4839c14 --- /dev/null +++ b/Java/TP4/WebChat/web/register.jsp @@ -0,0 +1,82 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + + <%! String message="", nickname, password, cpassword, firstname, lastname, email, picture_url; %> + + <% + + nickname = request.getParameter("nickname"); + password = request.getParameter("password"); + cpassword = request.getParameter("cpassword"); + firstname = request.getParameter("firstname"); + + if (nickname == null) { + nickname = ""; + } + if (firstname == null) { + firstname = ""; + } + String lastname = request.getParameter("lastname"); + if (lastname == null) { + lastname = ""; + } + String email = request.getParameter("email"); + if (email == null) { + email = ""; + } + String picture_url = request.getParameter("picture_url"); + if (picture_url == null) { + picture_url = ""; + } + if (!nickname.equals("")) { + + if (password.equals(cpassword)) { + if (!javchat.checkExists(nickname)) { + if (javchat.insertUser(nickname, password, firstname, lastname, email, picture_url)) { + message = "

    User correctly registered

    "; + } else { + message = "Error... no more explanations sorry..."; + } + } else { + message = "

    User already exists, please change your nickname

    "; + } + } else { + message = "

    Please retype your password, they does'nt match"; + } + } else { + nickname = ""; + } + + %> + + + + + + JAVChat user registration + + + +

    JAVChat USER REGISTRATION

    + <%= message %> +
    +
    +

    Nickname*:

    +

    First Name*:

    +

    Last Name*:

    +

    Password*:

    +

    Confirm Password*:

    +

    E-Mail*:

    +

    URL of your picture:

    +

    +
    +
    + + + + diff --git a/Java/TP4/WebChat/web/sendPassword.jsp b/Java/TP4/WebChat/web/sendPassword.jsp new file mode 100755 index 0000000..4d877a7 --- /dev/null +++ b/Java/TP4/WebChat/web/sendPassword.jsp @@ -0,0 +1,46 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> +<%-- +The taglib directive below imports the JSTL library. If you uncomment it, +you must also add the JSTL library to the project. The Add Library... action +on Libraries node in Projects view can be used to add the JSTL 1.1 library. +--%> +<%-- +<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> +--%> + + + + + + + + + + + Send Password + + +

    + <% + if (javchat.sendPasswordTo(request.getParameter("nickname"))) { + out.println("Your password has been sent"); + } else { + out.println("Your nickname doesn't exist in the database"); + } + %> +

    + <%-- + This example uses JSTL, uncomment the taglib directive above. + To test, display the page like this: index.jsp?sayHello=true&name=Murphy + --%> + <%-- + + + Hello ${param.name}! + + --%> + + + diff --git a/Lisp/TP1/ex1.lsp b/Lisp/TP1/ex1.lsp new file mode 100755 index 0000000..033411b --- /dev/null +++ b/Lisp/TP1/ex1.lsp @@ -0,0 +1,355 @@ + #| + | #(@)nomfichier.c ENSICAEN 2005-11-21 + | + | @author MASSE Nicolas (2005-Groupe4-LIMIN) + | @author LIMIN Thomas (2005-Groupe4-MASSE) + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + +#| + | TP n° 1 de Programation symbolique + |# + +#| + | @version 1.0.0 + | + | @Fait: - + | + | @Afaire: énoncé + |# + + +#| CAR = Content of Address Register + | First element of list + | Also named FIRST + |# +(print (car '(p h w))) ; P + +#| CDR = List minus the first element + | Also named REST + |# +(print (cdr '(b a c d))) ; (A C D) + +(setq x '((anne emma) (marc michel))) +(print (first x)) ; (ANNE EMMA) +(print (rest x)) ; ((MARC MICHEL)) +(print (first (rest x))) ; (MARC MICHEL) +(print (rest (first x))) ; (EMMA) +(print (rest (first (rest x)))) ; (MICHEL) +(print (first (rest (first x)))) ; EMMA + +#| ((a b) (c d) (e f)) => Y |# +(setq y '((a b) (c d) (e f))) + +(print (cadadr y)) ; D +(print (caaddr y)) ; E +#| Doesn't function, because CAR performed on non-list argument, replace by CADR + | (print (caadr '(cdr y))) + |# + +#| CDDR is not a list, so CAAR cannot perform on it, replace by CAR + | (print (caar '(cddr y))) + |# + +; the list following the quote is handled as data +(print (car '(caddr ((a b) (c d) (e f))))) ; CADDR +(print '(car (car (cdr (cdr y))))) ; (CAR (CAR (CDR (CDR Y)))) + +#| + | Ex 2 + |# + +(print (caddr '(a b c d) )) +(print (caadr '((a b) (c d)) )) +; CAADDAR is not defined (too long) +(print (car (caddar '(((a) (b) (c) (d))) ))) +(print (caaddr '((((a))) ((b)) (c) d) )) +(print (cadar '((((a) b) c) d) )) + +#| + | Ex 3 + |# + +; (A B) => L +(print (setq l '(a b))) + +(print (append l l)) ; (A B A B) +;(print (append 'l l)) L is not a list +(print (append l 'l)) ; (A B . L) + +(print (car (cons 'a '(b c)))) ; A +(print (cdr (cons 'a '(b c)))) ; (B C) +(print (cons (car l) (cdr l))) ; (A B) + +(print (cons (car nil) (cdr nil))) ; (NIL) because of (car nil) +(print (cons l l)) ; ((A B) A B) +(print (cons 'l l)) ; (L A B) + +#| + | Ex 4 + |# +(print (cons '(a b x) '())) ; ((A B X)) +(print (append '(a b) '(c d))) ; (A B C D) +(print (list l l)) ; ((A B) (A B)) +(print (cons 'l l)) ; (L A B) +(print (list '(a b c) '())) ; ((A B C) NIL) +(print (append '(a b c) '())) ; (A B C) +(print (cons '(a b) '(c d))) ; ((A B) C D) + + +#| + | Ex 5 + | a) + |# +(defun decale (liste) + (append (cdr liste) + (list (car liste)) + ) +) +(print (decale '(a b c d))) ; (B C D A) + + +#| + | Ex 5 + | b) + |# +(defun inverse (liste) + (if (NULL liste) + NIL + (append + (inverse (cdr liste)) + (list (car liste)) + ) + ) +) + +(print (inverse '(a b c d))) ; (D C B A) +(print (inverse NIL)) ; NIL + + +#| + | Ex 5 + | c) + | Calculer la liste formée par la répétition inverse d'une liste + |# +(defun duplique (liste) + (let ((inv_liste (inverse liste))) + (append inv_liste inv_liste) + ) +) + +(print (duplique '(a b c d))) + + +#| + | Ex 5 + | d) + | the list following "&optional" defines the name of the parameter + | and its default value + |# +(defun nbatome (liste &optional (nb 0)) + (if (null liste) + nb ; terminal recursivity + (nbatome (cdr liste) + (if (atom (car liste)) + (+ 1 nb) + nb + ) + ) + ) +) + +(print (nbatome '(a b c (2) r (3) s))) + + +#| + | Ex 5 + | e) + | Calculer la liste composée du premier et du dernier élément d'une liste + |# +(defun premder (liste) + (let ((fin (cdr (cdr liste)))) + (if (NULL fin) + liste + (premder (cons (car liste) (cdr (cdr liste))))) + ) +) + +(print (premder '(76 45 34 90 2 9 4 8 56 4 2 87))) + + +#| + | Ex 5 + | f) + | Calcul du PGCD + |# +(defun pgcd (p q) + (if (= q 0) + p + (pgcd q (rem p q)) + ) +) + +(print (pgcd 23 21)) +(print (gcd 23 21)) + +(print (pgcd 24 15)) +(print (gcd 24 15)) + + +#| + | Ex 5 + | g) + | Suite de Syracuse + |# +(defun syra (un) + (progn + (print un) + (if (= un 1) + () + (syra + (if (evenp un) + (/ un 2) + (+ 1 (* 3 un)) + ) + ) + ) + ) +) + +;(print "U0 = ") +;(syra (read)) + + +#| + | Ex 5 + | h) + | Vérifier qu'un mot éclaté en liste est un palyndrome + |# +(defun palindromep (liste) (equal liste (inverse liste))) + +(print (palindromep '(e s o p e r e s t e e t s e r e p o s e) )) +(print (palindromep '(b a t e a u) )) + + +#| + | Ex 5 + | i) + | Construire la liste décroissante des n premiers entiers positifs ou nuls + |# +(defun genere (nb &optional(liste NIL)) + ( if (>= nb 0) + (genere (- nb 1) (append liste (list nb))) + liste + ) +) + +(print (genere 10 )) + + +#| + | Ex 5 + | j) + | Determiner le nombre médian de 3 nombres + |# +(defun median (n1 n2 n3) + (max (max (min n1 n2) (min n2 n3)) (min n3 n1)) +) + +(print (median 1 2 3 )) +(print (median 2 3 1 )) +(print (median 3 1 2 )) + +#| + | Ex 5 + | k) + | Returns the list of the different elements + |# +(defun diff (liste) + (if (null liste) + () + (if (member (car liste) (cdr liste)) + (diff (cdr liste)) + (cons (car liste) (diff (cdr liste))) + ) + ) +) + +(print (diff '(6 4 9 10 3 6 2 9 3 3 4))) + + +#| + | Ex 5 + | l) + | Trier une liste dans l'ordre croissant + |# +(defun inserer (liste nb) + (if (null liste) + (list nb) + (if (> (car liste) nb) + (cons nb liste) + (cons (car liste) (inserer (cdr liste) nb)) + ) + ) +) +(defun trier (liste &optional(res NIL)) + (if (null liste) + res + (progn + (trier (cdr liste) (inserer res (car liste))) + ) + ) +) + + +(print (trier '(2 3 10 9 4 6))) + +#| + | Ex 5 + | m) + | Calculer l'histogramme d'une liste de nombre, c'est à dire le nombre d'occurences de chaque nombre + |# +(defun addoccur (dat nb) + (if (null dat) + (list (list nb 1)) + (if (= (caar dat) nb) + (cons (list nb (1+ (cadar dat))) (cdr dat)) + (if (> (caar dat) nb) + (cons (list nb 1) dat) + (cons (car dat) (addoccur (cdr dat) nb)) + ) + ) + ) +) +(defun histo (liste &optional(dat NIL)) + (if (null liste) + dat + (histo (cdr liste) (addoccur dat (car liste))) + ) +) + +(print (histo '(6 4 9 10 3 6 2 9 3 3 4))) + +#| + | Ex 5 + | n) + | Se servir de cet histogramme pour calculer le nombre médian de cette liste. + |# +(defun median (liste &optional(nb NIL)) + (if (null nb) + (median (histo liste) (/ (length liste) 2)) + (if (<= nb (cadar liste)) + (caar liste) + (median (cdr liste) (- nb (cadar liste))) + ) + ) +) + +(print (median '(6 4 9 10 3 6 2 9 3 3 4))) + diff --git a/Lisp/TP2/ex1.lsp b/Lisp/TP2/ex1.lsp new file mode 100755 index 0000000..dde9812 --- /dev/null +++ b/Lisp/TP2/ex1.lsp @@ -0,0 +1,152 @@ +#| + | #(@)ex1.lsp ENSICAEN 2005-11-21 + | + | @author MASSE Nicolas (2005-Groupe4-LIMIN) + | @author LIMIN Thomas (2005-Groupe4-MASSE) + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + +#| + | Exercices avec parcours de listes, en profondeur et à tous les niveaux + |# + +#| + | @version 21-11-2005 + | + | @Fait: tout + | + | @Afaire: - + |# + + + +#| + | Rappel + | a) + | Parcours d'une liste à un niveau avec affichage des éléments + |# +(defun parcours1N (l) + ( if (null l) + () + (progn + (print (car l)) + (parcours1N (cdr l)) + ) + ) +) + + +(print "Parcours de (8 ((7 6) (5 4)) 3 (2 1))) à 1 niveaux avec affichage des éléments") +(parcours1N '(8 ((7 6) (5 4)) 3 (2 1)) ) + +#| + | Rappel + | b) + | Parcours d'une liste à tous les niveaux avec affichage des atomes + |# +(defun parcours (l) + (cond + ((null l) + () + ) + ((atom (car l)) + (print(car l)) + (parcours (cdr l)) + ) + (t + (parcours (car l)) + (parcours (cdr l)) + ) + ) +) + +(print "Parcours de (8 ((7 6) (5 4)) 3 (2 1))) à tous les niveaux avec affichage des atomes") +(parcours '(8 ((7 6) (5 4)) 3 (2 1)) ) + + +#| + | 1) + | Ecrire une fonction inversant une liste à tous les niveaux + |# +(defun inverse (l) + (cond + ((null l) + () + ) + ((atom (car l)) + (append (inverse (cdr l)) (list (car l))) + ) + (t + (append (inverse (cdr l)) (list (inverse (car l)))) + ) + ) +) + +(print "Inversion de ( 8 ((7 6) (5 4)) 3 (2 1)))") +(print (inverse '(8 ((7 6) (5 4)) 3 (2 1)) ) ) + + +#| + | 2) + | Ecrire une fonction calcul profondeur prenant une expression en argument + | et retournant le nombre de niveaux qu'elle comporte + |# +(defun calcul_profondeur (expr) + (cond + ((null expr) + 0 + ) + ((atom (car expr)) + (max 1 (calcul_profondeur (cdr expr))) + ) + (t + (max (+ 1 (calcul_profondeur (car expr))) (calcul_profondeur (cdr expr))) + ) + ) + +) + +(print "Calcul de profondeur de ( 8 ((7 (6 6)) (5 4)) 3 (2 1)))") +(print (calcul_profondeur '(8 ((7 (6 6)) (5 4)) 3 (2 1)) ) ) + + +#| + | 3) + | Ecrire la fonction oter-pred à 2 arguments: + | une prédicat + | une liste quelconque + | donnant comme résultat la liste de laquelle sont enlevés tous les objets + | satisfaisant au prédicat + |# +(defun oter-pred (pred liste) + (cond + ((null liste) + () + ) + ((atom (car liste)) + ( if (funcall pred (car liste)) + (cons (car liste) (oter-pred pred (cdr liste))) + (oter-pred pred (cdr liste)) + ) + ) + (t + (cons (oter-pred pred (car liste)) (oter-pred pred (cdr liste))) + ) + ) +) + + +(print "Oter de ( 8 ((7 (6 6)) (5 4)) 3 (2 1))) les objets satisfaisant: objet > 3") + +(defun pre1 (o) + (> o 3) +) + +(print (oter-pred 'pre1 '(8 ((7 (6 6)) (5 4)) 3 (2 1)) ) ) + diff --git a/Lisp/TP2/ex2.lsp b/Lisp/TP2/ex2.lsp new file mode 100755 index 0000000..84bbbf1 --- /dev/null +++ b/Lisp/TP2/ex2.lsp @@ -0,0 +1,103 @@ +#| + | #(@)ex2.lsp ENSICAEN 2005-11-21 + | + | @author MASSE Nicolas (2005-Groupe4-LIMIN) + | @author LIMIN Thomas (2005-Groupe4-MASSE) + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + + +#| + | Exercices d'entrainement sur l'utilisation des fonctions d'ordre superieur. + |# + +#| + | @version 21-11-2005 + | + | @Fait: tout + | + | @Afaire: - + |# + + +#| + | 1) Evaluer en sequence et tester les expressions suivantes : + |# + +; T car (a b) est une liste non vide. +(format t "(consp '(a b)) = ~s~%" (consp '(a b)) ) + +; NIL car () est une liste vide. +(format t "(consp '()) = ~s~%" (consp '()) ) + +; T car NIL est un atome. +(format t "(atom '()) = ~s~%" (atom '()) ) + +; T car NIL est un atome. +(format t "(atom ()) = ~s~%" (atom ()) ) + +; T car (a) n'a qu'un element. +(format t "(null (cdr '(a))) = ~s~%" (null (cdr '(a))) ) + +; ((1 2 A X) (3 4 B Y)) +(format t "(mapcar 'append '((1 2) (3 4)) '((a) (b) (c)) '((x) (y) (z)) = ~s~%" + (mapcar 'append '((1 2) (3 4)) '((a) (b) (c)) '((x) (y) (z)) )) + +; ((1 2 . A) (3 . B)) +(format t "(mapcar #'(lambda (x y) (append x y)) '((1 2) (3) (4 5 6)) '(a b)) = ~s~%" + (mapcar #'(lambda (x y) (append x y)) '((1 2) (3) (4 5 6)) '(a b)) ) + +; l = (A B C) +(setf l '(a b c)) +(format t "~%") ; Saut de ligne +(format t "l = ~s~%" l) + +; ((1 A) (2 B) (3 C) (4 A) (5 B)) +(format t "(mapcar 'list '(1 2 3 4 5) (append l l)) = ~s~%" + (mapcar 'list '(1 2 3 4 5) (append l l)) ) + +; (2 NIL 5) +(format t "(mapcar #'(lambda (u) (if (numberp u) u)) '(2 a 5)) = ~s~%" + (mapcar #'(lambda (u) (if (numberp u) u)) '(2 a 5)) ) + +#| + | 2) Evaluer, puis trouver les formes d'appel equivalentes avec "apply" + | ou avec "funcall" selon les cas. + |# + +(format t "~%") ; Saut de ligne +(setf addition '+) +(format t "addition = ~s~%" addition) +(format t "(funcall addition 2 3 4) = ~s~%" (funcall addition 2 3 4)) +(format t "(apply addition '(2 3 4)) = ~s~%" (apply addition '(2 3 4))) + +(format t "~%") ; Saut de ligne +(setf f #'(lambda (x y) (if (> x y) x y))) +(format t "f = ~s~%" f) +(format t "(funcall f 5 7) = ~s~%" (funcall f 5 7)) +(format t "(funcall f 7 5) = ~s~%" (funcall f 7 5)) +(format t "(apply f '(5 7)) = ~s~%" (apply f '(5 7))) +(format t "(apply f '(7 5)) = ~s~%" (apply f '(7 5))) + + +(format t "~%") ; Saut de ligne +(setf l '(list cons *)) +(format t "l = ~s~%" l) +(format t "(apply (car l) '(a b c)) = ~s~%" (apply (car l) '(a b c))) +(format t "(funcall (car l) 'a 'b 'c) = ~s~%" (funcall (car l) 'a 'b 'c)) + +; ERREUR : cons n'admet que deux parametres +;(format t "(apply (cadr l) '(a b c)) = ~s~%" (apply (cadr l) '(a b c))) + + +(format t "~%") ; Saut de ligne +(setf m (list 'cons '*)) +(format t "m = ~s~%" m) +(format t "(apply (cadr m) '(2 5)) = ~s~%" (apply (cadr m) '(2 5))) +(format t "(funcall (cadr m) 2 5) = ~s~%" (funcall (cadr m) 2 5)) \ No newline at end of file diff --git a/Lisp/TP2/ex3.lsp b/Lisp/TP2/ex3.lsp new file mode 100755 index 0000000..7524b1b --- /dev/null +++ b/Lisp/TP2/ex3.lsp @@ -0,0 +1,258 @@ +#| + | #(@)ex3.lsp ENSICAEN 2005-11-21 + | + | @author MASSE Nicolas (2005-Groupe4-LIMIN) + | @author LIMIN Thomas (2005-Groupe4-MASSE) + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + + +#| + | Ex 3 : Ecriture de fonctions utilisant les fonctions d'ordre supérieur. + |# + +#| + | @version 21-11-2005 + | + | @Fait: tout + | + | @Afaire: - + |# + + +#| + | Génère la liste des nombres entiers compris entre 0 (inclus) + | et n (inclus) + | + | @param nb la limite supérieure + | @param liste la liste déjà générée (usage interne) + | + | @return la liste des nombres, en ordre + |# +(defun genere (nb &optional(asc t) (liste NIL)) + (if (>= nb 0) + (genere (- nb 1) asc + (if asc + (cons nb liste) + (append liste (list nb)) + ) + ) + liste + ) +) + + +(format t "(genere 5 NIL) = ~s~%" (genere 5 NIL)) +(format t "(genere 5 t) = ~s~%" (genere 5 t)) + +#| + | Génère une liste de nombre entiers entre 0 (inclus) et n (inclus) + | en commençant par les impairs en ordre décroissant et en finissant + | par les pair en ordre croissant. + | + |# +(defun generel (nb) + (append + (mapcan + #'(lambda (v) + (if (oddp v) + (list v) + NIL + ) + ) + (genere nb nil) + ) + (mapcan + #'(lambda (v) + (if (evenp v) + (list v) + NIL + ) + ) + (genere nb t) + ) + ) +) + + +(format t "(generel 5) = ~s~%" (generel 5)) + + +#| + | Effectue la somme S + | + | @param nb la limite supérieure + | + | @return la somme + |# +(defun calcul (nb) + (let ((l (genere nb t))) + (apply '+ (mapcar '* l l l)) + ) +) + + +(format t "(calcul 5) = ~s~%" (calcul 5)) +(format t "(calcul 0) = ~s~%" (calcul 0)) + +#| + | 3) + | Prend 2 parametres : el et l1, où el est un objet Lisp quelconque + | et l1 une liste de N objets, et retourne comme résultat une liste de + | N+1 listes, chacune étant constituée de N+1 objets. Ces objets sont les + | N objets de L plus l'objet X inséré à toutes les positions possibles + | dans L. + | + |# +(defun insert (el l1 &optional (l2 nil)) + (append + (list (append l2 (list el) l1)) + (if (consp l1) + (insert el + (cdr l1) + (append l2 (list (car l1)) ) + ) + ) + ) +) + +(format t "(insert 'u '(a b c)) = ~s~%" (insert 'u '(a b c))) + +#| + | 4) + | La fonction PERMUTE prend en entrée une liste de N objets et renvoie + | la liste de toutes les permutations de ces N objets. + | + |# +(defun permute (l &optional (lorig nil)) + (if (null lorig) + (permute l l) + (if (consp l) + (append (insert (car l) (remove (car l) lorig)) (permute (cdr l) lorig)) + ) + ) +) + + +(format t "(permute '(a b c)) = ~s~%" (permute '(a b c))) + +#| + | + | 6) Cryptarithmetique + | + |# + +(setq les-variables '(A B C D E F)) +(setq variables-libres '(A B C)) + +(format t "les-variables = ~s~%" les-variables) +(format t "variables-libres = ~s~%" variables-libres) + +(setq affect1 + '(if (and B C) + (setf F (mod + (+ B C) + 10 + ) + ) + ) +) + +(setq affect2 + '(if (and A B C) + (setf E (mod + (+ A B (floor + (+ B C) + 10 + ) + ) + 10 + ) + ) + ) +) + +(setq affect3 + '(if (and A B C) + (setf D (floor + (+ A B (floor + (+ B C) + 10 + ) + ) + 10 + ) + ) + ) +) + +(setq affectations (list affect1 affect2 affect3)) +(format t "affectations = ~s~%" affectations) + +(setq contr1 '(if A (/= A 0) t)) +(setq contr2 '(if B (/= B 0) t)) +(setq contr3 '(if D (/= D 0) t)) +(setq contr4 + '(if (and A B C D E F) + (/= A B C D E F) + ) +) + +(setq contraintes (list contr1 contr2 contr3 contr4)) +(format t "contraintes = ~s~%" contraintes) + +(defun initialiser (var) + (mapcar #'(lambda (v) (set v nil)) var) +) + +(defun affecter (varl val aff) + (progn + (mapcar #'(lambda (lv rv) (set lv rv)) varl val) + (mapcar 'eval aff) + ) +) + +(defun verifier (varl aff contr val) + (affecter varl val aff) + (every #'(lambda (v) (eval v)) contr) +) + +(initialiser les-variables) + +(format t "(verifier variables-libres affectations contraintes '(1 2 3)) = ~s~%" + (verifier variables-libres affectations contraintes '(1 2 3)) +) + +(defun possible (n) + (if (= n 1) + (mapcar 'list '(0 1 2 3 4 5 6 7 8 9)) + (mapcan #'(lambda (el) + (mapcar #'(lambda (el2) (cons el2 el)) + '(0 1 2 3 4 5 6 7 8 9) + ) + ) + (possible (- n 1)) + ) + ) +) + +(format t "(possible 1) = ~s~%" (possible 1)) +(format t "(possible 3) = ~s~%" (possible 3)) + +(defun cryptarithmetique (varl aff contr) + (mapcan + #'(lambda (val) (if (verifier varl aff contr val) (list val))) + (possible (length varl)) + ) +) + + +(format t "(cryptarithmetique variables-libres affectations contraintes) = ~s~%" + (cryptarithmetique variables-libres affectations contraintes) +) diff --git a/Lisp/TP3/ex1.lsp b/Lisp/TP3/ex1.lsp new file mode 100755 index 0000000..ea66aa3 --- /dev/null +++ b/Lisp/TP3/ex1.lsp @@ -0,0 +1,188 @@ +#| + | #(@)ex1.lsp ENSICAEN 2005-12-05 + | + | @author MASSE Nicolas (2005-Groupe4-LIMIN) + | @author LIMIN Thomas (2005-Groupe4-MASSE) + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + +#| + |# + + +#| + | @version 2006 + | + | @Fait - + | + | @Afaire - + |# + + +#| + | b) Passage d'un mot (symbole) à une liste de caractères + | + | @param mot le mot à exploser + | @return une liste de symbole: 1 par caracère du mot + |# +(defun explode (mot) + (loop for x from 0 to (- (length(string mot)) 1) + collect + (read-from-string (string (elt (string mot) x))) + ) +) + +(format t "(explode \'test) = ~s~%" (explode 'test)) + +#| + | a) Représentation pour la grille et les mots: + | + | Les mots disponibles sont dans une liste. La grille est repésentée par + | une liste de noms de liste de caractères, chaque liste de caracteres devant + | correspondre à un mot. + | + | Les contraintes sont exprimées comme suit: + | (equal (nth 2 lig1) (nth 1 col1)) + |# +(setq + lig1 '(()()()()()) + lig2 '(()()()()()()) + col1 '(()()()()()) + col2 '(()()()()()) + l_mots (mapcar 'explode '(arbre simple savante sage vague agile legere varie)) +) + +(setq grille '(lig1 lig2 col1 col2)) + +(format t "grille = ~s~%" grille) +(format t "lig1 = ~s~%" lig1) +(format t "lig2 = ~s~%" lig2) +(format t "col1 = ~s~%" col1) +(format t "col2 = ~s~%" col2) + + +#| + | c) Représenter les contraintes liées à cette grille sous forme de liste + |# +(setf contraintes + '( + (if (and (nth 2 lig1) (nth 1 col1)) (equal (nth 2 lig1) (nth 1 col1)) t) + (if (and (nth 1 lig2) (nth 4 col1)) (equal (nth 1 lig2) (nth 4 col1)) t) + (if (and (nth 4 lig2) (nth 2 col2)) (equal (nth 4 lig2) (nth 2 col2)) t) + ) +) + + + +#| + | d) Fonction permettant de placer un mot dans la grille + | + |# +(defun placer (emplacement mot) + (if (equal (length (eval emplacement)) (length mot)) + (progn + (format t "Mot placé: ~s = ~s~%" emplacement mot) + (set emplacement mot) ; on utilise un set car il faut evaluer "emplacement" + t ; ne pas oublier la valeur de retour + ) + nil + ) +) + +#| + | remplace le mot par une liste de nil + | + | @param emplacement le mot a réinitialisé + | @return nil + |# + +(defun reinit (emplacement) + (format t "Effacement de ~s, ancienne valeur = ~s~%" emplacement (eval emplacement)) + + ; on utilise un set car il faut evaluer "emplacement" + (set emplacement (loop for x in (eval emplacement) collect nil)) + + nil ; la valeur de retour +) + + +#| + | e) Écrire la fonction permettant de vérifier que la grille est correctement remplie + | + | @param c la liste contraintes + | @return validité des contraintes + |# +(defun verifier (c) + (if (consp c) + (and + (eval (eval (car c))) ; TODO : expliquer le double eval + (verifier (cdr c)) + ) + t + ) +) + +; Doit retourner t car la grille est vide +(format t "(verifier contraintes) = ~s~%" (verifier contraintes)) + +#| + | f) Fonction permettant de trouver la solution par un mecanisme de type + | "essai systematique de toutes les configurations" avec backtrack. + | + | @param rangees une liste des noms des rangees de la grille + | @param mots + |# + +(defun chercher (rangees mots) + (cond + ((null mots) ; Plus de mots a essayer ? + (format t "[BACKTRACK]~%") + (reinit (car rangees)) ; On efface la rangee + ) + + ((null rangees) ; Plus de rangees a remplir ? + (progn + (format t "Solution = ~a~%" (mapcar 'eval grille)) ; On a la solution ! + t + ) + ) + + (t ; Cas par defaut + (if (and ; On doit pouvoir placer le mot (verification de la longueur) + (placer (car rangees) (car mots)) + ; ET les contraintes de la grille doivent etre verifiees + (verifier contraintes)) + ;then + (progn + (format t "[FORWARD]~%") + + ; Le mot est place, mais peut on remplir les colonnes suivantes ? + (if (chercher (cdr rangees) l_mots) + ;then + t ; Oui + ;else + (chercher rangees (cdr mots)) + ;endif + ) + + ;endprogn + ) + ;else + (chercher rangees (cdr mots)) + ;endif + ) + ) + + ;endcond + ) +) + + +(chercher grille l_mots) + diff --git a/Lisp/TP4/connexion.lsp b/Lisp/TP4/connexion.lsp new file mode 100755 index 0000000..5729ac1 --- /dev/null +++ b/Lisp/TP4/connexion.lsp @@ -0,0 +1,403 @@ +#| + | #(@)connexion.lsp ENSICAEN 2006-01-09 + | + | @author MASSE Nicolas + | @author LIMIN Thomas + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + +#| + | Initiation à la programmation avec des agents. + |# + + +#| + | version: 2006-02-07 + | + | done: all + | + | todo: none + |# + + +#| + | Classe Connexion. + | + |# + +(defclass Connexion () + ((nom + :accessor nom + :initarg :nom + :initform nil + :documentation "Le nom de la connexion" + ) + (boitiers + :accessor boitiers + :initarg :boitiers + :initform nil + :documentation "La liste des boitiers reliés à cette connexion" + ) + (provenance + :accessor provenance + :initarg :provenance + :initform nil + :documentation "La référence du boitier qui a mis la valeur de cet objet" + ) + (valeur + :accessor valeur + :initarg :valeur + :initform nil + :documentation "La valeur de cette connexion" + ) + (gestionnaire + :accessor gestionnaire + :initform nil + :documentation "Le gestionnaire de l'application" + )) + (:documentation "Une connexion a un nom et relie des boitiers") +) + +#| + | Mets une valeur dans cette connexion, et propage la valeur aux boitiers + | voisins. + |# +(defmethod mettre-valeur (val demandeur (oself Connexion)) + (cond + ((null (valeur oself)) + (setf (valeur oself) val) + (format t "~s: valeur modifiée~%" oself) + (setf (provenance oself) demandeur) + (mapcar #'(lambda (x) + (if (not (eql demandeur x)) + (attention-une-valeur oself x) + ) + ) + (boitiers oself) + ) + ) + ((= val (valeur oself)) + (format t "~s: valeur non modifiée mais identique~%" oself) + ) + (t + (format t "~s: valeurs differentes, valeur non modifiée !~%" oself) + (il-y-a-incoherence oself (gestionnaire oself)) + ) + ) +) + +#| + | Oublie la valeur de cette connexion et propage l'oubli aux boitiers voisins. + |# +(defmethod oublier-valeur (demandeur (oself Connexion)) + (cond + ((or (null (valeur oself)) (null (provenance oself))) + t + ) + ((eql demandeur (provenance oself)) + (setf (valeur oself) nil) + (format t "~s: valeur oubliée~%" oself) + (mapcar #'(lambda (x) + (if (not (eql demandeur x)) + (plus-de-valeur oself x) + ) + ) + (boitiers oself) + ) + t + ) + (t + (format t "~s: valeur non oubliée~%" oself) + nil + ) + ) +) + +#| + | Modifie la valeur de la connexion après l'avoir oubliée. + |# +(defmethod modifier-valeur (val demandeur (oself Connexion)) + (if (oublier-valeur demandeur oself) + (mettre-valeur val demandeur oself) + ) +) + + + +#| + | Classe Boitier + |# + +(defclass Boitier () + ((borne1 + :accessor borne1 + :initarg :borne1 + :initform nil + :documentation "La borne première borne d'entrée" + ) + (borne2 + :accessor borne2 + :initarg :borne2 + :initform nil + :documentation "La seconde borne d'entrée" + ) + (borneS + :accessor borneS + :initarg :borneS + :initform nil + :documentation "La borne de sortie" + )) + (:documentation "Un boitier a deux connexions d'entrée et une de sortie") +) + +#| + | Surcharge de la méthode initialize-instance, le mot clé after + | indique que la surcharge s'execute après la méthode de base, + | prédéfinie et toujours executée après make-instance (Sorte de + | constructeur automatique). Le oself est un nom choisi pour + | référencer l'objet en cours, correspond au self de Smalltalk + |# +(defmethod initialize-instance :after ((oself Boitier) &rest args) + (declare (ignore args)) + + ; Raccorde les bornes au boitier + (setf (boitiers (borne1 oself)) (cons oself (boitiers (borne1 oself)))) + (setf (boitiers (borne2 oself)) (cons oself (boitiers (borne2 oself)))) + (setf (boitiers (borneS oself)) (cons oself (boitiers (borneS oself)))) +) + +#| + | Méthode appelée par les connexions lorsqu'elles ont reçu une valeur. + |# + +(defmethod attention-une-valeur (cnx (oself Boitier)) + (format t "~s: attention une valeur !~%" oself ) +) + +#| + | Méthode appelée par les connexions lorsqu'elles ont perdu leur valeur. + |# +(defmethod plus-de-valeur (cnx (oself Boitier)) + (format t "~s: attention plus de valeur !~%" oself) + (oublier-valeur oself (borne1 oself)) + (oublier-valeur oself (borne2 oself)) + (oublier-valeur oself (borneS oself)) + (attention-une-valeur oself oself) +) + + +#| + | Définition de la classe Add(itionneur), qui hérite de Boitier + |# +(defclass Add (Boitier) + () +) + +(defmethod attention-une-valeur :after (cnx (oself Add)) + (cond + ((and (not (null (valeur (borne1 oself)))) (not (null (valeur (borne2 oself))))) + (format t "~s: addition: je connais borne1 et borne2 ~%" oself) + (mettre-valeur (+ (valeur (borne1 oself)) (valeur (borne2 oself))) oself (borneS oself)) + ) + ((and (not (null (valeur (borne1 oself)))) (not (null (valeur (borneS oself))))) + (format t "~s: addition: je connais borne1 et borneS ~%" oself) + (mettre-valeur (- (valeur (borneS oself)) (valeur (borne1 oself))) oself (borne2 oself)) + ) + ((and (not (null (valeur (borne2 oself)))) (not (null (valeur (borneS oself))))) + (format t "~s: addition: je connais borne2 et borneS ~%" oself) + (mettre-valeur (- (valeur (borneS oself)) (valeur (borne2 oself))) oself (borne1 oself)) + ) + ) +) + + + +#| + | Définition de la classe Mul(iplieur), qui hérite de Boitier + |# +(defclass Mul (Boitier) + () +) + +(defmethod attention-une-valeur :after (cnx (oself Mul)) + (cond + ((and (not (null (valeur (borne1 oself)))) (not (null (valeur (borne2 oself))))) + (format t "~s: multiplication: je connais borne1 et borne2 ~%" oself) + (mettre-valeur (* (valeur (borne1 oself)) (valeur (borne2 oself))) oself (borneS oself)) + ) + ((and (not (null (valeur (borne1 oself)))) (not (null (valeur (borneS oself))))) + (format t "~s: multiplication: je connais borneS et borne1 ~%" oself) + (mettre-valeur (/ (valeur (borneS oself)) (valeur (borne1 oself))) oself (borne2 oself)) + ) + ((and (not (null (valeur (borne2 oself)))) (not (null (valeur (borneS oself))))) + (format t "~s: multiplication: je connais borneS et borne2 ~%" oself) + (mettre-valeur (/ (valeur (borneS oself)) (valeur (borne2 oself))) oself (borne1 oself)) + ) + ) +) + + + +#| + | Classe Gestionnaire + |# + +(defclass Gestionnaire () + ((historique + :accessor historique + :initform nil + :documentation "La liste des valeurs de toutes les connexions" + ) + (incoherence + :accessor incoherence + :initform nil + :documentation "Permet de savoir s'il y a eu incohérence lors du calcul" + )) + (:documentation "Un gestionnaire gère les opérations de d'annulation") +) + +#| + | Ajoute la connexion à ce gestionnaire, afin qu'il gère les incohérences + | de la connexion. + |# +(defmethod ajouter-au-gestionnaire (cnx (oself Gestionnaire)) + (setf (historique oself) + (cons + (list cnx (valeur cnx) (provenance cnx)) + (historique oself) + ) + ) + (setf (gestionnaire cnx) oself) +) + +#| + | Sauvegarde l'état de toutes les connexions. Méthode à appeler avant toute + | modification de valeur par l'utilisateur. + |# +(defmethod sauvegarde-gestionnaire ((oself Gestionnaire)) + (setf (historique oself) + (loop for x in (historique oself) collect (list (car x) (valeur (car x)) (provenance (car x)))) + ) +) + +#| + | Restauration des anciennes valeurs des connexions. + |# +(defmethod restauration-gestionnaire ((oself Gestionnaire)) + (loop for x in (historique oself) do + (setf (valeur (car x)) (cadr x)) + (setf (provenance (car x)) (caddr x)) + ) + (setf (incoherence oself) nil) +) + +#| + | Méthode appelée par les connexions pour signaler une incohérence. + |# +(defmethod il-y-a-incoherence (cnx (oself Gestionnaire)) + (setf (incoherence oself) t) + (format t "~s: INCOHERENCE DETECTEE !~%" cnx) +) + +#| + | Teste le flag d'incohérence. + |# +(defmethod y-a-t-il-incoherence ((oself Gestionnaire)) + (incoherence oself) +) + +#| + | Créer les instances de Connexion + |# +(setq a (make-instance 'Connexion :nom "a")) +(setq b (make-instance 'Connexion :nom "b")) +(setq c (make-instance 'Connexion :nom "c")) +(setq d (make-instance 'Connexion :nom "d")) +(setq e (make-instance 'Connexion :nom "e")) +(setq f (make-instance 'Connexion :nom "f")) +(setq g (make-instance 'Connexion :nom "g")) +(setq h (make-instance 'Connexion :nom "h")) +(setq i (make-instance 'Connexion :nom "i")) +(setq j (make-instance 'Connexion :nom "j")) + + +#| + | Créer les instances de Boitier + |# +(setq mul1 (make-instance 'Mul :borne1 a :borne2 b :borneS c)) +(setq mul2 (make-instance 'Mul :borne1 c :borne2 e :borneS d)) +(setq mul3 (make-instance 'Mul :borne1 f :borne2 j :borneS h)) +(setq add1 (make-instance 'Add :borne1 e :borne2 f :borneS g)) +(setq add2 (make-instance 'Add :borne1 d :borne2 h :borneS i)) + +#| + | Créer le gestionnaire. + |# +(setq gest (make-instance 'Gestionnaire)) + +#| + | Fonction utilitaire. + |# +(defun affichage () + (format t + "ETAT DES CNX: a = ~s, b = ~s, c = ~s, d = ~s, e = ~s, f = ~s, g = ~s, h = ~s, i = ~s, j = ~s~%" + (valeur a) (valeur b) (valeur c) (valeur d) (valeur e) + (valeur f) (valeur g) (valeur h) (valeur i) (valeur j) + ) +) + +; Ajout des connexions au gestionnaire +(ajouter-au-gestionnaire a gest) +(ajouter-au-gestionnaire b gest) +(ajouter-au-gestionnaire c gest) +(ajouter-au-gestionnaire d gest) +(ajouter-au-gestionnaire e gest) +(ajouter-au-gestionnaire f gest) +(ajouter-au-gestionnaire g gest) +(ajouter-au-gestionnaire h gest) +(ajouter-au-gestionnaire i gest) +(ajouter-au-gestionnaire j gest) + +#| + | Début du test présent dans l'énoncé du TP. + |# + +(mettre-valeur 2 'utilisateur a) +(affichage) + +(sauvegarde-gestionnaire gest) +(mettre-valeur 3 'utilisateur b) +(if (y-a-t-il-incoherence gest) (restauration-gestionnaire gest)) +(affichage) + +(sauvegarde-gestionnaire gest) +(mettre-valeur 3 'utilisateur i) +(if (y-a-t-il-incoherence gest) (restauration-gestionnaire gest)) +(affichage) + +(sauvegarde-gestionnaire gest) +(mettre-valeur 1 'utilisateur j) +(if (y-a-t-il-incoherence gest) (restauration-gestionnaire gest)) +(affichage) + +(sauvegarde-gestionnaire gest) +(mettre-valeur 1 'utilisateur g) +(if (y-a-t-il-incoherence gest) (restauration-gestionnaire gest)) +(affichage) + +(sauvegarde-gestionnaire gest) +(mettre-valeur 1 'utilisateur f) +(if (y-a-t-il-incoherence gest) (restauration-gestionnaire gest)) +(affichage) + +(sauvegarde-gestionnaire gest) +(mettre-valeur (/ 3 5) 'utilisateur f) +(if (y-a-t-il-incoherence gest) (restauration-gestionnaire gest)) +(affichage) + diff --git a/Lisp/TP4/tests.lsp b/Lisp/TP4/tests.lsp new file mode 100755 index 0000000..286eba5 --- /dev/null +++ b/Lisp/TP4/tests.lsp @@ -0,0 +1,80 @@ +#| + | #(@)tests.lsp ENSICAEN 2006-01-09 + | + | @author MASSE Nicolas + | @author LIMIN Thomas + | + | ENSICAEN + | 6 Boulevard Marechal Juin + | F-14050 Caen Cedex + | + | Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + | reproduit, utilise ou modifie sans l'avis express de ses auteurs. + |# + +#| + | Ce fichier aide à la compréhension du modèle objet de LISP. + |# + + +#| + | version: 0.0.1 + | + | done: - + | + | todo: - + |# + +(defclass plat () ()) + +(defmethod cuisiner ((x plat)) + (format t "Preparer un plat~%") +) + +(defmethod cuisiner :before ((x plat)) + (format t "Un plat va etre cuisine~%") +) + +(defmethod cuisiner :after ((x plat)) + (format t "Un plat a ete cuisine~%") +) + +(defclass tarte (plat) + ((garniture :reader lire-garniture :writer changer-garniture :initarg :garniture :initform '(poire))) +) + +(defmethod cuisiner ((x tarte)) + (format t "Preparer une tarte a ~s~%" (lire-garniture x)) + (changer-garniture (cons 'cuite (lire-garniture x)) x) +) + +(defmethod cuisiner :before ((x tarte)) + (format t "Une tarte a ~s va etre cuisinee~%" (lire-garniture x)) +) + +(defmethod cuisiner :after ((x tarte)) + (format t "Une tarte a ~s a ete cuisinee~%" (lire-garniture x)) +) + +(defclass tarte-tatin (tarte) + () +) + +(defmethod cuisiner :around ((x tarte-tatin)) + (format t "Preparation d'une tarte tatin :~%") + (call-next-method) +) + + +(setq plat-1 (make-instance 'plat)) +(cuisiner plat-1) + +(format t "~%") + +(setq tarte-1 (make-instance 'tarte)) +(cuisiner tarte-1) + +(format t "~%") + +(setq tarte-2 (make-instance 'tarte-tatin :garniture '(pomme))) +(cuisiner tarte-2) diff --git a/Lisp/TP4/trace_complete.txt b/Lisp/TP4/trace_complete.txt new file mode 100755 index 0000000..0954347 --- /dev/null +++ b/Lisp/TP4/trace_complete.txt @@ -0,0 +1,54 @@ +#: valeur modifiée +#: attention une valeur ! +ETAT DES CNX: a = 2, b = NIL, c = NIL, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = NIL, j = NIL +#: valeur modifiée +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeur modifiée +#: attention une valeur ! +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = NIL, j = NIL +#: valeur modifiée +#: attention une valeur ! +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = 3, j = NIL +#: valeur modifiée +#: attention une valeur ! +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = 3, j = 1 +#: valeur modifiée +#: attention une valeur ! +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = 1, h = NIL, i = 3, j = 1 +#: valeur modifiée +#: attention une valeur ! +#: addition: je connais borne2 et borneS +#: valeur modifiée +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeur modifiée +#: attention une valeur ! +#: addition: je connais borne1 et borneS +#: valeur modifiée +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeurs differentes, valeur non modifiée ! +#: INCOHERENCE DETECTEE ! +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeurs differentes, valeur non modifiée ! +#: INCOHERENCE DETECTEE ! +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = 1, h = NIL, i = 3, j = 1 +#: valeur modifiée +#: attention une valeur ! +#: addition: je connais borne2 et borneS +#: valeur modifiée +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeur modifiée +#: attention une valeur ! +#: addition: je connais borne1 et borneS +#: valeur modifiée +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeur non modifiée mais identique +#: attention une valeur ! +#: multiplication: je connais borne1 et borne2 +#: valeur non modifiée mais identique +ETAT DES CNX: a = 2, b = 3, c = 6, d = 12/5, e = 2/5, f = 3/5, g = 1, h = 3/5, i = 3, j = 1 diff --git a/Lisp/TP4/trace_simplifiee.txt b/Lisp/TP4/trace_simplifiee.txt new file mode 100755 index 0000000..2c888cf --- /dev/null +++ b/Lisp/TP4/trace_simplifiee.txt @@ -0,0 +1,7 @@ +ETAT DES CNX: a = 2, b = NIL, c = NIL, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = NIL, j = NIL +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = NIL, j = NIL +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = 3, j = NIL +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = NIL, h = NIL, i = 3, j = 1 +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = 1, h = NIL, i = 3, j = 1 +ETAT DES CNX: a = 2, b = 3, c = 6, d = NIL, e = NIL, f = NIL, g = 1, h = NIL, i = 3, j = 1 +ETAT DES CNX: a = 2, b = 3, c = 6, d = 12/5, e = 2/5, f = 3/5, g = 1, h = 3/5, i = 3, j = 1 diff --git a/PkiAndSmartCards/PkiAndSmartCards.odt b/PkiAndSmartCards/PkiAndSmartCards.odt new file mode 100755 index 0000000..40fc88c Binary files /dev/null and b/PkiAndSmartCards/PkiAndSmartCards.odt differ diff --git a/PkiAndSmartCards/PkiAndSmartCards.pdf b/PkiAndSmartCards/PkiAndSmartCards.pdf new file mode 100755 index 0000000..49d5256 Binary files /dev/null and b/PkiAndSmartCards/PkiAndSmartCards.pdf differ diff --git a/amaroK/algo/algo1.m b/amaroK/algo/algo1.m new file mode 100755 index 0000000..191f7f6 --- /dev/null +++ b/amaroK/algo/algo1.m @@ -0,0 +1,18 @@ +function e = algo1(samples) +%ALGO1(samples) beat detection (algo1). + +nSamples = length(samples) +blockSize = 1024 +winSize = 43 +nBlocks = floor(nSamples / blockSize) + +instantEnergies = zeros(1, nBlocks); +localAverageEnergies = zeros(1, nBlocks); + +for b = 1 : nBlocks + for s = (b - 1) * blockSize + 1: b * blockSize + instantEnergies(b) = instantEnergies(b) + samples(s) * samples(s); + end +end + +e = instantEnergies; diff --git a/amaroK/algo/beatTracking1.sci b/amaroK/algo/beatTracking1.sci new file mode 100755 index 0000000..f09400f --- /dev/null +++ b/amaroK/algo/beatTracking1.sci @@ -0,0 +1,198 @@ +function outSamples = beatTracking1(fileName) + +// Read samples +[samples sampleFreq nBits] = wavread(fileName); + +// We keep only the first channel +samples = samples(1, :); +outSamples = samples; + +// Computes size +[nChannels nSamples] = size(samples); + +// Instant energy +instantEnergyWindow = 1024; +instantEnergies = nSamples / instantEnergyWindow; + +// Average energy +averageEnergyWindow = 43; +averageEnergies = instantEnergies; + +beatConstant = 1.3; +beatRatio = .01; + +// Time arrays +t = [0 : nSamples - 1]; +tEnergies = [0 : instantEnergies - 1] * instantEnergyWindow; + +// Energies arrays +instantEnergy = zeros(1, instantEnergies); +averageEnergy = zeros(1, averageEnergies); + + +// Compute instant energy +for i = [0 : instantEnergies - 1], + tsum = 0; + for s = [(i * instantEnergyWindow) + 1: ((i + 1) * instantEnergyWindow)], + tsum = tsum + samples(s)^2; + end + instantEnergy(i + 1) = tsum; +end + +// running windowed sum of instant energies +tmpEnergy = 0; +for i = [1 : averageEnergyWindow], + tmpEnergy = tmpEnergy + instantEnergy(i); +end +averageEnergy(1) = tmpEnergy; + +for i = [2 : averageEnergies - averageEnergyWindow], + averageEnergy(i) = averageEnergy(i - 1) - instantEnergy(i - 1) + instantEnergy(i + averageEnergyWindow - 1); +end + +for i = [averageEnergies - averageEnergyWindow + 1: averageEnergies], + averageEnergy(i) = averageEnergy(i - 1) - instantEnergy(i - 1); +end + +// average the sum +averageEnergy = averageEnergy / averageEnergyWindow; + +// computes the variance +energyVariance = zeros(averageEnergy); +for i = [1 : averageEnergies], + v = 0 + for j = [i : i + averageEnergyWindow - 1], + if j <= instantEnergies then + v = v + (instantEnergy(j) - averageEnergy(i))^2; + end + end + energyVariance(i) = v; +end +energyVariance = sqrt(energyVariance); + +// Computes the beat detection constants +beatConstants = -0.0025714 * energyVariance + 1.5142857; + +// Compares the instant energies and the average energies +difference = instantEnergy - beatConstant * averageEnergy; +difference2 = instantEnergy - beatConstants .* averageEnergy; + +// averages the difference +h = [.2 .2 .2 .2 .2]; +filteredDifference = convol(h, difference); +filteredDifference = filteredDifference(3 : averageEnergies + 2); + +filteredDifference2 = convol(h, difference2); +filteredDifference2 = filteredDifference2(3 : averageEnergies + 2); + +// Ratio computation +ratio = zeros(instantEnergy); +for i = [1 : instantEnergies], + if averageEnergy(i) <> 0 then + ratio(i) = instantEnergy(i) / averageEnergy(i); + end +end + +// Beat detection +beatIdx = 1; +beat = []; +for i = [1 : instantEnergies - 1], + //if (ratio(i) < beatRatio) & (ratio(i+1) > beatRatio) then + //if (filteredDifference(i) < 0) & (filteredDifference(i+1) > 0) then + if (filteredDifference(i) < 0) & (filteredDifference(i+1) > 0) then + //if (difference(i) < 0) & (difference(i+1) > 0) then + // draws a line + beat(beatIdx) = tEnergies(i); + beatIdx = beatIdx + 1; + end +end + +beatIdx2 = 1; +beat2 = []; +for i = [1 : instantEnergies - 1], + //if (ratio(i) < beatRatio) & (ratio(i+1) > beatRatio) then + if (filteredDifference2(i) < 0) & (filteredDifference2(i+1) > 0) then + //if (difference(i) < 0) & (difference(i+1) > 0) then + // draws a line + beat2(beatIdx2) = tEnergies(i); + beatIdx2 = beatIdx2 + 1; + + // put a beep (4000 Hz) in the signal + for j = [0 : sampleFreq / 100], + outSamples(tEnergies(i) + j) = .9 * sin(2 * %pi * (j * sampleFreq / 4000)); + end + end +end + +// Plotting... +scf(1); +subplot(2, 1, 1); +plot2d(t, samples, style=color('grey')); +for i = [1 : beatIdx - 1], + xsegs([beat(i) beat(i)], [.2 -.2], color('red')); +end +xtitle('Echantillons de ' + fileName , 'echantillons', 'amplitude'); + +subplot(2, 1, 2); +plot2d(tEnergies, instantEnergy, style=color('green')); +plot2d(tEnergies, averageEnergy, style=color('blue')); +xtitle('Energies de ' + fileName, 'echantillons', 'energie'); +legend(['Energie instantanee', 'Energie moyenne'], 1, %t); + +scf(2); +subplot(3, 1, 1); +plot2d(tEnergies, instantEnergy, style=color('green')); +plot2d(tEnergies, averageEnergy, style=color('blue')); +xtitle('Energies of ' + fileName, 'samples', 'energy'); +legend(['Instant energy', 'Average energy'], 1, %t); + +subplot(3, 1, 2); +plot2d(tEnergies, energyVariance, style=color('purple')); +xtitle('Energy variance of ' + fileName, 'samples', 'variance'); + +subplot(3, 1, 3); +plot2d(tEnergies, beatConstants, style=color('red')); +xtitle('Evolution of the beat detection constant of ' + fileName, 'samples'); + +scf(3); +subplot(2, 1, 1); +plot2d(tEnergies, difference, style=color('cyan')); +plot2d(tEnergies, filteredDifference, style=color('red')); +plot2d([tEnergies(1) tEnergies(instantEnergies)], [0 0]); +xtitle('Difference between instant and ' + string(beatConstant) + ' * average energies of ' + fileName, 'samples'); +legend(['Difference', 'Average difference'], 1, %t); + +subplot(2, 1, 2); +plot2d(tEnergies, difference2, style=color('cyan')); +plot2d(tEnergies, filteredDifference2, style=color('red')); +plot2d([tEnergies(1) tEnergies(instantEnergies)], [0 0]); +xtitle('Difference between instant and computed constant * average energies of ' + fileName, 'samples'); + + +scf(4); +plot2d(tEnergies, ratio, style=color('orange'), logflag='nl'); +plot2d([tEnergies(1) tEnergies(instantEnergies)], [beatRatio beatRatio]); +xtitle('Ratio between instant and average energies of ' + fileName, 'samples'); +legend(['Ratio', 'Beat detection limit'], 4, %t); + +scf(5); +subplot(3, 1, 1); +plot2d(t, samples, style=color('grey')); +for i = [1 : beatIdx - 1], + xsegs([beat(i) beat(i)], [.2 0], color('blue')); +end +for i = [1 : beatIdx2 - 1], + xsegs([beat2(i) beat2(i)], [-.2 0], color('red')); +end +xtitle('Echantillons de ' + fileName , '', 'amplitude'); + +subplot(3, 1, 2); +plot2d(tEnergies, filteredDifference, style=color('blue')); +plot2d([tEnergies(1) tEnergies(instantEnergies)], [0 0]); +xtitle('Difference lissee entre l`energie instantanee et ' + string(beatConstant) + ' * l`energie moyenne de ' + fileName); + +subplot(3, 1, 3); +plot2d(tEnergies, filteredDifference2, style=color('red')); +plot2d([tEnergies(1) tEnergies(instantEnergies)], [0 0]); +xtitle('Difference lissee entre l`energie instantanee et C(i) * l`energie moyenne de ' + fileName); + diff --git a/amaroK/algo/beatTrackingSEF.sci b/amaroK/algo/beatTrackingSEF.sci new file mode 100755 index 0000000..8d05781 --- /dev/null +++ b/amaroK/algo/beatTrackingSEF.sci @@ -0,0 +1,210 @@ +function outSamples = beatTrackingSEF(fileName) + +// Spectrogramm filename +sgFile = fileName + '.sg'; +if fileinfo(sgFile) == [] then + +// Read samples +[x Fs nBits] = wavread(fileName); + +// We keep only the first channel +x = x(1, :); + +outSamples = x; + +// Computes size +[nChannels nSamples] = size(x); + +wlen = Fs / 100; +FFTSIZE = 512; + + +overlap = 2/3; +filter_order = 10; // must always be even +Nfen = wlen; // temporal analysis window length +Nover = round(Nfen*overlap); // overlap in samples +slen = 25e-3; // length in seconds for the widening +miniv = 1e-100; +minimo = 0.1; +medianSize = 150; + +c = 0; +beatLimit = 0.5; + +// calculate differentiator filter +m = calculate_differentiator(filter_order + 1); + +// hop size in time +Nhop = Nfen - Nover; +Fns = Fs / Nhop; + +// design of the low-pass smoothing IIR filter +alpha = 0.015; +betav = 0.075; +d = 5; +c = 1; +betav = betav * Fns; +alpha = alpha * Fns; + +// SmootingFilter => low-pass smoothing IIR filter definition +s=%s; +num = [ d + c, -(c * exp(-1 / betav) + d * exp(-1 / alpha)) ]; +den = [ 1, -(exp(-1 / alpha) + exp(-1 / betav)), exp(-(1 / alpha + 1 / betav)) ]; + +H_Smoothing = sum(num .* s^[size(num, 'c') - 1: -1 : 0]) / sum(den .* s^[size(den, 'c') - 1: -1 : 0]); + +SmootingFilter = syslin('d', H_Smoothing); + +// X_fm => spectral analysis +X_fm = specgram(Nover, FFTSIZE * 2, 'hn', x); +X_fm = X_fm( : , 1 : FFTSIZE); // we keep only one half of the spectrum + +// G_fm1 => Smooting along the time axis +for i = [1 : FFTSIZE], + G_fm1(:, i) = abs(flts(abs(X_fm(:, i)'), SmootingFilter))'; +end + +// G_fm2 => log compression +G_fm2 = G_fm1; +G_fm2(G_fm2 == 0) = miniv; +G_fm2 = 20 * log10(G_fm2); + +// First derivative +//H_m = [1, -1]; +//for i = [1 : FFTSIZE], +// der1(:, i) = abs(convol(H_m, G_fm2( : , i)'))'; +//end + +H_der = sum(m .* s^[size(m, 'c') - 1: -1 : 0]); +derFilter = syslin('d', s * H_der / s); +for i = [1 : FFTSIZE], + der1( : , i) = abs(flts(G_fm2( : , i)', derFilter))'; +end +ds = size(G_fm2, 'r') - size(der1, 'r'); +der1 = [zeros(ds, FFTSIZE) ; der1]; +der1(der1 < minimo) = 0; // remove small differentiation debris + +// eliminate (?) differentiator filter transient +//der1 = der1($ - size(G_fm2, 'r') + 1 : $, : ); + +// Frequency integration +for i = [1 : size(der1, 'r')], + v_k(1, i) = sum(der1(i, : )); +end + +//H_w = window('hn', 2 * slen * Fs + 1); +H_w = window('hn', 51); +H_w = H_w(26 : $); +wv_k = convol(H_w, v_k); +wv_k = wv_k(1 : size(v_k, 'c')); +bn = (~isinf(wv_k)) | (~isnan(wv_k)); // eliminate NaN and Inf if they exist +index = find(bn == %t); +wv_k2 = zeros(size(wv_k)); +wv_k2(index) = wv_k(index); + +g_k = zeros(1, size(wv_k2, 'c') + medianSize) +g_k(1, medianSize / 2 + 1 : $ - medianSize / 2) = wv_k2; + +t_k = zeros(wv_k2); +for i = [medianSize / 2 + 1 : size(g_k, 'c') - medianSize / 2], + t_k(1, i - medianSize / 2) = c * median(g_k(1, i - medianSize / 2 : i + medianSize / 2)); +end + +p_k = wv_k2 - t_k; +p_k(p_k < 0) = 0; + +// normalization +//E_fk = p_k / max(p_k); + +//win_size = 150; +//E_fk = [p_k zeros(1, win_size)]; +//for i = [1 : size(p_k, 'c')], +// E_fk(1, i) = E_fk(1, i) / max(E_fk(1, i : i + win_size - 1)); +//end +//E_fk = E_fk(1 : size(p_k, 'c')); +E_fk = p_k; + +win_size = 150; +m = [zeros(1, win_size / 2) p_k zeros(1, win_size / 2)]; +for i = [1 : size(p_k, 'c')], + m(1, i) = mean(m(1, i : i + win_size - 1)); +end +m = m(win_size / 2 + 1 : win_size / 2 + size(p_k, 'c')); + +// Scales +ts = [0 : size(x, 'c') - 1] / Fs; +f = [0 : FFTSIZE - 1] / (2 * FFTSIZE); +t = [1 : size(X_fm, 'r')]; +te = [0 : size(E_fk, 'c') - 1] * (size(x, 'c') / Fs) / size(E_fk, 'c'); +tb = round(te * Fs) + 1; + +// Beat detection +beatIdx = 1; +beat = []; +for i = [1 : size(E_fk, 'c') - 1], + if (E_fk(i) < m(i)) & (E_fk(i + 1) > m(i)) then + // draws a line + beat(beatIdx) = te(i); + beatIdx = beatIdx + 1; + + // put a beep (4000 Hz) in the signal + for j = [0 : Fs / 100], + outSamples(tb(i) + j) = .9 * sin(2 * %pi * (j * Fs / 4000)); + end + end +end + +save(sgFile, X_fm, beat, beatIdx, E_fk, m, G_fm2, der1, te, ts, f, outSamples, x); +else +load(sgFile, 'X_fm', 'beat', 'beatIdx', 'E_fk', 'm', 'G_fm2', 'der1', 'te', 'ts', 'f', 'outSamples', 'x'); +end + +if input('graph [y/n]', 'string') <> 'y' then + return; +end + +// Inversed gray colormap +cm = hotcolormap(128); +//cm = cm($:-1:1,:); + +// Graph plotting +scf(0); +subplot(2, 1, 1); +xtitle('Samples of ' + fileName, 'time (s)', 'amplitude'); + +subplot(2, 1, 2); +xtitle('SEF of ' + fileName, 'time (s)', 'magnitude'); + +subplot(2, 1, 1); +plot2d(ts, x, style=color('grey')); + +for i = [1 : beatIdx - 1], + xsegs([beat(i) beat(i)], [.2 -.2], color('red')); +end + +subplot(2, 1, 2); +//plot2d([te(1) te($)], [beatLimit beatLimit], style=color('blue')); +plot2d(te, E_fk, style=color('red')); +plot2d(te, m, style=color('blue')); + +if input('spectrogram [y/n]', 'string') <> 'y' then + return; +end + +scf(1); + +subplot(2, 1, 1); +xtitle('Smoothed & log compressed spectrogram of ' + fileName, 'time (s)', 'frequency'); +xset("colormap", cm); + +subplot(2, 1, 2); +xtitle('Derivated spectrogram of ' + fileName, 'time (s)', 'frequency'); +xset("colormap", cm); + + +subplot(2, 1, 1); +grayplot(te(10 : $ - 10), f, G_fm2(10 : $ - 10, : )); + +subplot(2, 1, 2); +grayplot(te(10 : $ - 10), f, der1(10 : $ - 10, : )); + diff --git a/amaroK/algo/calculate_differentiator.sci b/amaroK/algo/calculate_differentiator.sci new file mode 100755 index 0000000..962b3e9 --- /dev/null +++ b/amaroK/algo/calculate_differentiator.sci @@ -0,0 +1,35 @@ +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// * * * * * * * * * S U P P O R T F U N C T I O N * * * * * * * * * +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +// calculation of the differentiator filter according to Dvornikov's method +// based on interpolating polynomials +function maximum = calculate_differentiator(filter_order) + +n = fix(filter_order-1)/2; +if ~modulo(n,2) then error('Filter order must be even'); end +N = 21; +alpha = zeros(1,N); +k1 = 2; +k2 = N; +for m = [1 : n], + r1 = 1; + for k = [1: n], + if k == m then + r2 = 1; + else + r2 = 1 - (m/k)^2; + end + r1 = r1 * r2; + end + r1 = 1/(2*r1*m); + alpha(1,k1) = -r1; + alpha(1,k2) = r1; + k2 = k2 - 1; +end +size_alpha = size(alpha); +//disp(size_alpha); +//disp(alpha); +//disp(size_alpha(1) - n+1); +alpha = alpha(size_alpha(2) - n+1 : size_alpha(2)); +maximum = [alpha 0 - alpha(:,$:-1:1)]; + diff --git a/amaroK/algo/essai.m b/amaroK/algo/essai.m new file mode 100755 index 0000000..6ce517c --- /dev/null +++ b/amaroK/algo/essai.m @@ -0,0 +1,25 @@ +close all; + +tStart = 30000 +tEnd = 100000 + +A = [1 -0.9808] +B = [0.0095 0.0095] + +t = [tStart : tEnd]; + +figure(2); + +x = bbenassi_l(tStart : tEnd); +%x = sin(50 * 2 * pi * (t / 44100)) + sin(500 * 2 * pi * (t / 44100)); +y = filter(B, A, x); + +%clearplot; +hold off; + +subplot(2, 1, 1); +plot(t, x, "r"); + +subplot(2, 1, 2); +plot(t, y, "b"); + diff --git a/amaroK/algo/specgram.sci b/amaroK/algo/specgram.sci new file mode 100755 index 0000000..c6c781d --- /dev/null +++ b/amaroK/algo/specgram.sci @@ -0,0 +1,106 @@ +function [sm,cwp]=specgram(sec_step,sec_leng,wtype,x,y,wpar) +//=pspect(sec_step,sec_leng,wtype,x,y,wpar) +//Cross-spectral estimate between x and y if both are given +//and auto-spectral estimate of x otherwise. +//Spectral estimate obtained using the modified periodogram method +// x :data if vector, amount of input data if scalar +// y :data if vector, amount of input data if scalar +// sec_step :offset of each data window +// sec_leng :length of each data window +// wtype :window type (re,tr,hm,hn,kr,ch) +// wpar :optional window parameters +// : for wtype='kr', wpar>0 +// : for wtype='ch', 00 +// sm :power spectral estimate in the interval [0,1] +// cwp :unspecified Chebyshev window parameter +//! +//author: C. Bunks date: 14 Sept 1988 +// Copyright INRIA + + [lhs,rhs]=argn(0); + cross=0; + if sec_step20s) +% see function super_SEF for using a piecewise approach + + +x=x(:); % input signal +overlap = 2/3;%.75; +ignore = .5; +filter_order = 10; % must always be even +%Nfen = round(wlen/1000*Fs); % temporal analysis window length +Nfen = wlen; +Nover = round(Nfen*overlap); % overlap in samples +slen = 25e-3; % length in seconds for the widening +mini = 0; +minimo = 0.1; + +maxim = calculate_differentiator(filter_order+1); % calculate differentiator filter + +Nhop = Nfen-Nover; % hop size in time +Fns = Fs/(Nfen-Nover); + +% design of the low-pass smoothing IIR filter +alpha = 0.015; +beta=0.075; +d = 5; +c = 1; +beta = beta*Fns; +alpha = alpha*Fns; +num = [d+c -(c*exp(-1/beta)+d*exp(-1/alpha))]; +den = [1 -(exp(-1/alpha)+exp(-1/beta)) exp(-(1/alpha+1/beta))]; + + +[H,nu,temps]=specgram(x,FFTSIZE*2,Fs,hanning(Nfen),Nover); %spectral analysis +G = abs(H); +clear H; % free memory +Gf = 20*log10(abs(filter(num,den,G,[],2))); % smoothing and log compression +clear G; % free memory + +% * * * * MODIFICATION * * * * +% Gf = [fliplr(Gf(:,1:2*length(maxim))) Gf]; +% * * * * * * * * * * * * * * * + +dGf = filter(maxim,1,Gf,[],2); % derivative calculation +dGf(dGf61 D78 +D<137013F8A213F013E01300A6EA0F80EA1FC0EA31E01261A2EAC3C01203EA0780A3EA0F +001308EA1E18A213301370EA0FE0EA07800D1D7D9C16>105 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fc cmr5 5 2 +/Fc 2 51 df48 D50 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fd cmsy9 9 4 +/Fd 4 55 df<007FB712FCB812FEA26C16FC2F047A943C>0 D<0060153000F815F86C14 +01007EEC03F06CEC07E06C6CEB0FC06C6CEB1F806C6CEB3F006C6C137E6C6C5B6C6C485A +90387E03F06D485A90381F8FC090380FDF806DB4C7FC6D5A6D5AA2497E497E90380FDF80 +90381F8FC090383F07E090387E03F0496C7E48486C7E4848137E48487F4848EB1F804848 +EB0FC048C7EA07E0007EEC03F048EC01F848140000601530252475A43C>2 +D<130E131FA639700E01C000F8EB03E000FE130F00FF131F397F8E3FC0391FEEFF003803 +FFF8C613E0EB3F80A2EBFFE0000313F8381FEEFF397F8E3FC039FF0E1FE000FE130F00F8 +13030070EB01C0D8001FC7FCA6130E1B207BA226>I<1630167816F8A2ED01F0A2ED03E0 +A2ED07C0A2ED0F80A2ED1F00A2153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24AC7FCA2 +143EA25CA25CA2495AA2495AA2495AA2495AA249C8FCA2133EA25BA25BA2485AA2485AA2 +485AA2485AA248C9FCA2123EA25AA25AA25A1260254675B500>54 +D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fe cmex10 10 2 +/Fe 2 89 df80 D88 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Ff cmr6 6 6 +/Ff 6 62 df<130C1338137013E0EA01C0EA038013005A120EA25AA25AA312781270A312 +F0AB1270A312781238A37EA27EA27E7E1380EA01C0EA00E013701338130C0E317AA418> +40 D<12C012707E7E7E7E7E1380EA01C0A2EA00E0A21370A313781338A3133CAB1338A3 +13781370A313E0A2EA01C0A2EA038013005A120E5A5A5A12C00E317CA418>I<13FF0003 +13C0380781E0380F00F0001E137848133CA248131EA400F8131FAD0078131EA2007C133E +003C133CA26C13786C13F0380781E03803FFC0C6130018227DA01E>48 +D<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>II61 +D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fg cmsy6 6 1 +/Fg 1 1 df0 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fh cmmi6 6 15 +/Fh 15 119 df<140C5CA45CA45CA4EB0FFE90387FFF809038F0C3C03903C0C1E0390781 +80F0D80F011370001E1478123CEB03001278A3D8F00613F0A215E0140139700C03C00078 +14800038EB0700003C131E381E187C3807FFF06C13C0D80018C7FC5BA45BA45B1D2E7DA2 +25>30 D<140C141C143C1438A21478147014F014E0130114C0A21303148013071400A25B +130E131E131CA2133C13381378137013F05BA212015B12035BA2120790C7FC5A120EA212 +1E121C123C123812781270A212F05AA216317CA420>61 D78 D99 D101 D<1338137CA2137813701300A7EA0780EA1FC0EA38E01230EA60F0EAC1E0 +A3EA03C0A3EA0780A2EA0F0013041306EA1E0CA21318121CEA1E70EA0FE0EA07800F237D +A116>105 D<1418143C147CA214381400A7EB0780EB1FE01338EB60F013C0A2EA0180A2 +380001E0A4EB03C0A4EB0780A4EB0F00A4131EA21238EA783CEAF8381378EA70F0EA7FC0 +001FC7FC162D81A119>I<13F8EA0FF0A21200A2485AA4485AA43807801E147FEB81C3EB +8387380F060F495A1318EB700E4848C7FCA213FCEA1E7EEA3C0F80EB0781158039780F03 +00A21402EB070600F0138CEB03F8386000F019247CA221>I<000F13FC381FC3FF3931C7 +07803861EC0301F813C0EAC1F0A213E03903C00780A3EC0F00EA0780A2EC1E041506D80F +00130C143C15181538001EEB1C70EC1FE0000CEB07801F177D9526>110 +DI<3801E0 +1F3903F07FC0390639C1E0390C3F80F0EB3E00001814F8013C137815F8C65AA49038F001 +F0A3EC03E0D801E013C0EBF00715809038F80F003803DC3CEBCFF8EBC7E001C0C7FC485A +A448C8FCA2EA7FF012FF1D20809520>I<380F01F0381FC7F83831CE1CEA61F8EBF03C00 +C1137C13E014383803C000A4485AA448C7FCA4121EA2120C16177D951D>114 +D<133013785BA4485AA4485AB51280A23803C000485AA448C7FCA4121EA25B1480383C03 +001306A25BEA1C38EA0FF0EA07C011217D9F18>116 DI<3807800E380FE01FEA38F012 +300060130F12C01407EAC1E000011306EA03C0A33807800CA214081418A21430146014C0 +EA03C13801FF00EA007E18177D951F>I E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fi cmr9 9 10 +/Fi 10 94 df<011FB512F0A39026001FF0C7FC6E5AA7EC7FF80107B57E90393FCFEFF0 +9039FE0FE1FCD803F8EBE07FD807E0EC1F80D80FC0EC0FC0001F16E0D83F80EC07F0007F +16F8010014034816FCA76C16F801801407003F16F0D81FC0EC0FE0000F16C0D807E0EC1F +80D803F8EC7F00D800FEEBE1FC90393FCFEFF00107B512809026007FF8C7FCEC0FE0A74A +7E011FB512F0A32E337CB237>8 D<14C01301EB0380EB0F00130E5B133C5B5BA2485A48 +5AA212075B120F90C7FC5AA2121E123EA3123C127CA55AB0127CA5123C123EA3121E121F +A27E7F12077F1203A26C7E6C7EA213787F131C7F130FEB0380EB01C01300124A79B71E> +40 D<12C07E1270123C121C7E120F6C7E6C7EA26C7E6C7EA27F1378137C133C133EA213 +1E131FA37F1480A5EB07C0B0EB0F80A514005BA3131E133EA2133C137C137813F85BA248 +5A485AA2485A48C7FC120E5A123C12705A5A124A7CB71E>I<156015F0B3A4007FB812C0 +B912E0A26C17C0C800F0C8FCB3A4156033327CAB3C>43 D48 D<13075B5B137FEA07FFB5FC13BFEAF83F1200B3B3A2 +497E007FB51280A319327AB126>II<007FB8 +12C0B912E0A26C17C0CCFCAC007FB812C0B912E0A26C17C033147C9C3C>61 +D91 D93 D E +%EndDVIPSBitmapFont +%DVIPSBitmapFont: Fj cmmi9 9 31 +/Fj 31 121 df12 D<013FB6128090B712C01203481680481600271F00 +C018C7FC001C1438EA38010070143000601380EAE00300001470A2EB0700A25B15F0130E +131EA2013E7F133C137CA213FC497FA2000180A2485A157EA2D801C013382A217E9F2C> +25 D<01F014E0D803FCEB01F0D8071EEB03F8EA0E1F121C0038EB800100301400013F14 +78007090C7FC006015385BD8E07E14301240EA00FE491470000115605BA216E0000315C0 +4913011680150316005D150E150C151C00015C6D5B6C6C5B90387E03C0D91FFFC7FCEB03 +FC25227EA02A>29 D<150C151CA21518A21538A21530A21570A21560A215E0A25DA21401 +A2EC1FF891B5FC903907F38FC090391F8383E090397E0301F801FCEB00FC2601F007137C +D803E0143E3807C006000F153F261F800E131FEA3F00140C127E021C133F12FE481318A2 +0238137F167E48133016FC1470ED01F86C90386003F0007C15E09138E007C06CEC0F8000 +3F9038C03F00D81F80137E3907C1C1F83903F1CFE0C6B5C7FCEB1FF8EB0380A291C8FCA2 +5BA21306A2130EA2130CA2131CA2131828447DB32E>I<17E001C0EC01F00001ED03F848 +5A90C8FC48150100061500000E1678120C001C163812180038010314300030497EA21770 +0070010F1460006091C7FC17E0A2021EEB01C012E0EE0380021C13076C013C1400027E5B +6C01FE133E267801FF137ED87E07EB81FC3A7FFFEFFFF802CF5B6C018F5B261FFE075B6C +486C90C7FC3903F000FC2D2280A030>33 D<123C127EB4FCA21380A2127F123D1201A412 +031300A25A1206120E120C121C5A5A126009177A8715>59 D<1530157815F8A215F01401 +A215E01403A215C01407A21580140FA215005CA2143EA2143C147CA2147814F8A25C1301 +A25C1303A25C1307A2495AA291C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A2 +5B1203A2485AA25B120FA290C8FC5AA2121E123EA2123C127CA2127812F8A25A12601D4B +7CB726>61 D<127012FCB4FCEA7FC0EA1FF0EA07FCEA01FF38007FC0EB1FF0EB07FCEB01 +FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1FF0ED07FCED01FF9238007FC0EE1F +F0EE07FCEE01FEA2EE07FCEE1FF0EE7FC0923801FF00ED07FCED1FF0ED7FC04A48C7FCEC +07FCEC1FF0EC7FC04948C8FCEB07FCEB1FF0EB7FC04848C9FCEA07FCEA1FF0EA7FC048CA +FC12FC12702F2E7AA93C>I<16035E5EA24C7EA2163F167FA216FFA2ED01BFED033F8315 +06161F150C1518A215301570156015C083EC01800203130F15001406A25C141C14184A80 +A2027FB5FC91B6FCA2903901800007A249C7FC1306835B16035B5B1370136013E01201D8 +07F04A7EB549B512F0A25B34367DB53A>65 D<010FB612F817FF18C0903B003FC0003FE0 +EF0FF0EF03F84B6D7E717E027F157F8492C81380A24A151F19C05CA21301A25CA2130318 +3F5CA2130719804A157FA2130F19004A5D60011F1501605C4D5A013F5E17074A4A5A6001 +7F4B5A4DC7FC91C8127E4C5A494A5AEE0FF049EC3FC000014AB4C8FCB712FC16F093C9FC +3A337DB23F>68 D<010FB712FEA218FC903A003FC000031700187C4B143CA2027F151C18 +1892C8FCA25CA24A1303A201014A1338040613304A1500160E13035E4A137C91B512FC5B +5EECF0001638130F16305C1860011F027013E0046013C04A140104001380133F17034A15 +005F017F150EA291C8121E5F49157C5F4914030001ED1FF0B8FCA25F37337DB239>I<01 +07B512E05BA29039001FF0005DA25DA2143FA25DA2147FA292C7FCA25CA25CA21301A25C +A21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA291C8FC5B007F13 +FEB5FCA223337EB222>73 D<010FB500C090B5FCA39026003FE0C7EA1FE04B1500183E4B +143818F0027FEC01C04D5A92C7000EC7FC5F4A5C17E04A495A4C5A0101020EC8FC5E4A5B +16F0010313011503ECF80F4B7E0107133FEDF3FCECF1C39138F381FE90380FF7019138FC +00FF5C5C49486D7EA24A6D7EA2013F6E7EA24A6D7EA2137F707E91C7FC707E5B707E5B00 +014B7EB500FC013F13F85EA240337DB241>75 D<90260FFFE049B5FCA281D9001F913800 +0FE04A6CEC07801900DA33FC1406A2DA71FE140E180C146081DAE07F141C701318ECC03F +82010116386F6C133014806F7E010316706F6C136014001503496E13E003015C01068015 +00010EECFF0160010CEC7F81A2011CEC3FC395C7FC0118EC1FE3A20138EC0FF717F60130 +140717FE017014035F01601401A213E0705A1201D807F01578B57E1730A240337DB23D> +78 D<03FF13180207EBE038021FEBF87891397F00FCF802FCEB1FF0D901F0130F494813 +0749481303494814E0A249C71201A2013E15C0A3137E1780A2017F91C7FC8080EB3FF014 +FF15F06D13FE6D6D7E6D806D80010080020F7F1400150F6F7E150315011500A2120CA200 +1C5D1218A2150100385D003C14035E4B5A007E4A5A007F141F6D49C7FCD87BE0137C39F9 +FC03F839F07FFFE0D8E01F138026C003FEC8FC2D377CB42F>83 D<0003B812F05A18E090 +3AF0007F000FD80F8049130390C71401000E5C48EE00C01401121800384A1301A2003001 +031580127000605CA20207140300E01700C74990C7FCA2140FA25DA2141FA25DA2143FA2 +5DA2147FA292C9FCA25CA25CA21301A25CA21303A25C497E001FB512FEA334337FB22D> +I<267FFFF8ECFFFEB5FCA2000390C8EA1FE06C48ED0F006C6C151E171C5F6D6C14605F6D +6C13014C5A4CC7FC6D6C13065E5E6D6C5B5E6D6C13E04B5A4B5AD903FC90C8FC15065D6D +6C5A5D6D6C5A15E05D6E5A92C9FCA2147E14FEA35C1301A35C1303A35C1307A2130F0007 +B512E0A337337EB22D>89 D<147F903803FFC090380FC0F090383F0038137C4913F83801 +F0013803E0031207EA0FC090388001F0001F90C7FC123F90C8FCA25A127EA45AA3127C15 +0C151C15386C147015E06CEB03C0390F800F003807C07E3801FFF038007F801E227EA021 +>99 D<14FE903807FF8090381F03C090387C01E03801F800485A485A485A485A1401D83F +0013C01403007EEB0F80ECFE00387FFFF8B5128000FCC8FCA45AA415186C1438007C1470 +15E0003CEB01C0003EEB07806CEB1E00380F80FC3803FFE0C690C7FC1D227DA024>101 +D103 +D105 D<151C157E15FEA315FC15781500AA143FECFFC0903801C3E0EB038390380701F0 +130EEB0C03131C1338133014071370012013E01300140FA215C0A2141FA21580A2143FA2 +1500A25CA2147EA214FEA25CA21301A25CA21303001C5B127F495AA238FE0FC0495AD878 +3FC7FCEA707CEA3FF0EA0FC01F4281B11F>II109 DI<147F90 +3803FFC090380FC1F090383F00F8017C137C497F485A48487F1207485A5B001F1580123F +90C7FCED3F005A127EA25D157E5A15FE5D007C5C14014A5A5D6C495A4A5A6C49C7FC380F +807E3807C1F83801FFE06C6CC8FC21227EA025>I<011F131F90397FC07FE09039E3E1E0 +F09039C3E380783A01C1F7007CD981FE133CD983FC133E00035BEB03F0163FEA07071206 +00025B1200010F147F167E5CA2011F14FE16FC5CA2013FEB01F8A291380003F016E04913 +07ED0FC002801380ED1F009038FFC03E9038FEE0F89038FC7FE0EC1F80000190C8FCA25B +A21203A25BA21207A25BB57EA3283083A027>I<3903E003E0390FF81FF8391C7C3C1C00 +18EB703E39383EE0FE38303FC0EB7F800070EB00FCEA607E157000E01400EAC0FEEA40FC +1200A212015BA312035BA312075BA3120F5BA3121F5B0007C8FC1F227EA023>114 +DII<90391F801F8090397FE07FE090 +39E0F0E0703A01C0F9C0F83903807D833807007F000E1403000C15F0001C137E0018EC01 +C002FEC7FC00385B1210C7FC13015CA31303A25C1640010714E016C0001C5B007E140101 +0F148000FE1403011FEB0700011B130E39F839F01C397070F878393FE07FE0390F801F80 +25227EA02C>120 D E +%EndDVIPSBitmapFont +/Fk 103[45 152[{TeXBase1Encoding ReEncodeFont}1 74.7198 +/Courier rf /Fl 104[75 2[33 33 24[33 37 37 54 37 37 21 +29 25 37 37 37 37 58 21 37 21 21 37 37 25 33 37 33 37 +33 3[25 1[25 1[54 1[71 54 1[46 42 50 54 42 54 54 66 46 +54 29 25 54 54 42 46 54 50 50 54 3[42 1[21 21 37 37 37 +37 37 37 37 37 37 37 21 19 25 19 42 1[25 25 25 35[42 +42 2[{TeXBase1Encoding ReEncodeFont}77 74.7198 /Times-Roman +rf /Fm 134[37 37 54 1[42 25 29 33 42 42 37 42 62 21 1[25 +21 42 37 25 33 42 33 1[37 8[54 75 54 54 50 42 54 1[46 +58 54 71 50 58 1[29 58 1[46 50 54 54 50 54 6[25 1[37 +37 37 37 37 37 37 37 1[21 19 25 45[{TeXBase1Encoding ReEncodeFont}55 +74.7198 /Times-Bold rf /Fn 99[72 34[50 2[50 50 1[39 33 +1[50 50 50 78 28 1[28 28 2[33 44 50 44 1[44 10[72 3[66 +1[55 72 72 1[61 2[33 2[55 61 2[66 72 92 5[28 50 2[50 +50 50 50 50 1[50 1[25 33 25 44[{TeXBase1Encoding ReEncodeFont}41 +99.6264 /Times-Roman rf /Fo 137[44 1[28 39 39 1[50 50 +50 4[28 50 2[44 50 2[50 7[55 11[83 55 1[44 29[25 44[{ +TeXBase1Encoding ReEncodeFont}17 99.6264 /Times-Italic +rf /Fp 166[72 2[72 72 66 55 72 1[61 78 72 94 66 2[39 +78 78 61 66 72 72 66 72 19[33 45[{TeXBase1Encoding ReEncodeFont}21 +99.6264 /Times-Bold rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin +%%PaperSize: A4 + +%%EndSetup +%%Page: 1 1 +1 0 bop 2 260 a Fp(SUPPRESSION)26 b(OF)e(PHASINESS)h(FOR)g(TIME-SCALE)i +(MODIFICA)-9 b(TIONS)23 b(OF)h(SPEECH)560 370 y(SIGN)n(ALS)h(B)m(ASED)h +(ON)e(A)h(SHAPE)g(INV)-13 b(ARIANCE)24 b(PR)m(OPER)l(TY)1255 +593 y Fo(J)n(oseph)g(di)h(Martino,)e(Yves)j(Laprie)1 +814 y Fn(LORIA,)f(B.P)h(239)e(V)-11 b(and\234uvre-les-Nanc)o(y)24 +b(54506)g(France)i(E-mail:)k(jdm@loria.fr)24 b(or)g(laprie@loria.fr)599 +1125 y Fm(ABSTRA)l(CT)-61 1360 y Fl(T)m(ime-scale)61 +b(modi\002cations)g(of)g(speech)h(signals,)72 b(based)62 +b(on)-186 1446 y(frequenc)o(y-domain)23 b(techniques,)f(are)f(hampered) +h(by)f(tw)o(o)g(important)g(ar)o(-)-186 1533 y(tif)o(acts)35 +b(which)i(are)e(\223phasiness\224)j(and)e(\223transient)g +(smearing\224.)75 b(The)o(y)-186 1620 y(correspond)36 +b(to)e(the)g(destruction)g(of)g(the)g(shape)h(of)f(the)g(original)g +(sig-)-186 1707 y(nal,)48 b(i.e.)94 b(the)43 b(de-synchronization)i +(between)f(the)e(phases)i(of)f(fre-)-186 1793 y(quenc)o(y)f +(components.)89 b(This)40 b(paper)h(describes)g(an)g(algorithm)f(that) +-186 1880 y(preserv)o(es)i(the)f(shape)h(in)m(v)n(ariance)g(of)g +(speech)g(signals)f(in)g(the)h(con-)-186 1967 y(te)o(xt)g(of)f(a)h +(phase)h(v)o(ocoder)l(.)93 b(Phases)42 b(are)g(corrected)g(at)g(the)g +(onset)-186 2054 y(of)d(each)h(v)o(oiced)f(re)o(gion.)84 +b(Modi\002ed)40 b(signals,)k(e)n(v)o(en)c(for)f(lar)o(ge)g(e)o(x-)-186 +2141 y(pansion)45 b(f)o(actors,)50 b(are)44 b(of)g(high)g(quality)g +(and)h(free)e(from)h(transient)-186 2227 y(smearing)e(or)f(phasiness.) +91 b(A)41 b(demonstration)h(is)f(proposed)i(in)e(the)-186 +2314 y(web)25 b(page:)34 b Fm(http://www)-5 b(.loria.fr/)p +Fk(\230)p Fm(jdm/PhaseV)e(ocoder/index.html)-186 2401 +y Fl(where)19 b(some)h(audio)f(\002les)g(can)g(be)g(do)n(wn-loaded.)452 +2734 y Fm(1.)45 b(INTR)n(ODUCTION)-186 2945 y Fl(T)m(ime-scale)17 +b(modi\002cations)g(of)g(speech)g(ha)o(v)o(e)g(been)h(studied)f(for)f +(a)h(decade)-186 3032 y(in)29 b(time-domain)i([9])e([10)q(])g(as)g +(well)g(as)h(in)f(frequenc)o(y-domain)j(frame-)-186 3118 +y(w)o(orks)21 b([7])f([4)q(].)27 b(T)m(ime-domain)21 +b(techniques)h(do)f(not)g(allo)n(w)f(lar)o(ge)g(e)o(xpan-)-186 +3205 y(sion)h(f)o(actors.)29 b(Furthermore,)21 b(the)o(y)h(generate)f +(artif)o(acts)g(lik)o(e)g(\223w)o(arbling\224,)-186 3292 +y(and)j(\223tempo)f(modulation\224)i([1].)35 b(On)23 +b(the)g(contrary)-5 b(,)25 b(frequenc)o(y-domain)-186 +3379 y(techniques,)j(especially)f(phase)f(v)o(ocoder)h(techniques,)h +(allo)n(w)e(lar)o(ge)f(e)o(x-)-186 3465 y(pansion)20 +b(f)o(actors,)f(b)o(ut)g(the)o(y)g(suf)n(fer)g(from)h(a)o(wkw)o(ard)f +(artif)o(acts,)g(especially)-186 3552 y(\223phasiness\224)j(and)f +(\223transient)g(smearing\224,)h(which)f(ha)o(v)o(e)g(hampered)g(their) +-186 3639 y(e)o(xploitation.)-61 3751 y(T)m(ransient)f(smearing)h(is)f +(percei)n(v)o(ed)h(as)g(a)f(loss)g(of)g(percussi)n(v)o(eness)i(as)-186 +3838 y(in)30 b(piano)g(attacks,)i(for)e(instance,)i(and)e(phasiness)h +(or)f(re)n(v)o(erberation)h(is)-186 3925 y(percei)n(v)o(ed)22 +b(as)f(a)g(\223choral\224)h(ef)n(fect.)30 b(These)21 +b(tw)o(o)g(essential)g(characteristics)-186 4012 y(of)28 +b(time-scaling)g(by)g(phase-v)o(ocoder)i(techniques)f(are)e(due)i(to)e +(the)h(loss)-186 4098 y(of)19 b(the)g(original)h(phase)g(trajectories)f +(\(Laroche)g([1)q(])f(has)i(proposed)h(an)e(e)o(x-)-186 +4185 y(planation)i(of)g(this)f(phenomenon\).)30 b(W)m(ith)19 +b(the)i(aim)f(of)g(eliminating)h(these)-186 4272 y(artif)o(acts)h +(Quatieri)h(proposed)h(a)f(shape)h(in)m(v)n(ariant)f(technique)h([2],)f +(in)g(the)-186 4359 y(frame)n(w)o(ork)18 b(of)e(the)h(well)f(kno)n(wn)i +(sinusoidal)f(model)g([3])g([4].)22 b(The)16 b(results)-186 +4445 y(were)j(encouraging)i(b)o(ut)e(not)g(completely)g(satisf)o +(actory)-5 b(.)-61 4558 y(Our)14 b(study)h(has)g(been)g(carried)g(out)f +(in)h(the)f(frame)n(w)o(ork)i(of)e(the)h(Portnof)n(f-)-186 +4645 y(Senef)n(f)23 b(phase-v)o(ocoder)i(and)e(a)g(pre)n(vious)h(w)o +(ork)g(on)f(this)g(subject)g(can)h(be)-186 4731 y(found)g(in)g([5])f +(that)g(describes)h(a)f(rob)o(ust)h(phase)g(unwrapping)h(algorithm.) +-186 4818 y(This)g(impro)o(v)o(ed)i(phase)f(v)o(ocoder)g(allo)n(ws)g +(time-scale)f(modi\002cations)h(of)-186 4905 y(good)g(quality)f(to)g +(be)g(achie)n(v)o(ed.)42 b(Ne)n(v)o(ertheless,)27 b(the)e(generated)h +(signals)-186 4992 y(were)d(corrupted)g(by)h(an)f(audible)g(phasiness)h +(artif)o(act.)34 b(In)23 b(this)f(paper)h(we)-186 5078 +y(propose)h(techniques)g(which)e(eliminate,)h(in)g(a)f(great)h +(proportion,)h(phasi-)-186 5165 y(ness)19 b(and)f(transient)h(smearing) +g(ef)n(fects)f(by)g(preserving)i(the)e(shape)h(in)m(v)n(ari-)-186 +5252 y(ance)h(property)g(of)e(speech)j(signals.)i(This)c(means)g(that)g +(the)g(shapes)h(of)f(the)-186 5339 y(time-scaled)g(and)h(original)f +(signals)g(are)g(quite)g(similar)l(.)2128 1125 y Fm(2.)45 +b(THE)18 b(POR)m(TNOFF-SENEFF)e(PHASE-V)m(OCODER)2755 +1212 y(APPR)n(O)m(A)l(CH)1975 1382 y Fl(In)22 b(this)f(section)h(we)g +(will)e(brie\003y)i(describe)g(the)f(Portnof)n(f-Senef)n(f)h(phase-) +1975 1468 y(v)o(ocoder)d(technique)g(used)f(in)f([5].)23 +b(The)17 b(Portnof)n(f-Senef)n(f)h(phase-v)o(ocoder)1975 +1555 y(equations)32 b(for)d(speech)i(analysis/synthesis)h(based)e(on)h +(the)f(short)g(term)1975 1642 y(F)o(ourier)19 b(analysis)g(are)2100 +1732 y(the)g Fm(Analysis)g(equation)p Fl(:)2302 1916 +y Fj(Y)d Fi(\()p Fj(n;)e(!)2522 1925 y Fh(k)2559 1916 +y Fi(\))22 b(=)f Fj(A)p Fi(\()p Fj(\014)t(n;)13 b(!)2955 +1925 y Fh(k)2993 1916 y Fi(\))p Fj(exp)p Fi([)p Fj(j)t(\035)s +Fi(\()p Fj(\014)t(n;)f(!)3447 1925 y Fh(k)3485 1916 y +Fi(\))p Fj(=\014)t Fi(])240 b Fl(\(1\))2100 2046 y(and)20 +b(the)f Fm(Synthesis)e(equation)p Fl(:)2438 2295 y Fj(s)p +Fi(\()p Fj(n)p Fi(\))k(=)2708 2246 y(1)p 2692 2278 70 +4 v 2692 2345 a Fj(N)2784 2193 y Fh(N)5 b Fg(\000)p Ff(1)2790 +2218 y Fe(X)2795 2392 y Fh(k)q Ff(=0)2929 2295 y Fj(Y)17 +b Fi(\()p Fj(n;)c(!)3149 2304 y Fh(k)3187 2295 y Fi(\))k +Fd(\003)g Fi(\()p Fd(\000)p Fi(1\))3447 2259 y Fh(k)3861 +2295 y Fl(\(2\))2100 2508 y(where)24 b Fj(!)2354 2517 +y Fh(k)2421 2508 y Fi(=)30 b(2)p Fj(\031)s(k)r(=)l(N)8 +b Fl(,)24 b Fj(N)32 b Fl(is)23 b(the)g(number)i(of)e(points)h(of)f(the) +h(DFT)1975 2595 y(and)c Fj(\014)j Fl(is)18 b(the)h(e)o(xpansion)i(f)o +(actor)l(.)2100 2685 y Fj(A)p Fi(\()p Fj(n;)13 b(!)2316 +2694 y Fh(k)2354 2685 y Fi(\))29 b Fl(and)g Fj(\035)s +Fi(\()p Fj(n;)13 b(!)2752 2694 y Fh(k)2790 2685 y Fi(\))29 +b Fl(are)g(the)g(amplitude)h(spectrum)g(and)g(the)1975 +2772 y(unwrapped)f(phase)f(of)f(the)g(original)g(signal)g(at)g(time)g +Fj(n)g Fl(and)g(frequenc)o(y)1975 2858 y Fj(!)2023 2867 +y Fh(k)2061 2858 y Fl(.)57 b(F)o(or)29 b(the)h(equation)h(\(2\))f(to)g +(be)h(v)n(alid)f Fj(\031)i Fl(discontinuities)f(must)f(be)1975 +2945 y(restored)17 b(in)f(the)g(unwrapped)i(phase)f(\([8])e(page)i +(568\).)23 b(Good)17 b(unwrapping)1975 3032 y(procedures)k(are)e +(described)h(in)f([5])f(and)i(\([6],)e(page)i(508\).)2100 +3122 y(Equation)32 b(\(2\))f(simply)h(e)o(xpresses)g(the)f(v)n(alue)h +(of)g(the)f(synthesized)1975 3209 y(sample)g(in)g(the)f(middle)h(of)f +(the)h(analyzing)h(windo)n(w)-5 b(.)58 b(Therefore,)34 +b(the)1975 3295 y(modi\002ed)28 b(DFT)d(coef)n(\002cients)j(are)e +(summed)i(in)f(phase)h(opposition.)48 b(As)1975 3382 +y(in)20 b([8])f(the)g(system)h(described)g(in)g(Fig.)e(1)i(operates)g +(at)f(the)g(sampling)h(rate,)1975 3469 y(i.e.)j(each)c(box)h(is)f +(updated)h(with)f(each)g(ne)n(w)g(incoming)h(sample.)2100 +3559 y(W)-6 b(e)16 b(chose)i(a)e(Lagrange)i(\002lter)e(for)g(the)h +(interpolation)h(because)g(it)e(pre-)1975 3646 y(serv)o(es)29 +b(original)f(points)h(\(i.e.)50 b(DFT)27 b(coef)n(\002cients)i(in)f +(the)g(form)h(of)f(real)1975 3733 y(and)18 b(imaginary)f(part\))g(and)g +(does)g(not)g(introduce)h(an)o(y)f(modi\002cation)g(in)g(the)1975 +3819 y(phase.)34 b(From)22 b(a)g(practical)g(point)h(of)f(vie)n(w)-5 +b(,)23 b(the)f(spectral)g(amplitude)h(is)f(a)1975 3906 +y(slo)n(wly)d(v)n(arying)h(v)n(ariable)g(and)f(can)h(be)f(k)o(ept)g +(constant)h(o)o(v)o(er)f(a)g(short)g(time)1975 3993 y(interv)n(al.)k +(This)17 b(can)h(substantially)g(reduce)h(the)f(amount)g(of)g +(computation.)2169 4214 y Fm(3.)45 b(CORRECTION)18 b(OF)h(PHASE)f +(COEFFICIENTS)1975 4384 y Fl(Pro)o(vided)30 b(that)f(the)h(unwrapping)h +(procedure)g(gi)n(v)o(es)f(good)g(results,)i(the)1975 +4471 y(equations)19 b(mentioned)g(abo)o(v)o(e)g(allo)n(w)f(a)f(quite)h +(ef)n(\002cient)g(time-scale)f(mod-)1975 4558 y(i\002cation)23 +b(algorithm)f(to)h(be)g(implemented.)34 b(This)22 b(algorithm)h(turned) +g(out)1975 4645 y(to)d(produce)h(quite)g(good)g(results)e(e)n(v)o(en)i +(for)f(lar)o(ge)f(e)o(xpansion)j(f)o(actors)e([5].)1975 +4731 y(Ho)n(we)n(v)o(er)m(,)d(the)e(synthesized)i(speech)g(w)o(a)o(v)o +(es)e(were)g(not)h(free)f(of)h(phasiness,)1975 4818 y(particularly)23 +b(for)e(lar)o(ge)h(e)o(xpansion)i(f)o(actors.)32 b(In)22 +b(order)g(to)g(eliminate)g(this)1975 4905 y(artif)o(act,)h(we)f +(decided)i(to)e(implement)h(an)f(algorithm)h(that)f(preserv)o(es)i(the) +1975 4992 y(shape)d(of)e(the)g(signal)h(during)g(the)g(v)o(oiced)f +(portions)h(of)g(the)f(analyzed)i(sig-)1975 5078 y(nal.)36 +b(The)23 b(shape)h(in)m(v)n(ariance)g(property)g(can)f(be)h(applied)g +(at)e(each)i(period)1975 5165 y(of)c(v)o(oiced)g(speech)h(or)f(only)g +(at)g(the)f(onset)i(of)e(v)o(oiced)h(re)o(gions.)27 b(It)19 +b(appears)1975 5252 y(that)f(the)h(drift)e(of)i(phase)g(is)f(suf)n +(\002ciently)g(small)g(to)g(require)h(the)f(correction)1975 +5339 y(of)28 b(phase)g(only)g(at)g(the)f(onsets)h(of)g(v)o(oiced)g(re)o +(gions.)49 b(These)28 b(onsets)g(are)p eop +%%Page: 2 2 +2 1 bop -9 1417 a @beginspecial 0 @llx 0 @lly 1138 @urx +578 @ury 4535 @rwi 1700 @rhi @setspecial +%%BeginDocument: ./fig1_2001.eps +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: fig1_2001.eps +%%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 +%%CreationDate: Mon Oct 30 09:48:18 2000 +%%For: jdm@craffe.loria.fr (Joseph Di-Martino) +%%Orientation: Portrait +%%BoundingBox: 0 0 1138 578 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-124.0 774.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/reencdict 12 dict def /ReEncode { reencdict begin +/newcodesandnames exch def /newfontname exch def /basefontname exch def +/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def +basefontdict { exch dup /FID ne { dup /Encoding eq +{ exch dup length array copy newfont 3 1 roll put } +{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall +newfont /FontName newfontname put newcodesandnames aload pop +128 1 255 { newfont /Encoding get exch /.notdef put } for +newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat +newfontname newfont definefont pop end } def +/isovec [ +8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde +8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis +8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron +8#220 /dotlessi 8#230 /oe 8#231 /OE +8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling +8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis +8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot +8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus +8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph +8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine +8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf +8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute +8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring +8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute +8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute +8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve +8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply +8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex +8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave +8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring +8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute +8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute +8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve +8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide +8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex +8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def +/Times-Roman /Times-Roman-iso isovec ReEncode +/Times-Bold /Times-Bold-iso isovec ReEncode +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n -1000 13900 m -1000 -1000 l 22022 -1000 l 22022 13900 l cp clip + 0.06000 0.06000 sc +% Polyline +15.000 slw +n 9300 6300 m 9300 3900 l gs col0 s gr +% Polyline +gs clippath +10206 3840 m 10446 3900 l 10206 3960 l 10530 3960 l 10530 3840 l cp +clip +n 9300 3900 m 10500 3900 l gs col0 s gr gr + +% arrowhead +n 10206 3840 m 10446 3900 l 10206 3960 l col0 s +% Polyline +n 10500 3300 m 12300 3300 l 12300 4500 l 10500 4500 l cp gs col0 s gr +% Polyline +gs clippath +12681 3840 m 12921 3900 l 12681 3960 l 13005 3960 l 13005 3840 l cp +clip +n 12300 3900 m 12975 3900 l gs col0 s gr gr + +% arrowhead +n 12681 3840 m 12921 3900 l 12681 3960 l col0 s +% Polyline +n 12900 3300 m 15600 3300 l 15600 4500 l 12900 4500 l cp gs col0 s gr +% Polyline +gs clippath +15981 3840 m 16221 3900 l 15981 3960 l 16305 3960 l 16305 3840 l cp +clip +n 15600 3900 m 16275 3900 l gs col0 s gr gr + +% arrowhead +n 15981 3840 m 16221 3900 l 15981 3960 l col0 s +% Polyline +n 16200 3300 m 18000 3300 l 18000 4500 l 16200 4500 l cp gs col0 s gr +% Polyline +n 9300 6300 m 9300 10500 l gs col0 s gr +% Polyline +n 11100 9600 m 17100 9600 l 17100 11400 l 11100 11400 l cp gs col0 s gr +% Polyline +n 11100 7500 m 12900 7500 l 12900 8700 l 11100 8700 l cp gs col0 s gr +% Polyline +n 13500 7500 m 16200 7500 l 16200 8700 l 13500 8700 l cp gs col0 s gr +% Polyline +n 16800 7500 m 18600 7500 l 18600 8700 l 16800 8700 l cp gs col0 s gr +% Polyline +n 18600 10500 m 18600 9300 l gs col0 s gr +% Polyline +n 17100 10500 m 18600 10500 l gs col0 s gr +% Polyline +n 18600 9300 m 10500 9300 l gs col0 s gr +% Polyline +n 10500 9300 m 10500 8100 l gs col0 s gr +% Polyline +gs clippath +10806 8040 m 11046 8100 l 10806 8160 l 11130 8160 l 11130 8040 l cp +clip +n 10500 8100 m 11100 8100 l gs col0 s gr gr + +% arrowhead +n 10806 8040 m 11046 8100 l 10806 8160 l col0 s +% Polyline +n 18000 3900 m 18600 3900 l gs col0 s gr +% Polyline +n 18600 3900 m 18600 4800 l gs col0 s gr +% Polyline +n 18600 4800 m 9900 4800 l gs col0 s gr +% Polyline +n 11100 5400 m 17100 5400 l 17100 7200 l 11100 7200 l cp gs col0 s gr +% Polyline +n 9900 4800 m 9900 6300 l gs col0 s gr +% Polyline +gs clippath +10806 6240 m 11046 6300 l 10806 6360 l 11130 6360 l 11130 6240 l cp +clip +n 9900 6300 m 11100 6300 l gs col0 s gr gr + +% arrowhead +n 10806 6240 m 11046 6300 l 10806 6360 l col0 s +% Polyline +n 18600 8100 m 19800 8100 l gs col0 s gr +% Polyline +n 19800 8100 m 19800 6300 l gs col0 s gr +% Polyline +n 17100 6300 m 19800 6300 l gs col0 s gr +% Polyline +gs clippath +20706 7140 m 20946 7200 l 20706 7260 l 21030 7260 l 21030 7140 l cp +clip +n 19800 7200 m 21000 7200 l gs col0 s gr gr + +% arrowhead +n 20706 7140 m 20946 7200 l 20706 7260 l col0 s +% Polyline +gs clippath +13206 8040 m 13446 8100 l 13206 8160 l 13530 8160 l 13530 8040 l cp +clip +n 12900 8100 m 13500 8100 l gs col0 s gr gr + +% arrowhead +n 13206 8040 m 13446 8100 l 13206 8160 l col0 s +% Polyline +gs clippath +16506 8040 m 16746 8100 l 16506 8160 l 16830 8160 l 16830 8040 l cp +clip +n 16200 8100 m 16800 8100 l gs col0 s gr gr + +% arrowhead +n 16506 8040 m 16746 8100 l 16506 8160 l col0 s +% Polyline +gs clippath +10806 10440 m 11046 10500 l 10806 10560 l 11130 10560 l 11130 10440 l cp +clip +n 9300 10500 m 11100 10500 l gs col0 s gr gr + +% arrowhead +n 10806 10440 m 11046 10500 l 10806 10560 l col0 s +% Polyline +gs clippath +3306 6240 m 3546 6300 l 3306 6360 l 3630 6360 l 3630 6240 l cp +clip +n 2100 6300 m 3600 6300 l gs col0 s gr gr + +% arrowhead +n 3306 6240 m 3546 6300 l 3306 6360 l col0 s +% Polyline +n 3600 5400 m 5400 5400 l 5400 7200 l 3600 7200 l cp gs col0 s gr +% Polyline +gs clippath +5706 6240 m 5946 6300 l 5706 6360 l 6030 6360 l 6030 6240 l cp +clip +n 5400 6300 m 6000 6300 l gs col0 s gr gr + +% arrowhead +n 5706 6240 m 5946 6300 l 5706 6360 l col0 s +% Polyline +n 6000 5700 m 7800 5700 l 7800 6900 l 6000 6900 l cp gs col0 s gr +% Polyline +gs clippath +9006 6240 m 9246 6300 l 9006 6360 l 9330 6360 l 9330 6240 l cp +clip +n 7800 6300 m 9300 6300 l gs col0 s gr gr + +% arrowhead +n 9006 6240 m 9246 6300 l 9006 6360 l col0 s +% Polyline +n 13200 12525 m 13650 12525 l gs col0 s gr +/Times-Roman-iso ff 300.00 scf sf +13200 3900 m +gs 1 -1 sc (Lagrange Filter) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +13800 8100 m +gs 1 -1 sc (Lagrange Filter) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +11700 8100 m +gs 1 -1 sc (1:I) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +11100 3900 m +gs 1 -1 sc (1:I) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +16800 3900 m +gs 1 -1 sc (D:1) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +17400 8100 m +gs 1 -1 sc (D:1) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +11700 10500 m +gs 1 -1 sc (Phase unwrapped and multiplied by 1/) col0 sh gr +/Symbol ff 300.00 scf sf +19800 6000 m +gs 1 -1 sc (b<1) col0 sh gr +/Symbol ff 300.00 scf sf +19800 8400 m +gs 1 -1 sc (b>1) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +4125 6600 m +gs 1 -1 sc (h\(n\)) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +2475 6000 m +gs 1 -1 sc (x\(n\)) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +3825 6150 m +gs 1 -1 sc (Windowing) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +6600 6300 m +gs 1 -1 sc (FFT) col0 sh gr +/Symbol ff 300.00 scf sf +8850 5100 m +gs 1 -1 sc (b<1) col0 sh gr +/Symbol ff 300.00 scf sf +8850 8400 m +gs 1 -1 sc (b>1) col0 sh gr +/Times-Roman-iso ff 300.00 scf sf +11700 6300 m +gs 1 -1 sc (Phase unwrapped and multiplied by 1/) col0 sh gr +/Times-Bold-iso ff 300.00 scf sf +9300 10875 m +gs 1 -1 sc (X\(n,k\)) col0 sh gr +/Times-Bold-iso ff 300.00 scf sf +9300 3675 m +gs 1 -1 sc (X\(n,k\)) col0 sh gr +/Times-Bold-iso ff 300.00 scf sf +20100 6900 m +gs 1 -1 sc (Y\(n,k\)) col0 sh gr +/Times-Bold-iso ff 300.00 scf sf +9600 12600 m +gs 1 -1 sc (Synthesized Signal:) col0 sh gr +/Times-Bold-iso ff 375.00 scf sf +12300 12600 m +gs 1 -1 sc (s\(n\)=) col0 sh gr +/Times-Bold-iso ff 375.00 scf sf +13350 12450 m +gs 1 -1 sc (1) col0 sh gr +/Times-Bold-iso ff 375.00 scf sf +13350 12900 m +gs 1 -1 sc (N) col0 sh gr +/Symbol ff 600.00 scf sf +13725 12600 m +gs 1 -1 sc (S) col0 sh gr +/Times-Roman-iso ff 375.00 scf sf +13875 12900 m +gs 1 -1 sc (k) col0 sh gr +/Times-Roman-iso ff 375.00 scf sf +14100 12525 m +gs 1 -1 sc (Y\(n,k\)) col0 sh gr +/Times-Roman-iso ff 375.00 scf sf +15150 12525 m +gs 1 -1 sc (\(-1\)) col0 sh gr +/Times-Roman-iso ff 375.00 scf sf +15750 12300 m +gs 1 -1 sc (k) col0 sh gr +/Symbol ff 300.00 scf sf +16350 6300 m +gs 1 -1 sc (b) col0 sh gr +/Symbol ff 300.00 scf sf +16350 10500 m +gs 1 -1 sc (b) col0 sh gr +$F2psEnd +rs + +%%EndDocument + @endspecial -186 1587 a Fm(Fig)o(.)18 b(1)p Fl(.)24 +b(A)19 b(schematic)h(description)g(of)f(the)h(phase-v)o(ocoder)h +(algorithm.)j(1:I)19 b(represents)h(the)f(interpolation)h(and)g(adds)g +(I-1)f(zeroes)h(between)g(tw)o(o)f(samples;)-186 1674 +y(D:1)g(represents)g(the)g(decimation)h(and)g(selects)f(one)g(sample)g +(each)h(D)f(samples.)k(The)c(ratio)g Fj(D)r(=I)25 b Fl(approximates)20 +b Fj(\014)t Fl(.)-186 1942 y(detected)f(with)f(a)g(high)g(precision)h +(pitch-marking)h(algorithm)e(\227PMA\227)-186 2028 y(de)n(v)o(eloped)j +(before)e([11)q(].)-61 2115 y(Let)d Fj(x)p Fi(\()p Fj(n)p +Fi(\))h Fl(and)h Fj(s)p Fi(\()p Fj(n)p Fi(\))f Fl(the)g(analyzed)i(and) +f(time-scale)f(signals)h(respec-)-186 2202 y(ti)n(v)o(ely)-5 +b(.)34 b(Let)22 b Fj(t)179 2210 y Fh(n)217 2220 y Fc(0)276 +2202 y Fl(an)h(instant)g(gi)n(v)o(en)g(by)g(the)g(PMA.)e(In)i(order)g +(to)f(preserv)o(e)-186 2289 y(instantaneous)30 b(in)m(v)n(ariance)f(we) +g(w)o(ant)f(that)g Fj(x)p Fi(\()p Fj(t)1113 2297 y Fh(n)1151 +2307 y Fc(0)1187 2289 y Fi(\))40 b(=)f Fj(s)p Fi(\()p +Fj(t)1450 2297 y Fh(n)1488 2307 y Fc(0)1524 2289 y Fj(=\014)t +Fi(\))p Fl(.)51 b(T)-6 b(o)-186 2375 y(reach)20 b(this)f(goal)h(it)f +(is)g(possible)i(to)e(introduce)i(a)e(phase)i(of)n(fset)e +Fj(\036)1519 2384 y Fh(k)1576 2375 y Fl(at)h(each)-186 +2462 y(channel)26 b Fj(k)r Fl(.)43 b(Consequently)-5 +b(,)28 b(the)e(synthesized)g(speech)h(signal)e(is)g(gi)n(v)o(en)-186 +2549 y(by:)-141 2706 y Fj(s)p Fi(\()p Fj(n)p Fi(\))c(=)124 +2675 y Ff(1)p 113 2689 54 4 v 113 2731 a Fh(N)259 2706 +y Fi([)p Fj(A)p Fi(\()p Fj(\014)t(n;)14 b Fi(0\))p Fj(e)600 +2674 y Fh(j)s(\036)665 2684 y Fc(0)698 2674 y Ff(\()p +Fh(n)p Ff(\))259 2809 y Fi(+)332 2749 y Fe(P)420 2769 +y Fh(N)q(=)p Ff(2)p Fg(\000)p Ff(1)420 2836 y Fh(k)q +Ff(=1)626 2809 y Fi(2)p Fj(A)p Fi(\()p Fj(\014)t(n;)f(!)927 +2818 y Fh(k)965 2809 y Fi(\))p Fj(cos)p Fi(\()p Fj(\035)s +Fi(\()p Fj(\014)t(n;)g(!)1381 2818 y Fh(k)1419 2809 y +Fi(\))p Fj(=\014)21 b Fi(+)c Fj(\036)1674 2818 y Fh(k)1712 +2809 y Fi(\))259 2906 y(+)p Fj(A)p Fi(\()p Fj(\014)t(n;)c(N)r(=)p +Fi(2\))p Fj(e)739 2873 y Fh(j)s(\036)804 2887 y Fb(N=)p +Fc(2)913 2873 y Ff(\()p Fh(n)p Ff(\))1003 2906 y Fi(])1699 +2991 y Fl(\(3\))-61 3078 y Fj(\036)-15 3086 y Ff(0)19 +3078 y Fi(\()p Fj(n)p Fi(\))p Fl(,)k(the)g(phase)h(of)f(the)g(DC)g +(component)h(\()p Fj(A)p Fi(\()p Fj(\014)t(n;)13 b Fi(0\))p +Fl(\))k(equals)h(0)f(or)-186 3165 y Fj(\031)26 b Fl(and)f(does)g(not)f +(need)h(to)f(be)h(corrected.)39 b(The)24 b(last)g(term)g +Fj(A)p Fi(\()p Fj(\014)t(n;)13 b(N)r(=)p Fi(2\))-186 +3251 y Fl(has)19 b(been)h(discarded)g(because)g(its)e(amplitude)i(is)f +(ne)o(gligible.)-61 3338 y(Quatieri)i(and)i(McAule)o(y)f(proposed)i(a)e +(similar)f(e)o(xpression)i(\(see)f([4)q(])-186 3425 y(page)15 +b(382\))g(for)g Fj(s)p Fi(\()p Fj(n)p Fi(\))f Fl(in)g(the)h(frame)n(w)o +(ork)g(of)f(the)h(sinusoidal)g(model.)22 b(Ho)n(w-)-186 +3512 y(e)n(v)o(er)m(,)34 b(an)d(inconsistenc)o(y)i(arises)e(when)g(the) +h(instantaneous)g(in)m(v)n(ariance)-186 3598 y(must)26 +b(be)f(preserv)o(ed)i(at)e(more)h(that)f(one)h(time)f(instant.)43 +b(In)25 b(order)h(to)f(get)-186 3685 y(rid)19 b(of)g(this)f(problem)i +(Quatieri)f(proposed)h(a)f(sub-band)i(approach)f([12)q(].)-61 +3772 y(W)m(ith)i(re)o(gard)i(to)f(our)h(study)g(we)f(decided)h(not)g +(to)f(use)h(the)g(sub-band)-186 3859 y(concept.)33 b(W)-6 +b(e)22 b(preferred)g(a)g(least)f(square)i(minimization)f(approach.)34 +b(Let)-186 3945 y Fj(t)-158 3953 y Fh(n)-120 3964 y Fb(i)-62 +3945 y Fl(the)27 b(time)g(instants)g(gi)n(v)o(en)h(by)g(the)f(PMA)g +(applied)h(to)g(the)f(analyzed)-186 4032 y(signal)h Fj(x)p +Fl(.)49 b(W)-6 b(e)27 b(propose)i(to)e(\002nd)h(the)g(optimal)g(phase)g +(v)o(ector)g(of)n(fset)g Fi(\010)-186 4119 y Fl(such)20 +b(that:)481 4292 y Fi(\010)h(=)h Fj(Ar)r(g)s(min)914 +4301 y Fh(\036)954 4292 y Fj(E)t Fi(\()p Fj(\036)p Fi(\))578 +b Fl(\(4\))-61 4409 y(with)-72 4628 y Fj(E)t Fi(\()p +Fj(\036)p Fi(\))21 b(=)46 4655 y Fe(P)134 4742 y Fh(n)172 +4753 y Fb(i)203 4715 y Fi([)p Fj(x)p Fi(\()p Fj(t)326 +4723 y Fh(n)364 4734 y Fb(i)394 4715 y Fi(\))211 4821 +y Fd(\000)293 4791 y Ff(1)p 281 4805 V 281 4847 a Fh(N)345 +4821 y Fj(A)p Fi(\()p Fj(\014)t(n;)13 b Fi(0\))p Fj(e)664 +4790 y Fh(j)s(\036)729 4800 y Fc(0)761 4790 y Ff(\()p +Fh(n)p Ff(\))211 4925 y Fd(\000)293 4894 y Ff(2)p 281 +4908 V 281 4950 a Fh(N)357 4864 y Fe(P)445 4885 y Fh(N)q(=)p +Ff(2)p Fg(\000)p Ff(1)445 4952 y Fh(k)q Ff(=1)651 4925 +y Fj(A)p Fi(\()p Fj(\014)t(t)814 4933 y Fh(n)852 4944 +y Fb(i)883 4925 y Fj(;)g(!)965 4934 y Fh(k)1003 4925 +y Fi(\))613 5015 y Fd(\002)p Fj(cos)p Fi(\(\()p Fj(\035)s +Fi(\()p Fj(\014)t(t)989 5023 y Fh(n)1027 5034 y Fb(i)1057 +5015 y Fj(;)g(!)1139 5024 y Fh(k)1177 5015 y Fi(\))p +Fj(=\014)21 b Fi(+)c Fj(\036)1432 5024 y Fh(k)1470 5015 +y Fi(\)\)])1551 4984 y Ff(2)1699 4823 y Fl(\(5\))-61 +5165 y(where)g Fj(\036)g Fl(is)g(the)h(v)o(ector)f(of)h(the)f +Fj(\036)813 5174 y Fh(k)851 5165 y Fl(.)23 b(Note)17 +b(that)g(the)h(shape)g(in)m(v)n(ariance)-186 5252 y(is)24 +b(calculated)h(on)f(the)h(original)f(signal.)39 b(Finding)25 +b(the)f(optimal)h(solution)-186 5339 y(of)d(equation)i(\(4\))e(is)f +(not)i(a)f(simple)g(problem)h(because)h(of)e(the)g(non-linear)1975 +1942 y(character)30 b(of)e(this)g(equation.)54 b(F)o(or)28 +b(solving)h(equation)h(\(4\))e(we)h(did)f(not)1975 2028 +y(use)18 b(non-linear)f(optimization)h(algorithms,)f(because)h(the)o(y) +f(are)g(generally)1975 2115 y(computationally)i(e)o(xpensi)n(v)o(e)h +(and)e(also)g(because)g(the)o(y)g(do)h(not)e(guarantee)1975 +2202 y(a)30 b(good)h(solution.)55 b(W)-6 b(e)29 b(therefore)h(turned)g +(to)n(w)o(ards)g(an)g(iterati)n(v)o(e)f(non-)1975 2289 +y(optimal)19 b(algorithm.)24 b(This)18 b(algorithm)i(can)f(be)g +(summarized)h(as)f(follo)n(ws:)p 2190 2428 1543 4 v 2190 +3650 4 1223 v 2231 2536 a(set)g(all)f(the)h Fj(\036)2582 +2545 y Fh(k)2639 2536 y Fl(for)f Fj(k)24 b(>)d Fi(0)e +Fl(to)g(0)2231 2622 y Fm(r)o(epeat)2343 2747 y Fl(i=1)2343 +2865 y Fm(r)o(epeat)2511 2979 y Fl(solv)o(e)28 b(equation)h(\(5\))e +(for)h Fj(\036)3255 2987 y Fh(i)3308 2979 y Fl(assuming)h(all)2511 +3066 y(the)21 b Fj(\036)2669 3075 y Fh(k)2707 3066 y +Fl(,)f Fj(k)26 b Fd(6)p Fi(=)e Fj(i)d Fl(are)g(constant)g(using)g(a)f +(sim-)2511 3153 y(ulated)f(annealing)i(technique.)2511 +3267 y(i)e(=)f(i)h(+)g(1)2343 3389 y Fm(until)e Fl(i)i +Fj(>)f(K)2694 3397 y Ff(0)2231 3525 y Fm(until)f Fj(E)t +Fi(\()p Fj(\036)p Fi(\))h Fl(is)h(stable)p 3730 3650 +V 2190 3653 1543 4 v 1975 3845 a(Generally)-5 b(,)31 +b(amplitude)d(of)g(frequenc)o(y)h(components)h Fj(A)p +Fi(\()p Fj(\014)t(t)3607 3853 y Fh(n)3645 3864 y Fb(i)3675 +3845 y Fj(;)13 b(!)3757 3854 y Fh(k)3795 3845 y Fi(\))27 +b Fl(de-)1975 3932 y(creases)20 b(with)e Fj(k)r Fl(.)23 +b(The)c(phase)h(correction,)f(therefore,)g(is)g(more)g(important)1975 +4018 y(for)i(small)g(v)n(alues)h(of)f Fj(k)h Fl(which)g(concentrate)g +(most)f(of)g(the)g(ener)o(gy)h(of)f(the)1975 4105 y(speech)30 +b(signals.)52 b(W)-6 b(e)28 b(tak)o(e)h(adv)n(antage)h(of)f(this)f +(property)i(to)e(limit)g(the)1975 4192 y(phase)23 b(correction)g(to)f +(the)f(\002rst)g Fj(K)2887 4200 y Ff(0)2944 4192 y Fl(v)n(alues.)32 +b(This)22 b(allo)n(ws)g(the)g(computa-)1975 4279 y(tion)d(time)g(to)g +(be)g(reduced)h(without)f(compromising)i(results.)2100 +4372 y(W)-6 b(e)25 b(accepted)h(a)f(simpli\002ed)g(v)o(ersion)g(of)h +(simulated)f(annealing)h(be-)1975 4458 y(cause)21 b Fj(E)t +Fi(\()p Fj(\036)p Fi(\))e Fl(presents)h(fe)n(w)g(and)h(well)e +(pronounced)j(minima.)27 b(This)19 b(sim-)1975 4545 y(ple)i(method)h +(compares)f(f)o(a)o(v)o(orably)g(against)g(gradient)g(based)g +(techniques)1975 4632 y(because,)d(in)f(our)g(case,)g(it)f(guarantees)i +(the)f(global)g(optimum)g(to)g(be)g(found.)2100 4725 +y(This)e(algorithm,)h(in)f(practice,)h(con)m(v)o(er)o(ges)g(in)f(all)g +(the)g(cases)g(and)h(gi)n(v)o(es)1975 4812 y(a)k(good)h(solution)g(for) +f(the)g Fj(\036)2722 4821 y Fh(k)2759 4812 y Fl(.)26 +b(Furthermore,)20 b(the)g(instantaneous)i(in)m(v)n(ari-)1975 +4899 y(ance)e(of)f(the)g(shape)h(of)f(the)g(time-scale)f(signal)i(is)e +(well)g(preserv)o(ed.)2100 4992 y(W)-6 b(e)18 b(call)h(this)f +(procedure)i(for)f(\002nding)g(the)g(v)o(ector)g Fi(\010)g +Fl(a)g(synchroniza-)1975 5078 y(tion)30 b(procedure)i(because)f(the)f +(phases)h(are)f(synchronized)i(in)d(order)i(to)1975 5165 +y(preserv)o(e)22 b(the)g(shape)g(in)m(v)n(ariance)g(in)f(the)h(v)o +(oiced)f(portions)h(of)f(the)h(signal.)1975 5252 y(W)-6 +b(e)22 b(apply)h(this)f(procedure)i(a)e(fe)n(w)g(milliseconds)h(\(10)f +(to)g(20\))h(before)g(the)1975 5339 y(onset)28 b(of)f(the)f(v)o(oicing) +i(in)e(order)i(to)e(be)h(sure)g(that)g(we)g(are)g(located)g(in)g(a)p +eop +%%Page: 3 3 +3 2 bop -9 2835 a @beginspecial 0 @llx 0 @lly 428 @urx +512 @ury 4535 @rwi 3401 @rhi @setspecial +%%BeginDocument: ./resultats.eps +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: resultats.eps +%%Creator: fig2dev Version 3.2 Patchlevel 1 +%%CreationDate: Mon Nov 6 22:11:51 2000 +%%For: laprie@longemer.loria.fr (Yves Laprie) +%%Orientation: Portrait +%%BoundingBox: 0 0 428 512 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +-55.0 522.0 translate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def +%%EndProlog + +$F2psBegin +10 setmiterlimit +n -1000 9280 m -1000 -1000 l 8662 -1000 l 8662 9280 l cp clip + 0.06299 0.06299 sc +% Polyline +% +% Begin Imported EPS File: fig2_2001.eps +%%BeginDocument: fig2_2001.eps +% +n gs +900 180 tr +10.663507 -5.022321 sc +0 -448 tr +10 -172 tr +sa +n -10 172 m 623 172 l 623 620 l -10 620 l cp clip n +countdictstack +mark +/showpage {} def +% EPS file follows: +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /users/led/jdm/=tex/=recherche/=Icassp/fig2_2001.eps +%%Creator: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) - by John Bradley +%%BoundingBox: -10 172 623 620 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 633 string def + +% define space for color conversions +/grays 633 string def % space for gray scale line +/npixls 0 def +/rgbindx 0 def + +% lower left corner +-10 172 translate + +% size of image (on paper, in 1/72inch coords) +633.02400 447.98400 scale + +633 448 8 % dimensions of data +[633 0 0 -448 0 448] % mapping matrix +{currentfile pix readhexstring pop} +image + +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffff00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000ff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff +ffffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff +ffffffffffffff00ffffffffffffffffffff00ff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff +ffffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000ffffff0000ffffffff000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ffffff00ffffff00ffffff00ffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffff00ffffff00ffffff00ffffffffffffffffffffffffff57575757575757 +5757575757575757575757575757575757575757575757ffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffffff00ffffff00ffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ffffff00ffffff00ffffffff00000000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +000000ffffff000000ffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffffffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffffffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffffffffffffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffffffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffffff57ffffffff +ff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff57ffffffffff5757ffffffff57ffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff57ffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffffff57ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff575757ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff5757ffffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ffff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffff57ffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffff57ffffffffffffffffffff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffffffffffffffff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffffff57ffffffffffffffffffff57ffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffffff57ffffffffffffffffffff57ffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffffffffffffffff57ffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff5757ffffffff57ff57ffffff +ff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffffff57ffffffff57ffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff57ff57ffffff57ff57ffffff +575757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff57ffffffff5757ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff +ffffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff5757ffffff5757ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffff575757ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff +57ffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff5757ffffff5757ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff +57ffffffffff57ffffffff57ffffffffff57ffffffff5757ffffffff5757ffffff5757ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff575757ffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff +57ffffffff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff575757ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff57ffffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ffffffffffffffffff5757ffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ff57ffffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ffffffffffffffffff5757ffffffffffffff57ffffffffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff57ffffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffffff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffffff +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +57ffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ff57ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +57ffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ff57ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +57ffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ff57ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +57ffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ff57ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +ff57ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff5757ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ffff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff575757ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ff +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff575757 +ffffff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57 +ffffff5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffffff57ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +ff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff57ffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffffff57ffffffffff57ffffff +ff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff57ffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +575757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff5757ff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffffff57ffffffff5757ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff575757ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff5757ffff57ffffffffffffff5757ffffffffff57ff57ff57ffffffff57ff +5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffffff57ffffff57 +ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff5757575757ffffffffff57ff5757ffffffffff57ff57ff57ffffffff57ff +5757ffffffffffffff5757ffffffffffff575757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff575757ff57ffffffffff57ff5757ffffffff5757ff57ff57ffffffff57ff +5757ffffffffff57ff5757ffffffffff57575757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff575757ff57ffffffffff57ff5757ffffffff5757ff57ff57ffffffff57ff +5757ffffffffff57ff5757ffffffffff57575757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffffff57ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ffffffff575757ff57ffffffffff57ff5757ffffffff5757ff57ff57ffffffff57ff +5757ffffffffff57575757ffffffffff57575757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff5757ffff57ffffffff5757ff57ff57ffffffff57ff +5757ffffffffff57575757ffffffffff575757ff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffffff5757ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff5757ff5757ffffffff5757ff57ff57ffffffff57ff +5757ffffffffff57575757ffffffffff575757ff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff575757ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff5757ff5757ffffffff5757ff57ff57ffffff5757ff +5757ffffffffff57575757ffffffffff575757ff57ffffffffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff575757ff57ffffffff5757ffffff57ffffff5757ff +5757ffffffffff57575757ffffffffff575757ff57ffffffffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff575757ff57ffffffff5757ff57ff57ffffff5757ff +575757ffffffff5757575757ffffffff575757ff57ffffffffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff575757ff57ffffffff57575757ff57ffffff5757ff +57ff57ffffffff575757ff57ffffffff575757ff57ffffffff57ff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff575757ff57ffffffff575757ffff57ffffff5757ff +57ff57ffffffff575757ff57ffffffff57ffffff57ffffffff57ff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff57ffffffff575757ff57ffffffff575757ffff57ffffff5757ff +57ff57ffffffff575757ff57ffffffff57ffffff57ffffffff57ff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffffffff57ffff57ff57ffffff57ff57 +ffffffff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff575757ff5757ffffff575757ff57ffffffff575757ffff57ffffff575757 +57ff57ffffffff5757ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ff57ffffffff575757ffff57ffffff575757 +57ff57ffffffff5757ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ff57ffffffff575757ffff57ffffff575757 +57ff57ffffffff5757ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff5757ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ff5757ffffff575757ffff57ffffff575757 +57ff57ffffffff5757ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffffff5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff575757ffff57ffffff575757 +57ff57ffffffffff57ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffff5757ff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff575757ffff57ffffff575757 +57ff57ffffffff5757ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ff5757ffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff575757ffff57ffffff575757 +57ff57ffffff57ff57ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ffff57ffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff575757ffff57ffffff575757 +ffff57ffffff57ff57ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ffff57ffff57ff57ffffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff575757 +ffff57ffffff57ff57ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ffff57ffff57ff57ffffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff5757ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ff57ffff57ffffffff57ffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff57ffffff57ff57ffffff +57ffff57ffff57ff57ffffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ffffff57 +ff57ffffff57ff57ffff57ff5757ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ff57ffff57ffffffffffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff57ffffffffffffffffffff57ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff5757ffff57ff57ffffff +57ffff57ffff57ff57ffffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ff57ffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff5757ffffff57ffffffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ff5757ffff57ff57ffffff +57ffff57ffff57ff57ffffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ff57ffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff5757ffffff57ffffffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ff57ffffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff575757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffffffffffffffffffffffff5757ffffff57ffffffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffffffff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ff57ffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ffffffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffffffffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff5757ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffff57ffffffff57ffffff575757ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffff5757ff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffff57ffffffffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff5757ffffffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffffffffffffff5757ffffff57ff57ffff5757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ff5757ffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57 +ff5757ffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff575757ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ff57 +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff5757ffffffffffffffff57ffffffff5757ffffff57ff57ff575757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff575757ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ff57ffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffffff57ff57ff575757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +5757ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757ff57ff575757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffffffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ff57ffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +5757ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757ff5757575757ffffffffffffffff +ffffffff57ffff57ffffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +ffff57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757ff5757575757ffffffffffffffff +ffffffff57ffff5757ffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +ffff57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757ff5757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +ffff57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757ff5757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ffff57ffff57ffff57ff57ffffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffff57 +ffff57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757ff5757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ff5757ffff57ffff57ff57ffffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff +57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffffffff +ffff57ffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff57ff57ffffffffff5757ffffff5757ffff5757575757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff57ffffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff +57ffff57ffff57ff57ffffff57ff5757ffff57ff57ffff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffff57ff +ffff57ffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ffffffff57ff57ffffff5757ffff57ff575757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff5757ffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff +57ffff57ffff57ff57ffffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffff57 +ff5757ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff5757ff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffff57ffffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffff57ffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffffffffffff57ffffffff57ff +ffff57ffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ffffffff575757ffffff5757ffff57ff575757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff5757ffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff +57ffff57ffff57ff5757ffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ffff57ffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffff57ff +ffff57ffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ffffffff57ff57ffffff5757ffff57ff575757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff5757ffff +57ffff57ffff57ffff5757ff57ffff5757ff57ffff5757ff57ffff57ffff57ffff5757ff +57ffff57ffff57ff5757ffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffff575757ffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ff5757ffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffff57ff +ffff57ffffffffff575757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ffffff5757ff57ffffffff57ffff57ff575757575757ffffffffffffffff +ffffffff57ffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff5757ffff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff5757ffff575757ffffff57ff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ff57575757ffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ffffff57ffffffff57ff +ffff5757ffffff57575757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ff575757ffff57ff57ff5757ffff57ff575757575757ffffffffffffffff +ffffffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff5757ffff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ff57575757ffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff5757ffffff57ffffffff57ff +ffffff57ffffff5757575757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ff575757ffff575757ff5757ffff57ff575757575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ff5757ffff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffff5757ff57ff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ff57575757ffffff5757ffffffffffffff57ffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffffffffff +ffffff57ffffff575757575757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ff575757ffff575757ff5757ff5757ff5757ff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff57ffff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ffff57ffff57ff57ffff57ffffff57 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57ff57575757ffffff5757ffffffffffffff57ffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffffff57ff +ffffff57ffffff575757575757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ff575757ffff575757ff5757575757ff5757ff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff57ffff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffffffffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffffffff57ffffff57ffff57ffff57ff57ffff57ffffff57 +ff575757ffffffffffffffffffffffffffffffffffffffffffff575757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff57575757ff57ffff575757ffffffffffffff57ffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff5757ff +ffffff57ffffff57575757575757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff575757ff575757ffff575757ff5757575757ff5757ff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff57ffff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffffffffff57ffff57ff57ffff57ffffff57 +57ffff57ffffffffffffffffffffffffffffffffff5757ffff5757ff57ffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffff00ffffffffffff0000ffffffffffffffffff57ffff57ffffffffff +ffffffffffff5757ff57575757ff57ffff57575757ffffffffff5757ffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffffff57575757575757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57575757ffff57ffffffffff57ffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffff57ffffffffffffff57ffffffffffffffffffffff +ff57ff575757ff575757ffff57575757ff57575757ff57ffff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffffff57ff57ffffff57ffff57ffff57ff5757ff57ffffff57 +ffffff57ffffffffffffffffffffffffffffffffff5757ffff57ffff57ffffffff5757ff +ffffff57ffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffff0057 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffff00ffffffffffff00005700575757ffffff575757ff57ffffffffff +575757ffffff5757ff57575757ff57ffff57ffff57ffffffffff5757ffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffffff57575757575757ffffffffffffffffff57ffffffff57ffffffffffffff +ffffffffffff575757ff57575757ff57ffff575757ff57ffff57575757ff575757575757 +57ffffff57ffffffffffffffffffffffffffff57575757ffffffffffffffffffffffffff +ffffffffffff57ffffff5757575757575757ff575757575757ffff5757ffffffffff5757 +57ffff575757ff575757ffff57575757ff57575757ff5757ff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57 +ffff57ff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffff5757ff57ffff5757ffff57ffff57ff5757ffffffffffff +ffffff5757ffffffffffffffffffffffffffffffff57575757ffffff5757ffff57ff5757 +ffff5757ffffffff575757ffff57575757ffff575757ffffffffffffff57575757575757 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffff00ffffffffffff005757575757575757ff57575757ff57ffff5757 +57575757ffff5757ff57575757ff5757ff57ffff57ffffffffff5757ffffffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffffff5757575757575757ffffffff57ffffff57ff5757575757ffffffff5757 +57ffffff5757575757ff5757575757ffffffff57ffff5757575757ff5757ffff5757ff57 +5757ff5757ffff575757ffff5757ff57ff57575757575757575757ffff575757ffffffff +ffff57ffff575757575757ff57ff5757ff575757575757ff5757575757ffffff575757ff +57ffff575757ff575757ffff57575757ff57575757ff5757ff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffff5757ff57ffff5757ff57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff5757ff57ffff57ffff57 +ffff57ff57ffff5757ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffff57ffff57ffff57ffffff57ffff57ffff5757ffffffffff +ffffff5757ffffffffffffffffffffffffffffffffff57ffffffffffff575757ffffff57 +5757ff5757ffff57ff5757ffffffff5757ff57ffff5757ff5757ffff5757ff5757000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffff00ffffffffffff0000ffffff57ffff575757575757ff5757575757 +5757ff5757575757ff575757ffff5757ff57ffff57ffffffffff5757ffffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffffff5757575757575757ffff575757ffff5757575757ff5757ff57ffffffff +575757575757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffff57 +ffff57ff5757575757575757ff57ff575757ffffffffff5757ff5757575757575757ff57 +5757575757ff575757ffffff57ffffffffff5757ffffffffff57ffff5757ff57575757ff +ffffff575757ff575757ffff57575757ff57575757ff5757ff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffff57ffffff57ff57ffffff57ffff57ffff5757ffffffffff +ffffffff57ffffffffffffffffffffffffff575757ffffffffffffffffff57ffffffff57 +5757ffff5757ff57ff57575757ffffff575757ffffff5757575757ff57ffff57ffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ff00ffffffffffffff0000ffffffffffff5757ffffffffffffffffffff +ffffff5757575757ff57575757ffff57ff57ffff57ffffffffff5757ffffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffffff5757575757575757ff57575757575757ffffffffff57ff57575757ffff +57575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff575757ffffffffff5757ffffffffffffffffffffffffffffffffffff5757ff +57575757ffffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ff5757ffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff57ffff57ffffff57ff57ffffff57ffffffffff57ffffffffffff +ffffffff57ffffffffffffffffffffff57575757ffffffffffffffffffffffffffffffff +57ffffffff5757ffffffff5757ffffffffffffffffff5757ffff5757ffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffff57ffffffffffff575757ffff575757ffff57ffffffffffff5757ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff575757ff5757575757575757ff57575757575757ffffffffffffffffff57ffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffff575757ffffffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffff5757ff57ffff5757ff57ffffff57ff57ffff5757ff57ffffff57ff57ffff5757ff +57ffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffffffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ff5757ff57ffffff57ff57ffffff57ff57ffffffffffffffffffff +ffffffffff57ffffffffffffffffff575757ffffffffffffffffffffffffffffffffffff +ffffffffff5757ffffffffffffffffffffffffffffffffffffff5757ffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff575757ffff575757ffff57ffffffff5757ff57ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57575757575757575757575757575757ff5757ffffffffffffffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffff575757ff57ffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffffff57ff57ffff5757ff57ffffff57ff57ffff5757ff57ffffff57ff57ffffff57ff +57ffff57ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffff +ffffffffff575757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffffff5757ffff57ffffffff57ffff57ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffffff57575757575757575757575757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffff5757575757ffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffffff57ff57ffff5757ff57ffffff57ff57ffff5757ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffff +ffffffffff575757ffffffffffff57ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffffffffffffff57ffffffff57ffff57ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffff57575757575757575757575757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffff5757575757ffffffffffff +ffffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffff5757ff +57ffffff57ff57ffff5757ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffff +ffffffffffffff5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffffffffffffff57ffffffff57ffff57ffffffff57ffff +ffffff57ffffffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffffff57ffff575757575757575757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffff5757575757ffffffffffff +57ffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffff +ffffffffffffffff57ffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffffffffffffffffff5757ffffff57ffff57ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffffff57ffff57575757ffff575757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffffff57575757ffffffff57ff +57ffff57ffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffffffffffffffffffff +ffffffffffffffff5757ffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff57ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffffffffffff57575757ffff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757ff575757ffff57575757ff57575757ff57ffffffff575757ffffffff57ff +57ffffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffff575757ffffffffffffffffffff +ffffffffffffffffff575757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff57ffffffff57ffff +ffffff57ffff57ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffffffffffff57575757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff575757575757ffffffffff5757ff57575757ff57ffffffffff5757ffffffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffff5757ffffffffffffffffffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff57ffffffff57ffff +ffffff57ff5757ffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffffffffffff57575757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff5757ffffffffffff5757ff57575757ff57ffffffffff575757ffffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff57ffffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffffffffffffffff575757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff5757ffffffffffff5757ff57575757ff57ffffffffff575757ffffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffff5757ffff57ffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff5757ffffffffffff5757ff57575757ffffffffffffff575757ffffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffffff57ffff57ffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff575757ffffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff5757ffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffff57ffffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff5757ffffffffffff5757ff57575757ffffffffffffff57575757ffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffff5757ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffff57ffffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff5757ffffffffffff5757ff57575757ffffffffffffff57575757ffff5757 +57ff57ffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff5757ffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff57575757ffff5757 +575757ffffffffff57ffffffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff57575757ffff5757 +5757ffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff57575757ffff5757 +5757ffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffffffffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff57575757ffff5757 +5757ffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffffffffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffff57ffffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff5757575757ff5757 +5757ffffffffffff57ffff57ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff57575757ffffffffffffff5757575757ff5757 +5757ffffffffffff57ff5757ffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffff57 +ffff57ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff575757ffffffffffffffff5757575757ff5757 +5757ffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffffff +57ff57ffff57ffff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff575757ffffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff575757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffff5757ff575757ffffffffffffffffff57575757ffff57 +5757ffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffffff +57ff57ffff57ffff57ffff57ff57ffffff575757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffffff57ff5757ffffffffffffffffffffffff5757575757 +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffffff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ffff57ffff57ff57ffffff +57ff57ffff57ffff57ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffff57ffffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ff57ffffffffffffffff57ff5757ffffffffffffffffffffffff5757575757 +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff5757ffff57ff57ffffff +57ff57ffff57ff5757ffff57ff57ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffff5757ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ff57 +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ff57 +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffffffffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ffff57 +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff57ffffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffff57ff57ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffff5757ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffff57ffff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ffffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffff57ff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffff57ffffff57ffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff57ffffffffffffffffffffffffff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000000ffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffffffff5757ffffffffffffffffffffffff575757ffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff57ffffffffffffffffffffffffff5757ffffffffffffffffffffffff5757ffffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff57ffffffffffffffffffffffffff5757ffffffffffffffffffffffff5757ffffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffff5757ffffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffff5757ffffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffff57ffffffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffffffffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffff57ffffffff +ffffffffffffffff57ff57ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffff575757ffffffff57ff57ffffff57ff57ffffff57ffffffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffffffffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffffffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff57ff57ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffff57ff57ffffff57ff57ffffff +57ffffffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff575757ffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffff +ffffff57ffff57ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff5757ffff +ffffff57ff5757ffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +57ff57ffff57ff57ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffff57ff57ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +57ff57ffff57ff57ffffff575757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffff575757ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +57ff57ffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffff57ff57ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +575757ffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ffffffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ffff57ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ff5757ffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ffffffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ff57ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ff57ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ffffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffffffffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ff57ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff57ff57ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffffff57ff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffff575757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff57ff57ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ffff57ffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff575757ffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff57ff57ffffff5757ff +ffffff5757ffffff575757ffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000000ffffffff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff5757ffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ffffffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff57ff57ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffff575757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff57ff57ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ffffffffff5757ffffff575757ffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff5757ffffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffff5757ffffffff +5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffffff57ffffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff57ff57ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff57ff57ffffff5757ffffffff57ffffffff +5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff575757ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff57ff57ffffff57ff57ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff575757ffffffffffff57ff57ffffff +ffffff57ff57ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffff575757ffffff575757ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffffffff575757ffffffffffff575757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffff575757ffffffffffff575757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff57ff +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffff575757ffffffffffff575757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffff5757 +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffff575757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff57ffffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffff575757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffff5757ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffff575757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff5757ffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +57ffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff57ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +ffffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff57ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff57ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff5757ff +ffffff57ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff5757ff +ffffff57ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff5757ff +ffffff57ffffffffff57ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff5757ff +ffffff57ffffffffff57ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffff57ff57ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ffffffffffff57 +ffffffffff57ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff5757ff +ffffff57ffffffffff57ffffffff5757ffffffff57ffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff57ff +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff57ff57ffffffff57 +ffffffffff57ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff57ffff +ffffff57ffffffffff57ffffffff5757ffffffffffffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +57ffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffffff57 +ffffffffff57ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff57ffff +ffffff57ffffffffff57ffffffff5757ffffffffffffffffff5757ffffffff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffffffffff5757ffffffff5757ffffffff5757 +ffffffff57ffffffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffffff57 +ffffffffff57ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffff57ffff +ffffff57ffffffffff57ffffffff5757ffffffffffffffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffff57ff57ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffff57ffffffffff57ffffffff57ffff +ffffff57ffffffffff57ffffffff57ffffffffffffffffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffff57ff57ffffffff5757ffffffff5757ffffffff5757ffffff5757ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffff57ffffffffff57ffffffff57ffff +ffffffffffffffffff57ffffffff57ffffffffffffffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffff5757ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffff57ffff +ffffffffffffffffffffffffffff57ffffffffffffffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffff57ffff +ffffffffffffffffffffffffffff57ffffffffffffffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000000ffff000000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffff57ffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffff57ffffffffffffffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff5757ffffffff57ffffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff5757ffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff5757ffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffff57ffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff5757ffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff5757ffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffff5757ffffff +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000000ffff00ff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff5757ffffffff5757 +ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffff5757 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000000ff0000ffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffff5757ffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff0000000000ff00000000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffff0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffff00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000ff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff +00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffffff00ffffffffff00ffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff0000 +000000ffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 +ffff0000000000ffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00ffffffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +0000000000ff0000000000ffffff00ffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00ffff +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffff0000000000ffffff00ffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00 +ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffff00ff00ffffff00ff00ffffff00ff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffff00ff +ffffffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff +00ff00ffffffffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff00ff00ffffff00 +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ff00ffffffffffff00ff00ffffff00ff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ff +ffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffff00ffffffffffff00ff00ffffff00ff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00ff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff +ffffffff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff +00ff00ffffffffff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ffffff00ff00ff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffff00ffffffffff00ffffff00ff00ffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00ffffff00 +ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffff00ffffffffff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff +0000ffff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ff00ff0000ffff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffff00ff0000ffff00ffffff00ff00ffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffffff00 +ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ff00ffff00ff0000ffff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff0000 +ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffff00ffffff00ff00ffffff00ff00ffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ffff0000ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000ffff00ffffff00ff00ffffff00ff00ff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000ffff0000ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffffff00 +ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ff00ffff0000ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff +ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +ffffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffffff00ff00ff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00ffffff00 +ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffff00ffffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff +ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffffff00ffffff00ff00ffffff00ff00ffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff +ffffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffffff00ff00ff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00ffffff00 +ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff0000000000ffffffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00 +ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffffffff00ff00ffffff00ff00ffffff00ff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff +ffff00ffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffffffffff00ff00ffffff00ff00ffffff00ff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff +ffff00ffffff00ffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00 +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffff00ff00ffffff00ffff00ff00ffffff00ff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ff +ffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffff00ffffff00ffff00ff00ffffff00ff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff +00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000000000ffffff00ffffffffff00ffffffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff00 +0000ffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000000000ffffff00ffffffffff00ffffffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 +00ffff000000ffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff000000ffffff000000ffffffff00ffffffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00ffff +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffffff000000ffffffff00ffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffff +ff00ffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer +cleartomark +countdictstack exch sub { end } repeat +restore grestore +% +% End Imported PIC File: fig2_2001.eps +%%EndDocument +% +% Polyline +% +% Begin Imported EPS File: fig4_2001.eps +%%BeginDocument: fig4_2001.eps +% +n gs +900 2970 tr +10.646688 -5.022321 sc +0 -448 tr +10 -172 tr +sa +n -10 172 m 624 172 l 624 620 l -10 620 l cp clip n +countdictstack +mark +/showpage {} def +% EPS file follows: +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /users/led/jdm/SnorriMotif/Perso/=grace_wave/fig4_2001.eps +%%Creator: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) - by John Bradley +%%BoundingBox: -10 172 624 620 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 634 string def + +% define space for color conversions +/grays 634 string def % space for gray scale line +/npixls 0 def +/rgbindx 0 def + +% lower left corner +-10 172 translate + +% size of image (on paper, in 1/72inch coords) +634.03200 447.98400 scale + +634 448 8 % dimensions of data +[634 0 0 -448 0 448] % mapping matrix +{currentfile pix readhexstring pop} +image + +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff0000ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffffff0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000ffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ff00ffffffff0000ffffffffffffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ff00ffffff00ffff00ffffff00ffffffffffffffffffffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ff00ffffff00ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffff0000ffffffff000000ffffff00ff00ffffffffffffffffff00 +0000ffff00ff0000ffff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00000000ffffffff00ffffff00ffffff00ffff00ff00ffffffffffffffff00ff +ffff00ff0000ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffff00ffffff00ffffff00ff00ffff00ffffffffffffffff00ff +ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffff5757575757575757 +57575757575757575757575757575757575757575757ffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffff00ffffff00ffffff00ff0000000000ffffffffffffff00ff +ffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffff00ffffffff00000000ffffffff00ffffffffffffffffff00 +000000ff00ffffff00ff00ffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffff000000ffffffffffff00ffffffff00ffffffffffffffffffff +ffff00ff00ffffff00ffff0000ff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ffffff00ffffffffffffff0000000000ff00ff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffff00 +0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff57ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff57ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ff5757ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ffff57ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff57ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffffff57ffffff57ffffffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffffffffffff5757ffffff57ffffffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffffffffffffffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffffffffffffffffffffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffffffffffffff57ffffff57 +ffffffff57ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffff57ffffffff57ffffff57 +ffffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffff57ffffffff57ffffff57 +ffffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffff5757ffffff57ffffff57 +ffffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffff57ffff57ffff57ffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffff5757ffffff57ffffff57 +ffffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffff57ff5757ff57ffff57ffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff57ffffffff57ffffff5757ffffff57ffffff57 +ffffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffff57ff5757ff57ffff57ffffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffffff57ffffff5757ffffff57ffffff57 +57ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffffff57ffffff5757ffffff57ffffff57 +57ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffffff57ffffff5757ffffff57ffffff57 +57ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +57ffffffffffffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffff5757ffffff5757ffffff57ffffff57 +57ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +57ffffffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffff5757ffffff5757ffffff57ffffff57 +57ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff57ffffffffff +57ffffffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffff5757ffffff5757ffffff57ffffff57 +57ffff5757ffffff5757ffffff57ffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff57ffff57ffff +57ffffffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffffff57ffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff57ffff57ff57 +57ffff57ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff57ffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ffff57ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffffffffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff +ff57ffff57ffffffffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffffffff57ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff57ffffffff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff5757ffffff5757ffff5757ffff575757ffff5757ffffffff57ffff5757ffffff57 +57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ff57ffff57ffffffff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff575757ffff5757ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ff57ffff57ffffffff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffff57ff5757ff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffff57ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffff57ffff57ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffff57ffff57ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffffff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ffff5757ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffffff57ffff57ff57ffff5757ffff5757ffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff57ffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff575757ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffff +ffffffffffff57ffff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffff57ffffffffffffff57ffffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffff +57ffff5757ffffff5757ffff57ff57ffff5757ffff575757ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffff +ffffffffffff5757ff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff57ffffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffffff57 +57ffff5757ffffff5757ffff57ff57ffff5757ffff575757ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffff +ffffffffffff5757ff5757ff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ff5757ffffffffffffffffffff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffffff57 +57ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ff5757ffffffffffffffffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffffff57 +57ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ffffffff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ffff57ff5757ffffffffffffffffffff57ff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff +57ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ffff57ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +57ff5757ff5757ff57ffffffffffffffff57ff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff5757ffff57ff +57ffff575757ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ffff57ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff57ffffffffff57ff5757ff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff5757ffff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff57ffffffffff57ff5757ff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff5757ffff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ffffffff57ff5757ff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff575757ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ffffffff57ff5757ff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffffff57ffff57ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57ff5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57ff5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57ff5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57ffff57ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff575757ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57ff5757ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57ff5757ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57ff5757ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ffff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57ff5757ff5757ff5757ff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff5757575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff5757575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff5757575757575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff5757575757575757575757ff5757ff5757575757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffff5757ffffffffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff5757575757575757575757ff5757ff5757575757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff5757ff57ff57ff57ff57ffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffff5757ffff57ffff5757ff5757ff +ffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757ff5757ff5757575757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff57ffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffffffffffffffffff5757ffff57ffff5757ff5757ff +ffffff57ffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757ff5757ff5757575757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff57ffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffffffffffffffffff5757ffff57ffff5757ff5757ff +ffffff57ffff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757ff5757575757ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff57ffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffffff57ffffffffff5757ffff57ffff5757ff5757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757ff5757575757ff5757ff5757575757ff5757 +ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffffff57ffffffffff5757ffff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757ff5757575757575757575757575757ff5757 +ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff +57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff57ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff +ffffffffff57ffffffffff5757ffffff5757ffffffffff5757ffff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757ff5757575757575757575757575757ff5757 +ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffffffffffffffffffffffffffffffff57ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff +ffffffffff57ffffffffff5757ffffff5757ffffffff575757ffff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757575757575757575757575757575757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffff57ffffffffffffffffffffffffff57ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ff +ffffffffff57ffff57ffff5757ffffff575757ffffff575757ffff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757575757575757575757575757575757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ff +ffffffff5757ffff5757575757ffffff575757ffffff57575757ff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757575757575757575757575757575757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff575757575757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffffff +575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffff57ffff57ff +ffffff575757ffff5757575757ffffff575757ffffff57575757ff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757575757575757575757575757575757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff5757ff575757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffff575757ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffffff +575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ff575757ffff57ffff57ff +ffffff575757ffff5757575757ffff57575757ffffff57575757ff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff575757575757575757575757575757575757575757575757575757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff5757ff575757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffff575757ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffffff +575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ff575757ffff57ffff57ff +ff57ff575757ffff575757575757ff57575757ffffff57575757ff57ffff5757575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757ff5757ff575757 +ff5757ff575757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffff575757ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff5757ff57ff57ff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff575757ffff57 +575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ff575757ffff57ffff57ff +ff57ff575757ffff575757575757ff57575757ffffff57575757ff57ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff57575757575757ff5757ff575757 +ff5757ff575757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffff57ff57575757ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff5757ff57575757ff57 +575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ff575757575757ffff57ff +ff57ff575757ffff575757575757ff57575757ffffff57575757ff57ffff57ff575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff5757ffff575757ff5757ff5757ff5757ff5757ff5757ff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff57 +57ffffffff57ff57575757ffff57ffffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff5757ff57575757ff57 +5757575757ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ff575757575757ffff57ff +575757575757ffff575757575757ff57575757ffffff57575757ff57ffff57ff575757ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff57ff57 +57ffffff5757ff57575757ffff5757ffffffffffffffffffffff5757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff5757ff57575757ff57 +5757575757ffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffff575757ff575757575757ffff5757 +575757575757ffff575757575757ff57575757ffffff57575757ff57ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff57575757ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff57ff57ff57 +575757ff5757ff57575757ffff5757ffffffffffffffffffff575757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +5757ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff5757ff575757575757 +5757575757ffffffffffffff5757ffffffffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffff575757ff57575757575757ff5757 +575757575757ffff575757575757ff57575757ffffff57575757ff57ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ffff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffff5757575757 +575757ff5757ff57575757ffff5757ffffffffffffffffffff575757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff5757ff575757575757 +5757575757ff57ffff57ff575757ffffffff57ff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ff57ffffffff575757ff57575757575757575757 +575757575757ffff5757575757575757ff5757ffffff57575757ff57ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff575757575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff575757575757 +575757575757ff57575757ffff5757ffffffffffffffffffff575757ffffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff57575757ff57575757 +5757575757ff57ff5757ff575757ffffff575757575757ffffffffffffffffffffffff57 +ffffffffffffffffffffffff5757ffffff5757ff57ffffffffffffffffffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff575757ffffff57ff5757ff5757ff57575757575757 +575757575757ffff5757575757575757ff5757ffffff57575757ff57ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffffff575757ff5757ffffffff +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff575757575757 +5757575757575757575757ffff5757ffffffffffffffffff5757575757ffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ff57ff5757 +5757575757ff57ff5757ff5757575757575757575757575757ffffffffffffffffff5757 +ffffffffffffff57ffffff57ff57ffff575757575757ff57575757ffffffff5757ffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57575757ff57ff57ff5757ff5757ff57575757575757 +57575757575757ff5757575757575757ff575757ff57575757575757ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff57 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ff57ff57ffff +ffff5757ff57ffff57ffffffff57ffffffff5757ff5757ffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffff5757ffff575757575757 +ff57575757575757575757ff575757ffffffffffffffffff5757575757ffffffffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ff57ff5757 +ff575757575757ff5757ff57575757575757575757575757575757ffffffffffffff5757 +ffffff57ffffff5757575757ff5757575757ff57ff5757575757575757575757575757ff +57ffff5757ffff5757575757ffff57ffffff57575757ffff57ffffffffffffffffffff57 +57ffffffffffffff57ff575757575757575757575757ff5757ff5757ff57575757575757 +57575757575757ff5757575757575757ff575757ff57575757575757ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757575757ff5757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff575757ff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffff575757ff57 +575757575757575757ff5757ff57ffff57ff575757ff57ff57575757575757ff570000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffff57ff5757ffff575757ff57ff +ff5757575757575757575757575757ffffffffffffffffff575757575757ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ff57ff5757 +ffff5757575757ff5757ff57ff5757575757575757575757575757ffffff5757ff57ff57 +575757575757ff5757575757ffff575757ffff57ffffffffffffff57ff5757ff57575757 +57575757575757575757575757ff57ff57ff5757ff57575757575757ffff5757575757ff +5757575757575757575757575757ffff575757575757ff5757ff5757ff57575757575757 +57575757575757ff5757575757575757ff5757575757575757575757ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757575757ff5757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff575757ff5757ff57 +ff57ffffffffffffffff57ffffffffffffffffffffffff575757ffffffffff57ff57ff57 +5757ffff575757575757ff5757ff5757575757ff57ff57ff575757ff57ff5757575757ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffff575757575757ff57ffffffffff +ff575757575757ff57575757575757ffffffffffffffffff575757ff5757ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffffff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ff57ff5757 +ffffff575757575757575757ff575757575757575757575757575757575757575757ff57 +575757ff575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ff57ffffff57ff57ff5757ff57575757ffffff575757ff57575757ffff57ffffff +ffff575757575757ff5757ffff57ffffff5757575757ff5757ff5757ff57575757575757 +57575757575757575757575757575757ff5757575757575757575757ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757575757575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ff5757ff575757ff5757ff57 +ff5757ff57ffff57ff575757ff5757ffffffffffffffff57ffffffffffffffffff5757ff +ffffffff57ffffffffffffff57ffffffff5757ff57ff57575757ffffffff57ffff5757ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffff575757575757ff57ffffffffff +ff575757575757ff5757ff57575757ffffffffffffffff57575757ff5757ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ff57ff5757 +ffffff575757575757575757ff575757575757575757575757575757575757ff5757ffff +5757ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff57ffffff +ffffff57ffffffffffffffffffffffffff57ffff5757ff5757ff5757ff57575757575757 +57575757575757575757575757575757ff5757575757575757575757ffff57ff57ff57ff +ffffff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757575757575757ff5757ff5757ff5757ffff5757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757ffff57ff575757ffff57ff57 +ff5757ff57ff57575757ff57575757ffffffffffffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffff5757ffffffffffffffffff5700ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffff575757575757ff57ffffffffff +ffff5757575757ff5757ff5757ff57ffffffffffffffff57ff5757ffff57ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ffffff5757 +ffffff57ff57575757575757ff5757ff57575757575757575757ff5757ff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff5757ff5757ff5757ff5757575757ff57 +57575757575757575757575757575757ff5757575757575757575757ffff57ff57ff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757575757575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff5757575757ff575757ffff57ff57 +ff5757ff57ff57ff5757ffffffff575757ffffffff575757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffff5757ff5757575757ffffffffff +ffffff57575757ffffffff57575757ffffffffffffffff57ff5757ffff57ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ffffff57ff +ffffffffff57575757575757ff5757ff57575757575757ff5757ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffff575757ffff57575757ffff57 +575757ff57ff57575757ff5757575757ff5757575757575757575757ffffffff57ff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff5757ff5757575757575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff575757ff57ff57ff57ffff57ff57 +ff575757ff5757ff57ffffffffffff5757ffff5757575757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffff5757ffffffffff5757ffffffffff +ffffff57ff5757ffffffff5757ff57ffffffffffff57ff57ff5757ffff57ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffffff5757ffffff57ff +ffffffffff57575757575757ffffffff57575757575757ff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffff575757ffff57575757ffff57 +575757ffffff57575757ff5757575757ff5757575757575757575757ffff57ff57ff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +5757575757ff57ff575757575757575757ff5757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757ff5757ff5757ff575757ff57ffffff57ffffffff57 +57ff5757ff5757ffffffffffffffffff575757575757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffff5757ffffffffffff5757ffffffffff +ffffffffff57ffffffffff5757ff57ffffffffffff575757ff5757ffff57ff57ffff57ff +57ffffffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffff57ff +ffffffffff57575757ff5757ffffffffff575757575757ff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff575757ffff57575757ffffff +ff5757ffffff57575757ff57575757ffff5757575757575757575757ffff57ff57ff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +57575757ff5757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff575757575757ff5757ff575757ff57ff57ff57ffffffff57 +57ff5757ff5757ffffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffff5757ffffffffffffff5757ffffffffff +ffffffffff5757ffffffff5757ff5757ffffffffff575757ff5757ffff57ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffff5757ff57ff5757ffffffffff575757575757ff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff575757ffffff575757ffffff +ff5757ffffff57575757ff5757575757ff5757575757575757575757ff57ffff57ff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +57575757575757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff5757ffff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ffff57ffffffff57 +57ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffff575757ffffffffffffff5757ffffffffff +ffffffffff57ffffffffff5757ff5757ff5757ffff575757ff5757ffff57ff57ffff57ff +57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffff5757ff57ff5757ffffffffffff57575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff575757ffffff +ff5757ffffff575757ffff57575757ffff5757575757575757575757ff57ffff57ff57ff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +57575757575757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff5757ff575757ff5757ff575757ff5757ffffffffffffff57 +57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffff57ffffffffffffffffff5757ffffffffff +ffffffffff57ffffffffff57ffff5757575757ff575757ffff5757ffff57ff57ffff57ff +57ff57ffff57ff57ff57ffff57ff57ff57ff57ff5757ff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffff5757ff57ffffffffffffffffffff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffff +ff57ffffffffff5757ffff57575757ffff5757575757575757575757ff57ffff57ff57ff +5757ff5757ffffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff575757575757575757575757575757575757575757575757 +57575757575757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff5757ff575757ff5757ff575757ffff57ffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffffffffffffffff0000ffff57ffffffffffffffffff5757ffffffffff +ffffffffffffffffffffff57ffff5757575757ff575757ffff5757ffff57ff57ffff57ff +57ff57ffff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffff57ffff57ffffffffffffffffffff5757ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ff57ffffffffff5757ffff57575757ffff575757ff57575757575757ff57ffff57ff57ff +5757ff5757ff57ff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757575757575757575757575757575757575757 +57575757575757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff575757ff575757ff5757ff575757ff5757ff575757ffff57ffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ff00ffffffffffffff0000ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff57575757ff575757ffff5757ffff57ff57ffff57ff +ff5757ffff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffff57ffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ff57ffffffffff57ffffff57575757ffff575757ff57575757575757ff57ffff57ff57ff +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757575757575757575757575757575757575757 +57575757575757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff57575757575757ff5757ff575757ff5757ff575757ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffff00ffffffffffff0000ff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57575757ff57ffffffff57ffffff575757ffff57ff +ff5757ffff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffff57ffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff5757ffff57575757ffff575757ff57575757575757ff57ffff57ff57ff +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757 +575757ff57ff5757ff5757ff5757ff575757575757575757575757575757575757575757 +57575757ff5757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff5757ffff5757ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffff00ffffffffffff0000ff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffff5757ffff575757ffff57ff +ff5757ffff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffff57ffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff5757ffff57575757ffff575757ff57575757575757ff57ffff57ff5757 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff57ff +575757ff57ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff5757ff575757ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffff00ffffffffffff0000005700ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffff57ffffff575757ffff57ff +ff5757ffff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ff575757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffff57575757ffff575757ff57575757575757ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff57ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff5757ff575757ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffff00ffffffffffff0000005700ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffffffffffff575757ffff57ff +ff5757ffff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffff57575757ffffff5757ff57575757575757ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff57ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff575757575757575757575757ff5757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ffffff00ffffffffffff0000ff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffffffffffff575757ffff57ff +ff5757ffff57ff57ff5757ff57ff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffff5757ff57ffffff5757ff5757ff57575757ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff57ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57575757ff5757ff575757575757575757575757575757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ff00ffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffffffffffff575757ffff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffff5757ff57ffffff5757ff5757ff57575757ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff57ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57ff5757ff5757ff5757ff5757ff575757575757575757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ffffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffffffffffff575757ffff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffffff57ff57ffffff5757ff57ffff57575757ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff5757ff57ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff5757ff5757ff575757575757575757ff575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff575757ff57ffffffffffffffff575757ffff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffffff57ff57ffffff5757ff57ffff5757ff57ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff57575757ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff5757ff5757ff57575757575757575757575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ff57ffffffffffffffff5757ff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffff57ffffffff57ff57ffffffff57ff57ffff5757ff57ff57ffff57ffff57 +5757ff575757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff5757ff5757ff57575757575757575757575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57ff5757ff5757ff575757ff575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff575757ffffffffffffffff5757ff57ff57ff +ff5757ffff57ff57ffff57ffffff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffff5757ff57ff57ffff57ffff57 +5757ffff5757ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff5757ff5757ff57575757ff5757575757575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff575757ff5757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffff5757ff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffff5757ff57ff57ffff57ffff57 +5757ff57ff57ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57575757ff5757ff5757ff5757ff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57575757ff5757ff575757ff575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000057ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffff57ffff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff575757ff +ff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffff5757ff57ff57ffff57ffff57 +575757ffff57ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff575757575757575757575757575757575757 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757575757575757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff575757ff575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff005757ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffff57ffff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ff575757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffffff57ff57ff57ffff57ffff57 +575757ffff57ffff575757ff5757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57575757ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0057ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffff57ffff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffffff57ff57ff57ffff57ffff57 +575757ffff57ffff575757575757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ffff5757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffff57ffff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffffff57ff57ff57ffff57ffff57 +575757ffff57ffff5757ff575757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffff57ffff57ff57ff +ff5757ffff57ff57ffff57ff57ff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffffff57ff57ff57ffff57ffff57 +575757ffff57ffff5757ff575757ff5757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff57ffff5757ff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffffff57ff57ff57ffff57ffff57 +575757ffff57ffff5757ff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ffff5757 +ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffff57ffffff57ff57ff57ffff57ffff57 +575757ffff57ffff57ffff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff5757ffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ffffffff5757ff +ff57ffffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffffffffffff57ff57ff57ffff57ffff57 +575757ffff57ffff5757ff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757575757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffffffffffffffff57ff57ffffffffff57 +575757ffffffffff5757ff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757575757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffffffffffffffff57ff57ffffffffff57 +575757ffffffffff57ffff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff575757ff5757ff5757ff57575757ff5757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffff57 +575757ffffffffff57ffff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff575757575757ff5757ff5757ff57575757ff5757ff5757ff5757ff575757ff575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffff57 +575757ffffffffff57ffff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757ff5757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff575757575757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757575757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffff57 +ff57ffffffffffff57ffff575757575757ff5757ff57ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ffff5757ff +ff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffff57 +575757ffffffffff57ffff57ff57575757ff57ff5757ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffff57 +ff57ffffffffffff57ffff575757575757ff57ff5757ff5757ff57ff5757ff57ff5757ff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ff5757ff5757ff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff57 +ff57ffffffffffff57ffff575757575757ff57ff5757ff5757ff57ff5757ff57ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ff5757ff5757ff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff57 +ff57ffffffffffff57ffff575757575757ff57ff5757ff5757ff57ff5757ff57ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ff5757ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffffff +ff57ffffffffffff57ffff57ff57575757ff57ff5757ff5757ff57ff5757ff57ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757575757ff5757ff57 +57ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ffff57ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffffff +ff57ffffffffffff57ffff57ff57575757ff57ff5757ff5757ff57ff5757ff57ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757ff5757ff5757ff57 +57ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff57ffff5757ff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ffff57ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffffff +ff57ffffffffffff57ffff57ff57575757ff57ff5757ff5757ff57ff5757ff57ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff57 +ffff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ffff57ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff57ff5757ff57ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff57 +ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff57ffff5757ff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff57ffff57ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff57ffff575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57575757ffff57ff5757ff57 +ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ffffffff5757ff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff57ffff57ffff57ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff57ff57575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ffffffff57ffff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff57ffff57ffff57ff57ffff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffff575757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff57ff57575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff57 +ffffffffff57ffff57ffff57ffff57ffff57ffff57ff57ffffffffff57ffff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff57ffff57ffffffff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57ffff57 +ffffffffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffff57ffff57ffff57ff +ff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff57ffff57ffffffff57ffff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57ffffff +ffffffffff57ffffffffff57ffff57ffff57ffff57ffffffffffffff57ffffffffff57ff +ff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff57ffff57ffffffffffffff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffff +ffffffffffffffffffffff57ffffffffffffffff57ffffffffffffffffffffffffff57ff +ff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57575757ff5757 +ff5757ff57ffff57ffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff575757ff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff57ffff57ffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffff57ff +ff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff57ffff57ffffffffffffffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ff57ffffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ff57ffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffffffff57ffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ffffffffff57ff57ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ffffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff57ffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757ff57ffff57 +ffff57ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +57ffff5757ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffff57 +ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff575757ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000000ffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffff57ff57ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffffffff57ff57ff5757ff5757ff5757ff5757ffff57ffff +5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffffffff575757ff5757ff5757ff5757ff5757ffffffffff +5757ff5757ff5757ff5757ff5757ffffffff57ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffffffff575757ff5757ff5757ff5757ff5757ffffffffff +5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ffffffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffffffff575757ff5757ff5757ff5757ff5757ffffffffff +57ffff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffffffff575757ff5757ff5757ff5757ffff57ffffffffff +57ffff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff57ff57ffff57ffff57ff5757ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff575757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffffff57ffff57ffffffff575757ff5757ff5757ff5757ffff57ffffffffff +57ffff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff575757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffff57ffffffffff +57ffff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffff57ff5757ff5757ff57ffff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff575757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffff57ffffffffff +57ffff5757ff5757ff57ffff5757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffff57ff5757ff5757ff57ffff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff575757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffff57ffffffffff +57ffff5757ff5757ffffffff5757ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffff57ff5757ff5757ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffff575757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff57ff57ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +57ffff5757ff5757ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffff57ff5757ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff575757ffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +57ffff5757ffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff57ffff57ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +57ffffff57ffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffff5757ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff57ffff5757ffffffffffffffff +ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff5757ffff5757ff5757ff5757ffffffffffffffff +ffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff5757ff57ffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff5757ff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ff5757ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000000ffffffff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffff5757ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff57ffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffff5757ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff5757ffffff57ffffff5757ff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000000ffff000000ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff +00ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0000000000ffff00ff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffff000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000ff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffffff0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000ffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00ff +ffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff +00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff +ffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00 +ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 +ffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +00000000ffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000ffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff00ffff +ffffff00ffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffff +ff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff +00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff +ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffff +ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffff +ff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff0000ffff00ffffff00ff00ffffff00ff00ffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff +ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffffff00ff00ffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff +00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff +ff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffffff00ff00ffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ff +ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffffff00ff00ffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff +00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffff00ffff +ff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffffff00ff00ffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00 +ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00000000ffff00ffffff00ff00ffffff00ff00ffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000ffff00ffffff00ff00ffffff00ff +00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00000000ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff +ff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ffff00ffff00ffffff00ff00ffffff00ff00ffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff +00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00ffffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff +ff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff0000000000ff00ffffff00ff00ffffff00ff00ffffff00ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff +00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00 +ff00ffffff00ff00ffffff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffff +ff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffffffffff00ff00ffffff00ff00ffffff00ff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff +00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00 +ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffffffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffff +ff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff00ff00ff +ffff00ff00ffffff00ff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffff +ffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff0000000000ffffff00ffffffffff00ffffffffff00ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00 +ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffffffff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ff +ffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffff +ffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff000000ffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00ffff +ffffff00ffffffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer +cleartomark +countdictstack exch sub { end } repeat +restore grestore +% +% End Imported PIC File: fig4_2001.eps +%%EndDocument +% +% Polyline +% +% Begin Imported EPS File: fig3_2001.eps +%%BeginDocument: fig3_2001.eps +% +n gs +900 5760 tr +10.680380 -5.056180 sc +0 -445 tr +9 -173 tr +sa +n -9 173 m 623 173 l 623 618 l -9 618 l cp clip n +countdictstack +mark +/showpage {} def +% EPS file follows: +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /users/led/jdm/=tex/=recherche/=Icassp/fig3_2001.eps +%%Creator: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) - by John Bradley +%%BoundingBox: -9 173 623 618 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 632 string def + +% define space for color conversions +/grays 632 string def % space for gray scale line +/npixls 0 def +/rgbindx 0 def + +% lower left corner +-9 173 translate + +% size of image (on paper, in 1/72inch coords) +632.01600 445.03200 scale + +632 445 8 % dimensions of data +[632 0 0 -445 0 445] % mapping matrix +{currentfile pix readhexstring pop} +image + +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffffff000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000ffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff00000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffff00 +ffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff0000 +ffffffff000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00 +ffffff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffff00 +ffffff00ffffff00ffff0000ffffffffffffffffffffffffffffff575757575757575757 +575757575757575757575757575757575757575757ffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00 +ffffff00ffffff00ffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00 +ffffffff00000000ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff0000 +00ffffffffffff00ffff000000ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffff5757ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffffffffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffffffffffffff +ffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffffffffffffff +ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffffffffffffff +ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffffffffffffff +ff57ffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffff57ffffffff +ff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffffffffffffffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffff57ffffffffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ffff57ffff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ff5757ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff5757ff5757ff5757ffff57ff5757ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ffff57ff5757ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ffff57ff5757ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ffff57ff5757ffff57ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ff5757ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ffff57ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ffff57ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffff57ff5757ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ffff57ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffffffff57ffff57ffff57ffff57ff5757ff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffffffff57ffff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffff57ffff57ff57ffff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffff57ffff57ff57ffff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffff57ffff57ff57ffff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ffff57ffff57ffffffff +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffff57ffff57ffff57ff57ffff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffff57ffff57ffff57ff5757ff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffffffff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff57ffff57ffff57ffff57ff5757ff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffffffff57ffff57ffff57ffff57ff5757ff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffffffffff57ff5757ff57ffff57ffff57ff5757ff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff57ffff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffffffffff57ffff57ffffffffffffffffffffffffffffffffffffffffffff57ffff +ffffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffffffff5757ffffffffffffffffffffffffffffffff57ffff +ffffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffff57ff5757ff5757ff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ffffffffffffffffffffffffffffffff57ffff +ffffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff57ffff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ffffffffffffffffffffffffffffffff57ffff +ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ffffffff57ffffffffffffffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff57ffff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffffffffffffffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffffffffffffffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff5757575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffffff57ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff5757ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff5757ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ffff5757ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +57ffffff57ffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffffffffffffffffffffffff57ffffffffffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffffffffffffffffffffffff57ffffffffffffff5757ffffffffffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757ff5757ffff57ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffffffffffffffffffffffff57ffffffffffffff5757ffffffffffffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757ffff57ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffffffffffffff57ffffffff57ffffffffffffff5757ffffffffffffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757ffff57ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffffffffffffff57ffffffff57ffffffffffffff5757ffffff57ffffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757ff5757ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff +ff57ffff57ffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757ff5757ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffff5757ffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff +ff57ffff5757ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757575757ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff57ffffffff5757ffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff +5757ffff5757ffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757575757ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff57ffff57ffffffff5757ffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff +5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757575757ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff5757ff57ffff57ff5757ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff5757ffffff5757ffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff +5757ffff575757ffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff575757575757575757ff +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff +ff5757ff57ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +5757ffff5757ffffff5757ffffff57ffffff5757ffff5757ffffff5757ffff5757ffffff +5757ffff575757ffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff +5757ffff575757ffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffff +5757ffff575757ffff5757ffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff575757ffff5757ffff5757ffffff +5757ffff575757ffff5757ffff5757ffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ffffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff575757ffff5757ffff5757ffffff +5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ffffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff575757ffff5757ffff5757ffffff +5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ffffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff5757 +ff5757ff57575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff575757ffff5757ffff575757ffff +5757ffff57ff57ffff5757ffff5757ffffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff57575757575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff5757ffffff5757ffff575757ffff5757ffff575757ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff5757ffffff5757ffff575757ffff5757ffff575757ffff5757ffff575757ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff57575757575757575757 +ff57ffff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff575757ffff5757ffff575757ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff57575757575757 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff57ff57ffffff57ffff57ff57ffff5757ffff575757ffff5757ffff575757ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff57575757575757 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff575757ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757575757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff57575757ff5757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff57575757575757ff5757ff5757ff +5757ff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff57ff57ff57ff57ffff57ff57ffffff57ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 +ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57 +ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ffff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ffff +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff57 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +5757ffff57ff57ffffff57ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +5757ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +ff57ffff57ff57ff575757ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757 +57ff5757ff5757ff5757ffff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +ff575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +ff57ffff57ff57ff57ff5757ff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ffff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffffff57ffff57ff57ff57 +ff57ffff57ff57ff57ffff57ff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ffff57ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +ff57ffff57ff57ff57ffff57ff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +ff57ffff57ff57ff57ffff57ff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ffff5757ffff57ff57ff57 +ff57ffff57ff57ff57ffff57ff57ff57ffff5757ffff5757ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757ffff57ff57ff57 +ff57ffff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57 +ff57ffff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff57575757575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ffff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +5757ff57ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff5757ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff575757575757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +57575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff575757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +57575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffffffffffffffff57ffffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +57575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffffffff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffff57ffffffffff5757ffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +57575757ff5757ff5757ff5757ffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ffffffffffff57ffffffffff5757ffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +57575757575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffff57ffffffffff5757ffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff5757ff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff57ff57ffffffff57ffffffffff5757ffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff575757575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff5757ffffffff57ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57ff5757ff57ffffffffff5757ffffffffffffffffff +ffff57ffff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff5757ffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57ff5757ff57ffffffffff5757ffffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff5757ffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57ff5757ff57ffffffffff5757ffffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ffff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff5757ffffff5757ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57ff5757ff57ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff5757ffffff5757ffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ff57ff57575757ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ffff5757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57 +ff5757ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff5757ffffff5757ffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57575757ff57575757ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ff57 +ffff57ffffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff575757ffff5757ffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffff +ffffffffffffffffffffff57575757ff57575757ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffff57ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57 +ffffffffffffffffffffff57575757ff57575757ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffff57ff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57 +ffffffffffffffffffffff57575757ff57575757ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff575757ff5757ff5757 +57ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757ff5757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57 +ffffffffffffff57ff57ff57575757ff57575757ffffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff575757575757ff5757ff5757ff575757ff5757ff5757 +ff575757ff5757ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffffffffffffff57ff57ff57575757ff5757575757ffffffff575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff5757ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffff57ffffffffffffffffffffffffff57ff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffff575757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffffffffffffff57ff57ff57575757ff5757575757ffffff57575757ffffffffffffffff +ffffff57ff5757ff57ff57ffff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff5757ffff5757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffffffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffffff57ffff57ffffffffffffffffffff57ff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffff575757ffff +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffffff57ffffff57ff57ff57575757ff5757575757ffffff57575757ffffffffffffffff +ffff5757ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff5757ff5757ff5757ff5757 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff5757ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffff57ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffff57ffffffffffff57ffffffffff57ffff5757ffffffffffffffffff57ff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffff575757ffff +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffff5757ffffff575757ff57575757ff5757575757ffffff57575757ffffffffffffffff +ff57ff57ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff5757ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffff57ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffff57ff57ffffffffffff5757ffffffff57ffff5757ffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffff5757ffff57ff57ffff +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff57 +ffff5757ffffff575757ff57575757ff5757575757ffffff57575757ffffffffffffffff +ff57ff57ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff5757ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ffff57ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffff575757ffffffffffff5757ffffff5757ffff5757ffffffffffffffffff57ff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ffffff57ffff57ff57ffff +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57 +ffff575757ffff575757ff57575757ff5757575757ffffff57575757ffffffffffffff57 +ff57ff57ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +575757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff5757ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffff575757ffffffffffff5757ff57ff575757ff5757ffffffffffff57ff5757ff57ff57 +ffff5757ffff57ff57ff57ffffffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff575757ffff57ff57ffff +575757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57 +ffff57575757ff575757ff57575757ff5757575757ffffff57575757ffffffffffffff57 +ff57ff57ff5757ff57ff57ff5757ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff575757575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff +ff5757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffff575757ffffffffffff5757ff57ff57ff57ff5757ffffffffffff57ff57ffff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff57ffff +575757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57575757ff57 +ffff57575757ff5757575757575757ff5757575757ffffff57575757ffffffffff575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff575757575757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757ff5757ff5757ff5757ff5757ff5757ff5757ffffffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffff57ffff +ffff57575757ffff57ffffff575757ff57ff57ff5757ffffffffffff57ff57ffff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff57ffff57ff5757ff +5757575757ffffff57ffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757575757ff57 +575757575757ff5757575757575757ff5757575757ffffff57575757ffffffffff575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff575757575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff +575757ff575757575757ff5757ff5757ff5757ff5757ff5757ffffffff5757ff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffff57ff57 +ffff57575757ffff57ffff57575757ff57ff57ff575757ffffffffff57ff57ffff57ff57 +ffff5757ffff57ff57ff57ffff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ff5757ff57ff5757ff +5757575757ffffff57ff57ff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757575757ff57 +575757575757ff5757575757575757ff575757575757ffff5757575757ffffffff575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff +575757ff5757ff575757ff5757ff5757ff5757ff5757ff5757ffffff57ff57ff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffff57ff57 +ffff57575757ff5757ff57ff575757ff57ff57ff57ff57ffffffffff57ff57ffff57ff57 +ffff5757ffff57ff57ff57ff5757ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ff +5757575757ffffff57ff57ff5757ff57ff57ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757575757ff57 +57575757ff57ff5757575757575757ff575757575757ffff5757575757ffffffff575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff +575757ff5757ff575757ff5757ff5757ff5757ff5757ff575757ffff57ffff57ff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffff57ffff575757 +5757ff575757ff5757ff57ff575757ff57ff57ff57ff57ffffffffff57ff57ffff57ff57 +ffff5757ffff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff5757ff +575757575757ffff575757575757ff57ff5757ff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757575757ff57 +57575757ff57ff5757575757575757ff575757575757ff575757575757ffffffff575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff +575757ff5757ff575757ff5757ff5757ff5757ff5757ff57ff57575757ffffffff57ffff +ffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffff5757ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffff57ffff575757 +575757575757ff57575757ff575757ff57ff57ff57ff57ffffffffff57ff57ffff57ff57 +ffff5757ffff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757 +5757575757575757575757575757ff57ff5757575757ff57ffffffffffffffffffffffff +57ffffffffffffffffffffffffffffffff575757ff57ff5757ffffffffffffff5757ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffffffffffff5757ff57575757575757ff57 +57575757ff57ff5757575757575757ff575757575757ff575757575757ffffff57575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff5757575757ffff57ff5757ffff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff +575757ff5757ff575757ff5757ff5757ff5757ff5757ff57ff57575757ffffffff5757ff +ffffffffffffffffffffff575757ff57ffffffffffffffffffffffff57ffff5757ff5757 +ff5757ffffff5757ffff57ffffffffffffffffffffffffffffffffff57ffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff00ffffffffffff000000570057ffffff57ffff5757ff57575757575757 +5757ff5757575757575757ff575757ff57ff57ff57ff57ffffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ffffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757 +5757575757575757575757575757ff57ff57575757575757ffffffffffff575757ffff57 +57ffffffffffffff5757ffff5757575757575757ff5757575757575757575757575757ff +57ffffffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffff57ff +ffff57ff57ffffffffffffffff57ff57575757575757ffff57575757575757575757ffff +57575757ff57ff5757575757575757ff575757575757ff575757575757ffffff57575757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff5757ff +575757ff5757ff575757ff5757ff5757ff5757ff5757ff57ff57575757ffffffffff57ff +ffffffffffffffffffff57ffff5757575757ffffffffffffff57ff57ff57ff575757ff57 +57ff57ff57ff5757ff5757ff57ffff5757ff575757ffffffffffff57575700000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff00ffffffffffff0057575757ff57575757575757575757575757ff5757 +5757ff5757575757575757ff57ff575757ff57ff57ff57ffffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757 +57ff5757575757575757575757575757575757575757575757575757ff575757575757ff +575757575757ffff5757575757ff5757ffffff5757ff57ffff57ff5757ff57ffff575757 +57ff575757575757575757575757575757575757575757575757ffffff57575757575757 +5757575757575757575757575757575757ff57575757575757ffff57575757575757ff57 +57575757ff57ff57575757575757575757575757575757575757575757ffffff57ff5757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +575757ff5757ff575757ff5757ff5757ff5757ff5757ff57ff575757ffffffffffff5757 +ffffffffffffffffff5757ffffffff5757575757ffff5757ff575757ff5757ff5757ff57 +57ff575757ff5757575757ff5757575757ff57575757575757575757ff5757570000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffff00ffffff00ffffffffffff0057ffff57ff575757ffffffffff5757ff5757ffffff +5757ff5757575757575757ff57ff575757ff57ffffff57ffffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff575757ff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757 +ffff57575757575757575757575757ff57575757575757ff5757ff57575757ff5757ffff +57ffff5757575757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff57 +57575757ff5757ffff5757ffffff57575757ffffff575757ff57575757575757ffffffff +57575757ff575757ff5757ffffffffffffffffffffff5757ffffff575757575757575757 +57575757ff575757575757575757575757575757575757575757575757ffffff57ff5757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff57ff57ffffffffffffffff5757 +57ffffffffffffffff57ffffffffffffffff575757ff575757ff57ffffffffffffffff57 +57ff575757ff57ff57575757ff5757ff5757ffffff57ffff575757ffff57ff575757ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffff57ffffff +5757ff5757575757575757ff57ff5757ffff5757ffff57ffffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ff57ff57ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff5757ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57ffff57ff57ff575757 +ffff57575757575757575757575757ff57575757ff5757ff57ffffff57ffffffffffffff +ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff57ffffffffffffffffffffffffffffffffffff57ffffffffffffff +ffffffffffffffffffff57ffffffffffffffffffffffffffffffff5757575757575757ff +57575757ff5757575757575757575757575757575757575757ff575757ffffff57ff5757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff5757ff5757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff575757ff5757ff57ff575757ff57ff5757ffffffffffffffffffffffff +57ffffffffffffff57ffffffffffffffffffffff57575757ffffffffffffffffffffff57 +ffff57ffff57ffff57ffffffff57ffff57ffffffffffffff57ffffffffffffff5700ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +5757ff5757575757575757ffffff5757ffff5757ffff57ffffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff57ffffff57ff57ffff57ff57ff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ff575757 +ffff5757ff57575757575757ff57ffff575757ffffff57ffffffffffffffffffffffffff +ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff575757575757ff57ff +57575757ff57575757575757575757575757575757575757ffff575757ffffff57ff5757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff5757575757ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff575757ff5757ff57ff575757ff57ff57ffffffffffffffffffffffffff +57ffffffffffffff57ffffffffffffffffffffffff57ffffffffffffffffffffffffffff +ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +57ffff5757ff5757575757ffffff5757ffff5757ffff57ffffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ff57ff57 +ffff5757ff5757575757ff57ffffffff5757ffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757575757ff57ff +575757ffff57575757575757575757575757575757575757ffffff5757ffffff57ff5757 +ff57ff57ff5757ff57ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff575757ff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff575757ff5757ff57ff575757ff57ff57ffffffffffffffffffffffffff +57ffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +57ffff5757ff57ffff5757ffffffff57ffff5757ffffff57ffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff57ffffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffffffff +ffff5757ff5757575757ffffffffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57ff +575757ffff57575757575757575757575757575757575757ffffff5757ffffff57ff5757 +ff57ff57ff57575757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff575757ff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff575757ff57575757ff5757ff5757ff57ffffffffffffffffffffffffff +5757ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +57ffff5757ff57ffffffffffffffff57ffff5757ffffff57ffffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffffffff +ffff5757ff5757575757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57ff +575757ffff5757575757575757575757575757ff57575757ffffff5757ffffff57ffff57 +ff57ff57ff57ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff57ff575757ff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffff +ff5757ffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +57ffff5757ff57ffffffffffffffffffffffffffffffff5757ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffffffff +ffffffffff57575757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57ff +575757ffff5757ffff57575757575757575757ff57575757ffffffff57ff575757ffff57 +ff57ff57ff57ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ffff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffff +ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +57ffff57ffff57ffffffffffffffffffffffffffffffff5757ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ff57ffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57ff +575757ffff5757ffff57575757575757575757ff57575757ffffffff57ff575757ffff57 +5757ff57ffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffff +ffff575757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffff57ffff57ffffffffffffffffffffffffffffffff5757ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff57ffffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57575757ff57ff +5757ffffff5757ffff57575757575757575757ff57575757ffffffff57ff575757ffff57 +5757ff57ff57ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff57ff575757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffffffff +ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff5757ffffffffff +ffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ff57ff57ff +5757ffffff5757ffff57575757575757575757ff57575757ffffffff57ff575757ffff57 +5757ff575757ff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ffff57ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffff57ffffffffffffffffffffffffffffffff +ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff5757ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ff57ff57ffff5757ffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ff57ff +ff57ffffff5757ffff57575757575757575757ff57575757ffffffff57ff575757ffff57 +57ffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ff57ff +ff57ffffff5757ffffff575757ff5757575757ff57575757ffffffff5757575757ffffff +5757ff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ff57ff +ff57ffffff5757ffffff57ff57575757575757ff57575757ffffffff5757575757ffffff +57ffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff57ffffff +ffffffffff5757ffffff57ff57575757575757ff57575757ffffffff57575757ffffffff +57ffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ff57ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff +ffffffffff5757ffffff57ff57ff5757575757ff57575757ffffffff5757575757ffffff +57ffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57575757575757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff57ffff57575757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffffff57ff57ff5757575757ff57575757ffffffff57575757ffffffff +57ffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff575757ffff5757ff5757ff5757ff575757ff5757ffff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ff57ff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffffffffff57ff5757575757ff57575757ffffffff57575757ffffffff +57ffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757ff5757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff575757ff575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffff5757ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffffffffff57ff5757575757ff5757ff57ffffffff57575757ffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff5757575757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff5757ffffffffff57ff575757ff57ff57ffff57ffffffff57575757ffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff57ff575757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57575757ff5757ff5757ff575757ff5757ff575757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ffffffffffffffffff5757ffffff57ffff57ffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff5757ff57ff575757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff57ffffffffffffffffff5757ffffff57ffff57ffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff575757ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57575757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffff57ffff57ffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffff57ffffffffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff5757ffffff57ffffffffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ffffffff5757ffff57ffffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffffffff575757ffffffffff +ffffff5757ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff +ffffffff57ffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ffff5757ffff575757ff5757ff5757ff57ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ffff5757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff57ff57ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff575757ffff5757ffff57ff57ffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff575757ffffffffff +ffffffffffffff5757ff5757ff57ff5757ffffff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff575757ff575757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757ffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff57575757ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff57ff575757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff575757ff575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ffff57ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff57575757575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000000ffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff5757ff57ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff57575757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff5757ff57ff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff57575757ff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff5757ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff575757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff57ff57ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff575757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff57ff57ffff5757ffffff5757ffff5757ffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff57ff575757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ff5757ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffff575757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757575757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ffffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff575757ff57ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff575757ff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57575757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ffffffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffff5757ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffffff57ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffffff57ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffff5757ffffff57ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff57ff57ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff575757ffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff5757 +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff57ffff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff5757ff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff57 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ff5757ffff57ffff57ffff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ff5757ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +ffffff57ffffff57ffffff5757ffff57ff57ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5757 +ffffff57ffffff57ffffff5757ffffff57ffffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff5757ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffff57ffffff57ffffff5757ffffff5757ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ff5757ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffff57ffffff57ffffff5757ffffff5757ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffff57ffffff57ffffff5757ffffff5757ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff5757ff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffff57ffffff57ffffff5757ffffff5757ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffff5757ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000000ffffffff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffffffffffff57ffffff5757ffffff5757ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffffffffffff57ffffff5757ffffff5757ffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ff5757ff5757ff5757ff57ffff57ff5757 +ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57ff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffff5757ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff5757ff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff5757ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff5757ff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ff5757ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ff57 +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff57ffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ff5757ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ff5757 +ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff5757ffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff5757ff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57 +ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff5757ffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff5757ff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff5757ff57ffff57ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff5757 +ff57ffff57ffff57ff5757ff5757ff57ffff57ffff57ff5757ff57ffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff57ff +ff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ff5757ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff5757ff57ffff57ffff57ffff57ff5757ff5757ff57ff +ff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ff5757ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ff5757ff5757ff57ff +ff57ffff57ffff57ff5757ff57ffff57ffff57ffff57ff5757ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffff57ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ff5757ff57ff +ff57ffffffffff57ff5757ff57ffff57ffff57ffff57ff5757ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ff5757ff57ff +ffffffffffffff57ff5757ff57ffff57ffff57ffff57ff5757ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ff5757ff57ff +ffffffffffffff57ff5757ff57ffff57ffffffffffffffff57ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ff5757ff57ff +ffffffffffffff57ff5757ff57ffff57ffffffffffffffff57ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ff5757ffffff +ffffffffffffff57ff5757ff57ffff57ffffffffffffffff57ff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffff +ffffffffffffff57ff5757ff57ffff57ffffffffffffffff57ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff5757ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffff +ffffffffffffff57ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ff57 +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ffff57ffffff +ffffffffffffffffff5757ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffff57ffff57ffff57ffff57ffff57ffffffffff57ffffff +ffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000000ffff000000ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffff57ffff57ffff57ffff57ffffffffff57ffffff +ffffffffffffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffffffffff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff5757ff57ffffffffff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffff57ffffffffff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffff57ffffffffff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffff5757ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffff57ffffffffff57ffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffff57ffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffff57ffffffffff57ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff57ffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffffff57ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff5757ffffff57ffffff57ffffffff57ff +ffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff5757ffffff57ffffff5757ffffff57ff +ffff5757ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff57ff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ff57ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffff5757ffffff57ff +ffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff5757ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffff57ffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffffff57ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ff5757ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffff57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff5757ff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffff57ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff00ff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000000ffff00ff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffff00ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ff5757ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffff57ffff57ffff57ffff57ffff57ffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffff57ffff57ffff57ffff57ffffffffff57ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffff57ffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffff57ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffff57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ff5757ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ff0000ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff57ffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000000ff0000ffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000000000ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffff57ffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff57ffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffff57ffff57ffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffff5757ffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff57ffffffffff57ffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffff57ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff57ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff0000000000ff00000000ffff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffff00000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000ffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffffff000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000ffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff +00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00 +ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffff +ff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ff +ffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ff +ffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 +000000ffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000ffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffffff00ffffffffff00ffffff +ffff00ffffffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ff00 +ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff +ff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff +00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000ffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00ffffff +00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff0000ffff00ffffff00ff00ffffff00ff00ffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff +00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffffff00ff00ffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00 +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff00ff00ffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff +00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000ffff +00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffffff00ffffff00ff00ffffff00ff00ffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00 +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffff00ffffff +00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff00ff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff00ff +00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00000000ffff00ffffff00ff00ffffff00ff00ffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000ffff00ffffff00ff00ffffff00ff00 +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff00000000ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff00ffff00ffff00ffffff00ff00ffffff00ff00ffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +00ffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00 +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00 +ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffff00ffffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffff +00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff0000000000ff00ffffff00ff00ffffff00ff00ffffff00ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff +00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffff +00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ffffffff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00 +ffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff00ff00ffffff00ff00ffffff00ff00ffffff00ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffff00ffffff00ff00ffffff00ff +00ffffff00ff00ffffff00ffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff +00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffff00ff00ffffff00ff00ffffff00ff00ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00 +ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffff00ff00ffffff00ff00ffffff00ff00ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff00ff +ff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ffffffffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffff00ffffff00ffff00ff00ffffff00ff00ffffff +00ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ff00ffffff00ffff00ff00ffffff00ff00ffffff00ff00ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff00ffffffff00ff00ffffff00ff00ffff +ff00ff00ffffff00ff00ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffff +ff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff0000000000ffffff00ffffffffff00ffffffffff00ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffff00ff +ffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffff00ffffffff00ffffffffff00ffffffffff00ffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffff +ffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffffff00ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 +ffffffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff000000ffffffff00ffffffffff00ffffffff +ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff000000ffffffff00ffffffffff00ffffffffff00ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000000ffffff00ffffffffff00ffffff +ffff00ffffffffff00ffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer +cleartomark +countdictstack exch sub { end } repeat +restore grestore +% +% End Imported PIC File: fig3_2001.eps +%%EndDocument +% +/Helvetica-Bold ff 300.00 scf sf +4050 2700 m +gs 1 -1 sc (a) col0 sh gr +/Helvetica-Bold ff 300.00 scf sf +4140 5490 m +gs 1 -1 sc (b) col0 sh gr +/Helvetica-Bold ff 300.00 scf sf +4095 8280 m +gs 1 -1 sc (c) col0 sh gr +$F2psEnd +rs + +%%EndDocument + @endspecial 593 3004 a Fm(Fig)o(.)18 b(2)p Fl(.)23 b(Result)c(on)h +(\223The)f(quick\224)g(\(be)o(ginning)i(of)e(\223The)g(quick)g(fox)h +(jumps)f(o)o(v)o(er)g(the)g(lazy)g(dog\224\))1628 3091 +y(a:)k(original)c(signal)905 3178 y(b:)k(slo)n(wed)c(do)n(wn)h(signal)f +(\(by)h(a)f(f)o(actor)g(of)g(2\))g(without)g(phase)g(correction)899 +3265 y(c:)24 b(slo)n(wed)19 b(do)n(wn)h(signal)f(\(by)g(a)g(f)o(actor)g +(of)g(2\))g(with)g(the)g(phase)h(correction)-186 3613 +y(small)j(ener)o(getic)h(re)o(gion)g(of)f(the)h(signal.)37 +b(This)23 b(ensures)i(that)e(the)h(transi-)-186 3700 +y(tion)f(between)h(the)f(non-v)o(oiced)h(and)g(the)f(v)o(oiced)h +(portions)g(of)f(the)g(time-)-186 3787 y(scale)f(signal)g(will)f(not)h +(generate)h(an)o(y)f(click.)32 b(This)21 b(technique)i(allo)n(ws)f(us) +-186 3873 y(to)e(get)g(high)h(quality)f(synthesized)i(time-scaled)e +(signals)g(without)g(practi-)-186 3960 y(cally)f(an)o(y)g(artif)o +(acts.)-61 4072 y(But)27 b(in)g(order)g(to)h(be)f(sure)h(of)f +(eliminating)h(transitional)f(clicks)g(we)-186 4158 y(used)d(the)f +(follo)n(wing)h(ad-hoc)g(technique.)38 b(Let)22 b Fj(t)1122 +4166 y Fh(o)1180 4158 y Fl(be)h(the)h(onset)f(time)g(of)-186 +4245 y(a)30 b(v)o(oiced)g(portion)g(of)g(the)g(analyzed)h(signal.)56 +b(Let)29 b Fi(\010)1294 4253 y Fh(cur)r(r)1454 4245 y +Fl(the)h(current)-186 4332 y(synchronization)20 b(v)o(ector)e(\227for)f +(this)h(v)o(oiced)g(portion\227.)23 b(And)18 b(let)f +Fi(\010)1657 4340 y Fh(pr)r(ev)-186 4419 y Fl(the)27 +b(pre)n(vious)i(phase)f(synchronization)h(v)o(ector)l(.)49 +b(F)o(or)27 b(synthesizing)h(the)-186 4505 y(time-scaled)21 +b(signal)h(up)f(to)g Fj(t)581 4513 y Ff(0)635 4505 y +Fd(\000)d Fj(T)11 b(S)25 b Fl(where)c Fj(T)11 b(S)25 +b Fl(is)20 b(the)i(time)e(threshold)-186 4592 y(discussed)c(abo)o(v)o +(e,)g(we)e(use)h Fi(\010)595 4600 y Fh(pr)r(ev)724 4592 +y Fl(.)21 b(T)-6 b(o)15 b(synthesize)g(the)g(time-scale)f(signal)-186 +4679 y(for)26 b(each)h(sample)f(at)g(time)f Fj(t)h Fl(from)g +Fj(t)818 4687 y Ff(0)875 4679 y Fd(\000)c Fj(T)11 b(S)29 +b Fl(to)d Fj(t)1201 4687 y Ff(0)1261 4679 y Fl(we)g(use)g(a)g(linearly) +-186 4766 y(interpolated)20 b(phase)f(v)o(ector:)104 +5034 y Fi(\010)159 5042 y Fh(t)209 5034 y Fi(=)i(\010)345 +5042 y Fh(pr)r(ev)492 5034 y Fi(+)578 4986 y Fj(t)c Fd(\000)g +Fj(t)728 4994 y Ff(0)779 4986 y Fi(+)g Fj(T)11 b(S)p +578 5017 385 4 v 717 5085 a(T)g(S)973 5034 y Fi(\(\010)1058 +5042 y Fh(cur)r(r)1205 5034 y Fd(\000)17 b Fi(\010)1337 +5042 y Fh(pr)r(ev)1466 5034 y Fi(\))203 b Fl(\(6\))-61 +5252 y(And)22 b(\002nally)-5 b(,)22 b(in)g(the)g(v)o(oiced)g(re)o +(gion,)h(we)e(use)i Fi(\010)1244 5260 y Fh(cur)r(r)1395 +5252 y Fl(to)f(synthesize)-186 5339 y(the)d(time-scaled)g(signal.)2391 +3613 y Fm(4.)45 b(IMPLEMENT)-7 b(A)g(TION)17 b(DET)-7 +b(AILS)1975 3833 y Fl(DFT)19 b(v)o(ectors)h(calculated)g(for)g(each)g +(incoming)h(v)o(ector)f(are)f(sa)o(v)o(ed)h(in)g(tw)o(o)1975 +3920 y(b)o(uf)n(fers.)35 b(These)23 b(tw)o(o)g(b)o(uf)n(fers)g(are)g +(\002lled)f(up)h(alternati)n(v)o(ely)g(as)g(time)f(pro-)1975 +4006 y(gresses.)k(Such)20 b(a)g(technique)h(has)f(been)h(used)f(in)g +(order)g(to)f(sa)o(v)o(e)h(memory)-5 b(.)1975 4093 y(In)19 +b(doing)g(so,)g(not)g(all)f(the)g(DFT)g(v)o(ectors)h(must)f(be)h(k)o +(ept)g(in)g(memory)-5 b(.)24 b(T)-6 b(w)o(o)1975 4180 +y(b)o(uf)n(fers)25 b(are)g(also)g(needed)h(because)g(of)f(the)g(con)m +(v)o(olution)h(operation)f(be-)1975 4267 y(tween)31 b(the)f(DFT)f(coef) +n(\002cients)i(and)f(the)h(Lagrange)g(impulse)f(response)1975 +4353 y(\002lter)o(\227See)h([13])h(for)g(details)g(concerning)i +(Lagrange)f(\002lters)f(and)g(see)1975 4440 y([5)q(])27 +b(for)h(an)g(e)o(xplanation)h(concerning)h(the)e(use)g(of)g(such)g(an)h +(interpolat-)1975 4527 y(ing)24 b(\002lter)o(\227)e(An)i(important)g +(point)g(to)g(be)g(mentioned)h(is)e(that)h(particular)1975 +4614 y(care)19 b(is)e(needed,)i(precisely)-5 b(,)19 b(in)e(order)i(to)f +(mak)o(e)g(the)g(e)o(xact)h(con)m(v)o(olution)g(at)1975 +4700 y(the)j(be)o(ginning)h(of)e(the)h(current)g(b)o(uf)n(fer)f(by)h +(taking)g(into)g(account)h(the)e(last)1975 4787 y(v)o(ectors)f(of)f +(the)g(pre)n(vious)h(b)o(uf)n(fer)l(.)2100 4905 y(A)g(possible)h +(weakness)g(of)g(our)f(algorithm)h(consists)g(in)f(the)g(f)o(act)h +(that)1975 4992 y(the)15 b(memory)h(space)g(of)f(the)g(b)o(uf)n(fers)g +(depends)i(on)e(the)g(number)h(of)f(samples)1975 5078 +y(of)21 b(each)h(re)o(gion)g(processed:)29 b(v)o(oiced)21 +b(or)g(non-v)o(oiced.)31 b(In)21 b(particular)m(,)h(for)1975 +5165 y(e)o(xample,)c(if)f(a)g(re)o(gion)h(contains)g(a)f(lar)o(ge)g +(number)h(of)g(samples,)f(the)h(mem-)1975 5252 y(ory)24 +b(space)g(needed)h(will)d(be)h(important.)37 b(Furthermore)23 +b(one)h(can)g(e)o(xpect)1975 5339 y(that)19 b(the)g(quality)g(of)f(the) +h(synthesized)h(speech)g(will)d(be)i(lesser)g(in)g(the)f(case)p +eop +%%Page: 4 4 +4 3 bop -186 83 a Fl(of)25 b(lar)o(ge)g(duration)h(re)o(gion)g(of)f +(the)h(speech)g(signal.)42 b(The)25 b(ideal)h(solution)-186 +170 y(w)o(ould)20 b(consist)g(in)g(the)f(possibility)h(of)f +(synchronizing)j(the)e(phase)g(of)n(fsets)-186 257 y(at)i(an)o(y)h +(instant)g(of)f(interest)g(of)h(the)f(speech)i(signal)e(without)h +(introducing)-186 343 y(an)o(y)j(artif)o(act.)41 b(This)25 +b(could)g(be)h(achie)n(v)o(ed)g(on)g(the)f(basis)g(of)g(a)g(pitch)h +(syn-)-186 430 y(chronous)h(procedure)f(which)g(w)o(ould)g +(re-synchronize)h(phase)f(v)n(alues)f(at)-186 517 y(each)c(glottal)f +(closure)h(instant)g(found)g(by)g(the)f(pitch)h(marking)g(algorithm.) +-186 604 y(The)g(technique,)h(we)f(accepted,)i(to)d(eliminate)h +(transitional)g(clicks)g(could)-186 690 y(be)f(used)h(to)f(connect)h +(phases)g(between)f(tw)o(o)g(consecuti)n(v)o(e)i(pitch)e(periods.)-186 +777 y(Due)i(to)f(considerations)i(of)f(computation)g(time)g(we)f +(decided)i(not)e(to)h(im-)-186 864 y(plement)k(this)f(idea)h(because)g +(results)f(were)h(quite)f(satisf)o(actory)h(without)-186 +951 y(further)19 b(phase)h(correction.)272 1158 y Fm(5.)45 +b(EXPERIMENT)-7 b(AL)17 b(RESUL)-7 b(TS)-186 1323 y Fl(Thanks)26 +b(to)e(the)h(techniques)h(reported)g(in)f(this)f(paper)m(,)j(we)d(were) +h(able)g(to)-186 1410 y(obtain)h(high)f(quality)g(time-scaled)g(speech) +h(signals.)42 b(In)25 b(particular)m(,)h(the)-186 1496 +y(phasiness)20 b(artif)o(act)f(w)o(as)g(in)g(a)f(great)h(proportion)i +(reduced.)-61 1584 y(Fig.)15 b(2)i(clearly)g(sho)n(ws)g(the)g(ef)n +(fect)g(of)g(the)g(phase)g(correction.)23 b(Fig.)16 b(2.b)-186 +1671 y(and)23 b(Fig.)f(2.c)g(represent)i(the)e(same)h(original)g +(signal)g(slo)n(wed)g(do)n(wn)g(by)g(a)-186 1757 y(f)o(actor)h(of)g(2)f +(without)h(and)g(with)g(the)f(phase)i(correction.)38 +b(It)23 b(can)h(be)g(seen)-186 1844 y(that)i(the)g(o)o(v)o(erall)g +(shape)h(of)f(the)g(v)o(oiced)h(signal,)h(especially)e(during)h(the) +-186 1931 y(w)o(ord)16 b(\223quick\224,)h(is)f(not)g(preserv)o(ed)g +(when)h(the)f(phase)g(is)f(not)h(corrected.)23 b(On)-186 +2018 y(the)16 b(contrary)-5 b(,)16 b(the)g(shape)g(in)m(v)n(ariance)h +(property)f(allo)n(ws)f(the)h(o)o(v)o(erall)f(shape)-186 +2104 y(of)28 b(the)g(signal)g(to)g(be)g(k)o(ept)g(after)g(slo)n(wing)g +(do)n(wn.)51 b(From)27 b(a)h(percepti)n(v)o(e)-186 2191 +y(point)21 b(of)f(vie)n(w)-5 b(,)20 b(most)g(of)g(the)h(phasiness)g(ef) +n(fect)f(has)h(been)g(suppressed)g(in)-186 2278 y(the)e(\002nal)g(slo)n +(wed)g(do)n(wn)h(signal.)-61 2365 y(Further)e(e)o(xamples)i(are)f +(proposed)h(in)f(the)g(web)g(page:)-186 2452 y Fm(http://www)-5 +b(.loria.fr/)p Fk(\230)p Fm(jdm/PhaseV)e(ocoder/index.html)9 +b Fl(where)15 b(some)-186 2539 y(speech)20 b(\002les)e(can)i(be)f(do)n +(wn-loaded.)521 2746 y Fm(6.)45 b(DISCUSSION)-186 2911 +y Fl(The)23 b(system)g(which)g(competes)h(with)e(ours)h(is)f(the)h +(system)g(proposed)i(by)-186 2998 y(Quatieri)c([2)q(].)30 +b(The)22 b(idea)g(behind)h(the)f(tw)o(o)f(systems)h(is)g(the)f(same:)29 +b(shape)-186 3085 y(in)m(v)n(ariance.)j(But)21 b(the)g(results)g(and)h +(the)g(dra)o(wbacks)g(of)g(each)g(method)g(are)-186 3171 +y(not)c(equi)n(v)n(alent.)24 b(Our)17 b(methodology)j(is)d(quite)h +(time)f(consuming)i(because)-186 3258 y(of)c(an)g(iterati)n(v)o(e)f +(process)i(sample)f(by)h(sample.)22 b(But)15 b(the)g(naturalness)g(of)g +(the)-186 3345 y(scaled)23 b(signal)f(obtained)i(is)d(quite)i(good.)34 +b(On)23 b(the)f(contrary)h(the)f(compu-)-186 3432 y(tation)d(time)g +(needed)h(by)g(Quatieri')l(s)f(method)h(is)e(relati)n(v)o(ely)h +(unimportant,)-186 3518 y(b)o(ut)25 b(the)g(naturalness)g(obtained)h +(for)f(lar)o(ge)g(e)o(xpansion)h(f)o(actors)g(is)e(not)h(as)-186 +3605 y(good)18 b(as)e(ours.)23 b(In)17 b(particular)g(a)f(\223drunk)o +(en\224)j(characteristic)e(is)f(introduced)-186 3692 +y(in)i(the)g(reconstructed)i(speech)f(signal)f(in)g(the)g(case)h(of)f +(a)g(lar)o(ge)g(e)o(xpansion.)112 3899 y Fm(7.)45 b(CONCLUSION)18 +b(AND)g(FUTURE)g(W)o(ORK)-186 4064 y Fl(W)-6 b(e)30 b(proposed)i(in)f +(this)f(paper)h(a)g(methodology)h(for)f(time-scaling)f(that)-186 +4151 y(permits)g(the)f(creation)h(of)g(high)g(quality)g(synthesized)h +(speech)g(signals.)-186 4238 y(The)22 b(naturalness)h(of)f(the)g +(reconstructed)i(speech)f(is)e(preserv)o(ed)i(e)n(v)o(en)g(for)-186 +4325 y(lar)o(ge)k(e)o(xpansion)j(f)o(actors.)49 b(W)-6 +b(e)27 b(intend)h(no)n(w)-5 b(,)30 b(using)f(the)e(same)h(frame-)-186 +4411 y(w)o(ork,)17 b(to)e(handle)i(the)f(issue)g(of)f(pitch)h +(shifting,)h(issue)f(which)g(has)g(recently)-186 4498 +y(been)31 b(studied)g(for)f(e)o(xample)h(by)g(Laroche)g(in)f(the)g +(case)h(of)f(the)g(phase-)-186 4585 y(v)o(ocoder[14)r(].)499 +4792 y Fm(8.)44 b(REFERENCES)-149 4957 y Fl([1])e(J.)20 +b(Laroche,)h Fa(\223Impr)m(o)o(ved)g(Phase)g(V)-8 b(ocoder)21 +b(T)l(ime-Scale)f(Modi\002ca-)-20 5044 y(tion)c(of)f(A)o(udio\224)p +Fl(,)h(IEEE)e(T)m(ransactions)j(on)f(Speech)g(and)h(Audio)f(Pro-)-20 +5131 y(cessing)k(,)e(V)-10 b(ol.)19 b(7,)g(NO.)f(3,)h(pp.)g(323-332,)h +(May)g(1999.)-149 5252 y([2])42 b(T)-6 b(.)28 b(F)-6 +b(.)28 b(Quatieri)h(and)g(R.)f(J.)h(McAule)o(y)-5 b(,)32 +b Fa(\223Shape)e(In)m(variant)f(T)l(ime-)-20 5339 y(Scale)19 +b(and)f(Pitc)o(h)g(Modi\002cation)h(of)f(Speec)o(h\224)p +Fl(,)h(IEEE)d(T)m(ransactions)2141 83 y(on)28 b(Signal)e(Processing,)j +(V)-10 b(ol.)26 b(40,)j(NO.)d(3,)i(pp.)f(497-510,)j(March)2141 +170 y(1992.)2013 290 y([3])41 b(R.)15 b(J.)g(McAule)o(y)h(and)g(T)-6 +b(.)14 b(F)-6 b(.)15 b(Quatieri,)g Fa(\223Speec)o(h)h +(Analysis/Synthesis)2141 377 y(Based)25 b(on)g(a)f(Sinusoidal)i(Repr)m +(esentation\224)p Fl(,)g(IEEE)d(T)m(ransactions)2141 +463 y(on)c(Acoustics,)f(Speech,)h(and)f(Signal)g(Processing,)g(V)-10 +b(ol.)18 b(ASSP-34,)2141 550 y(NO.)h(4,)f(pp.)h(744-754,)i(August)e +(1986.)2013 670 y([4])41 b(T)-6 b(.)21 b(F)-6 b(.)21 +b(Quatieri)g(and)h(R.)f(J.)g(McAule)o(y)-5 b(,)22 b Fa(\223A)o(udio)f +(Signal)h(Pr)m(ocessing)2141 757 y(Based)f(on)f(Sinusoidal)i +(Analysis/Synthesis\224)p Fl(,)e(in)g(Applications)h(of)2141 +844 y(Digital)16 b(Signal)h(Processing)g(to)f(Audio)i(and)f(Acoustics,) +g(Kahrs)g(and)2141 930 y(K.)i(brandenb)o(ur)o(g,)h(Eds.)e(Boston,)h +(MA:)g(Kluwer)m(,)g(1998.)2013 1050 y([5])41 b(J.)i(di)g(Martino,)49 +b Fa(\223Speec)o(h)44 b(Synthesis)f(Using)h(Phase)f(V)-8 +b(ocoder)2141 1137 y(tec)o(hniques\224)p Fl(,)34 b(Proceedings)d(of)f +(the)h(5th)f(European)h(Conference)2141 1224 y(on)c(Speech)g +(Communication)h(and)f(T)-5 b(echnology)28 b(-)e(Eurospeech)h(,)2141 +1310 y(Rhodes)20 b(\(Greece\))f(,)g(Sept.)f(1997)i(Eurospeech-97.)2013 +1430 y([6])41 b(A.)27 b(V)-10 b(.)26 b(Oppenheim)j(and)e(R.)f(W)-7 +b(.)26 b(Schafer)m(,)j Fa(\223Digital)d(Signal)h(Pr)m(o-)2141 +1517 y(cessing\224)p Fl(,)19 b(Engle)n(w)o(ood)i(Clif)n(fs,)c(NJ:)i +(Prentice-Hall,)f(1975.)2013 1637 y([7])41 b(R.)32 b(Portnof)n(f,)k +Fa(\223T)l(ime-Scale)d(Modi\002cations)h(of)f(Speec)o(h)h(Signals)2141 +1724 y(Based)24 b(on)f(Short-T)l(ime)g(F)-8 b(ourier)24 +b(Analysis\224)p Fl(,)f(IEEE)f(T)m(ransactions)2141 1811 +y(on)29 b(Acoustics,)i(Speech,)g(and)e(Signal)f(Processing,)j(V)-10 +b(ol.)29 b(29,)h(pp.)2141 1897 y(374-390,)21 b(1981.)2013 +2017 y([8])41 b(S.)46 b(Senef)n(f,)53 b Fa(\223System)47 +b(to)f(Independently)j(Modify)e(Excitation)2141 2104 +y(and/or)21 b(Spectrum)f(of)g(Speec)o(h)g(W)-7 b(aveform)21 +b(W)l(ithout)f(Explicit)e(Pitc)o(h)2141 2191 y(Extr)o(action\224)34 +b Fl(IEEE)e(T)m(ransaction)j(on)f(Acoustics,)j(Speech,)h(and)2141 +2278 y(Signal)24 b(Processing,)i(V)-10 b(ol.)23 b(ASSP-30,)h(NO.)g(4,)h +(pp.)f(566-578,)j(Au-)2141 2364 y(gust)20 b(1982.)2013 +2484 y([9])41 b(E.)15 b(Moulines)h(and)g(J.)f(Laroche,)i +Fa(\223Non)e(P)-6 b(ar)o(ametric)15 b(T)-7 b(ec)o(hniques)17 +b(for)2141 2571 y(Pitc)o(h-Scale)f(and)g(T)l(ime-Scale)g +(Modi\002cation)h(of)e(Speec)o(h\224)p Fl(,)i(Speech)2141 +2658 y(Communication,)j(V)-10 b(ol.)19 b(16,)g(pp.)g(175-205,)i +(February)e(1995.)1975 2778 y([10])42 b(J.)16 b(Laroche,)g +Fa(\223T)l(ime)f(and)h(Pitc)o(h)f(Scale)i(Modi\002cation)g(of)f(A)o +(udio)f(Sig-)2141 2865 y(nals\224)p Fl(,)k(in)g(Applications)h(of)g +(Digital)e(Signal)h(Processing)h(to)f(Audio)2141 2951 +y(and)d(Acoustics,)f(Kahrs)g(and)h(K.)e(Brandenb)o(ur)o(g,)i(Eds.)e +(Boston,)i(MA:)2141 3038 y(Kluwer)m(,)j(1998.)1975 3158 +y([11])42 b(Y)-10 b(.)36 b(Laprie)g(and)h(V)-10 b(.)35 +b(Colotte,)40 b Fa(\223A)o(utomatic)35 b(Pitc)o(h)h(Marking)h(for)2141 +3245 y(Speec)o(h)24 b(T)l(r)o(ansformations)g(V)-6 b(ia)22 +b(TD-Psola\224)p Fl(,)g(Proceedings)i(of)f(the)2141 3332 +y(5th)34 b(European)h(Conference)g(on)f(Speech)g(Communication)h(and) +2141 3418 y(T)-5 b(echnology)34 b(-)d(Eurospeech)i(,)h(Rhodes)f +(\(Greece\))e(,)j(Sept.)d(1997)2141 3505 y(Eurospeech-97.)1975 +3625 y([12])42 b(T)-6 b(.F)g(.)24 b(Quatieri,)h(R.B.)f(Dunn,)i(and)f(T) +-6 b(.E.)24 b(Hanna,)i Fa(A)e(Sub-band)j(Ap-)2141 3712 +y(pr)m(oac)o(h)i(to)f(T)l(ime-Scale)g(Expansion)h(of)f(Comple)o(x)f +(Acoustic)h(Sig-)2141 3799 y(nals)p Fl(,)j(IEEE)26 b(T)m(ransactions)j +(on)f(Acoustics,)j(Speech,)f(and)f(Signal)2141 3885 y(Processing,)20 +b(V)m(OL.)d(3,)i(NO.)f(6,)h(pp.)g(515-519,)i(No)o(v)o(ember)e(1995.) +1975 4005 y([13])42 b(R.)19 b(W)-7 b(.)18 b(Shafer)h(and)g(L.)f(R.)g +(Rabiner)m(,)h Fa(\223A)f(Digital)h(Signal)h(Appr)m(oac)o(h)2141 +4092 y(to)d(Interpolation\224)p Fl(,)h(Proceedings)f(of)g(the)g(IEEE,)e +(V)m(OL.)g(61,)j(NO.)e(6,)2141 4179 y(pp.)j(692-702,)i(June)f(1973.) +1975 4299 y([14])42 b(J.)24 b(Laroche)h(and)g(M.)g(Dolson,)h +Fa(Ne)o(w)e(Phase)g(V)-8 b(ocoder)26 b(T)-7 b(ec)o(hniques)2141 +4386 y(for)26 b(Pitc)o(h-Shifting)o(,)h(Harmonizing)f(and)h(Other)e +(Exotic)h(Ef)o(fects\224)p Fl(,)2141 4472 y(Proc.)f(1999)g(IEEE)f(W)-6 +b(orkshop)25 b(on)h(Applications)f(of)g(Signal)f(Pro-)2141 +4559 y(cessing)d(to)f(Audio)h(and)f(Acoustics,)h(Ne)n(w)f(P)o(altz,)f +(Ne)n(w-Y)-8 b(ork,)20 b(Oct.)2141 4646 y(17-20,)g(1999.)p +eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/amaroK/doc/ismir_slides.pdf b/amaroK/doc/ismir_slides.pdf new file mode 100755 index 0000000..6edcb92 Binary files /dev/null and b/amaroK/doc/ismir_slides.pdf differ diff --git a/amaroK/doc/leveau.pdf b/amaroK/doc/leveau.pdf new file mode 100755 index 0000000..2d5a771 Binary files /dev/null and b/amaroK/doc/leveau.pdf differ diff --git a/amaroK/doc/peeters.pdf b/amaroK/doc/peeters.pdf new file mode 100755 index 0000000..7fdb50d Binary files /dev/null and b/amaroK/doc/peeters.pdf differ diff --git a/amaroK/rapport/rapport.pdf b/amaroK/rapport/rapport.pdf new file mode 100755 index 0000000..f880917 Binary files /dev/null and b/amaroK/rapport/rapport.pdf differ diff --git a/amaroK/rapport/rapport_projet2A_rendu.odt b/amaroK/rapport/rapport_projet2A_rendu.odt new file mode 100755 index 0000000..1b0f982 Binary files /dev/null and b/amaroK/rapport/rapport_projet2A_rendu.odt differ diff --git a/amaroK/tests/LISEZ_MOI b/amaroK/tests/LISEZ_MOI new file mode 100755 index 0000000..b84ebc2 --- /dev/null +++ b/amaroK/tests/LISEZ_MOI @@ -0,0 +1,42 @@ + +Vue d'ensemble + +sef est le programme qui calcule le tempo (affichage de sa +valeur en battements par minute) et qui ajoute des marques +sonores (clic) au son afin de situer les battements. + +sef prend en entrée du son au format pcm 16 bits signés, +stéréo, échantilloné à 44100Hz + +de même pour play, qui se charge d'envoyer les données reçues +sur son entrée standard vers la carte son. + + +Compilation + +il y a 2 modules à compiler: sef et play +make sef play + +les bibliothèques suivantes sont nécessaire: +fftw3 +alsa + + +Utilisation: + +mpg123 -q -s fichier.mp3 |./sef | ./play + +ou + +oggdec -R -Q -o - fichier.ogg |./sef | ./play + + +TODO + +améliorer le calcul de la SEF: ajout d'un filtre derivateur d'ordre +8 ou 10 (préconisé par M Alonso) et ajout d'un filtre passe bas sur +le résultat de la FFT (aussi préconisé par M Alonso). + +améliorer la stabilité du tempo calculé (problèmes d'instabilité) + + diff --git a/amaroK/tests/Makefile b/amaroK/tests/Makefile new file mode 100755 index 0000000..cc0bd21 --- /dev/null +++ b/amaroK/tests/Makefile @@ -0,0 +1,30 @@ +CFLAGS = -Wall -ggdb + +all: play gen sef + +genStats: genStats.o buffer.o algo1.o + +genStats.o: genStats.c buffer.h + +buffer.o: buffer.c buffer.h block.h + +algo1.o: algo1.c buffer.h algo1.h + + +apodization_functions.o: apodization_functions.c apodization_functions.h + +beatDetectSEF.o: beatDetectSEF.c beatDetectSEF.h + +sef: beatDetectSEF.o apodization_functions.o + $(CC) $(LDFLAGS) -lfftw3f -lm -o $@ $^ + +play: play.o + $(CC) $(LDFLAGS) -lasound -o $@ $^ + +gen: gen.o + $(CC) $(LDFLAGS) -lm -o $@ $^ + +.PHONY: all clean + +clean: + rm -f *.o genStats sef play gen toOctave filter apodization_functions diff --git a/amaroK/tests/algo1.c b/amaroK/tests/algo1.c new file mode 100755 index 0000000..8424c9a --- /dev/null +++ b/amaroK/tests/algo1.c @@ -0,0 +1,109 @@ +#include + +#include "algo1.h" +#include "buffer.h" + +static Energy localAverageEnergy = 0; +static FILE * gnuplotDataFile = NULL; +static char * baseName = NULL; +static char gpDataFile[256]; + + +static void computeInstantEnergy(int nb) { + Energy e = 0; + int i; + + Block * b = block(nb); + + for (i = 0; i < N; i++) { + e += b->samples[i][LEFT] * b->samples[i][LEFT] + + b->samples[i][RIGHT] * b->samples[i][RIGHT]; + } + + b->instantEnergy = e; +} + +static void computeLocalAverageEnergy() { + int i; + Energy avgEnergy = 0; + Block * b = NULL; + + for (i = 0; i < N_BLOCKS; i++) { + b = block(i); + avgEnergy += b->instantEnergy; + } + + localAverageEnergy = avgEnergy / N_BLOCKS; +} + +void initAlgo1(char * bn) { + char str[256]; + + baseName = bn; + + strncpy(str, baseName, 255)[255] = '\0'; + strncat(str, ".dat", 255 - strlen(str)); + + /* backup file name */ + strncpy(gpDataFile, str, 255)[255] = '\0'; + + gnuplotDataFile = fopen(gpDataFile, "w"); + + fprintf(gnuplotDataFile, "# Gnuplot data file\n"); + fprintf(gnuplotDataFile, "# block nb, instant energy, local avg energ, ratio, der1(ratio)\n"); +} + +void stepAlgo1(void) { + int i = curBlock(); + static double prevR = 0; + + computeInstantEnergy(i); + + if (isBufferFull()) { + double ratio = (double) block(i)->instantEnergy / (double) localAverageEnergy; + + fprintf(gnuplotDataFile, "%8d %16lu ", blocksRead(), block(i)->instantEnergy); + + computeLocalAverageEnergy(); + + fprintf(gnuplotDataFile, "%16lu ", localAverageEnergy); + fprintf(gnuplotDataFile, "%.3f ", ratio); + fprintf(gnuplotDataFile, "%.3f ", ratio - prevR); + fprintf(gnuplotDataFile, "\n"); + + prevR = ratio; + } +} + +void finalizeAlgo1(void) { + char str[256]; + + fclose(gnuplotDataFile); + + strncpy(str, baseName, 255)[255] = '\0'; + strncat(str, ".plot", 255 - strlen(str)); + + FILE * gpFile = fopen(str, "w"); + + fprintf(gpFile, "# GnuPlot instruction file\n"); + fprintf(gpFile, "set xlabel \"samples\"\n"); + fprintf(gpFile, "set ylabel \"relative sound energy\"\n"); + fprintf(gpFile, "set style data lines\n"); + fprintf(gpFile, "set terminal pdf enhanced\n"); + + strncpy(str, baseName, 255)[255] = '\0'; + strncat(str, "-ratio.pdf", 255 - strlen(str)); + + fprintf(gpFile, "set output \"%s\"\n", str); + fprintf(gpFile, "plot \"%s\" using 1:4 title 'Relative sound energy of %s'\n", gpDataFile, baseName); + + strncpy(str, baseName, 255)[255] = '\0'; + strncat(str, "-dratio.pdf", 255 - strlen(str)); + + fprintf(gpFile, "set output \"%s\"\n", str); + fprintf(gpFile, "set ylabel \"variation of relative sound energy\"\n"); + fprintf(gpFile, "plot \"%s\" using 1:5 title 'Relative sound energy (1st der) of %s'\n", gpDataFile, baseName); + + fclose(gpFile); +} + diff --git a/amaroK/tests/algo1.h b/amaroK/tests/algo1.h new file mode 100755 index 0000000..eb6f4bd --- /dev/null +++ b/amaroK/tests/algo1.h @@ -0,0 +1,9 @@ +#ifndef ALGO1_H +#define ALGO1_H + +void stepAlgo1(void); +void finalizeAlgo1(void); +void initAlgo1(char * baseName); + +#endif /* ALGO1_H */ + diff --git a/amaroK/tests/apodization_functions.c b/amaroK/tests/apodization_functions.c new file mode 100755 index 0000000..50aad05 --- /dev/null +++ b/amaroK/tests/apodization_functions.c @@ -0,0 +1,40 @@ +#include "apodization_functions.h" + +#include +#include + +void hanning(float * array, int window_width) { + // scilab equivalent to: + // a = 0:array_length; array = (1 - cos(2 * %pi * (a / 15))) / 2; + + int i; + float num_elem = window_width - 1; + + for (i = 0; i < window_width; ++i) { + array[i] = (1.0 - cos(2.0 * M_PI * (i / num_elem))) / 2; + } +} + +void test_hanning() { + float wide8[8]; + float wide19[19]; + int i; + + // test hanning function + + // with 8 wide window + hanning(wide8, 8); + printf("hanning(8):\n[%f", wide8[0]); + for (i = 1; i < 8; ++i) { + printf(", %f", wide8[i]); + } + printf("]\n\n"); + + // with 19 wide window + hanning(wide19, 19); + printf("hanning(19):\n[%f", wide19[0]); + for (i = 1; i < 19; ++i) { + printf(", %f", wide19[i]); + } + printf("]\n\n"); +} diff --git a/amaroK/tests/apodization_functions.h b/amaroK/tests/apodization_functions.h new file mode 100755 index 0000000..bdfd926 --- /dev/null +++ b/amaroK/tests/apodization_functions.h @@ -0,0 +1,14 @@ + +/** + * Compute and stores hanning window coefficients in the given array + * + * @param array where coeffs are stored (must be window_width long) + * @param window_width the number of coef to compute + */ +void hanning(float * array, int window_width); + +/** + * Print coeffs from 2 hanning windows, the first with 8 coeffs, the second + * with 19 + */ +void test_hanning(); diff --git a/amaroK/tests/beatDetectSEF.c b/amaroK/tests/beatDetectSEF.c new file mode 100755 index 0000000..e1e3fdb --- /dev/null +++ b/amaroK/tests/beatDetectSEF.c @@ -0,0 +1,480 @@ + +#include +#include +#include +#include +#include +#include + +#include "beatDetectSEF.h" +#include "apodization_functions.h" + + +int main() { + + int frame_size = 2 * FRAME_NUM_SAMPLE * sizeof(signed short int); + signed short int * beep_buffer; + signed short int * input_buffer; + SEF_data sef_data; + + + FILE * peaks_stats = fopen("peaks_stats", "w"); + + // mean filter should retain the last 300ms (here we use only 100ms) + int peak_detection_length = (int)((0.3 * SAMPLE_RATE) / (FRAME_NUM_SAMPLE - OVERLAP)); + Shifted_array peak_detection; + + // peaks, retain the last 5s + int peaks_length = (int)((5.0 * SAMPLE_RATE) / (FRAME_NUM_SAMPLE - OVERLAP)); + Shifted_array peaks; + + // periodicity 1s mean estimation, + //int tempo_length = (int)((1 * SAMPLE_RATE) / (FRAME_NUM_SAMPLE - OVERLAP)); + int tempo_length = 1; + Shifted_array tempo; + + + init_sef(&sef_data); + shifted_array_init(&peak_detection, peak_detection_length); + shifted_array_init(&peaks, peaks_length); + shifted_array_init(&tempo, tempo_length); + + // compute min & max shift to detect tempo between 60 and 180 bpm + int min_shift = (int)((0.3 * SAMPLE_RATE) / (FRAME_NUM_SAMPLE - OVERLAP)); + int max_shift = (int)((2.0 * SAMPLE_RATE) / (FRAME_NUM_SAMPLE - OVERLAP)); + + input_buffer = (signed short int *) malloc(4 * FRAME_NUM_SAMPLE * 2 * sizeof(signed short int)); + beep_buffer = (signed short int *) malloc(FRAME_NUM_SAMPLE * sizeof(signed short int)); + + + float * impulses = malloc(peaks_length * sizeof(float)); + make_beep(beep_buffer, FRAME_NUM_SAMPLE, 1024); + + int loop = 10; + int beep = 0; + float last_loop = 0; + + while (1) { + float instant_energy; + float mean_energy; + + read_buffer(input_buffer, frame_size); + buffer_to_samples(input_buffer, sef_data.in_spl, FRAME_NUM_SAMPLE); + + + // SEF computation + instant_energy = sef_variation(&sef_data); + shifted_array_push(&peak_detection, instant_energy); + mean_energy = shifted_array_mean(&peak_detection); + + float p = instant_energy - (mean_energy * COEF); + if (p < 0) { + p = 0; + } else { + p = instant_energy; + } + + shifted_array_push(&peaks, p); + fprintf(peaks_stats, "%f ", p); + + // make bip + if (loop <= 0) { + beep = BEEP_LENGTH; + + loop = compute_periodicity(&peaks, min_shift, max_shift); + generate_impulses_train(impulses, peaks_length, loop); + int phase = compute_phase(&peaks, impulses, loop); + + fprintf(stderr, "tempo: %d (%d bpm), déphasage: %d\n", loop, (int) ((60 * SAMPLE_RATE) / ( loop * (FRAME_NUM_SAMPLE - OVERLAP))), phase); + + if (phase > (0.76 * loop)){ + // we advance the next beep + loop = phase; + } else if (phase < (0.24 * loop) ){ + // we delay the next beep + loop = loop + phase; + } + } + + --loop; + + if (loop <= 2 || beep > 0) { + add_beep_to_output(input_buffer, beep_buffer, FRAME_NUM_SAMPLE); + --beep; + } else { + int i; + for (i = FRAME_NUM_SAMPLE - 1; i >= 0; --i) { + input_buffer[2 * i] = input_buffer[2 * i] / 2; + input_buffer[(2 * i) + 1] = input_buffer[(2 * i) + 1] / 2; + } + } + + write_buffer(input_buffer, frame_size); + + } + + free(input_buffer); + free(beep_buffer); + destroy_sef(&sef_data); + shifted_array_destroy(&peaks); + shifted_array_destroy(&peak_detection); + shifted_array_destroy(&tempo); + + fclose(peaks_stats); + return 0; + +} + + + + void init_sef(SEF_data * sef_data) { + // we need: FIR_ORDER spectrogram + hanning window + sef_data->spectrograms_spl = (float *) calloc((FFT_NUM_SAMPLE * FIR_ORDER) + FRAME_NUM_SAMPLE, + sizeof(float)); + // init the index of the last spectrogram + sef_data->last_spectrogram = 0; + + // compute the hanning window + sef_data->hanning_spl = sef_data->spectrograms_spl + (FFT_NUM_SAMPLE * FIR_ORDER); + hanning(sef_data->hanning_spl, FRAME_NUM_SAMPLE); + + // allocate in and out buffer for the fft + sef_data->in_spl = (float * ) fftwf_malloc(FRAME_NUM_SAMPLE * sizeof(float)); + sef_data->fft_spl = (fftwf_complex *) fftwf_malloc(FFT_NUM_SAMPLE * sizeof(fftw_complex)); + + // prepare a real to complex discrete fourier transform + sef_data->plan = fftwf_plan_dft_r2c_1d(FRAME_NUM_SAMPLE, sef_data->in_spl, sef_data->fft_spl, FFTW_MEASURE | FFTW_PRESERVE_INPUT); + } + + + float sef_variation (SEF_data * sef_data) { + + // apply a hanning window to the samples + apply_window(sef_data->in_spl, sef_data->hanning_spl, FRAME_NUM_SAMPLE); + + // execute dft + fftwf_execute(sef_data->plan); + + // shift the circular buffer one step forward (first element become the second etc...) + sef_data->last_spectrogram = (sef_data->last_spectrogram + (FIR_ORDER - 1)) % FIR_ORDER; + float * buffer = sef_data->spectrograms_spl + (sef_data->last_spectrogram * FFT_NUM_SAMPLE); + + //fprintf(stderr,"circular buffer index: %d\n", sef_data->last_spectrogram); + + // for each frequency, compute the norm of the complex, reduce + // the high freq coef by multiply by the second half of the hanning + // window (we "forgot" the last complex coef, seem not to be important) + int i; // from 255 to 0 + float log10 = log(10.0); + for (i = FFT_NUM_SAMPLE - 2; i >= 0; --i) { + float value, real,imag; + fftwf_complex * cpx; + + // todo, before getting the norm, apply a lowpass filter to + // perform energy integration (cf ismir2004.pdf) + + cpx = sef_data->fft_spl + i; + real = (*cpx)[0]; + imag = (*cpx)[1]; + value = sqrt((real * real) + (imag * imag)) * sef_data->hanning_spl[FFT_NUM_SAMPLE + i - 1]; + + // store the value in the current spectrogram + if(value > 0) { + buffer[i] = 20 * (log(value) / log10); + } else { + buffer[i] = 0; + } + } + + + // apply differentiator filter (FIR), with respect to time for each freq + // store the result in the in_sample array, + // todo: write a real filter, instead of using the [1;-1] + + float * last_buffer = sef_data->spectrograms_spl + + (((sef_data->last_spectrogram + 1) % FIR_ORDER) + * FFT_NUM_SAMPLE); + + for (i = FFT_NUM_SAMPLE - 2; i >= 0; --i) { + // first order differentiator filter + sef_data->in_spl[i] = buffer[i] - last_buffer[i]; + } + + + // sum the positive variation + float sum = 0; + for (i = FFT_NUM_SAMPLE - 2; i >= 0; --i) { + float value = sef_data->in_spl[i]; + + if (value > 0) { + sum += value; + } + } + + return sum; + + } + + + void destroy_sef(SEF_data * sef_data) { + free(sef_data->spectrograms_spl); + fftwf_free(sef_data->in_spl); + fftwf_free(sef_data->fft_spl); + } + + + + + + void write_buffer(signed short int * buffer, int frame_size) { + int rc = fwrite(buffer, 1, frame_size, stdout); + if (rc == -1) { + perror("SEF"); + exit(-1); + } else if (rc != frame_size) { + fprintf(stderr, "SEF: short write: write %d bytes\n", rc); + } + + } + + + void read_buffer(signed short int * buffer, int frame_size) { + int rc = fread(buffer, 1, frame_size, stdin); + if (rc == 0) { + perror("SEF"); + exit(-1); + } else if (rc != frame_size) { + fprintf(stderr, "SEF: short read: read %d bytes\n", rc); + } + } + + + + void buffer_to_samples(signed short int * buffer, float * samples, int num_samples) { + int i; + + for(i = 0; i < num_samples ; ++ i) { + samples[i] = (float) buffer[i]; + } + } + + void apply_window(float * samples, float * window, int num_samples) { + int i; + for(i = 0; i < num_samples ; ++ i) { + samples[i] *= window[i]; + } + } + + + void cpx_sample_to_spectral_energetic_density(fftwf_complex * fft_cpx_samples, float * fft_abs_sample, int num_samples) { + int i; + + for (i = 0; i < num_samples; ++i) { + float real,imag; + fftwf_complex * cpx; + cpx = fft_cpx_samples + i; + + real = (*cpx)[0]; + imag = (*cpx)[1]; + + fft_abs_sample[i] = (real * real) + (imag * imag); + } + + } + + + void add_beep_to_output(signed short int * output_buffer, signed short int * bip_buffer, int bip_length) { + int i; + + for(i = 0; i < bip_length; ++ i) { + output_buffer[2 * i] = bip_buffer[i]; + output_buffer[(2 * i) + 1] = bip_buffer[i]; + } + } + + + void make_beep(signed short int * bip_buffer, int bip_length, int freq) { + int i; + + for(i = 0; i < bip_length; ++ i) { + double t ; + signed short int val; + t = 0.000023 * i; // 0.000023 = 1/44100 + val = rint(15000 * cos(2 * M_PI * freq * t)); + bip_buffer[i] = val; + } + } + + + void shifted_array_init(Shifted_array * array, int length) { + array->buffer = (float *) calloc(length, sizeof(float)); + array->length = length; + array->last_in = array->buffer + length - 1; + array->total = 0; + } + + + void shifted_array_destroy(Shifted_array * array) { + free(array->buffer); + } + + + float shifted_array_mean(Shifted_array * array) { + return array->total / array->length; + } + + + float shifted_array_total(Shifted_array * array) { + return array->total; + } + + + float shifted_array_push(Shifted_array * array, float value) { + + float out; + ++ array->last_in; + + if ((array->last_in - array->buffer) >= array->length) { + // end of array is reached + array->last_in = array->buffer; + } + + out = * array->last_in; + * array->last_in = value; + array->total = array->total - out + value; + return out; + } + + + float shifted_array_value_at(Shifted_array * array, int index) { + float * p = array->last_in + 1 + index; + + if ((p - array->buffer) >= array->length) { + // end of array is reached + p -= array->length; + } + + return *p; + } + + + void test_shifted_array() { + + Shifted_array a; + + shifted_array_init(&a, 8); + + + int i; + + for(i = 1; i <= 20; ++i) { + float total = shifted_array_total(&a); + float mean = shifted_array_mean(&a); + fprintf(stderr, "in: %d, out: %f, mean: %f, total: %f\n", + i, + shifted_array_push(&a, i), + mean, + total); + } + + fprintf(stderr, "%f %f %f %f\n", + shifted_array_value_at(&a, 0), + shifted_array_value_at(&a, 1), + shifted_array_value_at(&a, 6), + shifted_array_value_at(&a, 7)); + + shifted_array_destroy(&a); + + } + + + int compute_periodicity(Shifted_array * peaks, int min_shift, int max_shift) { + + int shift; + int best_shift = min_shift; + float max = 0; + + //for(shift = max_shift; shift >= min_shift; -- shift ) { + for(shift = min_shift; shift <= max_shift; ++shift ) { + + // compute each step of the auto correlation + float sum = 0; + + int i; + + for (i = peaks->length - 1; i >= 0; --i) { + sum += shifted_array_value_at(peaks, i) * shifted_array_value_at(peaks, (i + shift) % peaks->length); + } + + //fprintf(stderr, "shifs: %d, sum: %f\n", shift, sum); + + if (sum > (max * 1.0)) { + // float mul = ((float) shift) / ((float) best_shift); + // float rmul = round(mul); + // if (abs(mul - rmul) > 0.1) { + // not a multiple, store the tmp tempo + max = sum; + best_shift = shift; + // } + } + } + + //fprintf(stderr, "%d\n", best_shift); + + return best_shift; + + } + + + int compute_phase(Shifted_array * peaks, float * impulses, int shift) { + + int phase = 0; + int best_phase = 0; + float max = 0; + + for(phase = 0; phase < shift; ++phase ) { + // compute each step of the auto correlation + float sum = 0; + int i; + + for (i = peaks->length - 1; i >= 0; --i) { + sum += (impulses[i]) * shifted_array_value_at(peaks, (i + phase) % peaks->length); + } + + //fprintf(stderr, "shifs: %d, sum: %f\n", shift, sum); + + if (sum > max) { + max = sum; + best_phase = phase; + } + } + + return best_phase; + + } + + + void test_compute_phase() { + Shifted_array a; + shifted_array_init(&a, 256); + float * imp = (float * ) malloc(256 * sizeof(float)); + generate_impulses_train(imp, 256, 50); + generate_impulses_train(a.buffer + 39, 200, 50); + + fprintf(stderr, "test phase: %d\n", compute_phase(&a, imp, 50)); + + shifted_array_destroy(&a); + free(imp); + } + + + void generate_impulses_train(float * impulses, int length, int shift) { + int i; + for(i = 0; i < length; ++i) { + if ((i % shift) == 0) { + impulses[i] = 1.0; + } else { + impulses[i] = 0.0; + } + } + } diff --git a/amaroK/tests/beatDetectSEF.h b/amaroK/tests/beatDetectSEF.h new file mode 100755 index 0000000..5f5f569 --- /dev/null +++ b/amaroK/tests/beatDetectSEF.h @@ -0,0 +1,158 @@ + + +#ifndef _BEATDETECTSEF_H_ +#define _BEATDETECTSEF_H_ + + +// to test +#define AUDIO_MEMORY_LENGTH 128 +#define COEF 2.0 + +#define SAMPLE_RATE 44100 +#define FRAME_NUM_SAMPLE 512 // number of samples in each frame +#define OVERLAP 0 // number of reused sample from last round +#define BEEP_LENGTH 0 + + +// number of coef of the real to complex fft +#define FFT_NUM_SAMPLE ((FRAME_NUM_SAMPLE / 2) + 1) +#define FIR_ORDER 8 // order of the differentiator filter, indicates the + // of past spectrograms to remember. + +/** + * This structure aims to store the data from previous iterations + * of the function energy_flux_positive_variation as it need some + * history of the past value... + */ +struct sef_data { + // a FIFO containing the FIR_ORDER last spectrograms + // managed as an always circular buffer + float * spectrograms_spl; + + // index of the "last in" (more recent) of the FIFO + // use it (% FIR_ORDER) + int last_spectrogram; + + // array of hanning window coef + float * hanning_spl; + + float * in_spl; + fftwf_complex * fft_spl; + + // stored data about the way to efficiently compute fft + fftwf_plan plan; +}; + +typedef struct sef_data SEF_data; + +struct shifted_array { + float * buffer; + float * last_in; + float total; + int length; +}; + +typedef struct shifted_array Shifted_array; + +/** + * Initialize the past_data structure. To be call only + * once before using sef_variation. Don't forget to call + * destroy_sef when the structure become useless. + * + * @past_data + */ +void init_sef(SEF_data * past_data); + + +/** + * Compute the spectral energy flux variation, given the last spectrograms. + * and the new samples copy in the in_spl field of the past_data struct + * + * @param sef_data + * @return the sum of positive per-frequency variations + */ +float sef_variation (SEF_data * sef_data); + + +/** + * Release the past_data structure. To be call only + * once after using sef_variation for the last time. + * + * @past_data + */ +void destroy_sef(SEF_data * past_data); + + +void cpx_sample_to_spectral_energetic_density(fftwf_complex * fft_cpx_samples, float * fft_abs_sample, int num_samples); + +void buffer_to_samples(signed short int * buffer, float * samples, int num_samples); + +void apply_window(float * samples, float * window, int num_samples); + +void write_buffer(signed short int * buffer, int frame_size); + +void read_buffer(signed short int * buffer, int frame_size); + +void add_beep_to_output(signed short int * output_buffer, signed short int * beep_buffer, int beep_buffer_length); + +void make_beep(signed short int * beep_buffer, int beep_buffer_length, int freq); + +// Shifted array stuff + +void shifted_array_init(Shifted_array * array, int length); + +void shifted_array_destroy(Shifted_array * array); + +float shifted_array_mean(Shifted_array * array); + +float shifted_array_total(Shifted_array * array); + +float shifted_array_push(Shifted_array * array, float value); + + +/** + * To retrieve a value in the shifted array. Index 0 is the + * oldest value, that is to say the next removed value. On the + * contrary, index length - 1 is the more recent value + * + * @param array + * @param index + */ +float shifted_array_value_at(Shifted_array * array, int index); + +void test_shifted_array(); + +#endif /* _BEATDETECTSEF_H_ */ + + +/** + * Return the shift for wich the auto correlation is max, + * so the periodicity. + * + * @param peaks + * @param min_shift + * @param max_shift + */ +int compute_periodicity(Shifted_array * peaks, int min_shift, int max_shift); + +/** + * Return the phase. + * @param peaks the sef peaks. + * @param impulses a memory area large enough to store same numbers + * of item as the peaks array + * @param shift the tempo, in frames (returned by compute_periodicity) + * @return the phase, in frames + */ +int compute_phase(Shifted_array * peaks, float * impulses, int shift); + + +/** + * Generate a train of impulses. + * + * @param impulses a memory area large enough to store same numbers + * of item as the peaks array + * @param length the length of the buffer + * @param shift the tempo, in frames (returned by compute_periodicity) + */ +void generate_impulses_train(float * impulses, int length, int shift); + diff --git a/amaroK/tests/bin2txt.c b/amaroK/tests/bin2txt.c new file mode 100755 index 0000000..853f0c0 --- /dev/null +++ b/amaroK/tests/bin2txt.c @@ -0,0 +1,14 @@ +#include +#include + +int main(int argc, char ** argv) { + + int16_t sample[2]; + + while (!feof(stdin)) { + fread(sample, sizeof(int16_t), 2, stdin); + printf("%d\n", sample[0]); + } + + return 0; +} diff --git a/amaroK/tests/block.h b/amaroK/tests/block.h new file mode 100755 index 0000000..aafdd35 --- /dev/null +++ b/amaroK/tests/block.h @@ -0,0 +1,19 @@ +#ifndef BLOCK_H +#define BLOCK_H + +#include + +#define N 1024 + +typedef enum {LEFT = 0, RIGHT = 1} Channel; + +typedef uint64_t Energy; +typedef int16_t Sample; + +typedef struct { + Sample samples[N][2]; + Energy instantEnergy; +} Block; + +#endif /* BLOCK_H */ + diff --git a/amaroK/tests/buffer.c b/amaroK/tests/buffer.c new file mode 100755 index 0000000..26655a8 --- /dev/null +++ b/amaroK/tests/buffer.c @@ -0,0 +1,42 @@ +#include "buffer.h" + +static Block historyBuffer[N_BLOCKS]; +static int currentBlock = 0; +static int read = 0; + +static void nextBlock(void) { + currentBlock = (currentBlock + 1) % N_BLOCKS; +} + + +void printBlock(int nb, FILE * st) { + int i; + + for (i = 0; i < N; i++) { + fprintf(st, "left = %hd\tright = %hd\n", historyBuffer[nb].samples[i][LEFT], + historyBuffer[nb].samples[i][RIGHT]); + } +} + +void readBlock(FILE * st) { + nextBlock(); + fread(historyBuffer[currentBlock].samples, sizeof(Sample), N * 2, st); + read++; +} + +Block * block(int nb) { + return & (historyBuffer[nb]); +} + +int isBufferFull(void) { + return read >= N_BLOCKS; +} + +int curBlock(void) { + return currentBlock; +} + +int blocksRead(void) { + return read; +} + diff --git a/amaroK/tests/buffer.h b/amaroK/tests/buffer.h new file mode 100755 index 0000000..3f990c2 --- /dev/null +++ b/amaroK/tests/buffer.h @@ -0,0 +1,20 @@ +#ifndef BUFFER_H +#define BUFFER_H + +#include +#include + +#include "block.h" + +#define N_BLOCKS 43 +#define N_SAMPLES (N_BLOCKS * N) + +void readBlock(FILE * st); +void printBlock(int nb, FILE * st); +Block * block(int nb); +int isBufferFull(void); +int curBlock(void); +int blocksRead(void); + +#endif /* BUFFER_H */ + diff --git a/amaroK/tests/command_test_audio b/amaroK/tests/command_test_audio new file mode 100755 index 0000000..9ca79ea --- /dev/null +++ b/amaroK/tests/command_test_audio @@ -0,0 +1,9 @@ + +MP3 +mpg123-generic -q -s ~/tmp/music/benny-benassy/Hypnotic/01-benny_benassi-satisfaction-mvp.mp3 |./sef | ./play + +OGG-VORBIS +oggdec -R -Q -o - ~/tmp/music/daft_punk/discovery/Daft\ Punk\ -\ Discovery\ -\ 01\ -\ One\ more\ time.ogg |./sef | ./play + +WAV + diff --git a/amaroK/tests/filter.c b/amaroK/tests/filter.c new file mode 100755 index 0000000..7c01659 --- /dev/null +++ b/amaroK/tests/filter.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +// M must be an even integer +#define M 256 + +// Gain +double k = 1.0; + +const int sfreq = 44100; +const int max_freq = sfreq / 2; + +double kernel[M + 1]; + +// fc is the cut off frequency (between 0 and 0.5) +double fc = 0.01; + +int main(int argc, char ** argv) { + int i; + + // generate kernel + for (i = 0; i <= M; i++) { + if (i == M / 2) { + kernel[i] = 2 * M_PI * fc; + } else { + kernel[i] = (sin(2 * M_PI * fc * (i - (M / 2))) / (i - (M / 2))) + * (0.42 - 0.5 * cos(2 * M_PI * (double) i / M) + + 0.08 cos(4 * M_PI * (double) i / M)); + } + + + } + + while (1) { + + fread(x_n, 2, sizeof(int16_t), stdin); + + y_n[0] = (a * ((double) x_n[0] + (double) x_nm1[0]) + b * y_nm1[0]); + y_n[1] = (a * ((double) x_n[1] + (double) x_nm1[1]) + b * y_nm1[1]); + + + fwrite(y_n, 2, sizeof(int16_t), stdout); + x_nm1[0] = x_n[0]; + x_nm1[1] = x_n[1]; + y_nm1[0] = y_n[0]; + y_nm1[1] = y_n[1]; + + } + + return EXIT_SUCCESS; +} + diff --git a/amaroK/tests/gen.c b/amaroK/tests/gen.c new file mode 100755 index 0000000..b564c70 --- /dev/null +++ b/amaroK/tests/gen.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include + +#define BASE_FREQ 44100 +#define BUFFER_SIZE 1024 + +int16_t buffer[BUFFER_SIZE * 2]; + +int main(int argc, char ** argv) { + int frequency = 0; + int bpm = 0; + double amp = 0; + int i; + int t = 0; + uint64_t t2 = 0; + int sample_per_beat = 0; + int beat = 1; + int duration = 0; + + if (argc != 5) { + fprintf(stderr, "Usage: %s frequency amp bpm duration\n", argv[0]); + exit(EXIT_FAILURE); + } + + frequency = atoi(argv[1]); + amp = atof(argv[2]); + bpm = atoi(argv[3]); + duration = atoi(argv[4]); + + sample_per_beat = BASE_FREQ * 60 / bpm; + + fprintf(stderr, "%s: frequency = %d, amp = %f, bpm = %d, duration = %d\n", argv[0], frequency, amp, bpm, duration); + + while (1) { + for (i = 0; i < BUFFER_SIZE; i++) { + double sample = 0; + + if (beat) { + double vTime = (double) t * frequency * exp((double) -t * 5 / sample_per_beat) / BASE_FREQ; + sample = sin(vTime * 2 * M_PI) * exp((double) -t * 5 / sample_per_beat) * amp; + t++; + + if ((t2 % sample_per_beat) > sample_per_beat / 2) { + beat = 0; + } + } + + if ((t2 % sample_per_beat) == 0) { + beat = 1; + t = 0; + } + + t2++; + + buffer[2 * i] = sample * INT16_MAX; + buffer[2 * i + 1] = sample * INT16_MAX; + } + + fwrite(buffer, BUFFER_SIZE * 2, sizeof(int16_t), stdout); + + if (t2 > duration * BASE_FREQ) { + break; + } + } + + return EXIT_SUCCESS; +} + diff --git a/amaroK/tests/genStats.c b/amaroK/tests/genStats.c new file mode 100755 index 0000000..36c3f36 --- /dev/null +++ b/amaroK/tests/genStats.c @@ -0,0 +1,92 @@ + +#include +#include +#include +#include + +// basename +#define _GNU_SOURCE +#include + +// fork +#include +#include + +#include "buffer.h" +#include "algo1.h" + +FILE * decodeMusicFile(char * file) { + int fd[2] = {0, 0}; + pid_t pid = 0; + FILE * st = NULL; + + char * const execString[] = {"mpg321", "--quiet", "--stdout", file, NULL}; + + pipe(fd); + + pid = fork(); + if (pid > 0) { /* Father */ + + /* Close output fd of the pipe */ + close(fd[1]); + + /* Open pipe */ + st = fdopen(fd[0], "r"); + } else if (pid == 0) { /* Son */ + + /* Close input fd of the pipe */ + close(fd[0]); + + /* Redirect the standard output to the pipe */ + dup2(fd[1], 1); + + execvp("mpg321", execString); + + /* exec failed ! */ + perror("execvp"); + exit(1); + } else { + perror("fork"); + exit(1); + } + + return st; +} + + +int main(int argc, char ** argv) { + int i = 0; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(1); + } + + char * fileName = argv[1]; + char * baseName = NULL; + + if (strcmp(fileName, "-") == 0) { + baseName = "stdin"; + } else { + baseName = basename(fileName); + } + + initAlgo1(baseName); + + FILE * st = NULL; + + if (strcmp(fileName, "-") == 0) { + st = stdin; + } else { + st = decodeMusicFile(fileName); + } + + while (!feof(st)) { + readBlock(st); + stepAlgo1(); + } + + finalizeAlgo1(); + + return EXIT_SUCCESS; +} diff --git a/amaroK/tests/play.c b/amaroK/tests/play.c new file mode 100755 index 0000000..cbaf11f --- /dev/null +++ b/amaroK/tests/play.c @@ -0,0 +1,108 @@ +/* + * This example reads standard from input and writes + * to the default PCM device for 5 seconds of data. + */ + +/* Use the newer ALSA API */ +#define ALSA_PCM_NEW_HW_PARAMS_API + +#include + + +int main() { + long loops; + int rc; + int size; + snd_pcm_t *handle; + snd_pcm_hw_params_t *params; + unsigned int val; + int dir; + snd_pcm_uframes_t frames; + char *buffer; + + /* Open PCM device for playback. */ + rc = snd_pcm_open(&handle, "default", + SND_PCM_STREAM_PLAYBACK, 0); + if (rc < 0) { + fprintf(stderr, + "unable to open pcm device: %s\n", + snd_strerror(rc)); + exit(1); + } + + /* Allocate a hardware parameters object. */ + snd_pcm_hw_params_alloca(¶ms); + + /* Fill it in with default values. */ + snd_pcm_hw_params_any(handle, params); + + /* Set the desired hardware parameters. */ + /* Interleaved mode */ + snd_pcm_hw_params_set_access(handle, params, + SND_PCM_ACCESS_RW_INTERLEAVED); + /* Signed 16-bit little-endian format */ + snd_pcm_hw_params_set_format(handle, params, + SND_PCM_FORMAT_S16_LE); + /* Two channels (stereo) */ + snd_pcm_hw_params_set_channels(handle, params, 2); + + /* 44100 bits/second sampling rate (CD quality) */ + val = 44100; + snd_pcm_hw_params_set_rate_near(handle, params, + &val, &dir); + /* Set period size to 32 frames. */ + frames = 512; + snd_pcm_hw_params_set_period_size_near(handle, + params, &frames, &dir); + /* Write the parameters to the driver */ + rc = snd_pcm_hw_params(handle, params); + if (rc < 0) { + fprintf(stderr, + "unable to set hw parameters: %s\n", + snd_strerror(rc)); + exit(1); + } + + /* Use a buffer large enough to hold one period */ + snd_pcm_hw_params_get_period_size(params, &frames, &dir); + size = frames * 4; /* 2 bytes/sample, 2 channels */ + buffer = (char *) malloc(size); + + /* We want to loop for 10 seconds */ + snd_pcm_hw_params_get_period_time(params, &val, &dir); + /* 30 seconds in microseconds divided by + * period time */ + loops = 30 * 1000000 / val; + + while ( loops > 1) { + loops--; + rc = fread(buffer, 1, size, stdin); + if (rc == 0) { + fprintf(stderr, "end of file on input\n"); + break; + } else if (rc != size) { + fprintf(stderr, + "short read: read %d bytes\n", rc); + } + rc = snd_pcm_writei(handle, buffer, frames); + if (rc == -EPIPE) { + /* EPIPE means underrun */ + fprintf(stderr, "underrun occurred\n"); + snd_pcm_prepare(handle); + } else if (rc < 0) { + fprintf(stderr, + "error from writei: %s\n", + snd_strerror(rc)); + } else if (rc != (int)frames) { + fprintf(stderr, + "short write, write %d frames\n", rc); + } + } + + snd_pcm_drain(handle); + snd_pcm_close(handle); + + free(buffer); + + return 0; +} diff --git a/amaroK/tests/toOctave.c b/amaroK/tests/toOctave.c new file mode 100755 index 0000000..2c82d53 --- /dev/null +++ b/amaroK/tests/toOctave.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include + +int16_t * buffer = NULL; + +int main(int argc, char ** argv) { + if (argc != 3) { + fprintf(stderr, "Usage: %s nSamples name\n", argv[0]); + exit(EXIT_FAILURE); + } + + int nSamples = atoi(argv[1]); + char * name = argv[2]; + int n = 0; + int i = 0; + + buffer = malloc(sizeof(int16_t) * nSamples * 2); + + while (n < nSamples && (! feof(stdin))) { + int ret = fread(buffer + (n * 2), 2, sizeof(int16_t), stdin); + if (ret != 2) { + break; + } + + n++; + } + + printf("# name: %s_l\n", name); + printf("# type: matrix\n"); + printf("# rows: 1\n"); + printf("# columns: %d\n", n); + for (i = 0; i < n; i++) { + printf("%d ", (int) buffer[2 * i]); + } + printf("\n"); + printf("# name: %s_r\n", name); + printf("# type: matrix\n"); + printf("# rows: 1\n"); + printf("# columns: %d\n", n); + for (i = 0; i < n; i++) { + printf("%d ", (int) buffer[2 * i + 1]); + } + printf("\n"); + + free(buffer); + + return EXIT_SUCCESS; +} + diff --git a/header.c b/header.c new file mode 100755 index 0000000..e69e3c8 --- /dev/null +++ b/header.c @@ -0,0 +1,37 @@ +/** + * #(@)nomfichier.c ENSICAEN 2005 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + + diff --git a/header.cpp b/header.cpp new file mode 100755 index 0000000..2ed10a5 --- /dev/null +++ b/header.cpp @@ -0,0 +1,39 @@ +/** + * #(@)file.cpp ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#include + +using namespace std; + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 2006 + * + * @done - + * + * @todo - + */ + + + diff --git a/header.hh b/header.hh new file mode 100755 index 0000000..6a32241 --- /dev/null +++ b/header.hh @@ -0,0 +1,40 @@ +/** + * #(@)file.h ENSICAEN 2006 + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + * Pour le programme qui contient le main(), + * la ligne de commande pour executer le programme. + */ + +#ifndef FILE_H +#define FILE_H + +#include + +/** + * Description succinte de l'algorithme utilise comme solution. + * Eventuellement: Les references (cahier des charges,bibliographiques...). + */ + +/* + * @version 2006 + * + * @done - + * + * @todo - + */ + +#endif /* FILE_H */ + diff --git a/header.java b/header.java new file mode 100755 index 0000000..1f19b6a --- /dev/null +++ b/header.java @@ -0,0 +1,19 @@ +/* + * #(@)nomfichier.java ENSICAEN 2005 + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description de la classe. + * + * @author MASSE Nicolas (2005-Groupe3-LIMIN) + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * @version 0.0.1 + */ + diff --git a/header.lisp b/header.lisp new file mode 100755 index 0000000..c26ef1d --- /dev/null +++ b/header.lisp @@ -0,0 +1,28 @@ +;;;; +;;;; file.lisp ENSICAEN 2006 +;;;; +;;;; MASSE Nicolas (2005-Groupe3-LIMIN) +;;;; LIMIN Thomas (2005-Groupe3-MASSE) +;;;; +;;;; ENSICAEN +;;;; 6 Boulevard Marechal Juin +;;;; F-14050 Caen Cedex +;;;; +;;;; Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +;;;; reproduit, utilise ou modifie sans l'avis express de ses auteurs. +;;;; + +;;; +;;; File's description +;;; + +;;; +;;; version: 0.0.1 +;;; +;;; done: - +;;; +;;; todo: - +;;; + + + diff --git a/header.make b/header.make new file mode 100755 index 0000000..9a79cf2 --- /dev/null +++ b/header.make @@ -0,0 +1,28 @@ +# +# Makefile ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description du makefile +# + +# +# Version : 0.0.1 +# +# Fait : Detail de ce qui a ete fait. +# +# A faire : Detail de ce qui n'a pas ete fait. +# + + + diff --git a/header.php b/header.php new file mode 100755 index 0000000..e437c9b --- /dev/null +++ b/header.php @@ -0,0 +1,30 @@ + + * @author LIMIN Thomas (2005-Groupe3-MASSE) + * + * ENSICAEN + * 6 Boulevard Marechal Juin + * F-14050 Caen Cedex + * + * Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre + * reproduit, utilise ou modifie sans l'avis express de ses auteurs. + */ + +/** + * Description des objectifs du programme, le sujet a traiter. + */ + + +/* + * @version 0.0.1 + * + * @Fait Detail de ce qui a ete fait. + * + * @Afaire Detail de ce qui n'a pas ete fait. + */ + + +?> diff --git a/header.sh b/header.sh new file mode 100755 index 0000000..4e86262 --- /dev/null +++ b/header.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# +# nomfichier.sh ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Description des objectifs du programme, le sujet a traiter. +# Pour le programme qui contient le main(), +# la ligne de commande pour executer le programme. +# + +# +# Description succinte de l'algorithme utilise comme solution. +# Eventuellement: Les references (cahier des charges,bibliographiques...). +# + +# +# Version : 0.0.1 +# +# Fait : Detail de ce qui a ete fait. +# +# A faire : Detail de ce qui n'a pas ete fait. +# + + + diff --git a/header.sql b/header.sql new file mode 100755 index 0000000..dc93411 --- /dev/null +++ b/header.sql @@ -0,0 +1,27 @@ +-- +-- nomfichier.sql ENSICAEN 2005 +-- +-- MASSE Nicolas (2005-Groupe3-LIMIN) +-- LIMIN Thomas (2005-Groupe3-MASSE) +-- +-- ENSICAEN +-- 6 Boulevard Marechal Juin +-- F-14050 Caen Cedex +-- +-- Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +-- reproduit, utilise ou modifie sans l'avis express de ses auteurs. +-- + +-- +-- Description +-- + +-- +-- Version : 0.0.1 +-- +-- Fait : Detail de ce qui a ete fait. +-- +-- A faire : Detail de ce qui n'a pas ete fait. +-- + + diff --git a/print.sh b/print.sh new file mode 100755 index 0000000..1c362d6 --- /dev/null +++ b/print.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# +# print.sh ENSICAEN 2005 +# +# MASSE Nicolas (2005-Groupe3-LIMIN) +# LIMIN Thomas (2005-Groupe3-MASSE) +# +# ENSICAEN +# 6 Boulevard Marechal Juin +# F-14050 Caen Cedex +# +# Ce fichier est l'oeuvre d'eleves de l'ENSI de Caen. Il ne peut etre +# reproduit, utilise ou modifie sans l'avis express de ses auteurs. +# + +# +# Genere un fichier PDF des fichiers source d'un projet. +# +# Parametres : +# $1 => Nom du projet +# $2..n => Fichiers a traiter +# +# Si aucun fichier a traiter n'est specifie, tous les fichiers texte du +# repertoire et des sous-repertoires sont traites. +# + +# Version : 0.9 +# +# Fait : - +# +# A faire : Conversion UTF-8 conditionnelle +# + +# Dossier temporaire +TMPDIR="/tmp/print.$$" + +# Dossier de destination +DESTDIR="$PWD" + +# Fonction a executer lorsque le shell se termine +function on_exit () { + if [ $? -gt 0 ]; then + echo "Error !" + fi + + rm -rf "$TMPDIR" +} + +# Execute la fonction de nettoyage lorsque le shell se termine +trap on_exit EXIT + +# Termine le shell en cas d'erreur +set -e + +# Construction de la liste des fichiers +if [ $# -eq 0 ]; then + echo "Usage: $0 [files]" + exit +elif [ $# -eq 1 ]; then + name="$1" + filelist=$(find . ! -name "*~" ! -path "*/.svn*" -print0 \ + |xargs -r -0 file -i \ + |awk -F ':' '$2 ~ /text\// {print $1}' \ + |cut -d / -f 2-) +else + name="$1" + shift + + filelist=$(for arg; do echo "$arg"; done) +fi + +# La liste ne doit pas etre vide +test "$filelist" + +# Copie des fichiers a imprimer +mkdir -p "$TMPDIR/src" +(echo "$filelist" ; echo "$TMPDIR/src") |xargs -e\n cp --parent +cd "$TMPDIR/src" + +# On recode tous les fichiers en latin1 +# TODO : S'assurer qu'ils sont en utf-8 (avec file) +echo "$filelist" |while read file; do recode utf8..latin1 "$file"; done + +# Creation du fichier postscript avec A2PS +echo "$filelist" |xargs -e\n a2ps --encoding=latin1 --media=a4 -2 \ + --file-align=fill --pretty-print --output="../$name.ps" --quiet \ + --line-numbers=5 --toc --chars-per-line=100 \ + --header="$name - LIMIN Thomas & MASSE nicolas, 2A INFO, groupe A, TP 3" + +# Conversion du fichier PS en PDF +cd .. ; ps2pdf14 -sPAPERSIZE=a4 "$name.ps" + +# Copie du fichier PDF dans le repertoire de destination +cp "$name.pdf" "$DESTDIR" +cp "$name.ps" "$DESTDIR" + diff --git a/uP/TP1_SerialAndParallelPort/ex320.c b/uP/TP1_SerialAndParallelPort/ex320.c new file mode 100755 index 0000000..8a0dd27 --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex320.c @@ -0,0 +1,90 @@ +/*************************************************************************/ +/* */ +/* Fichier f:\up\tp1\ex320.c */ +/* */ +/* BINOME : */ +/* */ +/* */ +/*************************************************************************/ +#include +#include +#include +#include + +#define ESC 0x1b + +#define BASE_COM 0x2F8 + +#define RBR (BASE_COM+0) +#define THR (BASE_COM+0) +#define IER (BASE_COM+1) +#define IIR (BASE_COM+2) +#define FCR (BASE_COM+2) +#define LCR (BASE_COM+3) +#define MCR (BASE_COM+4) +#define LSR (BASE_COM+5) +#define MSR (BASE_COM+6) +#define DLL (BASE_COM+0) +#define DLM (BASE_COM+1) + +/*********************************************/ +/* Fonction ms_dos Permet de revenir au DOS */ +/*********************************************/ +void ms_dos(void) +{ +exit(0); +} + +/*********************************************************************/ +/* Fonction init_uart() Initialisation du 16550 avec FIFO disable */ +/*********************************************************************/ +void init_uart(void) +{ +outportb(LCR,0x80); /*DLAB=1 pour acceder au baud rate generator*/ +outportb(DLL,0x2 ); +outportb(DLM,0x0 ); /*Vitesse 56 Kbauds*/ +outportb(LCR,0x03); /*DLAB=0 / 8 bits de data / 1 stop / Pas de Parité*/ + + +outportb(FCR,0x00); /*FIFO disable*/ +outportb(IER,0x00); /*Pas de demandes d'IT*/ + +inportb(RBR); /*DEUX lectures de RBR pour "vider"*/ +inportb(RBR); /*d'éventuels "vieux" caractères*/ +} + + +/*************************************************************************************************/ +/* Programme principal */ +/*************************************************************************************************/ +void main(void) +{ +int touche; +unsigned char ctrl; + +clrscr(); +init_uart(); +printf(" EX320\n\n"); +printf("Caractères de 8 bits, sans bit de parité\n"); +printf("Frapper sur une touche pour envoyer le code de la touche à la maquette\n"); +printf("ESC pour sortir\n\n"); + + +while(1) + { + touche=getch(); + if( touche == ESC ) ms_dos(); + + while(!((ctrl = inportb(LSR)) & 0x20)); /*Attendre transmetteur pret*/ + + outportb(THR,touche); + printf("Caractère transmis : %.2XH ",touche); + + while(!((ctrl = inportb(LSR)) & 0x01)); /*Attendre caractère reçu*/ + + touche = inportb(RBR); + + printf("Caractere recu : %.2XH ", touche);/*Affichage du code reu*/ + printf("Status : %.2XH\r\n", (int) ctrl); /*Affichage du status*/ + } +} diff --git a/uP/TP1_SerialAndParallelPort/ex33xb.c b/uP/TP1_SerialAndParallelPort/ex33xb.c new file mode 100755 index 0000000..0f9acf6 --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex33xb.c @@ -0,0 +1,252 @@ +/***********************************************************************/ +/* Fichier ex33xi.c */ +/* */ +/* BINOME : */ +/* */ +/***********************************************************************/ +#include +#include +#include +#include + +#define CNT59 0x20 +#define IMR59 0x21 + +#define ESC 0x1B +#define BASE_COM 0x2F8 + +#define RBR (BASE_COM+0) +#define THR (BASE_COM+0) +#define IER (BASE_COM+1) +#define IIR (BASE_COM+2) +#define FCR (BASE_COM+2) +#define LCR (BASE_COM+3) +#define MCR (BASE_COM+4) +#define LSR (BASE_COM+5) +#define MSR (BASE_COM+6) +#define DLL (BASE_COM+0) +#define DLM (BASE_COM+1) +#define TAILLE 50 + + +/*Variables globales*/ +/********************/ +void interrupt (*save_int_0b)(); /*Déclaration d'un pointeur pour sauver le vecteur d'interruption*/ +volatile unsigned int buffer[TAILLE]; +volatile unsigned int index_in = 0; +volatile unsigned int index_out = 0; +unsigned char imr59_bak; +unsigned int touche; +volatile unsigned char flag_recu; +unsigned int vitesse; +unsigned int fifo; +unsigned char ctrl; +unsigned char c; + + +/*************************************************************************/ +/* Fonction ms_dos() Fonction exécutée pour revenir à MS-DOS */ +/*************************************************************************/ +void ms_dos(void) +{ +setvect(0x0b,save_int_0b); /*Restitution du vecteur d'IT MS-DOS pour IRQ3*/ +outportb(IMR59,imr59_bak); /*Restitution du registre IMR du 8259A*/ +exit(0); +} + + +/*****************************/ +/* Interruption 0BH (COM2) */ +/*****************************/ +void interrupt it_com2(void) +{ +unsigned int p; +unsigned char lsr, rbr; + +while (inportb(IIR) & 0x4) { + rbr = inportb(RBR); + lsr = inportb(LSR); + p = rbr << 8; + p |= lsr; + buffer[index_in % TAILLE] = p; + index_in ++; +} +outportb(CNT59,0x20); /*Envoi d'un EOI non spécifique*/ +} + +/************************************************************************/ +/* Fonction init_uart() Initialisation de COM2 */ +/************************************************************************/ +void init_uart(void) +{ +unsigned char code; +outportb(LCR,0x80); /*DLAB=1 pour accéder au baud rate generator*/ +switch(vitesse) + { + case 1200 : outportb(DLL, 96);break; + case 19200 : outportb(DLL, 6);break; + case 56000 : outportb(DLL, 2);break; + default: printf("Erreur\n");break; + } +outportb(DLM, 0); + +outportb(LCR, 0x03); /*DLAB=0 / 8 bits de data / 1 Stop / Pas de parité*/ + +switch (fifo) { + case 0: + code = 0x00; + break; + case 1: + code = 0x07; + break; + case 4: + code = 0x47; + break; + case 8: + code = 0x87; + break; + case 14: + code = 0xc7; + break; + default: + printf("Erreur\n"); + break; + } + + +outportb(FCR, code); + + +inportb(RBR); /*DEUX lectures de RBR pour "vider"*/ +inportb(RBR); /*d'éventuels "vieux" caractères*/ + +outportb(IER, 0x01); /*IT en réception*/ +outportb(MCR, 0x08); /*Activer la sortie OUT 2 de l'UART (Cf Figure 11)*/ +} + +/**************************************/ +/* Programme principal main */ +/**************************************/ +void main(void) +{ +clrscr(); /*Effacer l'écran*/ + +save_int_0b=getvect(0x0b); /*Sauvegarde du vecteur d'interruption MS-DOS*/ +setvect(0x0b,it_com2); /*Mise en place de notre propre vecteur*/ +imr59_bak = inportb(IMR59); /*Sauvegarde du registre de masque du 8259A*/ +outportb(IMR59,(inportb(IMR59) & 0xf7));/*Démasquer IRQ3*/ + + + + +printf(" PROGRAMME EX33XP (INT)\n\n"); +printf("0 => 1200 Bauds (pour utiliser la maquette dans le mode 330)\n"); +printf("1 => 19200 Bauds (pour utiliser la maquette dans le mode 331)\n"); +printf("2 => 56000 Bauds (pour utiliser la maquette dans le mode 332)\n\n"); + + printf(" ENTRER VOTRE CHOIX POUR CONTINUER \n"); + +vitesse=0; +while( vitesse == 0 ) + { + switch(getch()) + { + case '0' : vitesse=1200 ;break; + case '1' : vitesse=19200;break; + case '2' : vitesse=56000;break; + case ESC : ms_dos() ;break; + + default : putchar(0x07); /*Emmission d'un bip sonore*/ + } + } + + +printf("0=> pas de fifo\n"); +printf("1=> fifo 1\n"); +printf("4=> fifo 4\n"); +printf("8=> fifo 8\n"); +printf("9=> fifo 14\n"); + +fifo=16; +while( fifo == 16 ) + { + switch(getch()) + { + case '0' : fifo=0 ;break; + case '1' : fifo=1 ;break; + case '4' : fifo=4 ;break; + case '8' : fifo=8 ;break; + case '9' : fifo=14 ; break; + case ESC : ms_dos() ;break; + + default : putchar(0x07); /*Emmission d'un bip sonore*/ + } + } + + + init_uart(); + clrscr(); + + printf("\nINITIALISATION DU PORT COM : "); + printf("Vitesse : %u bauds, 8 bits, pas de parité \n",vitesse); + printf(" FIFO = %u\n", fifo); + printf("\nFRAPPER SUR UNE TOUCHE POUR DECLENCHER L'ARRIVEE DE CARACTERES SUR LE PORT COM\n\n"); + + if( getch() == ESC ) { + ms_dos(); + } + + + while( !((ctrl = inportb(LSR)) & 0x20)); /*Attendre transmetteur prêt*/ + + /*Envoi d'un caractère à la maquette, peu importe le caractère*/ + outportb(THR,0x55); + + + +while(1) + { + + if( kbhit() != 0 ) + { + touche=getch(); + if( touche == ESC ) + + ms_dos(); + else + { + while( ! (inportb(LSR) & 0x20)); /*Attendre transmetteur pret*/ + outportb(THR,touche); + } + + } + + + + if( index_in != index_out ) /*Au moins un caractère est disponible sur COM*/ + { + unsigned char lsr; + unsigned char rbr; + + unsigned int p = buffer[index_out % TAILLE]; + index_out++; + + lsr = p & 0xFF; + rbr = p >> 8; + + if(lsr & 0x0E) /*Test erreur réception*/ + { + printf("\nErreur réception : code %.2xH", ctrl); + ms_dos(); + } + + putchar(rbr); + + + } + + } +} + + +/* TODO: nothing, it's working !!! */ \ No newline at end of file diff --git a/uP/TP1_SerialAndParallelPort/ex33xi.c b/uP/TP1_SerialAndParallelPort/ex33xi.c new file mode 100755 index 0000000..061a612 --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex33xi.c @@ -0,0 +1,232 @@ +/***********************************************************************/ +/* Fichier ex33xi.c */ +/* */ +/* BINOME : */ +/* */ +/***********************************************************************/ +#include +#include +#include +#include + +#define CNT59 0x20 +#define IMR59 0x21 + +#define ESC 0x1B +#define BASE_COM 0x2F8 + +#define RBR (BASE_COM+0) +#define THR (BASE_COM+0) +#define IER (BASE_COM+1) +#define IIR (BASE_COM+2) +#define FCR (BASE_COM+2) +#define LCR (BASE_COM+3) +#define MCR (BASE_COM+4) +#define LSR (BASE_COM+5) +#define MSR (BASE_COM+6) +#define DLL (BASE_COM+0) +#define DLM (BASE_COM+1) + + +/*Variables globales*/ +/********************/ +void interrupt (*save_int_0b)(); /*Déclaration d'un pointeur pour sauver le vecteur d'interruption*/ + +unsigned char imr59_bak; +unsigned int touche; +volatile unsigned char flag_recu; +unsigned int vitesse; +unsigned int fifo; +unsigned char ctrl; +unsigned char c; + + +/*************************************************************************/ +/* Fonction ms_dos() Fonction exécutée pour revenir à MS-DOS */ +/*************************************************************************/ +void ms_dos(void) +{ +setvect(0x0b,save_int_0b); /*Restitution du vecteur d'IT MS-DOS pour IRQ3*/ +outportb(IMR59,imr59_bak); /*Restitution du registre IMR du 8259A*/ +exit(0); +} + + +/*****************************/ +/* Interruption 0BH (COM2) */ +/*****************************/ +void interrupt it_com2(void) +{ +flag_recu = 0x01; +outportb(CNT59,0x20); /*Envoi d'un EOI non spécifique*/ +} + +/************************************************************************/ +/* Fonction init_uart() Initialisation de COM2 */ +/************************************************************************/ +void init_uart(void) +{ +unsigned char code; +outportb(LCR,0x80); /*DLAB=1 pour accéder au baud rate generator*/ +switch(vitesse) + { + case 1200 : outportb(DLL, 96);break; + case 19200 : outportb(DLL, 6);break; + case 56000 : outportb(DLL, 2);break; + default: printf("Erreur\n");break; + } +outportb(DLM, 0); + +outportb(LCR, 0x03); /*DLAB=0 / 8 bits de data / 1 Stop / Pas de parité*/ + +switch (fifo) { + case 0: + code = 0x00; + break; + case 1: + code = 0x07; + break; + case 4: + code = 0x47; + break; + case 8: + code = 0x87; + break; + case 14: + code = 0xc7; + break; + default: + printf("Erreur\n"); + break; + } + + +outportb(FCR, code); + + +inportb(RBR); /*DEUX lectures de RBR pour "vider"*/ +inportb(RBR); /*d'éventuels "vieux" caractères*/ + +outportb(IER, 0x01); /*IT en réception*/ +outportb(MCR, 0x08); /*Activer la sortie OUT 2 de l'UART (Cf Figure 11)*/ +} + +/**************************************/ +/* Programme principal main */ +/**************************************/ +void main(void) +{ +clrscr(); /*Effacer l'écran*/ + +save_int_0b=getvect(0x0b); /*Sauvegarde du vecteur d'interruption MS-DOS*/ +setvect(0x0b,it_com2); /*Mise en place de notre propre vecteur*/ +imr59_bak = inportb(IMR59); /*Sauvegarde du registre de masque du 8259A*/ +outportb(IMR59,(inportb(IMR59) & 0xf7));/*Démasquer IRQ3*/ + + + + +printf(" PROGRAMME EX33XP (INT)\n\n"); +printf("0 => 1200 Bauds (pour utiliser la maquette dans le mode 330)\n"); +printf("1 => 19200 Bauds (pour utiliser la maquette dans le mode 331)\n"); +printf("2 => 56000 Bauds (pour utiliser la maquette dans le mode 332)\n\n"); + + printf(" ENTRER VOTRE CHOIX POUR CONTINUER \n"); + +vitesse=0; +while( vitesse == 0 ) + { + switch(getch()) + { + case '0' : vitesse=1200 ;break; + case '1' : vitesse=19200;break; + case '2' : vitesse=56000;break; + case ESC : ms_dos() ;break; + + default : putchar(0x07); /*Emmission d'un bip sonore*/ + } + } + + +printf("0=> pas de fifo\n"); +printf("1=> fifo 1\n"); +printf("4=> fifo 4\n"); +printf("8=> fifo 8\n"); +printf("9=> fifo 14\n"); + +fifo=16; +while( fifo == 16 ) + { + switch(getch()) + { + case '0' : fifo=0 ;break; + case '1' : fifo=1 ;break; + case '4' : fifo=4 ;break; + case '8' : fifo=8 ;break; + case '9' : fifo=14 ; break; + case ESC : ms_dos() ;break; + + default : putchar(0x07); /*Emmission d'un bip sonore*/ + } + } + + + init_uart(); + clrscr(); + + printf("\nINITIALISATION DU PORT COM : "); + printf("Vitesse : %u bauds, 8 bits, pas de parité \n",vitesse); + printf(" FIFO = %u\n", fifo); + printf("\nFRAPPER SUR UNE TOUCHE POUR DECLENCHER L'ARRIVEE DE CARACTERES SUR LE PORT COM\n\n"); + + if( getch() == ESC ) { + ms_dos(); + } + + + while( !((ctrl = inportb(LSR)) & 0x20)); /*Attendre transmetteur prêt*/ + + /*Envoi d'un caractère à la maquette, peu importe le caractère*/ + outportb(THR,0x55); + + + +while(1) + { + + if( kbhit() != 0 ) + { + touche=getch(); + if( touche == ESC ) + + ms_dos(); + else + { + while( ! (inportb(LSR) & 0x20)); /*Attendre transmetteur pret*/ + outportb(THR,touche); + } + + } + + + + if( flag_recu != 0 ) /*Au moins un caractère est disponible sur COM*/ + { + if( (ctrl = inportb(LSR)) & 0x0E) /*Test erreur réception*/ + { + printf("\nErreur réception : code %.2xH", ctrl); + ms_dos(); + } + + while (inportb(IIR) & 0x4) { + c = inportb(RBR); + putchar(c); + } + + flag_recu = 0; + + } + + + } +} \ No newline at end of file diff --git a/uP/TP1_SerialAndParallelPort/ex33xp.c b/uP/TP1_SerialAndParallelPort/ex33xp.c new file mode 100755 index 0000000..c33ec7c --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex33xp.c @@ -0,0 +1,142 @@ +/**************************************************************************/ +/* Fichier f:\up\tp1\ex33xp.c */ +/* */ +/* BINOME : */ +/* */ +/* */ +/**************************************************************************/ +#include +#include +#include +#include + +#define ESC 0x1B +#define BASE_COM 0x2F8 + +#define RBR (BASE_COM+0) +#define THR (BASE_COM+0) +#define IER (BASE_COM+1) +#define IIR (BASE_COM+2) +#define FCR (BASE_COM+2) +#define LCR (BASE_COM+3) +#define MCR (BASE_COM+4) +#define LSR (BASE_COM+5) +#define MSR (BASE_COM+6) +#define DLL (BASE_COM+0) +#define DLM (BASE_COM+1) + + +int touche; +unsigned int vitesse; + +/****************************************************************************/ +/* Fonction ms_dos() */ +/****************************************************************************/ +void ms_dos(void) +{ +exit(0); +} + +/***************************************************************************/ +/* Fonction init_uart() Initialisation du 16550 avec FIFO disable */ +/***************************************************************************/ +void init_uart(void) +{ + +outportb(LCR,0x80); /*DLAB=1 pour accéder au baud rate generator*/ +switch(vitesse) + { + case 1200 : outportb(DLL, 96);break; + case 19200 : outportb(DLL, 6);break; + case 56000 : outportb(DLL, 2);break; + } +outportb(DLM, 0); + +outportb(LCR, 0x03); /*DLAB=0 / 8 bits de data / 1 Stop / Pas de parité*/ + +outportb(FCR,0x00); /*FIFO disable*/ +outportb(IER,0x00); /*Pas de demandes d'IT*/ + +inportb(RBR); /*DEUX lectures de RBR pour "vider"*/ +inportb(RBR); /*d'éventuels "vieux" caractères*/ +} + +/**************************************/ +/* Programme principal main */ +/**************************************/ +void main(void) +{ +int ctrl; +clrscr(); +printf(" PROGRAMME EX33XP (Polling)\n\n"); +printf("0 => 1200 Bauds (pour utiliser la maquette dans le mode 330)\n"); +printf("1 => 19200 Bauds (pour utiliser la maquette dans le mode 331)\n"); +printf("2 => 56000 Bauds (pour utiliser la maquette dans le mode 332)\n\n"); + + printf(" ENTRER VOTRE CHOIX POUR CONTINUER "); + +vitesse=0; +while( vitesse == 0 ) + { + switch(getch()) + { + case '0' : vitesse=1200 ;break; + case '1' : vitesse=19200;break; + case '2' : vitesse=56000;break; + case ESC : ms_dos() ;break; + + default : putchar(0x07); /*Emmission d'un bip sonore*/ + } + } + + init_uart(); + clrscr(); + + printf("\nINITIALISATION DU PORT COM : "); + printf("Vitesse : %u bauds, 8 bits, pas de parité \n",vitesse); + printf(" LE FIFO DE L'UART N'EST PAS EN SERVICE\n"); + printf("\nFRAPPER SUR UNE TOUCHE POUR DECLENCHER L'ARRIVEE DE CARACTERES SUR LE PORT COM\n\n"); + + if( getch() == ESC ) { + ms_dos(); + } + + + while( !((ctrl = inportb(LSR)) & 0x20)); /*Attendre transmetteur prêt*/ + + /*Envoi d'un caractère à la maquette, peu importe le caractère*/ + outportb(THR,0x55); + +while(1) + { + if( kbhit() != 0 ) { + touche=getch(); + + if( touche == ESC ) ms_dos(); + + else + { + while( ! (inportb(LSR) & 0x20)); /*Attendre transmetteur pret*/ + outportb(THR,touche); + } + + } + + if( inportb(LSR) & 0x01) /*Un caractère est disponible sur COM ?*/ + { + char c = inportb(RBR); + putchar(c); /*Afficher le caractère reçu*/ + + if( (ctrl = inportb(LSR)) & 0x0E) /*Test erreur réception*/ + { + printf("\nErreur réception : code %.2xH", ctrl); + ms_dos(); + } + + if(c == '\0' ) /*Test fin d'émission*/ + { + /* ms_dos(); */ + } + } + } +} \ No newline at end of file diff --git a/uP/TP1_SerialAndParallelPort/ex51.c b/uP/TP1_SerialAndParallelPort/ex51.c new file mode 100755 index 0000000..0cbcf7b --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex51.c @@ -0,0 +1,84 @@ +/***********************************************************************/ +/* Fichier ex51.c */ +/* */ +/* BINOME : b17.an2 LIMIN MASSE */ +/* */ +/***********************************************************************/ + + +#include +#include +#include +#include + +#define LPT1_DATA 0x378 +#define LPT1_STAT (LPT1_DATA + 1) +#define LPT1_CNT (LPT1_DATA + 2) + +#define ESC 0x1B + +#define CNT59 0x20 +#define IMR59 0x21 + + + +/*Variables globales*/ +/********************/ +void interrupt (*save_int_0b)(); /*Déclaration d'un pointeur pour sauver le vecteur d'interruption*/ +unsigned char imr59_bak; +unsigned int touche; +unsigned char data_byte = 0x01; +unsigned char cnt_byte = 0x01; + + +/*************************************************************************/ +/* Fonction ms_dos() Fonction exécutée pour revenir à MS-DOS */ +/*************************************************************************/ +void ms_dos(void) +{ + /* demasquer l'entree IRQ7 du controleur d'interruption */ + outportb(IMR59, 0x7F & inportb(IMR59)); + + exit(0); +} + + +/**************************************/ +/* Programme principal main */ +/**************************************/ +void main(void) { + + + /* masquer entree IRQ7 du controleur d'interruption */ + outportb(IMR59, 0x80 | inportb(IMR59)); + + + do { + /* Effacer l'ecran */ + clrscr(); + + printf("status = 0x%x\n", inportb(LPT1_STAT)); + + printf("cnt envoye = 0x%02x\n", cnt_byte); + outportb(LPT1_CNT, cnt_byte); + printf("cnt lu = 0x%02x\n", inportb(LPT1_CNT)); + + printf("data envoye = 0x%02x\n", data_byte); + outportb(LPT1_DATA, data_byte); + printf("data lu = 0x%02x\n", inportb(LPT1_DATA)); + + data_byte <<= 1; + if (!data_byte) + data_byte = 0x01; + + cnt_byte <<= 1; + if (!(cnt_byte & 0x0F)) + cnt_byte = 0x01; + + printf("\nPressez ESC pour quitter, une autre touche pour continuer\n"); + } while ((touche = getch()) != ESC); + + ms_dos(); +} + + diff --git a/uP/TP1_SerialAndParallelPort/ex52.c b/uP/TP1_SerialAndParallelPort/ex52.c new file mode 100755 index 0000000..0b4a3bf --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex52.c @@ -0,0 +1,80 @@ +/***********************************************************************/ +/* Fichier ex52.c */ +/* */ +/* BINOME : b17.an2 LIMIN MASSE */ +/* */ +/***********************************************************************/ + + +#include +#include +#include +#include + +#define LPT1_DATA 0x378 +#define LPT1_STAT (LPT1_DATA + 1) +#define LPT1_CNT (LPT1_DATA + 2) + +#define ESC 0x1B + +#define CNT59 0x20 +#define IMR59 0x21 + + + +/*Variables globales*/ +/********************/ + +unsigned char * message = "ABCDEFGHIJKLMNOP"; + + +/*************************************************************************/ +/* Fonction ms_dos() Fonction exécutée pour revenir à MS-DOS */ +/*************************************************************************/ +void ms_dos(void) +{ + /* demasquer l'entree IRQ7 du controleur d'interruption */ + outportb(IMR59, 0x7F & inportb(IMR59)); + + exit(0); +} + + +/**************************************/ +/* Programme principal main */ +/**************************************/ +void main(void) { + int i; + + /* masquer entree IRQ7 du controleur d'interruption */ + outportb(IMR59, 0x80 | inportb(IMR59)); + + clrscr(); + + for (i = 0; i <= 16; i++) { + + /* polling en attendant que busy passe au niveau 1 */ + while (! (inportb(LPT1_STAT) & 0x80)) { + printf("[%02X, %02X] Polling sur busy, attente de niveau 0\n", i, inportb(LPT1_STAT)); + } + + /* envoi des donnees */ + outportb(LPT1_DATA, message[i]); + + /* avertir la maquette de l'arrivee de donnees mise a 0 de strobe */ + outportb(LPT1_CNT, inportb(LPT1_CNT) & ~0x04); + + /* polling sur busy, en attendant le retour du niveau 0 */ + while ((inportb(LPT1_STAT) & 0x80)) { + printf("[%02X, %02X] Polling sur busy, attente de niveau 0\n", i, inportb(LPT1_STAT)); + } + + /* remise a 1 du signal strobe */ + outportb(LPT1_CNT, inportb(LPT1_CNT) | 0x04); + + } + + ms_dos(); +} + + diff --git a/uP/TP1_SerialAndParallelPort/ex53.c b/uP/TP1_SerialAndParallelPort/ex53.c new file mode 100755 index 0000000..8293a35 --- /dev/null +++ b/uP/TP1_SerialAndParallelPort/ex53.c @@ -0,0 +1,88 @@ +/***********************************************************************/ +/* Fichier ex53.c */ +/* */ +/* BINOME : b17.an2 LIMIN MASSE */ +/* */ +/***********************************************************************/ + + +#include +#include +#include +#include + +#define LPT1_DATA 0x378 +#define LPT1_STAT (LPT1_DATA + 1) +#define LPT1_CNT (LPT1_DATA + 2) + +#define ESC 0x1B + +#define CNT59 0x20 +#define IMR59 0x21 + + + +/*Variables globales*/ +/********************/ + + + +/*************************************************************************/ +/* Fonction ms_dos() Fonction exécutée pour revenir à MS-DOS */ +/*************************************************************************/ +void ms_dos(void) +{ + /* demasquer l'entree IRQ7 du controleur d'interruption */ + outportb(IMR59, 0x7F & inportb(IMR59)); + + exit(0); +} + + +/**************************************/ +/* Programme principal main */ +/**************************************/ +void main(void) { + int i = 0; + char c = 0; + + /* masquer entree IRQ7 du controleur d'interruption */ + outportb(IMR59, 0x80 | inportb(IMR59)); + + clrscr(); + + do { + char tmp; + + /* polling en attendant que busy passe au niveau 1 */ + while (! (inportb(LPT1_STAT) & 0x80)); + + /* reception demi octet de poids faible */ + tmp = (inportb(LPT1_STAT) & 0x78); + + if (i & 1) { + /* demi octet de poids fort */ + c |= (tmp << 1); + + printf("%c", c); + } else { + c = (tmp >> 3); + } + + /* avertir la maquette de la lecture du demi octet: mise a 0 de strobe */ + outportb(LPT1_CNT, inportb(LPT1_CNT) & ~0x04); + + /* polling sur busy, en attendant le retour du niveau 0 */ + while ((inportb(LPT1_STAT) & 0x80)); + + /* remise a 1 du signal strobe */ + outportb(LPT1_CNT, inportb(LPT1_CNT) | 0x04); + + i++; + + } while ( (i & 1) || c != 0); + + ms_dos(); +} + + diff --git a/uP/TP2_USB/test_usb.c b/uP/TP2_USB/test_usb.c new file mode 100755 index 0000000..13a8b56 --- /dev/null +++ b/uP/TP2_USB/test_usb.c @@ -0,0 +1,188 @@ +#include +#include +#include + +struct usb_device * dev = NULL; +usb_dev_handle * dev_handle = NULL; + +void initialize(void) { + struct usb_bus * busses = NULL; + int nb = 0; + + usb_init(); + + nb = usb_find_busses(); + printf("J'ai trouve %d USB\n", nb); + + nb = usb_find_devices(); + printf("J'ai trouve %d devices\n", nb); + + busses = usb_get_busses(); + + while (busses != NULL) { + printf("bus %s\n", busses->dirname); + + struct usb_device * devices = busses->devices; + while (devices != NULL) { + printf("bus %s, device %s (%04hx:%04hx)\n", busses->dirname, + devices->filename, + devices->descriptor.idVendor, + devices->descriptor.idProduct); + + if (devices->descriptor.idVendor == 0x04d8 + && devices->descriptor.idProduct == 0x000c) { + dev = devices; + return; + } + + devices = devices->next; + } + + busses = busses->next; + } + + printf("Carte Microchip non connectee !\n"); + exit(1); +} + +void open_device(void) { + int ret = 0; + + dev_handle = usb_open(dev); + if (dev_handle == NULL) { + printf("usb_open: %s\n", usb_strerror()); + exit(1); + } + + ret = usb_reset(dev_handle); + if (ret != 0) { + printf("usb_reset: %s\n", usb_strerror()); + exit(1); + } + +/* ret = usb_resetep(dev_handle, 0x01); + if (ret != 0) { + printf("usb_resetep: %s\n", usb_strerror()); + exit(1); + }*/ + +} + +void close_device(void) { + int ret = usb_close(dev_handle); + + if (ret != 0) { + printf("usb_close: %s\n", usb_strerror()); + } +} + +void play_with_leds(void) { + char usb_data[3]; + int ret = 0; + + usb_data[0] = 0x32; + int n = 3; + int e = 1; + + while (1) { + usb_data[1] = n; + usb_data[2] = e; + + printf("LED = %d, etat = %d\n", n, e); + + ret = usb_interrupt_write(dev_handle, 0x01, usb_data, 3, 20); + if (ret != 3) { + printf("usb_interrupt_write: ret = %d: %s\n", ret, usb_strerror()); + exit(1); + } + + if (n == 3) { + n = 4; + } else { + n = 3; + e = !e; + } + + sleep(1); + } +} + +void read_pot(void) { + char usb_in[3]; + char usb_out[1]; + int ret; + + usb_out[0] = 0x37; + + while (1) { + ret = usb_interrupt_write(dev_handle, 0x01, usb_out, 1, 50); + if (ret != 1) { + printf("usb_interrupt_write: ret = %d: %s\n", ret, usb_strerror()); + exit(1); + } + + ret = usb_interrupt_read(dev_handle, 0x81, usb_in, 3, 50); + if (ret != 3) { + printf("usb_interrupt_write: ret = %d: %s\n", ret, usb_strerror()); + exit(1); + } + + printf("pot = {0x%02hhx, 0x%02hhx, 0x%02hhx}\n", usb_in[0], usb_in[1], usb_in[2]); + sleep(1); + } +} + +void read_temp(void) { + char usb_in[3]; + char usb_out[1]; + int ret; + uint16_t * temp; + char temp_2[2]; + + usb_out[0] = 0x34; + + while (1) { + ret = usb_interrupt_write(dev_handle, 0x01, usb_out, 1, 50); + if (ret != 1) { + printf("usb_interrupt_write: ret = %d: %s\n", ret, usb_strerror()); + exit(1); + } + + ret = usb_interrupt_read(dev_handle, 0x81, usb_in, 3, 50); + if (ret != 3) { + printf("usb_interrupt_write: ret = %d: %s\n", ret, usb_strerror()); + exit(1); + } + + temp_2[0] = usb_in[2]; + temp_2[1] = usb_in[1]; + temp = temp_2; + + + USB_LE16_TO_CPU(*temp); + + *temp >>= 3; + *temp = (*temp * 10) >> 4; + + + printf("temp = %hd°\n", *temp); + + printf("temp = {0x%02hhx, 0x%02hhx, 0x%02hhx}\n", usb_in[0], usb_in[1], usb_in[2]); + + sleep(1); + } +} + +int main(int argc, char ** argv) { + initialize(); + open_device(); + +// play_with_leds(); +// read_pot(); + read_temp(); + + close_device(); + + return 0; +} + diff --git a/uP/TP3_DSP/ex1/asm_ps0.asm b/uP/TP3_DSP/ex1/asm_ps0.asm new file mode 100755 index 0000000..2137ff0 --- /dev/null +++ b/uP/TP3_DSP/ex1/asm_ps0.asm @@ -0,0 +1,73 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\asm_ps0.asm (rev. 16-02-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction asm_ps0() en assembleur +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int asm_ps0(short *,short *, int); +* +* Exemple d'appel : y= asm_ps0(a,x,256); +* Où le compilateur C va t-il mettre les paramètres? On peut trouver l'information +* dans TMS320C6000 Optimizing Compiler Guide (SPRU 1871) pages 8-18 et suivantes : +* +* Premier paramètre (ici, adresse de a) => Registre A4 +* Second paramètre (ici, adresse de x) => Registre B4 +* Troisième paramètre (ici, 256) => Registre A6 +* +* La valeur calculée doit être retournée dans le registre A4. +* Le compilateur a placé l'adresse de retour dans le registre B3. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR SANS AUCUN SOUCI D'OPTIMISATION +********************************************************************************* + .def _asm_ps0 ;.def équivaut à public de l'assembleur 8085 + ;Pour pouvoir être appelée par le C, le nom d'une + ;fonction en assembleur doit commencer par + ;un caractère underscore _ +NBPS .equ 100 + +_asm_ps0: + mvk .s2 NBPS,b2 ;On va calculer NBPS fois le produit +ps: ;Ce nombre est contrôlé par b2. + ; Registre A1 = element i du vecteur A + ; Registre B1 = element i du vecteur B + ; Registre A5 = A1 * B1 + ; Registre A8 = index mobile (copie de A4) + ; Registre B8 = index mobile (copie de B4) + ; Registre A3 = somme des A2 + ; Registre A2 = nb elements restants + + zero .l a3 + mv a6,a2 + mv a4,a8 + mv b4,b8 + +loop: + sub .s a2,1,a2 + + ldh .d *a8++,a1 + nop 4 + ldh .d *b8++,b1 + nop 4 + + mpy .m a1,b1,a5 + nop 1 + add .l a5,a3,a3 + + [a2] b .s loop + nop 5 + + sub .l2 b2,1,b2 ;On calcule b2 fois le même produit scalaire + [b2] b .s2 ps + nop 5 + + mv a3,a4 + + b .s2 b3 ;return + nop 5 diff --git a/uP/TP3_DSP/ex1/asm_ps1.asm b/uP/TP3_DSP/ex1/asm_ps1.asm new file mode 100755 index 0000000..7b69e2f --- /dev/null +++ b/uP/TP3_DSP/ex1/asm_ps1.asm @@ -0,0 +1,79 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\asm_ps1.asm (rev. 30-01-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction asm_ps1() en assembleur +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int asm_ps1(short *,short *, int); +* +* Exemple d'appel : y= asm_ps1(a, x, 256); +* Où le compilateur C va t-il mettre les paramètres? On peut trouver l'information +* dans TMS320C6000 Optimizing Compiler Guide (SPRU 1871) pages 8-18 et suivantes : +* +* Premier paramètre (ici, adresse de a) => Registre A4 +* Second paramètre (ici, adresse de x) => Registre B4 +* Troisième paramètre (ici, 256) => Registre A6 +* +* La valeur calculée doit être retournée dans le registre A4. +* Le compilateur a placé l'adresse de retour dans le registre B3. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR EN MINIMISANT LE NOMBRE DE NOP ET EN UTILISANT +* DES INSTRUCTIONS EN PARALLÈLE. +********************************************************************************* + .def _asm_ps1 ;.def équivaut à public de l'assembleur 8085 + ;Pour pouvoir être appelée par le C, le nom d'une + ;fonction en assembleur doit commencer par + ;un caractère underscore _ +NBPS .equ 100 + +_asm_ps1: + mvk .s2 NBPS,b2 ;On va calculer NBPS fois le produit +ps: ;Ce nombre est contrôlé par b2. + + ; Registre A1 = element i du vecteur A + ; Registre B1 = element i du vecteur B + ; Registre A5 = A1 * B1 + ; Registre A8 = index mobile (copie de A4) + ; Registre B8 = index mobile (copie de B4) + ; Registre A3 = somme des A2 + ; Registre A2 = nb elements restants + + + + mv a6,a2 + || zero .l1 a3 + + mv a4,a8 + || mv b4,b8 + || zero .l1 a5 + +loop: + ldh .d1 *a8++,a1 + || ldh .d2 *b8++,b1 + || sub .s a2,1,a2 + + nop 1 + + [a2] b .s loop + nop 2 + mpy .m a1,b1,a5 + nop 1 + add .l a5,a3,a3 + ; Le B vers loop est effectif ! + + + sub .l2 b2,1,b2 ;On calcule b2 fois le même produit scalaire + [b2] b .s2 ps + nop 5 + + mv a3,a4 + + b .s2 b3 ;return + nop 5 diff --git a/uP/TP3_DSP/ex1/asm_ps2.asm b/uP/TP3_DSP/ex1/asm_ps2.asm new file mode 100755 index 0000000..61754eb --- /dev/null +++ b/uP/TP3_DSP/ex1/asm_ps2.asm @@ -0,0 +1,89 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\asm_ps2.asm (rev. 16-02-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction asm_ps2() en assembleur +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int asm_ps2(short *,short *, int); +* +* Exemple d'appel : y= asm_ps2(a, x, 256); +* Où le compilateur C va t-il mettre les paramètres? On peut trouver l'information +* dans TMS320C6000 Optimizing Compiler Guide (SPRU 1871) pages 8-18 et suivantes : +* +* Premier paramètre (ici, adresse de a) => Registre A4 +* Second paramètre (ici, adresse de x) => Registre B4 +* Troisième paramètre (ici, 256) => Registre A6 +* +* La valeur calculée doit être retournée dans le registre A4. +* Le compilateur a placé l'adresse de retour dans le registre B3. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR EN UTILISANT LE SOFTWARE PIPELINING SANS ÉPILOGUE. +* LECTURE DES ÉLÉMENTS DES VECTEURS AVEC L'INSTRUCTION LDH. +********************************************************************************* +NBPS .equ 100 + .def _asm_ps2 +_asm_ps2: + mvk .s2 NBPS,b2 ;On va calculer NBPS fois le produit + mv a4,a8 + mv b4,b8 + +ps: ;Ce nombre est contrôlé par b2. + zero a4 + mv a6,b0 + mv a8,a1 +|| mv b8,b1 + +p1: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 + +p2: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 + +p3: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop + +p4: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop + +p5: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop + +p6: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop +|| mpy .M1x a2,b4,a3 + +p7: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop +|| mpy .M1x a2,b4,a3 + +loop: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop +|| mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + sub .l2 b2,1,b2 ;On calcule b4 fois le même produit scalaire + [b2] b .s2 ps + nop 5 + + b .s2 b3 ;return + nop 5 \ No newline at end of file diff --git a/uP/TP3_DSP/ex1/asm_ps3.asm b/uP/TP3_DSP/ex1/asm_ps3.asm new file mode 100755 index 0000000..d5b146c --- /dev/null +++ b/uP/TP3_DSP/ex1/asm_ps3.asm @@ -0,0 +1,116 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\asm_ps3.asm (rev. 30-01-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction asm_ps3() en assembleur +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int asm_ps3(short *,short *, int); +* +* Exemple d'appel : y= asm_ps3(a, x, 256); +* Où le compilateur C va t-il mettre les paramètres? On peut trouver l'information +* dans TMS320C6000 Optimizing Compiler Guide (SPRU 1871) pages 8-18 et suivantes : +* +* Premier paramètre (ici, adresse de a) => Registre A4 +* Second paramètre (ici, adresse de x) => Registre B4 +* Troisième paramètre (ici, 256) => Registre A6 +* +* La valeur calculée doit être retournée dans le registre A4. +* Le compilateur a placé l'adresse de retour dans le registre B3. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR EN UTILISANT LE SOFTWARE PIPELINING AVEC ÉPILOGUE. +* LECTURE DES ÉLÉMENTS DES VECTEURS AVEC L'INSTRUCTION LDH. +********************************************************************************* +NBPS .equ 100 + .def _asm_ps3 +_asm_ps3: + mvk .s2 NBPS,b2 ;On va calculer NBPS fois le produit + mv a4,a8 + mv b4,b8 + +ps: ;Ce nombre est contrôlé par b2. + zero a4 + mv a6,b0 + sub b0, 7, b0 + mv a8,a1 +|| mv b8,b1 + +p1: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 + +p2: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 + +p3: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop + +p4: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop + +p5: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop + +p6: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop +|| mpy .M1x a2,b4,a3 + +p7: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop +|| mpy .M1x a2,b4,a3 + +loop: ldh .d1 *a1++,a2 +|| ldh .d2 *b1++,b4 +|| [b0] sub .l2 b0,1,b0 +|| [b0] b .s2 loop +|| mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + +e1: mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + +e2: mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + +e3: mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + +e4: mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + +e5: mpy .M1x a2,b4,a3 +|| add .l1 a4,a3,a4 + + +e6: add .l1 a4,a3,a4 + + +e7: add .l1 a4,a3,a4 + + sub .l2 b2,1,b2 ;On calcule b4 fois le même produit scalaire + [b2] b .s2 ps + nop 5 + + b .s2 b3 ;return + nop 5 \ No newline at end of file diff --git a/uP/TP3_DSP/ex1/asm_ps4.asm b/uP/TP3_DSP/ex1/asm_ps4.asm new file mode 100755 index 0000000..297d185 --- /dev/null +++ b/uP/TP3_DSP/ex1/asm_ps4.asm @@ -0,0 +1,122 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\asm_ps3.asm (rev. 16-02-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction asm_ps4() en assembleur +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int asm_ps3(short *,short *, int); +* +* Exemple d'appel : y= asm_ps4(a, x, 256); +* Où le compilateur C va t-il mettre les paramètres? On peut trouver l'information +* dans TMS320C6000 Optimizing Compiler Guide (SPRU 1871) pages 8-18 et suivantes : +* +* Premier paramètre (ici, adresse de a) => Registre A4 +* Second paramètre (ici, adresse de x) => Registre B4 +* Troisième paramètre (ici, 256) => Registre A6 +* +* La valeur calculée doit être retournée dans le registre A4. +* Le compilateur a placé l'adresse de retour dans le registre B3. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR EN UTILISANT LE SOFTWARE PIPELINING SANS ÉPILOGUE. +* LA DIFFÉRENCE AVEC asm_ps2 EST QUE L'ON CHERCHE À ALLER PUS VITE EN ALLANT LIRE +* LES ÉLÉMENTS D'UN VECTEUR 2 PAR 2 (LDW) AU LIEU DE 1 PAR 1 (LDH). +* VOIR ÉGALEMENT L'INSTRUCTION MPYH. +********************************************************************************* +NBPS .equ 100 + .def _asm_ps4 +_asm_ps4: + mvk .s2 NBPS,b2 ;On va calculer NBPS fois le produit + + + + +; todo on a un souci avec les data cross path il ny en a que 2 +; et ils sont utilise obligatoirememt avec mpy & mpyh +; il faut donc mettre le branch et le sub du meme cote +; parce auil utilisent b0 donc todo; passer un add sur une unit +; s et le sub sur une unit l + +ps: ;Ce nombre est contrôlé par b2. + mv a4, a1 + mv b4, b1 + zero b5 ; la somme finale + zero a9 ; 1ere demi somme + zero b9 ; 2eme demi somme + + mv a6, b0 ; init nb cases tableau + +p1: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 + + +p2: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| sub .s2 b0, 2, b0 + + +p3: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| sub .s2 b0, 2, b0 +|| [b0] b .s1 loop + + + +p4: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| sub .s2 b0, 2, b0 +|| [b0] b .s1 loop + + + +p5: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| sub .s2 b0, 2, b0 +|| [b0] b .s1 loop + + + +p6: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| sub .s2 b0, 2, b0 +|| [b0] b .s1 loop +|| mpy .m1 a7, b7, a8 +|| mpyh .m2 a7, b7, b8 + + +p7: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| sub .s2 b0, 2, b0 +|| [b0] b .s1 loop +|| mpy .m1 a7, b7, a8 +|| mpyh .m2 a7, b7, b8 + + +loop: ldw .d1 *a1++,a7 +|| ldw .d2 *b1++,b7 +|| [b0] sub .s2 b0, 2, b0 +|| [b0] b .s1 loop +|| mpy .m1 a7, b7, a8 +|| mpyh .m2 a7, b7, b8 +|| add .l1 a8, a9, a9 +|| add .l2 b8, b9, b9 + +; fin du calcul du produit scalaire: somme des demi sommes + add a9, b9, b5 + + + sub .l2 b2,1,b2 ;On calcule b2 fois le même produit scalaire + [b2] b .s2 ps + nop 5 + + mv b5, a4 + + b .s2 b3 ;return + nop 5 + diff --git a/uP/TP3_DSP/ex1/data.h b/uP/TP3_DSP/ex1/data.h new file mode 100755 index 0000000..ba5529c --- /dev/null +++ b/uP/TP3_DSP/ex1/data.h @@ -0,0 +1,7 @@ +/************************************************ + * Origine du fichier l:\up\tp3\ex1\data.h * + * Recopie dans le répertoire f:\up\tp3\ex1 * + * NE PAS MODIFIER CE FICHIER !! * + ************************************************/ +#define A_ARRAY 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,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256 +#define X_ARRAY 256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 diff --git a/uP/TP3_DSP/ex1/ex1.c b/uP/TP3_DSP/ex1/ex1.c new file mode 100755 index 0000000..7a15b3e --- /dev/null +++ b/uP/TP3_DSP/ex1/ex1.c @@ -0,0 +1,121 @@ +/******************************************************************************** +* Origine du fichier l:\up\tp3\ex1\ex1.c (rev. 08-03-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +*********************************************************************************/ + +#define COUNT_PS 100 /*On calcule 100 fois le même produit scalaire*/ + +/* Include Files */ +#include /* Pour pouvoir utiliser printf */ +#include "ex1cfg.h" /* Fichier généré par CCS lors de la sauvegarde du fichier de configuration .cdb */ +#include "data.h" + +/* Déclaration des fonctions écrites en assembleur (asm..) ou en assembleur linéaire (sa...)*/ +extern int asm_ps0(short *, short *, int); /*Aucun souci d'optimisation*/ +extern int asm_ps1(short *, short *, int); /*Optimisation grossière*/ +extern int asm_ps2(short *, short *, int); /*Software pipelining sans épilogue LDH*/ +extern int asm_ps3(short *, short *, int); /*Software pipelining avec épilogue LDH*/ +extern int asm_ps4(short *, short *, int); /*Software pipelining sans épilogue LDW*/ + +extern int sa_ps0(short *, short *, int); /*Assembleur linéaire avec instructions LDH*/ +extern int sa_ps1(short *, short *, int); /*Assembleur linéaire avec instructions LDW*/ +extern float sa_ps2(float *, float *, int); /*Assembleur linéaire avec des flottants*/ + + +/* Déclarations des variables globales */ +short a[256] = {A_ARRAY}; /*Pour faire le calcul avec des entiers*/ +short x[256] = {X_ARRAY}; /*Pour faire le calcul avec des entiers*/ + +float af[256]= {A_ARRAY}; /*Pour faire le calcul avec des flottants*/ +float xf[256]= {X_ARRAY}; /*Pour faire le calcul avec des flottants*/ + +int y; /*Pour stocker le résultat du calcul avec des entiers*/ +float yf; /*Pour stocker le résultat du calcul avec des flottants*/ + +/************************************************ + * Fonction c_ps0() * + * Calcul du produit scalaire avec des entiers * + ************************************************/ +int c_ps0 (short *m, short *n, int count) +{ +int i,sum; +/*Pour allonger le temps d'exécution de la fonction, on fait COUNT_PS fois le même calcul */ +int count_ps=COUNT_PS; + +while( count_ps-- != 0 ) + { + sum = 0; + + for (i=0; i < count; i++) + { + sum = sum + m[i] * n[i]; + } + } +return(sum); +} + +/************************************************* + * Fonction c_ps1() * + * Calcul du produit scalaire avec des flottants * + *************************************************/ +float c_ps1 (float *m, float *n, int count) +{ +int i; +float sum; + +/*Pour allonger le temps d'exécution de la fonction, on fait COUNT_PS fois le même calcul */ +int count_ps=COUNT_PS; + +while( count_ps-- != 0 ) + { + sum = 0; + + for (i=0; i < count; i++) + { + sum = sum + m[i] * n[i]; + } + } + +return(sum); +} +/*********************** + * Programme principal * + ***********************/ +void main(void) +{ +y=asm_ps0(a,x,256); +printf("asm_ps0 (AUCUN SOUCI D'OPTIMISATION) => y= %x hex \n", y); + +y=asm_ps1(a,x,256); +printf("asm_ps1 (OPTIMISATION GROSSIÈRE) => y= %x hex \n", y); + +y=asm_ps2(a,x,256); +printf("asm_ps2 (LDH ET PIPELINING SANS ÉPILOGUE) => y= %x hex \n", y); + +y=asm_ps3(a,x,256); +printf("asm_ps3 (LDH ET PIPELINING AVEC ÉPILOGUE) => y= %x hex \n", y); + +y=asm_ps4(a,x,256); +printf("asm_ps4 (LDW ET PIPELINING SANS ÉPILOGUE) => y= %x hex \n", y); + +y=sa_ps0(a,x,256); +printf("sa_ps0 (ENTIERS LDH) => y= %x hex \n", y); + +y=sa_ps1(a,x,256); +printf("sa_ps1 (ENTIERS LDW) => y= %x hex \n", y); + +yf=sa_ps2(af,xf,256); +printf("sa_ps2 (FLOTTANTS) => y= %x hex \n",(int)yf); + +y=c_ps0(a,x,256); +printf("c_ps0 (ENTIERS) => y= %x hex \n", y); + +yf=c_ps1(af,xf,256); +printf("c_ps1 (FLOTTANTS) => y= %x hex \n", (int)(yf)); +printf("TERMINÉ\n"); + +while(1); /* On fera mieux plus tard */ +} diff --git a/uP/TP3_DSP/ex1/ex1.pjt b/uP/TP3_DSP/ex1/ex1.pjt new file mode 100755 index 0000000..ba8e246 --- /dev/null +++ b/uP/TP3_DSP/ex1/ex1.pjt @@ -0,0 +1,57 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="F:\UP\TP3\ex1\" +ProjectType=Executable +CPUFamily=TMS320C67XX +Tool="Compiler" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Optimise" +Config="Release" + +[Source Files] +Source="ASM_PS0.ASM" +Source="ASM_PS1.ASM" +Source="ASM_PS2.ASM" +Source="ASM_PS3.ASM" +Source="ASM_PS4.ASM" +Source="EX1.C" +Source="ex1.cdb" +Source="SA_PS0.SA" +Source="SA_PS1.SA" +Source="SA_PS2.SA" +Source="ex1cfg.cmd" + +[Generated Files] +Source="ex1cfg.s62" +Source="ex1cfg_c.c" + +["Compiler" Settings: "Debug"] +Options=-g -q -fr"F:\UP\TP3\ex1\Debug" -d"_DEBUG" -mv6700 + +["Compiler" Settings: "Optimise"] +Options=-gp -q -o3 -fr"F:\UP\TP3\ex1\Optimise" -mv6700 + +["Compiler" Settings: "Release"] +Options=-q -o3 -fr"F:\UP\TP3\ex1\Release" -mv6700 + +["DspBiosBuilder" Settings: "Debug"] +Options=-v6x + +["DspBiosBuilder" Settings: "Optimise"] +Options=-v6x + +["DspBiosBuilder" Settings: "Release"] +Options=-v6x + +["Linker" Settings: "Debug"] +Options=-q -c -m".\Debug\ex1.map" -o".\Debug\ex1.out" -x + +["Linker" Settings: "Optimise"] +Options=-q -c -m".\Optimise\ex1.map" -o".\Optimise\ex1.out" -x + +["Linker" Settings: "Release"] +Options=-q -c -m".\Release\ex1.map" -o".\Release\ex1.out" -x + diff --git a/uP/TP3_DSP/ex1/ex1cfg.cmd b/uP/TP3_DSP/ex1/ex1cfg.cmd new file mode 100755 index 0000000..ac75459 --- /dev/null +++ b/uP/TP3_DSP/ex1/ex1cfg.cmd @@ -0,0 +1,306 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex1.cdb */ + +/* MODULE PARAMETERS */ +GBL_USERINITFXN = _GBL_setPLLto225MHz; + +MEM_SEGZERO = IRAM; +MEM_MALLOCSEG = IRAM; + +CLK_TIMEFXN = CLK_F_getshtime; +CLK_HOOKFXN = HWI_F_dispatch; + +PRD_THOOKFXN = _KNL_tick; + +RTDX_DATAMEMSEG = IRAM; + +HST_DSMBUFSEG = IRAM; + +SWI_EHOOKFXN = GBL_NULL; +SWI_IHOOKFXN = GBL_NULL; +SWI_EXECFXN = SWI_F_iexec; +SWI_RUNFXN = SWI_F_run; + +TSK_STACKSEG = IRAM; +TSK_VCREATEFXN = _FXN_F_nop; +TSK_VDELETEFXN = _FXN_F_nop; +TSK_VEXITFXN = _FXN_F_nop; + +IDL_CALIBRFXN = IDL_F_stub; + +SYS_ABORTFXN = _UTL_doAbort; +SYS_ERRORFXN = _UTL_doError; +SYS_EXITFXN = _UTL_halt; +SYS_PUTCFXN = _UTL_doPutc; + +GIO_CREATEFXN = _FXN_F_nop; +GIO_DELETEFXN = _FXN_F_nop; +GIO_PENDFXN = _FXN_F_nop; +GIO_POSTFXN = _FXN_F_nop; + +/* OBJECT ALIASES */ +_IRAM = IRAM; +_CACHE_L2 = CACHE_L2; +_SDRAM = SDRAM; +_PRD_clock = PRD_clock; +_RTA_fromHost = RTA_fromHost; +_RTA_toHost = RTA_toHost; +_HWI_RESET = HWI_RESET; +_HWI_NMI = HWI_NMI; +_HWI_RESERVED0 = HWI_RESERVED0; +_HWI_RESERVED1 = HWI_RESERVED1; +_HWI_INT4 = HWI_INT4; +_HWI_INT5 = HWI_INT5; +_HWI_INT6 = HWI_INT6; +_HWI_INT7 = HWI_INT7; +_HWI_INT8 = HWI_INT8; +_HWI_INT9 = HWI_INT9; +_HWI_INT10 = HWI_INT10; +_HWI_INT11 = HWI_INT11; +_HWI_INT12 = HWI_INT12; +_HWI_INT13 = HWI_INT13; +_HWI_INT14 = HWI_INT14; +_HWI_INT15 = HWI_INT15; +_KNL_swi = KNL_swi; +_TSK_idle = TSK_idle; +_LNK_dataPump = LNK_dataPump; +_RTA_dispatcher = RTA_dispatcher; +_IDL_cpuLoad = IDL_cpuLoad; +_LOG_system = LOG_system; +_IDL_busyObj = IDL_busyObj; + +/* MODULE GBL */ + +SECTIONS { + .vers (COPY): {} /* version information */ +} + +-priority +-llnkrtdx.a62 +-ldrivers.a67 /* device drivers support */ +-lsioboth.a62 /* supports both SIO models */ +-lbiosi.a62 /* DSP/BIOS support */ +-lrtdx.lib /* RTDX support */ +-lcsl6713.lib +-lrts6700.lib /* C and C++ run-time library support */ + +_GBL_CACHE = GBL_CACHE; + +/* MODULE MEM */ +-stack 0x400 +MEMORY { + IRAM : origin = 0x0, len = 0x30000 + CACHE_L2 : origin = 0x30000, len = 0x10000 + SDRAM : origin = 0x80000000, len = 0x1000000 +} +/* MODULE CLK */ +SECTIONS { + .clk: { + _CLK_start = _CLK_start6x; + CLK_F_gethtime = CLK_F_getshtime; + CLK_A_TABBEG = .; + *(.clk) + CLK_A_TABEND = .; + CLK_A_TABLEN = (. - CLK_A_TABBEG) / 1; + } > IRAM +} +_CLK_PRD = CLK_PRD; +_CLK_COUNTSPMS = CLK_COUNTSPMS; +_CLK_REGS = CLK_REGS; +_CLK_USETIMER = CLK_USETIMER; +_CLK_TIMERNUM = CLK_TIMERNUM; +_CLK_TDDR = CLK_TDDR; + +/* MODULE PRD */ +SECTIONS { + .prd: { + PRD_A_TABBEG = .; + /* no PRD objects */ + PRD_A_TABEND = .; + PRD_A_TABLEN = (. - PRD_A_TABBEG) / 32; + } > IRAM +} + +/* MODULE RTDX */ +_RTDX_interrupt_mask = 0x0; + +/* MODULE HWI */ +SECTIONS { + .hwi_vec: 0x0 { + HWI_A_VECS = .; + *(.hwi_vec) + } +} + +/* MODULE SWI */ +SECTIONS { + .swi: { + SWI_A_TABBEG = .; + *(.swi) + SWI_A_TABEND = .; + SWI_A_TABLEN = (. - SWI_A_TABBEG) / 44; + } > IRAM +} + +/* MODULE IDL */ +SECTIONS { + .idl: { + IDL_A_TABBEG = .; + *(.idl) + IDL_A_TABEND = .; + IDL_A_TABLEN = (. - IDL_A_TABBEG) / 8; + IDL_A_CALBEG = .; + *(.idlcal) + IDL_A_CALEND = .; + IDL_A_CALLEN = (. - IDL_A_CALBEG) / 8; + } > IRAM +} + + + +SECTIONS { + .bss: {} > IRAM + + .far: {} > IRAM + + .sysdata: {} > IRAM + + .mem: {} > IRAM + + .sysinit: {} > IRAM + + .sysregs: {} > IRAM + + .gblinit: {} > IRAM + + .trcdata: {} > IRAM + + .stack: fill=0xc0ffee { + GBL_stackbeg = .; + *(.stack) + GBL_stackend = GBL_stackbeg + 0x400 - 1; + _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7; + _HWI_STKTOP = GBL_stackbeg; + } > IRAM + + .cinit: {} > IRAM + + .pinit: {} > IRAM + + .data: {} > IRAM + + .const: {} > IRAM + + .switch: {} > IRAM + + .cio: {} > IRAM + + .text: {} > IRAM + + frt: {} > IRAM + + .bios: {} > IRAM + + .trace: fill = 0x0 { + _SYS_PUTCBEG = .; + . += 0x200; + _SYS_PUTCEND = . - 1; + } > IRAM + + .args: fill=0 { + *(.args) + . += 0x4; + } > IRAM + + .gio: {} > IRAM + + .rtdx_data: {} > IRAM + + .rtdx_text: {} > IRAM + + .hst: { + HST_A_TABBEG = .; + _HST_A_TABBEG = .; + *(.hst) + HST_A_TABEND = .; + _HST_A_TABEND = .; + HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + _HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + } > IRAM + + .dsm: {} > IRAM + + /* RTA_fromHost buffer */ + .hst1: align = 0x4 {} > IRAM + + /* RTA_toHost buffer */ + .hst0: align = 0x4 {} > IRAM + + .hwi: {} > IRAM + + .tsk: { + *(.tsk) + } > IRAM + + .TSK_idle$stk: { + *(.TSK_idle$stk) + } > IRAM + + .log: { + LOG_A_TABBEG = .; + _LOG_A_TABBEG = .; + *(.log) + LOG_A_TABEND = .; + _LOG_A_TABEND = .; + LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + _LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + } > IRAM + + .printf (COPY): {} > IRAM + + /* LOG_system buffer */ + .LOG_system$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + .pip: { + PIP_A_TABBEG = .; + _PIP_A_TABBEG = .; + *(.pip) + PIP_A_TABEND = .; + _PIP_A_TABEND = .; + PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + _PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + } > IRAM + + .sts: { + STS_A_TABBEG = .; + _STS_A_TABBEG = .; + *(.sts) + STS_A_TABEND = .; + _STS_A_TABEND = .; + STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + _STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + } > IRAM + + .sys: {} > IRAM + + .IRAM$heap: { + IRAM$B = .; + _IRAM_base = .; + IRAM$L = 0x8000; + _IRAM_length = 0x8000; + . += 0x8000; + } > IRAM + + .SDRAM$heap: { + SDRAM$B = .; + _SDRAM_base = .; + SDRAM$L = 0x8000; + _SDRAM_length = 0x8000; + . += 0x8000; + } > SDRAM + +} + diff --git a/uP/TP3_DSP/ex1/ex1cfg.h b/uP/TP3_DSP/ex1/ex1cfg.h new file mode 100755 index 0000000..5d87ed0 --- /dev/null +++ b/uP/TP3_DSP/ex1/ex1cfg.h @@ -0,0 +1,31 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex1.cdb */ + +#define CHIP_6713 1 + +/* Include Header Files */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern far HST_Obj RTA_fromHost; +extern far HST_Obj RTA_toHost; +extern far SWI_Obj KNL_swi; +extern far TSK_Obj TSK_idle; +extern far LOG_Obj LOG_system; +extern far STS_Obj IDL_busyObj; +extern far void CSL_cfgInit(); + +#ifdef __cplusplus +} +#endif /* extern "C" */ diff --git a/uP/TP3_DSP/ex1/ex1cfg_c.c b/uP/TP3_DSP/ex1/ex1cfg_c.c new file mode 100755 index 0000000..f0837da --- /dev/null +++ b/uP/TP3_DSP/ex1/ex1cfg_c.c @@ -0,0 +1,32 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex1.cdb */ + +/* Include Header File */ +#include "ex1cfg.h" + + +#ifdef __cplusplus +#pragma CODE_SECTION(".text:CSL_cfgInit") +#else +#pragma CODE_SECTION(CSL_cfgInit,".text:CSL_cfgInit") +#endif + + +#ifdef __cplusplus +#pragma FUNC_EXT_CALLED() +#else +#pragma FUNC_EXT_CALLED(CSL_cfgInit) +#endif + +/* Config Structures */ +/* Handles */ + +/* + * ======== CSL_cfgInit() ======== + */ +void CSL_cfgInit() +{ +} diff --git a/uP/TP3_DSP/ex1/sa_ps0.sa b/uP/TP3_DSP/ex1/sa_ps0.sa new file mode 100755 index 0000000..68bce03 --- /dev/null +++ b/uP/TP3_DSP/ex1/sa_ps0.sa @@ -0,0 +1,57 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\sa_ps1.sa (rev. 16-02-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction sa_ps0() en assembleur linéaire +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int sa_ps0(short *,short *, int); +* +* Exemple d'appel : y= sa_ps0(a, x, 256); +* +* Consulter l'aide en ligne (cproc) pour savoir comment récupérer les paramètres et +* faire le return de la procédure. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR LINÉAIRE EN UTILISANT DES INSTRUCTIONS LDH +********************************************************************************* + .def _sa_ps0 +NBPS .equ 100 + +_sa_ps0 .cproc ot1, ot2, taille + .reg nbre_ps + .reg t1 + .reg t2 + .reg e1 + .reg e2 + .reg somme + .reg elems + + mvk NBPS,nbre_ps + +ps: zero somme + mv taille, elems + mv ot1, t1 + mv ot2, t2 + +loop: + sub elems, 1, elems + ldh *t1++, e1 + ldh *t2++, e2 + + mpy e1, e2, e1 + add e1, somme, somme + + [elems] b loop + + sub nbre_ps,1,nbre_ps + [nbre_ps] b ps + + + .return somme + .endproc \ No newline at end of file diff --git a/uP/TP3_DSP/ex1/sa_ps1.sa b/uP/TP3_DSP/ex1/sa_ps1.sa new file mode 100755 index 0000000..0192a37 --- /dev/null +++ b/uP/TP3_DSP/ex1/sa_ps1.sa @@ -0,0 +1,69 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\sa_ps1.sa (rev. 16-02-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction sa_ps1() en assembleur linéaire +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern int sa_ps1(short *,short *, int); +* +* Exemple d'appel : y= sa_ps1(a, x, 256); +* +* Consulter l'aide en ligne (cproc) pour savoir comment récupérer les paramètres et +* faire le return de la procédure. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR LINÉAIRE EN UTILISANT DES INSTRUCTIONS LDW +********************************************************************************* + + .def _sa_ps1 +NBPS .equ 100 + +_sa_ps1 .cproc ot1, ot2, taille + .reg nbre_ps + .reg t1 + .reg t2 + .reg e1 + .reg e2 + .reg somme + .reg sm1 + .reg sm2 + .reg s1 + .reg s2 + .reg elems + + mvk NBPS,nbre_ps + +ps: zero somme + zero sm1 + zero sm2 + mv taille, elems + mv ot1, t1 + mv ot2, t2 + +loop: + sub elems, 2, elems + + ldw *t1++, e1 + ldw *t2++, e2 + + mpy e1, e2, s1 + mpyh e1, e2, s2 + + add s1, sm1, sm1 + add s2, sm2, sm2 + + [elems] b loop + add sm1, sm2, somme + + + sub nbre_ps,1,nbre_ps + [nbre_ps] b ps + + .return somme + .endproc \ No newline at end of file diff --git a/uP/TP3_DSP/ex1/sa_ps2.sa b/uP/TP3_DSP/ex1/sa_ps2.sa new file mode 100755 index 0000000..fe4fb08 --- /dev/null +++ b/uP/TP3_DSP/ex1/sa_ps2.sa @@ -0,0 +1,63 @@ +********************************************************************************* +* Origine du fichier l:\up\tp3\ex1\sa_ps2.sa (rev. 16-02-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex1 * +* pour être complété. * +* * +* BINOME : * +********************************************************************************* + +* Fonction sa_ps2() en assembleur linéaire +* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +* Cette fonction peut être appelée dans un programme C dans lequel on a déclaré +* au début du fichier : extern float sa_ps2(float *,float *, int); +* +* Exemple d'appel : yf= sa_ps2(af, xf, 256); +* +* Consulter l'aide en ligne (cproc) pour savoir comment récupérer les paramètres et +* faire le return de la procédure. +* +* POUR CE PROGRAMME : +* ^^^^^^^^^^^^^^^^^^^ +* PROGRAMMATION EN ASSEMBLEUR LINÉAIRE. CALCUL AVEC DES FLOTTANTS +***************************************************************** + .def _sa_ps2 +NBPS .equ 100 + +_sa_ps2 .cproc ot1, ot2, taille + .reg nbre_ps + + .reg t1 + .reg t2 + .reg e1 + .reg e2 + .reg somme + .reg s1 + .reg elems + + mvk NBPS,nbre_ps + +ps: zero somme + mv taille, elems + mv ot1, t1 + mv ot2, t2 + +loop: + sub elems, 1, elems + + ldw *t1++, e1 + ldw *t2++, e2 + + mpysp e1, e2, s1 + + addsp s1, somme, somme + + [elems] b loop + + + + sub nbre_ps,1,nbre_ps + [nbre_ps] b ps + + + .return somme + .endproc \ No newline at end of file diff --git a/uP/TP3_DSP/ex2/ex2.c b/uP/TP3_DSP/ex2/ex2.c new file mode 100755 index 0000000..9e79c22 --- /dev/null +++ b/uP/TP3_DSP/ex2/ex2.c @@ -0,0 +1,173 @@ +/******************************************************************************** + * Origine du fichier L:\up\tp3\ex2\ex2.c (rev. 05-05-2004) * + * Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex2 pour être * + * complété. * + * * + * BINOME : Thomas LIMIN - Nicolas MASSE * + ********************************************************************************/ + +/*Include files*/ +#include "ex2cfg.h" /* Fichier généré par CCS lors de sauvegarde du fichier de configuration */ +#include /* Prototypes des API générales de BSL */ +#include /* Prototypes des API de BSL relatives au codec */ + +/*Variables globales*/ +DSK6713_AIC23_CodecHandle hAIC23; + +DSK6713_AIC23_Config confAIC23 = { + 0x0017, /* 0 DSK6713_AIC23_LEFTINVOl left line input channel volume */ + 0x0017, /* 1 DSK6713_AIC23_RIGHTINVOl Right line input channel volume */ + 0x01f9, /* 2 DSK6713_AIC23_LEFTHPVOl left channel headphone volume */ + 0x01f9, /* 3 DSK6713_AIC23_RIGHTHPVOl Right channel headphone volume */ + 0x0011, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */ + 0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */ + 0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ + 0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */ + 0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control 48 kHz */ + 0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ +}; + +#define UN 0x8000 + +typedef enum {LEFT = 0, RIGHT = 1} channel; + +/** + * Si elle est exécutée 48000 fois par seconde, cette fonction génère un signal à + * 6 kHz avec une amplitude de 0,5 + */ +int SineGen(void) { + static float y[3] = {0, 0, 0.353934}; + const float a = 1.414215; + + y[0] = y[1] * a - y[2]; + y[2] = y[1]; + y[1] = y[0]; + + return (int) (0x7FFF * y[0]); +} + +/** + * Genere une tonalite identique a la touche 1 d'un telephone. + */ +int DtmfTone(void) { + static float y1[3] = {0, 0, 0.045618}; + const float a1 = 1.991682; + static float y2[3] = {0, 0, 0.078906}; + const float a2 = 1.975007; + + y1[0] = y1[1] * a1 - y1[2]; + y1[2] = y1[1]; + y1[1] = y1[0]; + + y2[0] = y2[1] * a2 - y2[2]; + y2[2] = y2[1]; + y2[1] = y2[0]; + + return (int) (0x7FFF * ((y1[0] + y2[0]) / 2)); +} + +/** + * Multiplie deux nombres Q15. + */ +short int q15_times_q15(short int q1, short int q2) { + int res = (int) q1 * q2; + res >>= 15; + + return (short int) res; +} + +/* + * Si elle est exécutée 48000 fois par seconde, cette fonction génère un signal à + * 6 kHz avec une amplitude de 0,5. + * + * Calcul avec des entiers uniquement ! + */ +int SineGenQ15(void) { + static short yq[3] = {0, 0, UN * 0.353934}; + const short int aq = (unsigned int) (UN * 0.707107); + + int tmp = q15_times_q15(yq[1], aq); + yq[0] = tmp + tmp - yq[2]; + yq[2] = yq[1]; + yq[1] = yq[0]; + + return (int) yq[0]; +} + + +/** + * Cette fonction est exécutée suite à une demande d'interruption + * du McBSP1 en transmission. + * Elle envoie au codec un signal dont l'amplitude est calculée par SineGen() + */ +void XINT1_HWI(void) { + /* The value sent to the DAC */ + static int signal; + + /* The DIP values */ + static short unsigned int dip0, dip3; + + /* LEFT or RIGHT */ + static channel ch = RIGHT; + + /* Read DIP values */ + dip0 = DSK6713_DIP_get(0); + dip3 = DSK6713_DIP_get(3); + + + if (ch == RIGHT) { + switch ((dip3 << 4) | dip0) { + /* dip3 = UP, dip0 = UP */ + case 0x11: + signal = 0; + break; + + /* dip3 = UP, dip0 = DOWN */ + case 0x10: + signal = SineGenQ15(); + break; + + /* dip3 = DOWN, dip0 = UP */ + case 0x01: + signal = DtmfTone(); + break; + + /* dip3 = DOWN, dip0 = DOWN */ + case 0x00: + signal = SineGen(); + break; + + default: + /* TODO : do something */ + break; + } + + ch = LEFT; + } else { + ch = RIGHT; + } + + DSK6713_AIC23_write(hAIC23, signal); +} + +/** + * Point d'entree du programme + */ +void main(void) { + /* Initialisation BSL du DSK6713 */ + DSK6713_init(); + + /* Open et configuration du codec AIC23 */ + hAIC23 = DSK6713_AIC23_openCodec(0, &confAIC23); + + /* Démasquage global des interruptions */ + IRQ_globalEnable(); + + /* Démasquage de l'interruption du port McBSP1 en transmission */ + IRQ_enable(IRQ_EVT_XINT1); + + /* Initialisation des interrupteurs DIP */ + DSK6713_DIP_init(); + + while(1); /* On fera mieux plus tard... */ +} diff --git a/uP/TP3_DSP/ex2/ex2.pjt b/uP/TP3_DSP/ex2/ex2.pjt new file mode 100755 index 0000000..0adf1d4 --- /dev/null +++ b/uP/TP3_DSP/ex2/ex2.pjt @@ -0,0 +1,40 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="F:\UP\TP3\ex2\" +ProjectType=Executable +CPUFamily=TMS320C67XX +Tool="Compiler" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Release" + +[Source Files] +Source="D:\ti\c6000\dsk6713\lib\dsk6713bsl.lib" +Source="EX2.C" +Source="ex2.cdb" +Source="ex2cfg.cmd" + +[Generated Files] +Source="ex2cfg.s62" +Source="ex2cfg_c.c" + +["Compiler" Settings: "Debug"] +Options=-g -q -fr"F:\UP\TP3\ex2\Debug" -d"_DEBUG" -mv6700 + +["Compiler" Settings: "Release"] +Options=-q -o3 -fr"F:\UP\TP3\ex2\Release" -mv6700 + +["DspBiosBuilder" Settings: "Debug"] +Options=-v6x + +["DspBiosBuilder" Settings: "Release"] +Options=-v6x + +["Linker" Settings: "Debug"] +Options=-q -c -m".\Debug\ex2.map" -o".\Debug\ex2.out" -x + +["Linker" Settings: "Release"] +Options=-q -c -m".\Release\ex2.map" -o".\Release\ex2.out" -x + diff --git a/uP/TP3_DSP/ex2/ex2_0.c b/uP/TP3_DSP/ex2/ex2_0.c new file mode 100755 index 0000000..08b2d03 --- /dev/null +++ b/uP/TP3_DSP/ex2/ex2_0.c @@ -0,0 +1,55 @@ +/******************************************************************************** +* Origine du fichier L:\up\tp3\ex2\ex2_0.c (rev. 17-03-2004) * +* Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex2 * +* Il n'a pas lieu d'être modifié. * +* * +* BINOME : * +*********************************************************************************/ +#define TAILLE_BUFFER 32 /*Taille du tableau sinus*/ + +/* Include Files */ +#include "ex2cfg.h" /* Fichier généré par CCS lors de la sauvegarde du fichier de configuration .cdb */ + + +/*Variables globales*/ +int sinus[TAILLE_BUFFER]; /* Utilisé uniquement pour "voir" le signal généré par SineGen()*/ + + +/********************** + * FONCTION SineGen() * + ********************** + Si cette fonction est exécutée 48.000 fois par seconde, elle retourne un signal + sinusoidal à 6 kHz avec une amplitude de 0,5*/ +int SineGen(void) +{ +static float y[3]={0,0,0.353934}; +static float a=1.414215; + +y[0]=y[1]*a - y[2]; +y[2]=y[1]; +y[1]=y[0]; + +return( (int)(0x7FFF*y[0]) ); +} + + +/*********************** + * PROGRAMME PRINCIPAL * + ***********************/ +void main(void) +{ +unsigned int i; + +/******************************************************************************** + Le remplissage du tableau sinus ne sert que pour "voir" le signal généré par SineGen(). + On utilise View -> Graph -> Time/Frequency proposé par CCS*/ +for(i=0; i IRAM +} +_CLK_PRD = CLK_PRD; +_CLK_COUNTSPMS = CLK_COUNTSPMS; +_CLK_REGS = CLK_REGS; +_CLK_USETIMER = CLK_USETIMER; +_CLK_TIMERNUM = CLK_TIMERNUM; +_CLK_TDDR = CLK_TDDR; + +/* MODULE PRD */ +SECTIONS { + .prd: { + PRD_A_TABBEG = .; + /* no PRD objects */ + PRD_A_TABEND = .; + PRD_A_TABLEN = (. - PRD_A_TABBEG) / 32; + } > IRAM +} + +/* MODULE RTDX */ +_RTDX_interrupt_mask = 0x0; + +/* MODULE HWI */ +SECTIONS { + .hwi_vec: 0x0 { + HWI_A_VECS = .; + *(.hwi_vec) + } +} + +/* MODULE SWI */ +SECTIONS { + .swi: { + SWI_A_TABBEG = .; + *(.swi) + SWI_A_TABEND = .; + SWI_A_TABLEN = (. - SWI_A_TABBEG) / 44; + } > IRAM +} + +/* MODULE IDL */ +SECTIONS { + .idl: { + IDL_A_TABBEG = .; + *(.idl) + IDL_A_TABEND = .; + IDL_A_TABLEN = (. - IDL_A_TABBEG) / 8; + IDL_A_CALBEG = .; + *(.idlcal) + IDL_A_CALEND = .; + IDL_A_CALLEN = (. - IDL_A_CALBEG) / 8; + } > IRAM +} + + + +SECTIONS { + .bss: {} > IRAM + + .far: {} > IRAM + + .sysdata: {} > IRAM + + .mem: {} > IRAM + + .sysinit: {} > IRAM + + .sysregs: {} > IRAM + + .gblinit: {} > IRAM + + .trcdata: {} > IRAM + + .stack: fill=0xc0ffee { + GBL_stackbeg = .; + *(.stack) + GBL_stackend = GBL_stackbeg + 0x400 - 1; + _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7; + _HWI_STKTOP = GBL_stackbeg; + } > IRAM + + .cinit: {} > IRAM + + .pinit: {} > IRAM + + .data: {} > IRAM + + .const: {} > IRAM + + .switch: {} > IRAM + + .cio: {} > IRAM + + .text: {} > IRAM + + frt: {} > IRAM + + .bios: {} > IRAM + + .trace: fill = 0x0 { + _SYS_PUTCBEG = .; + . += 0x200; + _SYS_PUTCEND = . - 1; + } > IRAM + + .args: fill=0 { + *(.args) + . += 0x4; + } > IRAM + + .gio: {} > IRAM + + .rtdx_data: {} > IRAM + + .rtdx_text: {} > IRAM + + .hst: { + HST_A_TABBEG = .; + _HST_A_TABBEG = .; + *(.hst) + HST_A_TABEND = .; + _HST_A_TABEND = .; + HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + _HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + } > IRAM + + .dsm: {} > IRAM + + /* RTA_fromHost buffer */ + .hst1: align = 0x4 {} > IRAM + + /* RTA_toHost buffer */ + .hst0: align = 0x4 {} > IRAM + + .hwi: {} > IRAM + + .tsk: { + *(.tsk) + } > IRAM + + .TSK_idle$stk: { + *(.TSK_idle$stk) + } > IRAM + + .log: { + LOG_A_TABBEG = .; + _LOG_A_TABBEG = .; + *(.log) + LOG_A_TABEND = .; + _LOG_A_TABEND = .; + LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + _LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + } > IRAM + + .printf (COPY): {} > IRAM + + /* LOG_system buffer */ + .LOG_system$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + .pip: { + PIP_A_TABBEG = .; + _PIP_A_TABBEG = .; + *(.pip) + PIP_A_TABEND = .; + _PIP_A_TABEND = .; + PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + _PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + } > IRAM + + .sts: { + STS_A_TABBEG = .; + _STS_A_TABBEG = .; + *(.sts) + STS_A_TABEND = .; + _STS_A_TABEND = .; + STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + _STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + } > IRAM + + .sys: {} > IRAM + + .IRAM$heap: { + IRAM$B = .; + _IRAM_base = .; + IRAM$L = 0x8000; + _IRAM_length = 0x8000; + . += 0x8000; + } > IRAM + + .SDRAM$heap: { + SDRAM$B = .; + _SDRAM_base = .; + SDRAM$L = 0x8000; + _SDRAM_length = 0x8000; + . += 0x8000; + } > SDRAM + +} + diff --git a/uP/TP3_DSP/ex2/ex2cfg.h b/uP/TP3_DSP/ex2/ex2cfg.h new file mode 100755 index 0000000..131e178 --- /dev/null +++ b/uP/TP3_DSP/ex2/ex2cfg.h @@ -0,0 +1,31 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex2.cdb */ + +#define CHIP_6713 1 + +/* Include Header Files */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern far HST_Obj RTA_fromHost; +extern far HST_Obj RTA_toHost; +extern far SWI_Obj KNL_swi; +extern far TSK_Obj TSK_idle; +extern far LOG_Obj LOG_system; +extern far STS_Obj IDL_busyObj; +extern far void CSL_cfgInit(); + +#ifdef __cplusplus +} +#endif /* extern "C" */ diff --git a/uP/TP3_DSP/ex2/ex2cfg_c.c b/uP/TP3_DSP/ex2/ex2cfg_c.c new file mode 100755 index 0000000..9b1d62e --- /dev/null +++ b/uP/TP3_DSP/ex2/ex2cfg_c.c @@ -0,0 +1,32 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex2.cdb */ + +/* Include Header File */ +#include "ex2cfg.h" + + +#ifdef __cplusplus +#pragma CODE_SECTION(".text:CSL_cfgInit") +#else +#pragma CODE_SECTION(CSL_cfgInit,".text:CSL_cfgInit") +#endif + + +#ifdef __cplusplus +#pragma FUNC_EXT_CALLED() +#else +#pragma FUNC_EXT_CALLED(CSL_cfgInit) +#endif + +/* Config Structures */ +/* Handles */ + +/* + * ======== CSL_cfgInit() ======== + */ +void CSL_cfgInit() +{ +} diff --git a/uP/TP3_DSP/ex2/sinegen_.c b/uP/TP3_DSP/ex2/sinegen_.c new file mode 100755 index 0000000..3d8a6b7 --- /dev/null +++ b/uP/TP3_DSP/ex2/sinegen_.c @@ -0,0 +1,16 @@ +/**************************************** + * FONCTION SineGen_q15() * + ****************************************/ +int SineGen_q15() +{ +/*Il s'agit de générer un signal à 6 kHz en faisant le calcul avec des Q15. + Cette fonction est utilisée à la fin du chapitre II (paragraphe II.7.5).*/ +#define UN 0x8000 +#define yq2 (unsigned int)(UN*0.353934) +#define AQ (unsigned int)(UN*0.707107) /*1.414215/2=0.707107*/ + +static short yq[3]={0,0,yq2}; +static short aq=AQ; + +/* À compléter*/ +} diff --git a/uP/TP3_DSP/ex3a/bloc_gen.c b/uP/TP3_DSP/ex3a/bloc_gen.c new file mode 100755 index 0000000..201f32f --- /dev/null +++ b/uP/TP3_DSP/ex3a/bloc_gen.c @@ -0,0 +1,45 @@ + +/******************************************************************************** + * Origine du fichier L:\up\tp3\ex3a\bloc_gen.c (rev. 17-04-2004) * + * Ce fichier est copié dans le répertoire (project) F:\up\tp3\ex3a * + * NE PAS MODIFIER CE FICHIER * + * ************************** * + ********************************************************************************/ + + + +/**************************************** + * FONCTION SineGen() * + ****************************************/ +int SineGen(void) { + /* Pour une fréquence d'échantillonnage égale à 48 kHz, + * cette fonction génère un signal sinusoidal à 6 kHz + * avec une amplitude égale à 0,5 + */ + static float y[3] = {0, 0, 0.353934}; + static float a = 1.414215; + + y[0] = y[1] * a - y[2]; + y[2] = y[1]; + y[1] = y[0]; + + return (int) (0x7FFF * y[0]); +} + +/************************************************************************ + * FONCTION BlockGen() POUR GÉNÉRER UN BLOC DE "SINUS" * + * Cette fonction remplit un buffer avec des valeurs successives de * + * SineGen(). * + * Chaque valeur est doublée : une valeur pour chaque voie de l'AIC23 * + * L'adresse du buffer et la taille du buffer sont passée en paramètres.* + ************************************************************************/ +void BlockGen(short * pbuf, int taille) { + int i = 0; + short signal; + + while (i != taille) { + signal = SineGen(); + pbuf[i++] = signal; /* Valeur du signal pour une voie */ + pbuf[i++] = signal; /* Même valeur pour l'autre voie */ + } +} diff --git a/uP/TP3_DSP/ex3a/ex3a.c b/uP/TP3_DSP/ex3a/ex3a.c new file mode 100755 index 0000000..47871c6 --- /dev/null +++ b/uP/TP3_DSP/ex3a/ex3a.c @@ -0,0 +1,139 @@ +/******************************************************************************** + * Origine du fichier L:\up\tp3\ex3a\ex3a.c (rev. 24-05-2004) * + * Ce fichier est copié dans le répertoire (project) F:\up\tp3\ex3a pour être * + * complété. * + * On utilise l'EDMA et on le programme sans l'aide graphique CSL de DSP/BIOS * + * * + * BINOME : Nicolas MASSE & Thomas LIMIN * + ********************************************************************************/ + +#include "ex3acfg.h" +#include "ex3a.h" + +#include +#include +#include + +extern void BlockGen(short *pbuffer, int taille); + +/* Variables globales */ +DSK6713_AIC23_CodecHandle hAIC23; +DSK6713_AIC23_Config confAIC23 = { + 0x0017, /* 0 DSK6713_AIC23_LEFTINVOl left line input channel volume */ + 0x0017, /* 1 DSK6713_AIC23_RIGHTINVOl Right line input channel volume */ + 0x01f9, /* 2 DSK6713_AIC23_LEFTHPVOl left channel headphone volume */ + 0x01f9, /* 3 DSK6713_AIC23_RIGHTHPVOl Right channel headphone volume */ + 0x0011, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */ + 0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */ + 0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ + 0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */ + 0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control 48 kHz */ + 0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ +}; + +short buffer[BUFFERSIZE]; + +EDMA_Handle hEdmaReload; /*Handle pour la table de reload*/ +EDMA_Handle hEdma14; /*Handle pour le canal14 (XEVT1)*/ + +EDMA_Config confEDMA = { + EDMA_OPT_RMK( + EDMA_OPT_PRI_LOW, + EDMA_OPT_ESIZE_16BIT, + EDMA_OPT_2DS_NO, + EDMA_OPT_SUM_INC, + EDMA_OPT_2DD_NO, + EDMA_OPT_DUM_NONE, + EDMA_OPT_TCINT_YES, + EDMA_OPT_TCC_OF(TCC), + EDMA_OPT_LINK_YES, + EDMA_OPT_FS_NO + ), + EDMA_SRC_OF(buffer), + EDMA_CNT_OF(BUFFERSIZE), + EDMA_DST_OF(DXR1), + EDMA_IDX_OF(0), + EDMA_RLD_OF(0) /* Provisoire */ +}; + +/** + * INITIALISATION DE L'EDMA + */ +void Edma_init(void) { + /* Open du canal 14 (XEVT1). */ + hEdma14 = EDMA_open(EDMA_CHA_XEVT1, EDMA_OPEN_RESET); + + /* On va maintenant obtenir un handle pour la table de Reload. + * Pour cela on utilise EDMA_allocTable(-1). En passant -1 comme + * paramètre on laisse le soin à CSL de choisir une table + * disponible parmi les 69 existantes. + */ + hEdmaReload = EDMA_allocTable(-1); + + /* Maintenant que l'on sait quelle est la table de Reload utilisée, + * il faut mettre à jour le paramètre rld de myConfig + */ + confEDMA.rld = (confEDMA.rld & 0xffff0000) | (EDMA_RLD_RMK(0,hEdmaReload)); + + /* Configuration de l'EDMA pour le canal 14 */ + EDMA_config(hEdma14, &confEDMA); + + /* Configuration de la table Reload utilisée */ + EDMA_config(hEdmaReload, &confEDMA); + + /* Démasquer l'Event XEVT1 (canal14) en mettant à jour le registre EER */ + EDMA_enableChannel(hEdma14); +} + +/** + * INITIALISATION DU CODEC AIC23 + */ +void Codec_init() { + /* Open et configuration du codec AIC23 */ + hAIC23 = DSK6713_AIC23_openCodec(0, &confAIC23); + +} + +/** + * PROGRAMME D'INTERRUPTION + * Ce programme d'IT est exécuté à la demande de l'EDMA. + * Il s'agit donc de l'INT8. On utilise le fichier de configuration + * pour faire le nécessaire afin que cette fonction corresponde au + * programme d'interruption à exécuter : + * - Mise en place du vecteur et "dispatcher". + */ +void EDMA_HWI(void) { + /* Rafraîchir le buffer */ + BlockGen(buffer, BUFFERSIZE); + + /* Remise à 0 du bit TCC dans le registre CIPR */ + EDMA_intClear(TCC); +} + +/** + * PROGRAMME PRINCIPAL + */ +void main(void) { + BlockGen(buffer, BUFFERSIZE); /* Initialisation du buffer */ + + /* Initialisation BSL du DSK6713 */ + DSK6713_init(); + + /* Initialisation de l'EDMA */ + Edma_init(); + + /* Initialisation du CODEC AIC23 */ + Codec_init(); + + /* Démasquage total de l'interruption EDMA pour l'Event XEVT1 */ + EDMA_intEnable(TCC); + + /* Démasquage de l'interruption du port EDMA */ + IRQ_enable(IRQ_EVT_EDMAINT); + + /* Démasquage global des interruptions */ + IRQ_globalEnable(); + + // A défaut de mieux ... + while(1); +} diff --git a/uP/TP3_DSP/ex3a/ex3a.h b/uP/TP3_DSP/ex3a/ex3a.h new file mode 100755 index 0000000..4126368 --- /dev/null +++ b/uP/TP3_DSP/ex3a/ex3a.h @@ -0,0 +1,11 @@ +/******************************************************************************** + * Origine du fichier L:\up\tp3\ex3a\ex3a.h (rev. 17-04-2004) * + * Ce fichier est copié dans le répertoire (project) F:\up\tp3\ex3a * + ********************************************************************************/ + +#define BUFFERSIZE 56 +#define DXR1 0x01900004 /*Adresse DXR1 trouvée dans la doc McBSP*/ + /*0x3400000 est une autre adresse possible*/ +#define NBR_FRAME 0 +#define TCC 14 + diff --git a/uP/TP3_DSP/ex3a/ex3a.pjt b/uP/TP3_DSP/ex3a/ex3a.pjt new file mode 100755 index 0000000..b72bdee --- /dev/null +++ b/uP/TP3_DSP/ex3a/ex3a.pjt @@ -0,0 +1,41 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="F:\UP\TP3\ex3a\" +ProjectType=Executable +CPUFamily=TMS320C67XX +Tool="Compiler" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Release" + +[Source Files] +Source="BLOC_GEN.C" +Source="D:\ti\c6000\dsk6713\lib\dsk6713bsl.lib" +Source="EX3A.C" +Source="ex3a.cdb" +Source="ex3acfg.cmd" + +[Generated Files] +Source="ex3acfg.s62" +Source="ex3acfg_c.c" + +["Compiler" Settings: "Debug"] +Options=-g -q -fr"F:\UP\TP3\ex3a\Debug" -d"_DEBUG" -mv6700 + +["Compiler" Settings: "Release"] +Options=-q -o3 -fr"F:\UP\TP3\ex3a\Release" -mv6700 + +["DspBiosBuilder" Settings: "Debug"] +Options=-v6x + +["DspBiosBuilder" Settings: "Release"] +Options=-v6x + +["Linker" Settings: "Debug"] +Options=-q -c -m".\Debug\ex3a.map" -o".\Debug\ex3a.out" -x + +["Linker" Settings: "Release"] +Options=-q -c -m".\Release\ex3a.map" -o".\Release\ex3a.out" -x + diff --git a/uP/TP3_DSP/ex3a/ex3acfg.cmd b/uP/TP3_DSP/ex3a/ex3acfg.cmd new file mode 100755 index 0000000..f15ea2b --- /dev/null +++ b/uP/TP3_DSP/ex3a/ex3acfg.cmd @@ -0,0 +1,306 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex3a.cdb */ + +/* MODULE PARAMETERS */ +GBL_USERINITFXN = _GBL_setPLLto225MHz; + +MEM_SEGZERO = IRAM; +MEM_MALLOCSEG = IRAM; + +CLK_TIMEFXN = CLK_F_getshtime; +CLK_HOOKFXN = HWI_F_dispatch; + +PRD_THOOKFXN = _KNL_tick; + +RTDX_DATAMEMSEG = IRAM; + +HST_DSMBUFSEG = IRAM; + +SWI_EHOOKFXN = GBL_NULL; +SWI_IHOOKFXN = GBL_NULL; +SWI_EXECFXN = SWI_F_iexec; +SWI_RUNFXN = SWI_F_run; + +TSK_STACKSEG = IRAM; +TSK_VCREATEFXN = _FXN_F_nop; +TSK_VDELETEFXN = _FXN_F_nop; +TSK_VEXITFXN = _FXN_F_nop; + +IDL_CALIBRFXN = IDL_F_stub; + +SYS_ABORTFXN = _UTL_doAbort; +SYS_ERRORFXN = _UTL_doError; +SYS_EXITFXN = _UTL_halt; +SYS_PUTCFXN = _UTL_doPutc; + +GIO_CREATEFXN = _FXN_F_nop; +GIO_DELETEFXN = _FXN_F_nop; +GIO_PENDFXN = _FXN_F_nop; +GIO_POSTFXN = _FXN_F_nop; + +/* OBJECT ALIASES */ +_IRAM = IRAM; +_CACHE_L2 = CACHE_L2; +_SDRAM = SDRAM; +_PRD_clock = PRD_clock; +_RTA_fromHost = RTA_fromHost; +_RTA_toHost = RTA_toHost; +_HWI_RESET = HWI_RESET; +_HWI_NMI = HWI_NMI; +_HWI_RESERVED0 = HWI_RESERVED0; +_HWI_RESERVED1 = HWI_RESERVED1; +_HWI_INT4 = HWI_INT4; +_HWI_INT5 = HWI_INT5; +_HWI_INT6 = HWI_INT6; +_HWI_INT7 = HWI_INT7; +_HWI_INT8 = HWI_INT8; +_HWI_INT9 = HWI_INT9; +_HWI_INT10 = HWI_INT10; +_HWI_INT11 = HWI_INT11; +_HWI_INT12 = HWI_INT12; +_HWI_INT13 = HWI_INT13; +_HWI_INT14 = HWI_INT14; +_HWI_INT15 = HWI_INT15; +_KNL_swi = KNL_swi; +_TSK_idle = TSK_idle; +_LNK_dataPump = LNK_dataPump; +_RTA_dispatcher = RTA_dispatcher; +_IDL_cpuLoad = IDL_cpuLoad; +_LOG_system = LOG_system; +_IDL_busyObj = IDL_busyObj; + +/* MODULE GBL */ + +SECTIONS { + .vers (COPY): {} /* version information */ +} + +-priority +-llnkrtdx.a62 +-ldrivers.a67 /* device drivers support */ +-lsioboth.a62 /* supports both SIO models */ +-lbiosi.a62 /* DSP/BIOS support */ +-lrtdx.lib /* RTDX support */ +-lcsl6713.lib +-lrts6700.lib /* C and C++ run-time library support */ + +_GBL_CACHE = GBL_CACHE; + +/* MODULE MEM */ +-stack 0x400 +MEMORY { + IRAM : origin = 0x0, len = 0x30000 + CACHE_L2 : origin = 0x30000, len = 0x10000 + SDRAM : origin = 0x80000000, len = 0x1000000 +} +/* MODULE CLK */ +SECTIONS { + .clk: { + _CLK_start = _CLK_start6x; + CLK_F_gethtime = CLK_F_getshtime; + CLK_A_TABBEG = .; + *(.clk) + CLK_A_TABEND = .; + CLK_A_TABLEN = (. - CLK_A_TABBEG) / 1; + } > IRAM +} +_CLK_PRD = CLK_PRD; +_CLK_COUNTSPMS = CLK_COUNTSPMS; +_CLK_REGS = CLK_REGS; +_CLK_USETIMER = CLK_USETIMER; +_CLK_TIMERNUM = CLK_TIMERNUM; +_CLK_TDDR = CLK_TDDR; + +/* MODULE PRD */ +SECTIONS { + .prd: { + PRD_A_TABBEG = .; + /* no PRD objects */ + PRD_A_TABEND = .; + PRD_A_TABLEN = (. - PRD_A_TABBEG) / 32; + } > IRAM +} + +/* MODULE RTDX */ +_RTDX_interrupt_mask = 0x0; + +/* MODULE HWI */ +SECTIONS { + .hwi_vec: 0x0 { + HWI_A_VECS = .; + *(.hwi_vec) + } +} + +/* MODULE SWI */ +SECTIONS { + .swi: { + SWI_A_TABBEG = .; + *(.swi) + SWI_A_TABEND = .; + SWI_A_TABLEN = (. - SWI_A_TABBEG) / 44; + } > IRAM +} + +/* MODULE IDL */ +SECTIONS { + .idl: { + IDL_A_TABBEG = .; + *(.idl) + IDL_A_TABEND = .; + IDL_A_TABLEN = (. - IDL_A_TABBEG) / 8; + IDL_A_CALBEG = .; + *(.idlcal) + IDL_A_CALEND = .; + IDL_A_CALLEN = (. - IDL_A_CALBEG) / 8; + } > IRAM +} + + + +SECTIONS { + .bss: {} > IRAM + + .far: {} > IRAM + + .sysdata: {} > IRAM + + .mem: {} > IRAM + + .sysinit: {} > IRAM + + .sysregs: {} > IRAM + + .gblinit: {} > IRAM + + .trcdata: {} > IRAM + + .stack: fill=0xc0ffee { + GBL_stackbeg = .; + *(.stack) + GBL_stackend = GBL_stackbeg + 0x400 - 1; + _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7; + _HWI_STKTOP = GBL_stackbeg; + } > IRAM + + .cinit: {} > IRAM + + .pinit: {} > IRAM + + .data: {} > IRAM + + .const: {} > IRAM + + .switch: {} > IRAM + + .cio: {} > IRAM + + .text: {} > IRAM + + frt: {} > IRAM + + .bios: {} > IRAM + + .trace: fill = 0x0 { + _SYS_PUTCBEG = .; + . += 0x200; + _SYS_PUTCEND = . - 1; + } > IRAM + + .args: fill=0 { + *(.args) + . += 0x4; + } > IRAM + + .gio: {} > IRAM + + .rtdx_data: {} > IRAM + + .rtdx_text: {} > IRAM + + .hst: { + HST_A_TABBEG = .; + _HST_A_TABBEG = .; + *(.hst) + HST_A_TABEND = .; + _HST_A_TABEND = .; + HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + _HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + } > IRAM + + .dsm: {} > IRAM + + /* RTA_fromHost buffer */ + .hst1: align = 0x4 {} > IRAM + + /* RTA_toHost buffer */ + .hst0: align = 0x4 {} > IRAM + + .hwi: {} > IRAM + + .tsk: { + *(.tsk) + } > IRAM + + .TSK_idle$stk: { + *(.TSK_idle$stk) + } > IRAM + + .log: { + LOG_A_TABBEG = .; + _LOG_A_TABBEG = .; + *(.log) + LOG_A_TABEND = .; + _LOG_A_TABEND = .; + LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + _LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + } > IRAM + + .printf (COPY): {} > IRAM + + /* LOG_system buffer */ + .LOG_system$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + .pip: { + PIP_A_TABBEG = .; + _PIP_A_TABBEG = .; + *(.pip) + PIP_A_TABEND = .; + _PIP_A_TABEND = .; + PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + _PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + } > IRAM + + .sts: { + STS_A_TABBEG = .; + _STS_A_TABBEG = .; + *(.sts) + STS_A_TABEND = .; + _STS_A_TABEND = .; + STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + _STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + } > IRAM + + .sys: {} > IRAM + + .IRAM$heap: { + IRAM$B = .; + _IRAM_base = .; + IRAM$L = 0x8000; + _IRAM_length = 0x8000; + . += 0x8000; + } > IRAM + + .SDRAM$heap: { + SDRAM$B = .; + _SDRAM_base = .; + SDRAM$L = 0x8000; + _SDRAM_length = 0x8000; + . += 0x8000; + } > SDRAM + +} + diff --git a/uP/TP3_DSP/ex3a/ex3acfg.h b/uP/TP3_DSP/ex3a/ex3acfg.h new file mode 100755 index 0000000..e51ddcd --- /dev/null +++ b/uP/TP3_DSP/ex3a/ex3acfg.h @@ -0,0 +1,31 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex3a.cdb */ + +#define CHIP_6713 1 + +/* Include Header Files */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern far HST_Obj RTA_fromHost; +extern far HST_Obj RTA_toHost; +extern far SWI_Obj KNL_swi; +extern far TSK_Obj TSK_idle; +extern far LOG_Obj LOG_system; +extern far STS_Obj IDL_busyObj; +extern far void CSL_cfgInit(); + +#ifdef __cplusplus +} +#endif /* extern "C" */ diff --git a/uP/TP3_DSP/ex3a/ex3acfg_c.c b/uP/TP3_DSP/ex3a/ex3acfg_c.c new file mode 100755 index 0000000..71e9015 --- /dev/null +++ b/uP/TP3_DSP/ex3a/ex3acfg_c.c @@ -0,0 +1,32 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex3a.cdb */ + +/* Include Header File */ +#include "ex3acfg.h" + + +#ifdef __cplusplus +#pragma CODE_SECTION(".text:CSL_cfgInit") +#else +#pragma CODE_SECTION(CSL_cfgInit,".text:CSL_cfgInit") +#endif + + +#ifdef __cplusplus +#pragma FUNC_EXT_CALLED() +#else +#pragma FUNC_EXT_CALLED(CSL_cfgInit) +#endif + +/* Config Structures */ +/* Handles */ + +/* + * ======== CSL_cfgInit() ======== + */ +void CSL_cfgInit() +{ +} diff --git a/uP/TP3_DSP/ex3b/bloc_gen.c b/uP/TP3_DSP/ex3b/bloc_gen.c new file mode 100755 index 0000000..19f989e --- /dev/null +++ b/uP/TP3_DSP/ex3b/bloc_gen.c @@ -0,0 +1,46 @@ + +/******************************************************************************** + * Origine du fichier l:\up\tp3\ex3b\bloc_gen.c (rev. 19-04-2004) * + * Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex3b * + * NE PAS MODIFIER CE FICHIER * + * ************************** * + ********************************************************************************/ + + + +/**************************************** + * FONCTION SineGen() * + ****************************************/ +int SineGen(void) +{ +/*Pour une fréquence d'échantillonnage égale à 48 kHz, + cette fonction génère un signal sinusoidal à 6 kHz avec une amplitude égale à 0,5*/ +static float y[3]={0,0,0.353934}; +static float a=1.414215; + +y[0]=y[1]*a - y[2]; +y[2]=y[1]; +y[1]=y[0]; + +return( (int)(0x7FFF*y[0]) ); +} + +/************************************************************************ + * FONCTION BlockGen() POUR GÉNÉRER UN BLOC DE "SINUS" * + * Cette fonction remplit un buffer avec des valeurs successives de * + * SineGen(). * + * Chaque valeur est doublée : une valeur pour chaque voie de l'AIC23 * + * L'adresse du buffer et la taille du buffer sont passée en paramètres.* + ************************************************************************/ +void BlockGen( short *pbuf, int taille) +{ +int i =0; +short signal; + +while( i != taille ) + { + signal=SineGen(); + pbuf[i++]=signal; /*Valeur du signal pour une voie*/ + pbuf[i++]=signal; /*Même valeur pour l'autre voie*/ + } +} diff --git a/uP/TP3_DSP/ex3b/ex3b.c b/uP/TP3_DSP/ex3b/ex3b.c new file mode 100755 index 0000000..67a8596 --- /dev/null +++ b/uP/TP3_DSP/ex3b/ex3b.c @@ -0,0 +1,87 @@ +/******************************************************************************** + * Origine du fichier l:\up\tp3\ex3b\ex3b.c (rev. 19-04-2004) * + * Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex3b pour être * + * complété. * + * On utilise l'EDMA et on le programme avec l'aide graphique CSL de DSP/BIOS * + * * + * BINOME : * + ********************************************************************************/ + +#include "ex3bcfg.h" +#include "ex3b.h" + +#include +#include +#include + +extern void BlockGen(short *pbuffer, int taille); + +/* Variables globales */ + +DSK6713_AIC23_CodecHandle hAIC23; +DSK6713_AIC23_Config confAIC23 = { + 0x0017, /* 0 DSK6713_AIC23_LEFTINVOl left line input channel volume */ + 0x0017, /* 1 DSK6713_AIC23_RIGHTINVOl Right line input channel volume */ + 0x01f9, /* 2 DSK6713_AIC23_LEFTHPVOl left channel headphone volume */ + 0x01f9, /* 3 DSK6713_AIC23_RIGHTHPVOl Right channel headphone volume */ + 0x0011, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */ + 0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */ + 0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ + 0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */ + 0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control 48 kHz */ + 0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ +}; + +short buffer[BUFFERSIZE]; + + +/** + * INITIALISATION DU CODEC AIC23 + */ +void Codec_init() { + /* Open et configuration du codec AIC23 */ + DSK6713_init(); + + hAIC23 = DSK6713_AIC23_openCodec(0, &confAIC23); +} + +/** + * PROGRAMME D'INTERRUPTION + * Ce programme d'IT est exécuté à la demande de l'EDMA. + * Il s'agit donc de l'INT8. On utilise le fichier de configuration + * pour faire le nécessaire afin que cette fonction corresponde au + * programme d'interruption à exécuter : + * - Mise en place du vecteur et "dispatcher". + */ +void EDMA_HWI(void) { + /* Remise à 0 du bit TCC dans le registre CIPR */ + EDMA_intClear(TCC); + + /* Rafraîchir le buffer */ + BlockGen(buffer, BUFFERSIZE); + + +} + +/** + * PROGRAMME PRINCIPAL + */ +void main(void) { + /* Initialisation du buffer */ + BlockGen(buffer, BUFFERSIZE); + + /* Initialise le codec */ + Codec_init(); + + /* Démasquage total de l'interruption EDMA pour l'Event XEVT1 */ + EDMA_intEnable(TCC); + + /* Démasquage de l'interruption du port EDMA */ + IRQ_enable(IRQ_EVT_EDMAINT); + + /* Démasquage global des interruptions */ + IRQ_globalEnable(); + + /* A défaut de mieux ... */ + while(1); +} diff --git a/uP/TP3_DSP/ex3b/ex3b.h b/uP/TP3_DSP/ex3b/ex3b.h new file mode 100755 index 0000000..25cf9ea --- /dev/null +++ b/uP/TP3_DSP/ex3b/ex3b.h @@ -0,0 +1,11 @@ +/******************************************************************************** + * Origine du fichier l:\up\tp3\ex3b\ex3b.h (rev. 10-04-2004) * + * Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex3b * + ********************************************************************************/ + +#define BUFFERSIZE 56 +#define DXR1 0x01900004 /*Adresse DXR1 trouvée dans la doc McBSP*/ + /*0x34000000 est une autre adresse possible*/ +#define NBR_FRAME 0 +#define TCC 14 + diff --git a/uP/TP3_DSP/ex3b/ex3b.pjt b/uP/TP3_DSP/ex3b/ex3b.pjt new file mode 100755 index 0000000..e10b836 --- /dev/null +++ b/uP/TP3_DSP/ex3b/ex3b.pjt @@ -0,0 +1,41 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="F:\UP\TP3\ex3b\" +ProjectType=Executable +CPUFamily=TMS320C67XX +Tool="Compiler" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Release" + +[Source Files] +Source="BLOC_GEN.C" +Source="D:\ti\c6000\dsk6713\lib\dsk6713bsl.lib" +Source="EX3B.C" +Source="ex3b.cdb" +Source="ex3bcfg.cmd" + +[Generated Files] +Source="ex3bcfg.s62" +Source="ex3bcfg_c.c" + +["Compiler" Settings: "Debug"] +Options=-g -q -fr"F:\UP\TP3\ex3b\Debug" -d"_DEBUG" -mv6700 + +["Compiler" Settings: "Release"] +Options=-q -o3 -fr"F:\UP\TP3\ex3b\Release" -mv6700 + +["DspBiosBuilder" Settings: "Debug"] +Options=-v6x + +["DspBiosBuilder" Settings: "Release"] +Options=-v6x + +["Linker" Settings: "Debug"] +Options=-q -c -m".\Debug\ex3b.map" -o".\Debug\ex3b.out" -x + +["Linker" Settings: "Release"] +Options=-q -c -m".\Release\ex3b.map" -o".\Release\ex3b.out" -x + diff --git a/uP/TP3_DSP/ex3b/ex3bcfg.cmd b/uP/TP3_DSP/ex3b/ex3bcfg.cmd new file mode 100755 index 0000000..ac0dac3 --- /dev/null +++ b/uP/TP3_DSP/ex3b/ex3bcfg.cmd @@ -0,0 +1,306 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex3b.cdb */ + +/* MODULE PARAMETERS */ +GBL_USERINITFXN = _GBL_setPLLto225MHz; + +MEM_SEGZERO = IRAM; +MEM_MALLOCSEG = IRAM; + +CLK_TIMEFXN = CLK_F_getshtime; +CLK_HOOKFXN = HWI_F_dispatch; + +PRD_THOOKFXN = _KNL_tick; + +RTDX_DATAMEMSEG = IRAM; + +HST_DSMBUFSEG = IRAM; + +SWI_EHOOKFXN = GBL_NULL; +SWI_IHOOKFXN = GBL_NULL; +SWI_EXECFXN = SWI_F_iexec; +SWI_RUNFXN = SWI_F_run; + +TSK_STACKSEG = IRAM; +TSK_VCREATEFXN = _FXN_F_nop; +TSK_VDELETEFXN = _FXN_F_nop; +TSK_VEXITFXN = _FXN_F_nop; + +IDL_CALIBRFXN = IDL_F_stub; + +SYS_ABORTFXN = _UTL_doAbort; +SYS_ERRORFXN = _UTL_doError; +SYS_EXITFXN = _UTL_halt; +SYS_PUTCFXN = _UTL_doPutc; + +GIO_CREATEFXN = _FXN_F_nop; +GIO_DELETEFXN = _FXN_F_nop; +GIO_PENDFXN = _FXN_F_nop; +GIO_POSTFXN = _FXN_F_nop; + +/* OBJECT ALIASES */ +_IRAM = IRAM; +_CACHE_L2 = CACHE_L2; +_SDRAM = SDRAM; +_PRD_clock = PRD_clock; +_RTA_fromHost = RTA_fromHost; +_RTA_toHost = RTA_toHost; +_HWI_RESET = HWI_RESET; +_HWI_NMI = HWI_NMI; +_HWI_RESERVED0 = HWI_RESERVED0; +_HWI_RESERVED1 = HWI_RESERVED1; +_HWI_INT4 = HWI_INT4; +_HWI_INT5 = HWI_INT5; +_HWI_INT6 = HWI_INT6; +_HWI_INT7 = HWI_INT7; +_HWI_INT8 = HWI_INT8; +_HWI_INT9 = HWI_INT9; +_HWI_INT10 = HWI_INT10; +_HWI_INT11 = HWI_INT11; +_HWI_INT12 = HWI_INT12; +_HWI_INT13 = HWI_INT13; +_HWI_INT14 = HWI_INT14; +_HWI_INT15 = HWI_INT15; +_KNL_swi = KNL_swi; +_TSK_idle = TSK_idle; +_LNK_dataPump = LNK_dataPump; +_RTA_dispatcher = RTA_dispatcher; +_IDL_cpuLoad = IDL_cpuLoad; +_LOG_system = LOG_system; +_IDL_busyObj = IDL_busyObj; + +/* MODULE GBL */ + +SECTIONS { + .vers (COPY): {} /* version information */ +} + +-priority +-llnkrtdx.a62 +-ldrivers.a67 /* device drivers support */ +-lsioboth.a62 /* supports both SIO models */ +-lbiosi.a62 /* DSP/BIOS support */ +-lrtdx.lib /* RTDX support */ +-lcsl6713.lib +-lrts6700.lib /* C and C++ run-time library support */ + +_GBL_CACHE = GBL_CACHE; + +/* MODULE MEM */ +-stack 0x400 +MEMORY { + IRAM : origin = 0x0, len = 0x30000 + CACHE_L2 : origin = 0x30000, len = 0x10000 + SDRAM : origin = 0x80000000, len = 0x1000000 +} +/* MODULE CLK */ +SECTIONS { + .clk: { + _CLK_start = _CLK_start6x; + CLK_F_gethtime = CLK_F_getshtime; + CLK_A_TABBEG = .; + *(.clk) + CLK_A_TABEND = .; + CLK_A_TABLEN = (. - CLK_A_TABBEG) / 1; + } > IRAM +} +_CLK_PRD = CLK_PRD; +_CLK_COUNTSPMS = CLK_COUNTSPMS; +_CLK_REGS = CLK_REGS; +_CLK_USETIMER = CLK_USETIMER; +_CLK_TIMERNUM = CLK_TIMERNUM; +_CLK_TDDR = CLK_TDDR; + +/* MODULE PRD */ +SECTIONS { + .prd: { + PRD_A_TABBEG = .; + /* no PRD objects */ + PRD_A_TABEND = .; + PRD_A_TABLEN = (. - PRD_A_TABBEG) / 32; + } > IRAM +} + +/* MODULE RTDX */ +_RTDX_interrupt_mask = 0x0; + +/* MODULE HWI */ +SECTIONS { + .hwi_vec: 0x0 { + HWI_A_VECS = .; + *(.hwi_vec) + } +} + +/* MODULE SWI */ +SECTIONS { + .swi: { + SWI_A_TABBEG = .; + *(.swi) + SWI_A_TABEND = .; + SWI_A_TABLEN = (. - SWI_A_TABBEG) / 44; + } > IRAM +} + +/* MODULE IDL */ +SECTIONS { + .idl: { + IDL_A_TABBEG = .; + *(.idl) + IDL_A_TABEND = .; + IDL_A_TABLEN = (. - IDL_A_TABBEG) / 8; + IDL_A_CALBEG = .; + *(.idlcal) + IDL_A_CALEND = .; + IDL_A_CALLEN = (. - IDL_A_CALBEG) / 8; + } > IRAM +} + + + +SECTIONS { + .bss: {} > IRAM + + .far: {} > IRAM + + .sysdata: {} > IRAM + + .mem: {} > IRAM + + .sysinit: {} > IRAM + + .sysregs: {} > IRAM + + .gblinit: {} > IRAM + + .trcdata: {} > IRAM + + .stack: fill=0xc0ffee { + GBL_stackbeg = .; + *(.stack) + GBL_stackend = GBL_stackbeg + 0x400 - 1; + _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7; + _HWI_STKTOP = GBL_stackbeg; + } > IRAM + + .cinit: {} > IRAM + + .pinit: {} > IRAM + + .data: {} > IRAM + + .const: {} > IRAM + + .switch: {} > IRAM + + .cio: {} > IRAM + + .text: {} > IRAM + + frt: {} > IRAM + + .bios: {} > IRAM + + .trace: fill = 0x0 { + _SYS_PUTCBEG = .; + . += 0x200; + _SYS_PUTCEND = . - 1; + } > IRAM + + .args: fill=0 { + *(.args) + . += 0x4; + } > IRAM + + .gio: {} > IRAM + + .rtdx_data: {} > IRAM + + .rtdx_text: {} > IRAM + + .hst: { + HST_A_TABBEG = .; + _HST_A_TABBEG = .; + *(.hst) + HST_A_TABEND = .; + _HST_A_TABEND = .; + HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + _HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + } > IRAM + + .dsm: {} > IRAM + + /* RTA_fromHost buffer */ + .hst1: align = 0x4 {} > IRAM + + /* RTA_toHost buffer */ + .hst0: align = 0x4 {} > IRAM + + .hwi: {} > IRAM + + .tsk: { + *(.tsk) + } > IRAM + + .TSK_idle$stk: { + *(.TSK_idle$stk) + } > IRAM + + .log: { + LOG_A_TABBEG = .; + _LOG_A_TABBEG = .; + *(.log) + LOG_A_TABEND = .; + _LOG_A_TABEND = .; + LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + _LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + } > IRAM + + .printf (COPY): {} > IRAM + + /* LOG_system buffer */ + .LOG_system$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + .pip: { + PIP_A_TABBEG = .; + _PIP_A_TABBEG = .; + *(.pip) + PIP_A_TABEND = .; + _PIP_A_TABEND = .; + PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + _PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + } > IRAM + + .sts: { + STS_A_TABBEG = .; + _STS_A_TABBEG = .; + *(.sts) + STS_A_TABEND = .; + _STS_A_TABEND = .; + STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + _STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + } > IRAM + + .sys: {} > IRAM + + .IRAM$heap: { + IRAM$B = .; + _IRAM_base = .; + IRAM$L = 0x8000; + _IRAM_length = 0x8000; + . += 0x8000; + } > IRAM + + .SDRAM$heap: { + SDRAM$B = .; + _SDRAM_base = .; + SDRAM$L = 0x8000; + _SDRAM_length = 0x8000; + . += 0x8000; + } > SDRAM + +} + diff --git a/uP/TP3_DSP/ex3b/ex3bcfg.h b/uP/TP3_DSP/ex3b/ex3bcfg.h new file mode 100755 index 0000000..5cb602c --- /dev/null +++ b/uP/TP3_DSP/ex3b/ex3bcfg.h @@ -0,0 +1,36 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex3b.cdb */ + +#define CHIP_6713 1 + +/* Include Header Files */ +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern far HST_Obj RTA_fromHost; +extern far HST_Obj RTA_toHost; +extern far SWI_Obj KNL_swi; +extern far TSK_Obj TSK_idle; +extern far LOG_Obj LOG_system; +extern far STS_Obj IDL_busyObj; +extern far EDMA_Config confEDMA; +extern far EDMA_Handle hEdmaChan14; +extern far EDMA_Handle hEdmaReload; +extern far void CSL_cfgInit(); + +#ifdef __cplusplus +} +#endif /* extern "C" */ diff --git a/uP/TP3_DSP/ex3b/ex3bcfg_c.c b/uP/TP3_DSP/ex3b/ex3bcfg_c.c new file mode 100755 index 0000000..b79208b --- /dev/null +++ b/uP/TP3_DSP/ex3b/ex3bcfg_c.c @@ -0,0 +1,53 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex3b.cdb */ + +/* Include Header File */ +#include "ex3bcfg.h" + + +#ifdef __cplusplus +#pragma CODE_SECTION(".text:CSL_cfgInit") +#else +#pragma CODE_SECTION(CSL_cfgInit,".text:CSL_cfgInit") +#endif + + +#ifdef __cplusplus +#pragma FUNC_EXT_CALLED() +#else +#pragma FUNC_EXT_CALLED(CSL_cfgInit) +#endif +#include "ex3b.h" + +extern far Int16 buffer; + +/* Config Structures */ +EDMA_Config confEDMA = { + 0x491E0002, /* Option */ + (Uint32) &buffer, /* Source Address - Extern Decl.Obj */ + 0x00000000, /* Transfer Counter - Numeric */ + (Uint32) DXR1, /* Destination Address - From User's Header file */ + 0x00000000, /* Index register - Numeric */ + 0x00000000 /* Element Count Reload and Link Address */ +}; + +/* Handles */ +EDMA_Handle hEdmaChan14; +EDMA_Handle hEdmaReload; + +/* + * ======== CSL_cfgInit() ======== + */ +void CSL_cfgInit() +{ + hEdmaChan14 = EDMA_open(EDMA_CHA_XEVT1, EDMA_OPEN_RESET); + hEdmaReload = EDMA_allocTable(-1); + confEDMA.rld = (confEDMA.rld & 0xFFFF0000) | (EDMA_RLD_RMK(0,hEdmaReload)); + confEDMA.cnt = EDMA_CNT_RMK(0,BUFFERSIZE); + EDMA_config(hEdmaChan14, &confEDMA); + EDMA_enableChannel(hEdmaChan14); + EDMA_config(hEdmaReload, &confEDMA); +} diff --git a/uP/TP3_DSP/ex4a/ex4a.c b/uP/TP3_DSP/ex4a/ex4a.c new file mode 100755 index 0000000..683e01b --- /dev/null +++ b/uP/TP3_DSP/ex4a/ex4a.c @@ -0,0 +1,78 @@ +/******************************************************************************** + * Origine du fichier l:\up\tp3\ex4a\ex4a.c (rev. 26-05-2004) * + * Ce fichier est copié dans le répertoire (project) f:\up\tp3\ex4a pour être * + * complété. * + * DSP/BIOS : Mise en évidence de l'avantage de LOG_printf par rapport à printf * + * * + * BINOME : * + ********************************************************************************/ + +/* Include Files */ +#include /* Absolument obligatoire si on utilise printf; + * Si on l'oublie, pas d'erreur ni de warning .. + * MAIS printf ne fonctionne pas !! */ +#include "ex4acfg.h" +#include +#include + +unsigned int nit; /* Compteur d'interruption du Timer1 */ +unsigned int time; /* Temps écoulé en secondes */ +unsigned int print_choix = 0;/* 0, 1, 2, ou 3 */ + +/** + * PROGRAMME D'INTERRUPTION DU TIMER1 + * Ce programme d'interruption est exécuté 20 fois par secondes. + * Il s'agit d'inverser l'état des 4 LED du DSK. De plus : + * - Si le DIP 0 est enfoncé => Afficher un message avec printf. + * - Si le DIP 3 est enfoncé => Afficher un message avec LOG_printf. + */ +void TIMER1_HWI(void) { + DSK6713_LED_toggle(0); + DSK6713_LED_toggle(1); + DSK6713_LED_toggle(2); + DSK6713_LED_toggle(3); + + if(--nit == 0) { + nit=20; + ++time; + + switch (print_choix) { + case 0: + break; + case 1: + printf("Time= %d secondes\n", time); + break; + case 2: + LOG_printf(&LOG_it_timer1, "Time= %d secondes\n", time); + break; + case 3: + printf("Time= %d secondes\n", time); + LOG_printf(&LOG_it_timer1, "Time= %d secondes\n", time); + break; + } + + } +} + +/** + * PROGRAMME PRINCIPAL + * Il se limite aux initialisations necessaires.Ceci étant fait, il se termine + * par return. DSP/BIOS prend alors le contrôle de l'application. + */ +void main(void) { + DSK6713_init(); + DSK6713_LED_init(); + + nit = 1; + time = 0; + printf("EXERCICE 4a\n"); + + /* Démasquage total de l'interruption du TIMER1 */ + IRQ_enable(IRQ_EVT_TINT1); + + /* Ce n'est pas indispensable car c'est automatique dans + * la mesure où main() se termine par return */ + IRQ_globalEnable(); + + return; +} diff --git a/uP/TP3_DSP/ex4a/ex4a.gel b/uP/TP3_DSP/ex4a/ex4a.gel new file mode 100755 index 0000000..ce686dc --- /dev/null +++ b/uP/TP3_DSP/ex4a/ex4a.gel @@ -0,0 +1,5 @@ +menuitem "MonToutPremierSlider"; + +slider MonSlider(0, 3, 1, 1, val) { + print_choix = val; +} diff --git a/uP/TP3_DSP/ex4a/ex4a.pjt b/uP/TP3_DSP/ex4a/ex4a.pjt new file mode 100755 index 0000000..100810b --- /dev/null +++ b/uP/TP3_DSP/ex4a/ex4a.pjt @@ -0,0 +1,40 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="F:\UP\TP3\ex4a\" +ProjectType=Executable +CPUFamily=TMS320C67XX +Tool="Compiler" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Release" + +[Source Files] +Source="D:\ti\c6000\dsk6713\lib\dsk6713bsl.lib" +Source="EX4A.C" +Source="ex4a.cdb" +Source="ex4acfg.cmd" + +[Generated Files] +Source="ex4acfg.s62" +Source="ex4acfg_c.c" + +["Compiler" Settings: "Debug"] +Options=-g -q -fr"F:\UP\TP3\ex4a\Debug" -d"_DEBUG" -mv6700 + +["Compiler" Settings: "Release"] +Options=-q -o3 -fr"F:\UP\TP3\ex4a\Release" -mv6700 + +["DspBiosBuilder" Settings: "Debug"] +Options=-v6x + +["DspBiosBuilder" Settings: "Release"] +Options=-v6x + +["Linker" Settings: "Debug"] +Options=-q -c -m".\Debug\ex4a.map" -o".\Debug\ex4a.out" -x + +["Linker" Settings: "Release"] +Options=-q -c -m".\Release\ex4a.map" -o".\Release\ex4a.out" -x + diff --git a/uP/TP3_DSP/ex4a/ex4acfg.cmd b/uP/TP3_DSP/ex4a/ex4acfg.cmd new file mode 100755 index 0000000..94167c2 --- /dev/null +++ b/uP/TP3_DSP/ex4a/ex4acfg.cmd @@ -0,0 +1,310 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex4a.cdb */ + +/* MODULE PARAMETERS */ +GBL_USERINITFXN = _GBL_setPLLto225MHz; + +MEM_SEGZERO = IRAM; +MEM_MALLOCSEG = IRAM; + +CLK_TIMEFXN = CLK_F_getshtime; +CLK_HOOKFXN = HWI_F_dispatch; + +PRD_THOOKFXN = _KNL_tick; + +RTDX_DATAMEMSEG = IRAM; + +HST_DSMBUFSEG = IRAM; + +SWI_EHOOKFXN = GBL_NULL; +SWI_IHOOKFXN = GBL_NULL; +SWI_EXECFXN = SWI_F_iexec; +SWI_RUNFXN = SWI_F_run; + +TSK_STACKSEG = IRAM; +TSK_VCREATEFXN = _FXN_F_nop; +TSK_VDELETEFXN = _FXN_F_nop; +TSK_VEXITFXN = _FXN_F_nop; + +IDL_CALIBRFXN = IDL_F_stub; + +SYS_ABORTFXN = _UTL_doAbort; +SYS_ERRORFXN = _UTL_doError; +SYS_EXITFXN = _UTL_halt; +SYS_PUTCFXN = _UTL_doPutc; + +GIO_CREATEFXN = _FXN_F_nop; +GIO_DELETEFXN = _FXN_F_nop; +GIO_PENDFXN = _FXN_F_nop; +GIO_POSTFXN = _FXN_F_nop; + +/* OBJECT ALIASES */ +_IRAM = IRAM; +_CACHE_L2 = CACHE_L2; +_SDRAM = SDRAM; +_PRD_clock = PRD_clock; +_RTA_fromHost = RTA_fromHost; +_RTA_toHost = RTA_toHost; +_HWI_RESET = HWI_RESET; +_HWI_NMI = HWI_NMI; +_HWI_RESERVED0 = HWI_RESERVED0; +_HWI_RESERVED1 = HWI_RESERVED1; +_HWI_INT4 = HWI_INT4; +_HWI_INT5 = HWI_INT5; +_HWI_INT6 = HWI_INT6; +_HWI_INT7 = HWI_INT7; +_HWI_INT8 = HWI_INT8; +_HWI_INT9 = HWI_INT9; +_HWI_INT10 = HWI_INT10; +_HWI_INT11 = HWI_INT11; +_HWI_INT12 = HWI_INT12; +_HWI_INT13 = HWI_INT13; +_HWI_INT14 = HWI_INT14; +_HWI_INT15 = HWI_INT15; +_KNL_swi = KNL_swi; +_TSK_idle = TSK_idle; +_LNK_dataPump = LNK_dataPump; +_RTA_dispatcher = RTA_dispatcher; +_IDL_cpuLoad = IDL_cpuLoad; +_LOG_system = LOG_system; +_LOG_it_timer1 = LOG_it_timer1; +_IDL_busyObj = IDL_busyObj; + +/* MODULE GBL */ + +SECTIONS { + .vers (COPY): {} /* version information */ +} + +-priority +-llnkrtdx.a62 +-ldrivers.a67 /* device drivers support */ +-lsioboth.a62 /* supports both SIO models */ +-lbiosi.a62 /* DSP/BIOS support */ +-lrtdx.lib /* RTDX support */ +-lcsl6713.lib +-lrts6700.lib /* C and C++ run-time library support */ + +_GBL_CACHE = GBL_CACHE; + +/* MODULE MEM */ +-stack 0x400 +MEMORY { + IRAM : origin = 0x0, len = 0x30000 + CACHE_L2 : origin = 0x30000, len = 0x10000 + SDRAM : origin = 0x80000000, len = 0x1000000 +} +/* MODULE CLK */ +SECTIONS { + .clk: { + _CLK_start = _CLK_start6x; + CLK_F_gethtime = CLK_F_getshtime; + CLK_A_TABBEG = .; + *(.clk) + CLK_A_TABEND = .; + CLK_A_TABLEN = (. - CLK_A_TABBEG) / 1; + } > IRAM +} +_CLK_PRD = CLK_PRD; +_CLK_COUNTSPMS = CLK_COUNTSPMS; +_CLK_REGS = CLK_REGS; +_CLK_USETIMER = CLK_USETIMER; +_CLK_TIMERNUM = CLK_TIMERNUM; +_CLK_TDDR = CLK_TDDR; + +/* MODULE PRD */ +SECTIONS { + .prd: { + PRD_A_TABBEG = .; + /* no PRD objects */ + PRD_A_TABEND = .; + PRD_A_TABLEN = (. - PRD_A_TABBEG) / 32; + } > IRAM +} + +/* MODULE RTDX */ +_RTDX_interrupt_mask = 0x0; + +/* MODULE HWI */ +SECTIONS { + .hwi_vec: 0x0 { + HWI_A_VECS = .; + *(.hwi_vec) + } +} + +/* MODULE SWI */ +SECTIONS { + .swi: { + SWI_A_TABBEG = .; + *(.swi) + SWI_A_TABEND = .; + SWI_A_TABLEN = (. - SWI_A_TABBEG) / 44; + } > IRAM +} + +/* MODULE IDL */ +SECTIONS { + .idl: { + IDL_A_TABBEG = .; + *(.idl) + IDL_A_TABEND = .; + IDL_A_TABLEN = (. - IDL_A_TABBEG) / 8; + IDL_A_CALBEG = .; + *(.idlcal) + IDL_A_CALEND = .; + IDL_A_CALLEN = (. - IDL_A_CALBEG) / 8; + } > IRAM +} + + + +SECTIONS { + .bss: {} > IRAM + + .far: {} > IRAM + + .sysdata: {} > IRAM + + .mem: {} > IRAM + + .sysinit: {} > IRAM + + .sysregs: {} > IRAM + + .gblinit: {} > IRAM + + .trcdata: {} > IRAM + + .stack: fill=0xc0ffee { + GBL_stackbeg = .; + *(.stack) + GBL_stackend = GBL_stackbeg + 0x400 - 1; + _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7; + _HWI_STKTOP = GBL_stackbeg; + } > IRAM + + .cinit: {} > IRAM + + .pinit: {} > IRAM + + .data: {} > IRAM + + .const: {} > IRAM + + .switch: {} > IRAM + + .cio: {} > IRAM + + .text: {} > IRAM + + frt: {} > IRAM + + .bios: {} > IRAM + + .trace: fill = 0x0 { + _SYS_PUTCBEG = .; + . += 0x200; + _SYS_PUTCEND = . - 1; + } > IRAM + + .args: fill=0 { + *(.args) + . += 0x4; + } > IRAM + + .gio: {} > IRAM + + .rtdx_data: {} > IRAM + + .rtdx_text: {} > IRAM + + .hst: { + HST_A_TABBEG = .; + _HST_A_TABBEG = .; + *(.hst) + HST_A_TABEND = .; + _HST_A_TABEND = .; + HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + _HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + } > IRAM + + .dsm: {} > IRAM + + /* RTA_fromHost buffer */ + .hst1: align = 0x4 {} > IRAM + + /* RTA_toHost buffer */ + .hst0: align = 0x4 {} > IRAM + + .hwi: {} > IRAM + + .tsk: { + *(.tsk) + } > IRAM + + .TSK_idle$stk: { + *(.TSK_idle$stk) + } > IRAM + + .log: { + LOG_A_TABBEG = .; + _LOG_A_TABBEG = .; + *(.log) + LOG_A_TABEND = .; + _LOG_A_TABEND = .; + LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + _LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + } > IRAM + + .printf (COPY): {} > IRAM + + /* LOG_system buffer */ + .LOG_system$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + /* LOG_it_timer1 buffer */ + .LOG_it_timer1$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + .pip: { + PIP_A_TABBEG = .; + _PIP_A_TABBEG = .; + *(.pip) + PIP_A_TABEND = .; + _PIP_A_TABEND = .; + PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + _PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + } > IRAM + + .sts: { + STS_A_TABBEG = .; + _STS_A_TABBEG = .; + *(.sts) + STS_A_TABEND = .; + _STS_A_TABEND = .; + STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + _STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + } > IRAM + + .sys: {} > IRAM + + .IRAM$heap: { + IRAM$B = .; + _IRAM_base = .; + IRAM$L = 0x8000; + _IRAM_length = 0x8000; + . += 0x8000; + } > IRAM + + .SDRAM$heap: { + SDRAM$B = .; + _SDRAM_base = .; + SDRAM$L = 0x8000; + _SDRAM_length = 0x8000; + . += 0x8000; + } > SDRAM + +} + diff --git a/uP/TP3_DSP/ex4a/ex4acfg.h b/uP/TP3_DSP/ex4a/ex4acfg.h new file mode 100755 index 0000000..21703df --- /dev/null +++ b/uP/TP3_DSP/ex4a/ex4acfg.h @@ -0,0 +1,36 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex4a.cdb */ + +#define CHIP_6713 1 + +/* Include Header Files */ +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern far HST_Obj RTA_fromHost; +extern far HST_Obj RTA_toHost; +extern far SWI_Obj KNL_swi; +extern far TSK_Obj TSK_idle; +extern far LOG_Obj LOG_system; +extern far LOG_Obj LOG_it_timer1; +extern far STS_Obj IDL_busyObj; +extern far TIMER_Config timer1Cfg0; +extern far TIMER_Handle hTimer1; +extern far void CSL_cfgInit(); + +#ifdef __cplusplus +} +#endif /* extern "C" */ diff --git a/uP/TP3_DSP/ex4a/ex4acfg_c.c b/uP/TP3_DSP/ex4a/ex4acfg_c.c new file mode 100755 index 0000000..b3d66e4 --- /dev/null +++ b/uP/TP3_DSP/ex4a/ex4acfg_c.c @@ -0,0 +1,41 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex4a.cdb */ + +/* Include Header File */ +#include "ex4acfg.h" + + +#ifdef __cplusplus +#pragma CODE_SECTION(".text:CSL_cfgInit") +#else +#pragma CODE_SECTION(CSL_cfgInit,".text:CSL_cfgInit") +#endif + + +#ifdef __cplusplus +#pragma FUNC_EXT_CALLED() +#else +#pragma FUNC_EXT_CALLED(CSL_cfgInit) +#endif + +/* Config Structures */ +TIMER_Config timer1Cfg0 = { + 0x000003C0, /* Control Register (CTL) */ + 0x0015752A, /* Period Register (PRD) */ + 0x00000000 /* Counter Register (CNT) */ +}; + +/* Handles */ +TIMER_Handle hTimer1; + +/* + * ======== CSL_cfgInit() ======== + */ +void CSL_cfgInit() +{ + hTimer1 = TIMER_open(TIMER_DEV1, TIMER_OPEN_RESET); + TIMER_config(hTimer1, &timer1Cfg0); +} diff --git a/uP/TP3_DSP/ex4b/ex4b.c b/uP/TP3_DSP/ex4b/ex4b.c new file mode 100755 index 0000000..3497ab2 --- /dev/null +++ b/uP/TP3_DSP/ex4b/ex4b.c @@ -0,0 +1,76 @@ +/******************************************************************************** + * Origine du fichier L:\up\tp3\ex4b\ex4b.c (rev. 14-01-2005) * + * Ce fichier est copié dans le répertoire (project) F:\up\tp3\ex4b pour être * + * complété. * + * DSP/BIOS : HWI et SWI. module STS, * + * * + * BINOME : * + ********************************************************************************/ + +/* Include Files */ +/* ============= */ +#include /*Absolument obligatoire si on utilise printf; + Si on l'oublie, pas d'erreur ni de warning .. + MAIS printf ne fonctionne pas !!*/ +#include "ex4bcfg.h" +#include +#include +#define TEMPO 0x01F00000 /*Pour une tempo logicielle d'environ 1 seconde*/ + +/******************************************************************************** + * PROGRAMME D'INTERRUPTION DU TIMER1 * + * Ce programme d'interruption est exécuté 20 fois par secondes (période 50 ms).* + * Il s'agit : * + * -1- D'inverser l'état de la LED 0 pour qu'elle clignote 10 fois par seconde. * + * -2- De poster avec SWI_dec() la SWI_ex4b dont la mailbox est initialisée * + * à 100. 100 fois 50 ms => la SWI va être exécutée toutes les 5 secondes. * + ********************************************************************************/ +void TIMER1_HWI(void) +{ + DSK6713_LED_toggle(0); + SWI_dec(&SWI_ex4b); +} + +/******************************************************************************** + * SOFTWARE INTERRUPT SWI_ex4b * + * Avec le fichier de configuration on a défini une SWI de nom SWI_ex4b. * + * Les propriétés de SWI_ex4b sont les suivantes : * + * Fonction exécutée : ALGO_SWI. * + * Mailbox : 100. * + * Cette SWI est exécutée toutes les 5 secondes. Le traitement consiste à * + * allumer la LED 1, puis à attendre environ 1 seconde en exécutant une boucle * + * de décrémentation logicielle. Pour cela, on utilise la constante TEMPO * + * d‚finie au d‚but de ce fichier. On termine en éteignant la LED 1. * + ********************************************************************************/ +void ALGO_SWI(void) +{ + + unsigned int tempo = 20000000; + DSK6713_LED_on(1); + STS_set(&STS_algo, CLK_gethtime()); + while(--tempo); + STS_delta(&STS_algo, CLK_gethtime()); + DSK6713_LED_off(1); + + +} + +/******************************************************************************** + * PROGRAMME PRINCIPAL * + * Il se limite aux initialisations necessaires.Ceci étant fait, il se termine * + * par return. DSP/BIOS prend alors le contrôle de l'application. * + ********************************************************************************/ +void main(void) +{ +DSK6713_init(); +DSK6713_LED_init(); + +printf("EXERCICE 4b\n"); + +/* Démasquage total de l'interruption du TIMER1 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ +IRQ_enable(IRQ_EVT_TINT1); +IRQ_globalEnable(); + +return; +} diff --git a/uP/TP3_DSP/ex4b/ex4b.pjt b/uP/TP3_DSP/ex4b/ex4b.pjt new file mode 100755 index 0000000..955437b --- /dev/null +++ b/uP/TP3_DSP/ex4b/ex4b.pjt @@ -0,0 +1,40 @@ +; Code Composer Project File, Version 2.0 (do not modify or remove this line) + +[Project Settings] +ProjectDir="F:\UP\TP3\ex4b\" +ProjectType=Executable +CPUFamily=TMS320C67XX +Tool="Compiler" +Tool="DspBiosBuilder" +Tool="Linker" +Config="Debug" +Config="Release" + +[Source Files] +Source="D:\ti\c6000\dsk6713\lib\dsk6713bsl.lib" +Source="EX4B.C" +Source="ex4b.cdb" +Source="ex4bcfg.cmd" + +[Generated Files] +Source="ex4bcfg.s62" +Source="ex4bcfg_c.c" + +["Compiler" Settings: "Debug"] +Options=-g -q -fr"F:\UP\TP3\ex4b\Debug" -d"_DEBUG" -mv6700 + +["Compiler" Settings: "Release"] +Options=-q -o3 -fr"F:\UP\TP3\ex4b\Release" -mv6700 + +["DspBiosBuilder" Settings: "Debug"] +Options=-v6x + +["DspBiosBuilder" Settings: "Release"] +Options=-v6x + +["Linker" Settings: "Debug"] +Options=-q -c -m".\Debug\ex4b.map" -o".\Debug\ex4b.out" -x + +["Linker" Settings: "Release"] +Options=-q -c -m".\Release\ex4b.map" -o".\Release\ex4b.out" -x + diff --git a/uP/TP3_DSP/ex4b/ex4bcfg.cmd b/uP/TP3_DSP/ex4b/ex4bcfg.cmd new file mode 100755 index 0000000..eca6876 --- /dev/null +++ b/uP/TP3_DSP/ex4b/ex4bcfg.cmd @@ -0,0 +1,308 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex4b.cdb */ + +/* MODULE PARAMETERS */ +GBL_USERINITFXN = _GBL_setPLLto225MHz; + +MEM_SEGZERO = IRAM; +MEM_MALLOCSEG = IRAM; + +CLK_TIMEFXN = CLK_F_getshtime; +CLK_HOOKFXN = HWI_F_dispatch; + +PRD_THOOKFXN = _KNL_tick; + +RTDX_DATAMEMSEG = IRAM; + +HST_DSMBUFSEG = IRAM; + +SWI_EHOOKFXN = GBL_NULL; +SWI_IHOOKFXN = GBL_NULL; +SWI_EXECFXN = SWI_F_iexec; +SWI_RUNFXN = SWI_F_run; + +TSK_STACKSEG = IRAM; +TSK_VCREATEFXN = _FXN_F_nop; +TSK_VDELETEFXN = _FXN_F_nop; +TSK_VEXITFXN = _FXN_F_nop; + +IDL_CALIBRFXN = IDL_F_stub; + +SYS_ABORTFXN = _UTL_doAbort; +SYS_ERRORFXN = _UTL_doError; +SYS_EXITFXN = _UTL_halt; +SYS_PUTCFXN = _UTL_doPutc; + +GIO_CREATEFXN = _FXN_F_nop; +GIO_DELETEFXN = _FXN_F_nop; +GIO_PENDFXN = _FXN_F_nop; +GIO_POSTFXN = _FXN_F_nop; + +/* OBJECT ALIASES */ +_IRAM = IRAM; +_CACHE_L2 = CACHE_L2; +_SDRAM = SDRAM; +_PRD_clock = PRD_clock; +_RTA_fromHost = RTA_fromHost; +_RTA_toHost = RTA_toHost; +_HWI_RESET = HWI_RESET; +_HWI_NMI = HWI_NMI; +_HWI_RESERVED0 = HWI_RESERVED0; +_HWI_RESERVED1 = HWI_RESERVED1; +_HWI_INT4 = HWI_INT4; +_HWI_INT5 = HWI_INT5; +_HWI_INT6 = HWI_INT6; +_HWI_INT7 = HWI_INT7; +_HWI_INT8 = HWI_INT8; +_HWI_INT9 = HWI_INT9; +_HWI_INT10 = HWI_INT10; +_HWI_INT11 = HWI_INT11; +_HWI_INT12 = HWI_INT12; +_HWI_INT13 = HWI_INT13; +_HWI_INT14 = HWI_INT14; +_HWI_INT15 = HWI_INT15; +_KNL_swi = KNL_swi; +_SWI_ex4b = SWI_ex4b; +_TSK_idle = TSK_idle; +_LNK_dataPump = LNK_dataPump; +_RTA_dispatcher = RTA_dispatcher; +_IDL_cpuLoad = IDL_cpuLoad; +_LOG_system = LOG_system; +_IDL_busyObj = IDL_busyObj; +_STS_algo = STS_algo; + +/* MODULE GBL */ + +SECTIONS { + .vers (COPY): {} /* version information */ +} + +-priority +-llnkrtdx.a62 +-ldrivers.a67 /* device drivers support */ +-lsioboth.a62 /* supports both SIO models */ +-lbiosi.a62 /* DSP/BIOS support */ +-lrtdx.lib /* RTDX support */ +-lcsl6713.lib +-lrts6700.lib /* C and C++ run-time library support */ + +_GBL_CACHE = GBL_CACHE; + +/* MODULE MEM */ +-stack 0x400 +MEMORY { + IRAM : origin = 0x0, len = 0x30000 + CACHE_L2 : origin = 0x30000, len = 0x10000 + SDRAM : origin = 0x80000000, len = 0x1000000 +} +/* MODULE CLK */ +SECTIONS { + .clk: { + _CLK_start = _CLK_start6x; + CLK_F_gethtime = CLK_F_getshtime; + CLK_A_TABBEG = .; + *(.clk) + CLK_A_TABEND = .; + CLK_A_TABLEN = (. - CLK_A_TABBEG) / 1; + } > IRAM +} +_CLK_PRD = CLK_PRD; +_CLK_COUNTSPMS = CLK_COUNTSPMS; +_CLK_REGS = CLK_REGS; +_CLK_USETIMER = CLK_USETIMER; +_CLK_TIMERNUM = CLK_TIMERNUM; +_CLK_TDDR = CLK_TDDR; + +/* MODULE PRD */ +SECTIONS { + .prd: { + PRD_A_TABBEG = .; + /* no PRD objects */ + PRD_A_TABEND = .; + PRD_A_TABLEN = (. - PRD_A_TABBEG) / 32; + } > IRAM +} + +/* MODULE RTDX */ +_RTDX_interrupt_mask = 0x0; + +/* MODULE HWI */ +SECTIONS { + .hwi_vec: 0x0 { + HWI_A_VECS = .; + *(.hwi_vec) + } +} + +/* MODULE SWI */ +SECTIONS { + .swi: { + SWI_A_TABBEG = .; + *(.swi) + SWI_A_TABEND = .; + SWI_A_TABLEN = (. - SWI_A_TABBEG) / 44; + } > IRAM +} + +/* MODULE IDL */ +SECTIONS { + .idl: { + IDL_A_TABBEG = .; + *(.idl) + IDL_A_TABEND = .; + IDL_A_TABLEN = (. - IDL_A_TABBEG) / 8; + IDL_A_CALBEG = .; + *(.idlcal) + IDL_A_CALEND = .; + IDL_A_CALLEN = (. - IDL_A_CALBEG) / 8; + } > IRAM +} + + + +SECTIONS { + .bss: {} > IRAM + + .far: {} > IRAM + + .sysdata: {} > IRAM + + .mem: {} > IRAM + + .sysinit: {} > IRAM + + .sysregs: {} > IRAM + + .gblinit: {} > IRAM + + .trcdata: {} > IRAM + + .stack: fill=0xc0ffee { + GBL_stackbeg = .; + *(.stack) + GBL_stackend = GBL_stackbeg + 0x400 - 1; + _HWI_STKBOTTOM = GBL_stackbeg + 0x400 - 4 & ~7; + _HWI_STKTOP = GBL_stackbeg; + } > IRAM + + .cinit: {} > IRAM + + .pinit: {} > IRAM + + .data: {} > IRAM + + .const: {} > IRAM + + .switch: {} > IRAM + + .cio: {} > IRAM + + .text: {} > IRAM + + frt: {} > IRAM + + .bios: {} > IRAM + + .trace: fill = 0x0 { + _SYS_PUTCBEG = .; + . += 0x200; + _SYS_PUTCEND = . - 1; + } > IRAM + + .args: fill=0 { + *(.args) + . += 0x4; + } > IRAM + + .gio: {} > IRAM + + .rtdx_data: {} > IRAM + + .rtdx_text: {} > IRAM + + .hst: { + HST_A_TABBEG = .; + _HST_A_TABBEG = .; + *(.hst) + HST_A_TABEND = .; + _HST_A_TABEND = .; + HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + _HST_A_TABLEN = (. - _HST_A_TABBEG) / 20; + } > IRAM + + .dsm: {} > IRAM + + /* RTA_fromHost buffer */ + .hst1: align = 0x4 {} > IRAM + + /* RTA_toHost buffer */ + .hst0: align = 0x4 {} > IRAM + + .hwi: {} > IRAM + + .tsk: { + *(.tsk) + } > IRAM + + .TSK_idle$stk: { + *(.TSK_idle$stk) + } > IRAM + + .log: { + LOG_A_TABBEG = .; + _LOG_A_TABBEG = .; + *(.log) + LOG_A_TABEND = .; + _LOG_A_TABEND = .; + LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + _LOG_A_TABLEN = (. - _LOG_A_TABBEG) / 24; + } > IRAM + + .printf (COPY): {} > IRAM + + /* LOG_system buffer */ + .LOG_system$buf: align = 0x100 fill = 0xffffffff {} > IRAM + + .pip: { + PIP_A_TABBEG = .; + _PIP_A_TABBEG = .; + *(.pip) + PIP_A_TABEND = .; + _PIP_A_TABEND = .; + PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + _PIP_A_TABLEN = (. - _PIP_A_TABBEG) / 100; + } > IRAM + + .sts: { + STS_A_TABBEG = .; + _STS_A_TABBEG = .; + *(.sts) + STS_A_TABEND = .; + _STS_A_TABEND = .; + STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + _STS_A_TABLEN = (. - _STS_A_TABBEG) / 16; + } > IRAM + + .sys: {} > IRAM + + .IRAM$heap: { + IRAM$B = .; + _IRAM_base = .; + IRAM$L = 0x8000; + _IRAM_length = 0x8000; + . += 0x8000; + } > IRAM + + .SDRAM$heap: { + SDRAM$B = .; + _SDRAM_base = .; + SDRAM$L = 0x8000; + _SDRAM_length = 0x8000; + . += 0x8000; + } > SDRAM + +} + diff --git a/uP/TP3_DSP/ex4b/ex4bcfg.h b/uP/TP3_DSP/ex4b/ex4bcfg.h new file mode 100755 index 0000000..a1527e2 --- /dev/null +++ b/uP/TP3_DSP/ex4b/ex4bcfg.h @@ -0,0 +1,37 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex4b.cdb */ + +#define CHIP_6713 1 + +/* Include Header Files */ +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern far HST_Obj RTA_fromHost; +extern far HST_Obj RTA_toHost; +extern far SWI_Obj KNL_swi; +extern far SWI_Obj SWI_ex4b; +extern far TSK_Obj TSK_idle; +extern far LOG_Obj LOG_system; +extern far STS_Obj IDL_busyObj; +extern far STS_Obj STS_algo; +extern far TIMER_Config timer1Cfg; +extern far TIMER_Handle hTimer1; +extern far void CSL_cfgInit(); + +#ifdef __cplusplus +} +#endif /* extern "C" */ diff --git a/uP/TP3_DSP/ex4b/ex4bcfg_c.c b/uP/TP3_DSP/ex4b/ex4bcfg_c.c new file mode 100755 index 0000000..4401ac9 --- /dev/null +++ b/uP/TP3_DSP/ex4b/ex4bcfg_c.c @@ -0,0 +1,41 @@ +/* Do *not* directly modify this file. It was */ +/* generated by the Configuration Tool; any */ +/* changes risk being overwritten. */ + +/* INPUT ex4b.cdb */ + +/* Include Header File */ +#include "ex4bcfg.h" + + +#ifdef __cplusplus +#pragma CODE_SECTION(".text:CSL_cfgInit") +#else +#pragma CODE_SECTION(CSL_cfgInit,".text:CSL_cfgInit") +#endif + + +#ifdef __cplusplus +#pragma FUNC_EXT_CALLED() +#else +#pragma FUNC_EXT_CALLED(CSL_cfgInit) +#endif + +/* Config Structures */ +TIMER_Config timer1Cfg = { + 0x000003C0, /* Control Register (CTL) */ + 0x0015752A, /* Period Register (PRD) */ + 0x00000000 /* Counter Register (CNT) */ +}; + +/* Handles */ +TIMER_Handle hTimer1; + +/* + * ======== CSL_cfgInit() ======== + */ +void CSL_cfgInit() +{ + hTimer1 = TIMER_open(TIMER_DEV1, TIMER_OPEN_RESET); + TIMER_config(hTimer1, &timer1Cfg); +} diff --git a/uP/TP_x86/TP02/ex2.asm b/uP/TP_x86/TP02/ex2.asm new file mode 100755 index 0000000..b61fe7f --- /dev/null +++ b/uP/TP_x86/TP02/ex2.asm @@ -0,0 +1,118 @@ + +page 60,80 +title Exercice II + + + +name ex2 + + +; Procedure de retour au dos +extrn dos:far + + +pile segment stack 'stack' ;Ouverture et déclaration d'un segment de nom pile avec + ;l'attribut stack et le class name 'stack' +dw 100 dup (?) ;On réserve 100 mots pour la pile. +pile ends ;Fermeture du segment. + +; ----------------------------------------------- + +data segment ;Les directives "segment" et "ends" servent à définir une partie ou la + ;totalité d'un segment dont le nom est ici "data". Le contenu du segment + ;correspond aux instructions et/ou aux initialisations et réservations + ;de mémoire qui apparaissent entre "segment" et "ends". +i db ? ;Réservation mémoire pour une variable de nom "i" et de type byte. +j db ? ; +z dw 1000 ; + +tab1 db 100 dup (?) +tab2 db 100 dup (?) +data ends ;Fermeture du segment de nom data. + +; ------------------------------------------------ + +code segment ;Ouverture d'un segment de nom "code". +assume cs:code,ds:data ;La directive assume permet à l'assembleur de savoir quels sont les + ;segments pointés par les registres de segment pendant l'exécution des + ;instructions qui suivent cette directive assume. Ici, par cette + ;directive, le programmeur s'engage à ce que les registres CS et DS + ;pointent respectivement les segments de nom "code" et "data". + +start: ;Utilisation d'une étiquette. Ici, "start" représente l'adresse de la + ;première instruction à exécuter. Cette étiquette est indispensable et + ;sera à nouveau utilisée avec la directive end. + +mov ax,data ;Initialisation -indispensable- du registre DS conformément à ce qui a +mov ds,ax ;été déclaré ci-dessus avec la directive assume. + +;i = 03 +;***** +mov i,03 + +;i++ +;***** +inc i ;incremente i + +;Comparer j avec 26 +;******************** +cmp j,26 + +;j=i +;****** +mov al,i +mov j,al + + +;j=8 bits de poids fort de z +;***************************** +mov ax,z +mov j,ah + + +;DH=tab1(0) +;********** +mov dh,tab1[0] + +;tab2(99) = 55h +;**************** +mov tab2[99],55h + + +;Comparer tab1(i) avec 30 +;************************* +mov bl,i +mov bh,0 +cmp tab1[bx],30 + + +;Comparer tab1(i) avec tab2(j) +;******************************* +mov bl,j +mov bh,0 +mov al,tab2[bx] +mov bl,i +cmp tab1[bx],al + +;CX=tab2(i) +;*********** +mov cl,tab2[bx] ; bx = i +mov ch,0 + +;tab2(13) = tab2(23) +;********************* +mov al,tab2[23] +mov tab2[13],al + +;i = i multiplie par 4 en effectuant un decallage +;************************************************* +mov cl,2 +shl i,cl + +call dos ;Retour à MS-DOS. + +code ends ;Fermeture du segment de nom "code" + + ;La dernière d'un fichier source doit toujours correspondre à la + ;directive "end". Si, comme ici, il s'agit du programme principal +end start ;(main module), il faut spécifier l'adresse de départ, ici: "start". diff --git a/uP/TP_x86/TP04/ex4.asm b/uP/TP_x86/TP04/ex4.asm new file mode 100755 index 0000000..02e38c0 --- /dev/null +++ b/uP/TP_x86/TP04/ex4.asm @@ -0,0 +1,83 @@ +page 60,95 +title Solution Exercice 4 + + +; ******************************************** +; * SOLUTION DE L'EXERCICE NUMERO 4 * +; ******************************************** + + +name ex4 + +extrn dos : far +extrn co : far +extrn read:far, write:far + +CR equ 0dh ;Code ASCII de carriage return +LF equ 0ah ;Code ASCII de line feed + +pile segment stack 'stack' +dw 20 dup (?) +pile ends + + +data segment +bidon db "ERREUR" ;Ne sert à rien dans le cadre de cet exercice. +buffer db 132 dup (?) ;pour stocker les caracteres entres au clavier. +data ends + + +code segment +assume cs:code , ds:data, es:data + +messag db "Entrer une ligne:", CR, LF + +start: mov ax,data + mov ds,ax ;Initialisation de ds. + mov es,ax ;Initialisation de es. + + mov ax,seg messag + push ax + mov ax,offset messag + push ax ;passage de parametres avant l'appel de la + ;procedure WRITE. + + call write + + mov ax,seg buffer + push ax + mov ax,offset buffer + push ax ;passage de parametres avant l'appel de READ + + + call read + + + +; recherche de CR + cld ; Flag D = 0 + mov cx, length buffer ; CX = nombre d'elements dans le buffer + mov di, offset buffer ; DI = offset buffer + mov al, CR + repnz scas buffer + + + mov si,di + dec si + mov ax,di + sub ax, offset buffer + mov cx, ax + + std +boucle: lods buffer + call co + loop boucle + + + + call dos + +code ends + +end start + diff --git a/uP/TP_x86/TP05/ex5.asm b/uP/TP_x86/TP05/ex5.asm new file mode 100755 index 0000000..be8a823 --- /dev/null +++ b/uP/TP_x86/TP05/ex5.asm @@ -0,0 +1,279 @@ +page 60,95 +title Solution Exercice 5 + + +; ******************************************** +; * SOLUTION DE L'EXERCICE NUMERO 5 * +; ******************************************** + + + + + +; TODO question 3, l'affichage du pourcentage n'est pas correct + + + +name ex5 + +extrn dos : far +extrn co : far +extrn read:far, write:far + +CR equ 0dh ;Code ASCII de carriage return +LF equ 0ah ;Code ASCII de line feed + +pile segment stack 'stack' +dw 20 dup (?) +pile ends + + +data segment +bidon db "ERREUR" ;Ne sert à rien dans le cadre de cet exercice. +buffer db 256 dup (?) ;pour stocker les caracteres entres au clavier. +tablo db 26 dup (0) ;pour stocker le nombre d'occurences des lettres +cont db 1 ;continuer ? +max db 0 ;stockage du nombre d'occurences de caractere max +cmax db 0 ;caractere le plus tape +total db 0 ;nombre total de caracteres lus +data ends + + +code segment +assume cs:code , ds:data, es:data + +messag db "Entrer une ligne:", CR, LF + +start: mov ax,data + mov ds,ax ;Initialisation de ds. + mov es,ax ;Initialisation de es. + +deb_p: call raz + mov max,0 + mov total,0 + + mov ax,seg messag + push ax + mov ax,offset messag + push ax ;passage de parametres avant l'appel de la + ;procedure WRITE. + + call write + + mov ax,seg buffer + push ax + mov ax,offset buffer + push ax ;passage de parametres avant l'appel de READ + + + call read + + + +; comptage des caracteres + cld ; clear direction flag + mov si,offset buffer + mov di,si + +boucle: + mov ah,0 + lods buffer + cmp al,61h + jl test_esc + cmp al,7Ah + jg test_esc + sub al,61h + mov bx,ax + inc tablo[bx] + inc total + + mov al,max + cmp tablo[bx],al + jle suite + + ; on a depasse le nb d'occurences max, maj de max + mov al,tablo[bx] + mov max,al + add bl,61h + mov cmax,bl + + jmp suite + +test_esc: + cmp al,1bH + jne suite + mov cont,0 + + +suite: + mov ax,CR + scas buffer + jnz boucle + + + call aff + call prc + + + cmp cont,1 + je deb_p + + call dos + + +; affiche le tableau de stats +; +aff proc near + ; BX = index dans le tableau + ; AX = Caractere a afficher + ; CX = variable de boucle (loop et rep) + ; DX = sauvegarde de CX + + mov cx,length tablo + +debut: mov bx,length tablo + sub bx,cx + + + mov dx,cx + mov ch,0 + mov cl,tablo[bx] + cmp cl,0 + je fin + + ; normalisation + push dx + mov ax,60 + mul cx + mov dx,0 + mov cl,max + div cx + mov cx,ax + pop dx + + cmp cx,0 + je fin + + mov ax,bx + add ax,'a' + call co + + mov ax,' ' + call co + + mov al,'*' +c_loop: call co + loop c_loop + mov al,CR + call co + mov al,LF + call co + +fin: mov cx,dx ; restauration de CX + + loop debut + ret +aff endp + + + +raz proc near + mov cx,length tablo + mov bx,0 + +braz: + mov tablo[bx],0 + inc bx + loop braz + ret +raz endp + + +; procedure d'affichage du pourcentage +prc proc near + mov al,max + cmp al,0 + je aff_fin + + + mov al,cmax + call co + mov al,' ' + call co + + mov al,max + mov dl,100 + mul dl ; AX = AL * DL (nombre max * 100) + + mov cl,total + div cl ; AL = AX / CL ((nombre max * 100) / total) + mov ah,0 ; Mise a zero du reste + + cmp al,100 ; 100 % ? + je aff100 + + mov cl,10 + div cl ; Conversion en decimal + + add al,30H ; Conversion en ASCII + call co + + mov al,ah + add al,30H ; Conversion en ASCII + call co + jmp aff_s + +aff100: mov al,'1' + call co + mov al,'0' + call co + mov al,'0' + call co + + +aff_s: mov al,'%' + call co + mov al,CR + call co + mov al,LF + call co + +aff_fin: + ret +prc endp + + +; procedure de normalisation du tableau +normal proc near + + mov cx,length tablo + mov bx,0 + mov al,tablo[bx] + mov dx,0 +bnorm: + cmp tablo[bx],al + jle pa_plus + mov al,tablo[bx] + mov dx,bx +pa_plus: + inc bx + + loop bnorm + + ; on a le nb d'occurence max dans al + ; et l'indice dans tablo de cet occurence max + + ; maintenant parcours du tableau pour normaliser + mov cx,length tablo + +bnorm2: + + + ret +normal endp + + +code ends + +end start + diff --git a/uP/TP_x86/TP06/dump.asm b/uP/TP_x86/TP06/dump.asm new file mode 100755 index 0000000..d6ad715 --- /dev/null +++ b/uP/TP_x86/TP06/dump.asm @@ -0,0 +1,78 @@ + +extrn co:far +public dump + +CR equ 0dh +LF equ 0ah + + + + + +code segment + + assume cs:code + +dump proc far + push bp ; sauve bp + mov bp, sp + add bp, 6 ; bp pointe sur le dernier parametre + + mov cx, [bp + 4] ; init du compteur de boucle avec la taille du tableau + mov si, [bp + 2] + mov ds, [bp] ; le segment es contient la zone a dumper + mov bx, offset table + mov dx, 0 + +boucle: + + mov al, ds:[si] + mov ah, al + shr al, 1 + shr al, 1 + shr al, 1 + shr al, 1 + + xlat table + call co + mov al, ah + and al, 0fh + xlat table + call co + inc si + inc dx + + mov al,' ' + call co + + and dx,0fh + jnz suite + + + mov al,CR + call co + mov al,LF + call co + +suite: loop boucle + + pop bp ; restaure bp + + ret 6 +dump endp + + +table db "0123456789ABCDEF" + +code ends + + +end + + + + + + + + diff --git a/uP/TP_x86/TP06/ex6.asm b/uP/TP_x86/TP06/ex6.asm new file mode 100755 index 0000000..94816d8 --- /dev/null +++ b/uP/TP_x86/TP06/ex6.asm @@ -0,0 +1,45 @@ +name ex6 +extrn dump:far +extrn dos:far + +pile segment stack 'stack' +dw 50 dup (?) +pile ends + + + +data segment + +bidon db 10 dup(55h) +test_dump db 5 dup(00,01,02,03,04,05,06,07,08,09,0ah,0bh,0ch,0dh,0eh,0fh) + db 5 dup(80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh) +test_end db 55h + +data ends + + + + +;Programme principal +;******************* + + +code segment + +assume cs:code, ds:data + +start: + ; appel de la procedure dump(segment, offset, taille) + + mov ax, 160 + push ax + mov ax, offset test_dump + push ax + mov ax, seg test_dump + push ax + call dump + call dos + +code ends + +end start diff --git a/uP/TP_x86/TP06/l6.bat b/uP/TP_x86/TP06/l6.bat new file mode 100755 index 0000000..e71abb5 --- /dev/null +++ b/uP/TP_x86/TP06/l6.bat @@ -0,0 +1,2 @@ +tlink /v ex6.obj+dump.obj,ex6,ex6,l:\tp86\cons.lib + diff --git a/uP/TP_x86/TP07/tp7.asm b/uP/TP_x86/TP07/tp7.asm new file mode 100755 index 0000000..971b085 --- /dev/null +++ b/uP/TP_x86/TP07/tp7.asm @@ -0,0 +1,79 @@ +name ex7 +extrn dos:far +extrn clrcrt:far +extrn inicrt:far +extrn ci:far + +pile segment stack 'stack' +dw 50 dup (?) +pile ends + + + + +;Programme principal +;******************* + + +code segment + +assume cs:code + +start: + + call clrcrt + call inicrt + mov ds, dx ; l'extra segment correspond a la memoire ecran + + mov ah, 07h ; AX = caractere a afficher +init: mov si, 0 ; SI = pointeur de colonne + mov bx, 0 ; BX = pointeur de ligne + mov al, 0 + +debut: + mov [si+bx], ax ; Affichage du caractere + + add si, 4 ; Deux caracteres plus loin + mov cx, si + cmp cx, 160 + jne non_saut + add bx, 320 + mov si,0 +non_saut: + inc al + jnz debut + + + mov cx,ax + call ci ; met une touche dans al + cmp al,1Bh + je fin + mov ax,cx + +cbn: cmp ah,07h + jne cjb + mov ah,1Eh + jmp init + +cjb: cmp ah,1Eh + jne cnr + mov ah,40h + jmp init + +cnr: cmp ah,40h + jne cbccfgc + mov ah,0F9h + jmp init + +cbccfgc: + mov ah,07h + + + jmp init + +fin: + call dos + +code ends + +end start diff --git a/uP/TP_x86/TP08/ex8.asm b/uP/TP_x86/TP08/ex8.asm new file mode 100755 index 0000000..8153015 --- /dev/null +++ b/uP/TP_x86/TP08/ex8.asm @@ -0,0 +1,234 @@ +page 60,135 +title Chronometre 25eme ligne + + +; ************************************************* +; * * +; * Assembleur 8086 sur PC Exercice 8 * +; * * +; ************************************************* + +name e8 + +extrn ci:far ,co:far +extrn inicrt:far +extrn clrcrt:far + +CNT53 equ 43h +TIM0 equ 40h +CNT59 equ 20h +COUNT equ 100 + + +pile segment stack 'stack' +dw 50 dup (?) +pile ends + +data segment +h10 db '9' ;Dizaine d'heure en ASCII +h db '9:' ;Unité d'heure suivi de ':' en ASCII +m10 db '5' ;Dizaine de minutes en ASCII +m db '9:' ;Unité de minute suivi de ':' en ASCII +s10 db '5' ;Dizaine de seconde en ASCII +s db '9' ;Unité de seconde en ASCII + +it8 dd ? ;Sauvegarde du vecteur d'interruption INT8 de MS-DOS +it23 dd ? ;Sauvegarde du vecteur d'interruption INT23H de MS-DOS + +nit db 1 ;Compteur d'interruption de type 8. +memvid dw ? ;Segment de memoire video +data ends +;------------------------------------------------------------------------------- + +code segment +assume cs:code,ds:data + +start: cli ;Masquer l'entree INTR du 8086 + mov ax,data + mov ds,ax ;DS permet d'acceder aux variables du segment data + + call clrcrt ;Effacer l'ecran + call inicrt + mov memvid,dx ;Memoire video + + ;Sauvegarde des vecteurs d'interruption de MS-DOS + ;------------------------------------------------ + mov al,8 + mov ah,35h + int 21h ;Le vecteur d'interruption numero 8 est placé dans ES:BX + mov word ptr it8,bx + mov word ptr it8+2,es + + mov al,23h + mov ah,35h + int 21h ;Le vecteur d'interruption numero 23h est placé dans ES:BX + mov word ptr it23,bx + mov word ptr it23+2,es + + + ;Mise en place de nos propres vecteurs d'interruption + ;---------------------------------------------------- + push ds + + mov al,8 + mov bx,seg ittim + mov ds,bx + mov dx,offset ittim + mov ah,25h + int 21h ;Initialisation du vecteur numero 8 avec DS:DX + + mov al,23h + mov bx,seg itbrk + mov ds,bx + mov dx,offset itbrk + mov ah,25h + int 21h ;Initialisation du vecteur numero 23h avec DS:DX + + pop ds + + ;Programmation du timer0 du 8253 : + ;--------------------------------- + mov al,00110110b ;tim0 => 2 octets ,mode 3, binaire + out CNT53,al + mov al,9ch + out TIM0,al + mov al,2eh + out TIM0,al ;Pour obtenir une IT toutes les 10 ms + + sti + + ;Programme principal + ;------------------- + +always: call ci + jmp always + + +; ************************************ +; * Programme d'interruption Timer * +; ************************************ + +; Le temps affiché varie de 00:00:00 a 99:59:59, puis repasse a 00:00:00 une +;seconde plus tard. + +ittim: push ax + push bx + push cx + push dx + push si + push di + push ds + push es + + mov ax,data + mov ds,ax ;Au cas ou ci modifie ds + + + + dec nit ;On n'intervient que toutes les secondes cad toutes les 100 IT + jz non_saut + jmp fin + +non_saut: + + inc s + cmp s, '9' + jle fin_inc + mov s, '0' + inc s10 + cmp s10, '5' + jle fin_inc + mov s10,'0' + inc m + cmp m, '9' + jle fin_inc + mov m,'0' + inc m10 + cmp m10, '5' + jle fin_inc + mov m10, '0' + inc h + cmp h, '9' + jle fin_inc + mov h,'0' + inc h10 + cmp h10,'9' + jle fin_inc + mov h10,'0' + + +fin_inc: + + mov es,memvid + mov cx,8 + mov bx,0 + mov di,0 +aff: mov al,[h10+di] + mov es:[3984+bx],al + add bx,2 + inc di + loop aff + + + mov nit,COUNT + +fin: mov al,20h + out CNT59,al ;Envoi d'un EOI non specifique au 8259A + pop es + pop ds + pop di + pop si + pop dx + pop cx + pop bx + pop ax + sti + iret + +; ******************************************** +; * Programme d'interruption pour CTRL+BREAK * +; ******************************************** + +itbrk: nop + push ax + push bx + push ds + + ;Restitution des vecteurs d'interruptions de MS-DOS + ;-------------------------------------------------- + xor ax,ax + mov es,ax ;es=0 pour acceder à la table des vecteurs. + mov ax,data ;ds pointe sur le segment data pour pouvoir acceder aux sauvegardes des vecteurs + mov ds,ax ;des vecteurs d'interruption. + + push ds + lds bx,it8 ;DS:BX = vecteur INT8 MS-DOS + mov es:[4*8h],bx + mov es:[(4*8h)+2],ds + + pop ds + lds bx,it23 ;DS:BX = vecteur INT23 MS-DOS + mov es:[4*23h],bx + mov es:[(4*23h)+2],ds + + ;Reprogrammation du timer0 conformément à MS-DOS + ;----------------------------------------------- + xor al,al + out TIM0,al + out TIM0,al ;Il faut charger le timer avec 0000 + + call clrcrt ;Effacer l'ecran + + ;Initialisation de es pour le jmp inter-segment + ;---------------------------------------------- + mov ax,data + mov es,ax + + pop ds + pop bx + pop ax + jmp es:dword ptr it23 + +code ends +end start + diff --git a/uP/TP_x86/TP09/ex9.asm b/uP/TP_x86/TP09/ex9.asm new file mode 100755 index 0000000..7dc82de --- /dev/null +++ b/uP/TP_x86/TP09/ex9.asm @@ -0,0 +1,281 @@ +page 60,135 +title melodie + + +; ************************************************* +; * * +; * Assembleur 8086 sur PC Exercice 9 * +; * * +; ************************************************* + +name e9 + +extrn ci:far ,co:far +extrn inicrt:far +extrn clrcrt:far + +CNT53 equ 43h +TIM0 equ 40h +CNT59 equ 20h + + +TIM2 equ 42h +CNT53_2 equ 43h +PB equ 61h +TEMPO equ 100 +NB_NOTE equ 70 ; = 2 x le nb de note - 1 (car 2 octet par note) + + + +pile segment stack 'stack' +dw 50 dup (?) +pile ends + +data segment + +it8 dd ? ;Sauvegarde du vecteur d'interruption INT8 de MS-DOS +it23 dd ? ;Sauvegarde du vecteur d'interruption INT23H de MS-DOS + +nit db 1 ;Compteur d'interruption de type 8. +note db 0 ;Note en cours + +data ends +;------------------------------------------------------------------------------- + +code segment +assume cs:code,ds:data + +start: cli ;Masquer l'entree INTR du 8086 + mov ax,data + mov ds,ax ;DS permet d'acceder aux variables du segment data + + + ;Sauvegarde des vecteurs d'interruption de MS-DOS + ;------------------------------------------------ + mov al,8 + mov ah,35h + int 21h ;Le vecteur d'interruption numero 8 est placé dans ES:BX + mov word ptr it8,bx + mov word ptr it8+2,es + + mov al,23h + mov ah,35h + int 21h ;Le vecteur d'interruption numero 23h est placé dans ES:BX + mov word ptr it23,bx + mov word ptr it23+2,es + + + ;Mise en place de nos propres vecteurs d'interruption + ;---------------------------------------------------- + push ds + + mov al,8 + mov bx,seg ittim + mov ds,bx + mov dx,offset ittim + mov ah,25h + int 21h ;Initialisation du vecteur numero 8 avec DS:DX + + mov al,23h + mov bx,seg itbrk + mov ds,bx + mov dx,offset itbrk + mov ah,25h + int 21h ;Initialisation du vecteur numero 23h avec DS:DX + + pop ds + + ;Programmation du timer0 du 8253 : + ;--------------------------------- + mov al,00110110b ;tim0 => 2 octets ,mode 3, binaire + out CNT53,al + mov al,9ch + out TIM0,al + mov al,2eh + out TIM0,al ;Pour obtenir une IT toutes les 10 ms + + + ;Programme principal + ;------------------- + + ; initialisation du timer 2 em mode 3, + ; 2 octet, comptage binaire + + mov al, 10110110b + out CNT53_2, al + + + ; activation des lignes pb0 et pb1 + in al, PB + or al, 00000011b + out PB, al + + + sti + +always: call ci + jmp always + + +; ************************************ +; * Programme d'interruption Timer * +; ************************************ + + + +ittim: push ax + push bx + push cx + push dx + push si + push di + push ds + push es + + mov ax,data + mov ds,ax ; Au cas ou ci modifie ds + + + + dec nit ;On n'intervient que toutes les secondes cad toutes les 100 IT + jz non_saut + jmp fin + +non_saut: + + mov al, note ; On recupere la note courante + mov ah, al + mov bx, offset gamme + xlat byte ptr gamme + xchg al, ah + inc al + mov dl,al ; sauvegarde de note courante + 1 + xlat byte ptr gamme ; la frequence de la note courante est recuperee + xchg al,ah + out TIM2, al + xchg al,ah + out TIM2, al ; reglage freq timer2 + inc dl ; increment de la note (note courante + 2) + mov note, dl ; sauvegarde de la nouvelle note courante + mov nit, TEMPO + cmp dl, NB_NOTE + jne fin + + mov note, 0 ; redemarrage des gammes + +fin: mov al,20h + out CNT59,al ;Envoi d'un EOI non specifique au 8259A + pop es + pop ds + pop di + pop si + pop dx + pop cx + pop bx + pop ax + sti + iret + +; ******************************************** +; * Programme d'interruption pour CTRL+BREAK * +; ******************************************** + +itbrk: nop + push ax + push bx + push ds + + ;Restitution des vecteurs d'interruptions de MS-DOS + ;-------------------------------------------------- + xor ax,ax + mov es,ax ;es=0 pour acceder à la table des vecteurs. + mov ax,data ;ds pointe sur le segment data pour pouvoir acceder aux sauvegardes des vecteurs + mov ds,ax ;des vecteurs d'interruption. + + push ds + lds bx,it8 ;DS:BX = vecteur INT8 MS-DOS + mov es:[4*8h],bx + mov es:[(4*8h)+2],ds + + pop ds + lds bx,it23 ;DS:BX = vecteur INT23 MS-DOS + mov es:[4*23h],bx + mov es:[(4*23h)+2],ds + + ;Reprogrammation du timer0 conformément à MS-DOS + ;----------------------------------------------- + xor al,al + out TIM0,al + out TIM0,al ;Il faut charger le timer avec 0000 + + + ; mort au timer 2 + in al, PB + and al, 11111100b + out PB, al + + ;Initialisation de es pour le jmp inter-segment + ;---------------------------------------------- + mov ax,data + mov es,ax + + pop ds + pop bx + pop ax + jmp es:dword ptr it23 + + +gamme dw 4561, 4305, 4063, 3835, 3620, 3417, 3225, 3044, 2873, 2712, 2560, 2416 + dw 2280, 2152, 2032, 1918, 1810, 1708, 1612, 1522, 1437, 1356, 1280, 1208 +gamme2 dw 1140, 1076, 1016, 959, 905, 854, 806, 761, 718, 678, 640, 604 + + +code ends +end start + + + +boucle: + + mov al, ds:[si] + mov ah, al + shr al, 1 + shr al, 1 + shr al, 1 + shr al, 1 + + xlat table + call co + mov al, ah + and al, 0fh + xlat table + call co + inc si + inc dx + + mov al,' ' + call co + + and dx,0fh + jnz suite + + + mov al,CR + call co + mov al,LF + call co + +suite: loop boucle + + pop bp ; restaure bp + + ret 6 +dump endp + + +table db "0123456789ABCDEF" + +code ends + + +end diff --git a/uP/TP_x86/TP10/ex10.asm b/uP/TP_x86/TP10/ex10.asm new file mode 100755 index 0000000..d263d5f --- /dev/null +++ b/uP/TP_x86/TP10/ex10.asm @@ -0,0 +1,181 @@ +page 60,135 +title Interruption clavier + + +; ************************************************* +; * * +; * Assembleur 8086 sur PC Exercice 10 * +; * * +; ************************************************* + + + + + + + +name e10 + +extrn ci:far ,co:far +extrn dos:far + + +CNT53 equ 43h +TIM0 equ 40h +CNT59 equ 20h +COUNT equ 100 +PA_8255 equ 60h +PB_8255 equ 61h + +pile segment stack 'stack' +dw 50 dup (?) +pile ends + + + +data segment +it9 dd ? ;Sauvegarde du vecteur d'interruption INT9 (clavier) +touche db ? ;contenu du port a du 8255 (code touche frappee) +statkb db 0 ;flag, mis a 1 des qu'une touche est frappee +data ends +;------------------------------------------------------------------------------- + +code segment +assume cs:code,ds:data + +start: cli ;Masquer l'entree INTR du 8086 + mov ax,data + mov ds,ax ;DS permet d'acceder aux variables du segment data + + + ;Sauvegarde des vecteurs d'interruption de MS-DOS + ;------------------------------------------------ + mov al,9 + mov ah,35h + int 21h ;Le vecteur d'interruption numero 9 est placé dans ES:BX + mov word ptr it9,bx + mov word ptr it9+2,es + + + ;Mise en place de nos propres vecteurs d'interruption + ;---------------------------------------------------- + push ds + + mov al,9h + mov bx,seg itclav + mov ds,bx + mov dx,offset itclav + mov ah,25h + int 21h ;Initialisation du vecteur numero 9 avec DS:DX + + pop ds + + + ;Programmation du 8255 : gestion clavier + ;--------------------------------- + in al, PB_8255 + and al, 01111111b ;mise du bit 7 a 0 + or al, 01000000b ;mise du bit 6 a 1 + out PB_8255, al + + sti + + ;Programme principal + ;------------------- + +boucle: call key + jnc boucle + call co + jmp boucle + + + + +; ******************************************** +; * Programme d'interruption clavier * +; ******************************************** + + +itclav: + + push ax +; push bx +; push cx +; push dx +; push si +; push di + push ds +; push es + + ; Restitution du segment de donnees + mov ax,data + mov ds,ax + + ; lire le code de la touche frappee + in al,PA_8255 + mov touche,al + + mov statkb,1 + + ; acknowledgememt + in al, PB_8255 + or al, 10000000b + out PB_8255, al + and al, 01111111b + out PB_8255, al + + ; envoi d'un EOI non specifique + mov al, 20h + out CNT59, al + + + cmp touche,1 + jne nesc + + ;Restitution des vecteurs d'interruptions de MS-DOS + ;-------------------------------------------------- + xor ax,ax + mov es,ax ;es=0 pour acceder à la table des vecteurs. + mov ax,data ;ds pointe sur le segment data pour pouvoir acceder aux sauvegardes des vecteurs + mov ds,ax ;des vecteurs d'interruption. + + push ds + lds bx,it9 ;DS:BX = vecteur INT9 MS-DOS + mov es:[4*9h],bx + mov es:[(4*9h)+2],ds + pop ds + + + call dos + + + +nesc: +; pop es + pop ds +; pop di +; pop si +; pop dx +; pop cx +; pop bx + pop ax + sti + iret + + + +key proc near + mov al,statkb + add al,0FFh ; CF = 1 SSI statkb > 0 + jnc nc + mov statkb,0 + mov al,touche + +nc: + ret +key endp + + +code ends +end start + diff --git a/uP/TP_x86/TP10/ex10_2.asm b/uP/TP_x86/TP10/ex10_2.asm new file mode 100755 index 0000000..1ab0ce7 --- /dev/null +++ b/uP/TP_x86/TP10/ex10_2.asm @@ -0,0 +1,208 @@ +page 60,135 +title Interruption clavier + + +; ************************************************* +; * * +; * Assembleur 8086 sur PC Exercice 10 * +; * * +; ************************************************* + + + + + + + +name e10 + +extrn ci:far ,co:far +extrn dos:far + + +CNT53 equ 43h +TIM0 equ 40h +CNT59 equ 20h +COUNT equ 100 +PA_8255 equ 60h +PB_8255 equ 61h + +pile segment stack 'stack' +dw 50 dup (?) +pile ends + + + +data segment +it9 dd ? ;Sauvegarde du vecteur d'interruption INT9 (clavier) +touche db ? ;contenu du port a du 8255 (code touche frappee) +ctrl db 0 ;touche controle maintenue ? +statkb db 0 ;flag, mis a 1 des qu'une touche est frappee +data ends +;------------------------------------------------------------------------------- + +code segment +assume cs:code,ds:data + +start: cli ;Masquer l'entree INTR du 8086 + mov ax,data + mov ds,ax ;DS permet d'acceder aux variables du segment data + + + ;Sauvegarde des vecteurs d'interruption de MS-DOS + ;------------------------------------------------ + mov al,9 + mov ah,35h + int 21h ;Le vecteur d'interruption numero 9 est placé dans ES:BX + mov word ptr it9,bx + mov word ptr it9+2,es + + + ;Mise en place de nos propres vecteurs d'interruption + ;---------------------------------------------------- + push ds + + mov al,9h + mov bx,seg itclav + mov ds,bx + mov dx,offset itclav + mov ah,25h + int 21h ;Initialisation du vecteur numero 9 avec DS:DX + + pop ds + + + ;Programmation du 8255 : gestion clavier + ;--------------------------------- + in al, PB_8255 + and al, 01111111b ;mise du bit 7 a 0 + or al, 01000000b ;mise du bit 6 a 1 + out PB_8255, al + + sti + + ;Programme principal + ;------------------- + +boucle: call key + jnc boucle + call co + jmp boucle + + + + +; ******************************************** +; * Programme d'interruption clavier * +; ******************************************** + + +itclav: + + push ax + push ds + + ; Restitution du segment de donnees + mov ax,data + mov ds,ax + + ; lire le code de la touche frappee + in al,PA_8255 + mov touche,al + + mov statkb,1 + + ; acknowledgememt + in al, PB_8255 + or al, 10000000b + out PB_8255, al + and al, 01111111b + out PB_8255, al + + ; envoi d'un EOI non specifique + mov al, 20h + out CNT59, al + + + cmp touche,29 ; Touche ctrl enfoncee ? + jne suite1 + mov ctrl,1 + jmp nesc + +suite1: cmp touche,157 ; Touche ctrl relachee ? + jne suite2 + mov ctrl,0 + jmp nesc + +suite2: cmp touche,46 ; Touche C enfoncee ? + jne nesc + + cmp ctrl, 1 ; CTRL + C ? + jne nesc + + + ;Restitution des vecteurs d'interruptions de MS-DOS + ;-------------------------------------------------- + xor ax,ax + mov es,ax ;es=0 pour acceder à la table des vecteurs. + mov ax,data ;ds pointe sur le segment data pour pouvoir acceder aux sauvegardes des vecteurs + mov ds,ax ;des vecteurs d'interruption. + + push ds + lds bx,it9 ;DS:BX = vecteur INT9 MS-DOS + mov es:[4*9h],bx + mov es:[(4*9h)+2],ds + pop ds + + + call dos + + + +nesc: + pop ds + pop ax + sti + iret + + + +key proc near + mov al,statkb + add al,0FFh ; CF = 1 SSI statkb > 0 + jnc nc + + mov statkb,0 + mov al,touche + mov ah,al + and al,10000000b ; Touche relachee ? + jnz nc ; Oui, on affiche pas ! + + mov al,ah + mov bx,offset scanc + xlat scanc ; Traduction scancode / char + cmp al,0 + jz nc + + stc + jmp fin + +nc: clc + +fin: ret +key endp + +; Correspondance scancodes / caracteres +scanc db 0 , 0 , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' + db '-', '=', 0 , 0 , 'q', 'w', 'e', 'r', 't', 'y', 'u' + db 'i', 'o', 'p', '[', ']', 0 , 0 , 'a', 's', 'd', 'f', 'g' + db 'h', 'j', 'k', 'l', ';','''', '`', 0 , '\', 'z', 'x', 'c' + db 'v', 'b', 'n', 'm', ',', '.', '/', 0 , '*', 0 , ' ', 0 + db 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 + db '7', '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0' + db '.', '0', '\' + db 20 dup(0) + +code ends +end start +