• Non ci sono risultati.

Architettura dell’Informazione 7. - Cascading Style Sheets (CSS) Paolo Milazzo

N/A
N/A
Protected

Academic year: 2022

Condividi "Architettura dell’Informazione 7. - Cascading Style Sheets (CSS) Paolo Milazzo"

Copied!
36
0
0

Testo completo

(1)

Architettura dell’Informazione

7. - Cascading Style Sheets (CSS)

Paolo Milazzo

Dipartimento di Informatica, Universit`a di Pisa http://pages.di.unipi.it/milazzo

milazzo di.unipi.it

Master in Turismo e ICT

A.A. 2015/2016

(2)

Sommario

1

Introduzione ai CSS

2

CSS e HTML

Usare CSS in HTML

3

La sintassi di CSS Definizione

I tag <div> e <span>

Alcune propriet` a di base

4

Il modello visuale di CSS Il box model

Il posizionamento degli elementi

(3)

Introduzione ai CSS (1)

HTML ` e nato con l’idea di descrivere i contenuti in maniera separata rispetto agli aspetti di presentazione

Le prime versioni dei browser permettevano agli utenti di definire l’aspetto dei vari elementi dei documenti HTML visualizzati (dimensione dei font, colori, ecc...)

Successivamente la diffusione e l’evoluzione dei siti web ha reso sempre pi` u importante la gestione centralizzata degli aspetti di presentazione

La possibilit` a di visualizzare documenti HTML in dispositivi di natura diversa (PC, smartphones, ecc...) ha stimolato ulteriormente la separazione tra gli aspetti di contenuto e quelli di presentazione, promouovendo l’utilizzo di linguaggi di stile specializzati

Cascading Style Sheets (CSS) ` e il linguaggio di stile che, tra le

numerose proposte, si ` e imposto come “compagno” standard di

HTML

(4)

Introduzione ai CSS (2)

Esistono diversi livelli di specifica di CSS:

CSS level 1 (1991): ` e un linguaggio di formattazione visiva abbastanza semplice. Permette di specificare caratteristiche tipografiche e di presentazione di ogni elemento di un documento HTML

CSS level 2 (1998): attualmente in versione 2.1, ` e un linguaggio di layout sofisticato e complesso

CSS level 3 ` e stata sviluppata negli ultimi anni: migliora/estende la gestione di layout sofisticati, colori, sfondi, bordi, animazioni, trasformazioni, etc...

Il supporto dei browser a CSS ` e complesso e difficile da realizzare.

Attualmente, comunque, le versioni pi` u recenti dei principali browser

suportano completamente la versione 2.1 e quasi completamente la

versione 3.

(5)

Usare CSS in HTML (1)

CSS fornisce informazioni sull’aspetto di elementi di un documento HTML descritti tramite i tag

Si basa su regole simili alla seguente:

p { font-family: Arial; font-size: 12pt; } che stabilisce che tutti per visualizzare il contenuto di tutti i tag <p>

nel documento deve essere usato font Arial di dimensione 12 punti

(6)

Usare CSS in HTML (2)

HTML prevede l’uso di CSS in (almeno) tre modi diversi:

I

Posizionato direttamente nel tag di riferimento tramite l’attributo style

I

All’interno di un tag <style>

I

Importato da un file esterno usando il tag <link>

L’ultimo modo, che prevede di importare un documento CSS (detto foglio di stile) da un file esterno, consente di scrivere il codice CSS una volta sola per tutte le pagine di un sito

I

basta importare lo stesso file in tutti documenti HTML del sito

Vediamo degli esempi....

(7)

Usare CSS in HTML (3)

CSS posizionato direttamente nel tag di riferimento tramite l’attributo style:

< h t m l >

< h e a d >

< t i t l e > P a g i n a di p r o v a < / t i t l e >

< / h e a d >

< b o d y >

< h1 s t y l e = " c o l o r : b l u e ; " > Q u e s t o t i t o l o d e v e e s s e r e blu < / h1 >

< p > C o n t e n u t o d e l l a p a g i n a di p r o v a < / p >

< / b o d y >

< / h t m l >

In questo caso la regola CSS sarebbe

h1 { color: blue; }

ma nell’attibuto style si indica solo il contenuto tra parentesi

la regola CSS si applica solo a quello specifico tag <h1>, non a tutti

gli altri

(8)

Usare CSS in HTML (4)

CSS all’interno di un tag <style>:

< h t m l >

< h e a d >

< t i t l e > P a g i n a di p r o v a < / t i t l e >

< s t y l e t y p e = " t e x t / css " >

h1 { c o l o r : b l u e ; }

< / s t y l e >

< / h e a d >

< b o d y >

< h1 > Q u e s t o t i t o l o d e v e e s s e r e blu < / h1 >

< p > C o n t e n u t o d e l l a p a g i n a di p r o v a < / p >

< / b o d y >

< / h t m l >

Stesso risultato del precendnte, ma in questo caso se ci fossero altri

tag <h1> anche il loro contenuto diventerebbe blu.

(9)

Usare CSS in HTML (5)

CSS indicato dal tag <link>:

< h t m l >

< h e a d >

< t i t l e > P a g i n a di p r o v a < / t i t l e >

< l i n k t y p e = " t e x t / css " rel = " s t y l e s h e e t " h r e f = " e x t f i l e . css " >

< / h e a d >

< b o d y >

< h1 > Q u e s t o t i t o l o d e v e e s s e r e blu < / h1 >

< p > C o n t e n u t o d e l l a p a g i n a di p r o v a < / p >

< / b o d y >

< / h t m l >

dove extfile.css ` e il seguente

h1 { c o l o r : b l u e ; }

Stesso risultato del precendnte, tutti i titoli <h1> diventano blu.

Il file extfile.css pu` o essere “linkato” anche dalle altre pagine dello

stesso sito (per uniformare l’aspetto)

(10)

Gli attributi id e class

HTML prevede che tutti i tag di un documento possano avere attributi id e class

I

id deve essere associato ad un identificativo univoco di un’occorrenza di un tag nell’intero documento (non pu` o essere ripetuto)

I

class deve essere associato ad un identificativo di classe che pu` o essere usato pi` u volte nel documento

CSS pu` o usare i valori di id e class per specificare che una regola si applica ad uno specifico elemento del documento o a tutti gli

elementi della stessa classe (vedremo...)

(11)

La sintassi di CSS (1)

Un foglio di stile CSS ` e costituito da una sequenza di regole Ogni regola consiste di un selettore e di una o pi` u dichiarazioni racchiuse tra parentesi graffe (e ogniuna terminata da “;”)

Ogni dichiarazione consiste di una propriet` a ed un valore (separati da

“:”)

selettore { propriet` a

1

:valore

1

; propriet` a

2

:valore

2

; ...}

Il selettore ` e solitamente il tag di cui la regola specifica l’aspetto Le propriet` a sono caratteristiche di stile che possono essere associate agli elementi. Sono definite dalla specifica di CSS e sono in tutto 53 per CSS level 1 e ben 121 per CSS level 2

I valori dipendono dalla propriet` a a cui sono assengati...

p { font-family:Arial; font-size:12pt; }

(12)

La sintassi di CSS (2)

selettore { propriet` a

1

:valore

1

; propriet` a

2

:valore

2

; ...}

Il selettore pu` o avere tante forme, tra cui:

Selettore di tipo. Un tag (senza parentesi <,>): body, p, table, div, span, . . .

Selettore di classe. Pu` o avere due forme E.val e E#val.

Significano che la regola si applica a tutti gli elementi E in cui gli attributi class e id, rispettivamente, sono assegnati a val.

Inoltre ci sono altri selettori (che non vediamo) per selezionare un tag che

si trova dentro un altro tag, la prima riga di un paragrafo, la prima lettera

di un paragrafo, una parola su cui ` e posizionato il mouse, ecc...

(13)

Un Esempio

< h t m l >

< h e a d >

< t i t l e > P r o v a < / t i t l e >

< s t y l e t y p e = " t e x t / css " >

li . p a r i { c o l o r : red ; } li . d i s p a r i { c o l o r : b l u e ; } p # c h i u s u r a { font - s i z e : 7 5 % ; }

< / s t y l e >

< / h e a d >

< b o d y >

< p > E s e m p i o di l i s t a c o l o r a t a : < / p >

< ul >

< li c l a s s = " d i s p a r i " > P r i m o < / li >

< li c l a s s = " p a r i " > S e c o n d o < / li >

< li c l a s s = " d i s p a r i " > T e r z o < / li >

< li c l a s s = " p a r i " > Q u a r t o < / li >

< / ul >

< p id = " c h i u s u r a " > Una f r a s e di c h i u s u r a s c r i t t a in p i c c o l o ... < / p >

< / b o d y >

< / h t m l >

(14)

Il concetto di cascata

Un concetto molto importante in CSS ` e il concetto di cascata: regole successive che si possono applicare ad un elemento del documento HTML devono essere applicate in sequenza

Ad esempio, applicando in sequenza:

I

p { font-family: Arial; font-size: 12pt; }

I

p { color: red; font-size: 11pt; }

I

p { margin-left: 15pt; color: green; } otterremo lo stesso risultato di

I

p { font-family: Arial; font-size: 11pt;

margin-left: 15pt; color: green; } Questa funzionalit` a ` e utile in particolare in due casi:

I

Quando si prevede di applicare pi` u fogli di stile (usando pi` u volte il tag

<link>) allo stesso documento HTML

I

Quando si vogliono applicare regole generali (ad esempio a tutti i tag

<p>) + regole specifiche per singoli elementi tramite l’attibuto style

(15)

I tag <div> e <span> (1)

Con CSS si possono specificare regole di presentazione da associare a qualunque tag

Talvolta, per` o, si vorrebbero definire regole da applicare

I

ad un’intera porzione del documento HTML (che potrebbero includere molti tag diversi),

F Ad esempio, per impostare il colore di sfondo di un’area del documento

I

o a un piccolo frammento di testo all’interno di un paragrafo (che potrebbe non essere delimitato da un tag)

F Ad esempio, per impostare il font di una parola in mezzo al testo

Per rendere possibile la definizione di queste regole in HTML sono

stati definiti i tag <div> e <span>

(16)

I tag <div> e <span> (2)

Il tag <div> viene usato per delimitare un’area (anche rilevante) del documento HTML a cui applicare delle regole stilistiche comuni;

Esempi di utilizzo:

I

per suddividere il documento in sezioni, ognuna delimitata da un bordo colorato

I

per isolare l’area che contiene l’indice del sito in modo da posizionarla alla sinistra della pagina

Il tag <span> viene usato per identificare un piccolo frammento (tipicamente di testo) all’interno di un paragrafo, una lista, una tabella, ecc...

Esempi di utilizzo:

I

Per creare un’effetto evidenziatore su singole parole o porzioni di frase

(17)

I tag <div> e <span> (3)

Tecnicamente, la differenza tra <div> e <span> consiste nel fatto che:

I

<div> appartiene alla categoria degli elemento di tipo block (come i paragrafi, le tabelle, ecc...) , ovvero elementi che, se usati in sequenza, vengono visualizzati uno sotto l’altro con un po’ di spazio tra uno e l’altro

I

<span> appartiene alla categoria degli elementi di tipo inline (come

<strong>, <b>, ecc...), ovvero elementi che, se usati in sequenza, vengono visualizzati uno accanto all’altro

Gli attributi id e class potranno poi essere usati per differenziare le

varie occorrenze di <div> e <span> nel documento e applicarvi regole

di stile diverse

(18)

I tag <div> e <span> (4)

Facciamo un esempio di uso di <div> e <span>:

< h t m l >

< h e a d > < t i t l e > P r o v a div e s p a n < / t i t l e > < / h e a d >

< s t y l e t y p e = " t e x t / css " >

div . t i t o l o {

text - a l i g n : c e n t e r ; c o l o r : red ;

}

s p a n # qp {

b a c k g r o u n d - c o l o r : y e l l o w ; }

< / s t y l e >

< b o d y >

< div c l a s s = " t i t o l o " >

< h1 > T i t o l o p r i n c i p a l e < / h1 >

< h2 > S o t t o t i t o l o < / h2 >

< / div >

< div c l a s s = " c o r p o " >

< p > Q u e s t o & e g r a v e ; il c o r p o del d o c u m e n t o in cui e v i d e n z i a m o

< s p a n id = " qp " > q u e s t a p a r t e < / s p a n > t r a m i t e l ’ uso del tag s p a n < / p >

< / div >

< b o d y >

< / h t m l >

(19)

I tag <div> e <span> (5)

Il risultato dell’esempio:

(20)

Un po’ di esempi (1)

Per fare un po’ di esempi consideriamo il seguente (body di) documento HTML

< b o d y >

< h1 > R i c e t t a : la < s p a n c l a s s = " p i a t t o " > p a s t a al p o m o d o r o < / s p a n > < / h1 >

< p > V e d i a m o ora c o m e p r e p a r a r e un ’ o t t i m a < s p a n c l a s s = " p i a t t o " > p a s t a al p o m o d o r o . < / s p a n > I n n a n z i t u t t o , m e t t e r e a b o l l i r e in una p e n t o l a c a p i e n t e a b b o n d a n t e a c q u a . < / p >

< p > T a g l i a r e a f e t t i n e s o t t i l i la < s p a n c l a s s = " i n g r " > c i p o l l a < / s p a n >

e s o f f r i g g e r l a con l ’ < s p a n c l a s s = " i n g r " > o l i o < / s p a n > in una p a d e l l a f i n o a q u a n d o non sar & a g r a v e ; ben d o r a t a . In s e g u i t o a g g i u n g e r e i < s p a n c l a s s = " i n g r " > p o m o d o r i < / s p a n > e il

< s p a n c l a s s = " i n g r " > b a s i l i c o < / s p a n > . < / p >

< p > Q u a n d o b o l l e l ’ acqua , s a l a r l a e v e r s a r e gli < s p a n c l a s s = " i n g r " >

s p a g h e t t i < / s p a n > . Una v o l t a che gli s p a g h e t t i s o n o cotti , s c o l a r l i e a g g i u n g e r v i il s u g o di p o m o d o r o . < / p >

< / b o d y >

(21)

Un po’ di esempi (2)

Vediamo come il browser visualizza il documento HTML:

(22)

Un po’ di esempi (3)

Primo foglio di stile:

b o d y {

b a c k g r o u n d - c o l o r : # C C F F 8 8 ; font - f a m i l y : sans - s e r i f ; }

h1 {

c o l o r : red ;

text - a l i g n : c e n t e r ; }

(23)

Un po’ di esempi (4)

Secondo foglio di stile (nota: p:first-letter ` e un selettore che indica la prima lettera di un paragrafo)

s p a n . i n g r {

b a c k g r o u n d - c o l o r : y e l l o w ; }

p : first - l e t t e r {

font - s i z e : 3 0 0 % ; f l o a t : l e f t ; }

(24)

Un po’ di esempi (5)

Terzo foglio di stile (nota: span:hover ` e il selettore che indica il tag span su cui si ` e posizionato il mouse):

s p a n . ingr , s p a n . p i a t t o {

b a c k g r o u n d - c o l o r : y e l l o w ; }

s p a n : h o v e r {

b a c k g r o u n d - c o l o r : red ; }

p : first - l e t t e r {

font - s i z e : 3 0 0 % ; f l o a t : l e f t ; }

(25)

Alcune propriet` a di base

Alcune (buona parte) delle propriet` a che si possono usare nelle regole CSS sono illustrate nell’appendice di questa lezione (slides aggiuntive sul sito del corso).

L’elenco completo delle propriet` a si trova nella specifica di CSS definita

dal consorzio W3C o in numerosi siti e tutorial sul web.

(26)

Il modello visuale di CSS (1)

Il modello visuale di CSS (ovvero l’insieme di principi riguardo la disposizione degli elementi) ` e detto Box Model

Ogni elemento (tag) di un documento HTML ` e visto come una scatola che consiste di

I

Uno spazio di margine (margin)

I

Un bordo (border) che pu` o essere trasparente, una linea continua o tratteggiata, ecc...

I

Uno spazio di separazione del contenuto dal bordo (padding)

I

Il contenuto vero e proprio del tag (content)

(27)

Il modello visuale di CSS (2)

Esistono numerose propriet` a per specificare le caratteristiche di un tag secondo il box model

Ad esempio, si possono impostare

I

larghezza e altezza dell’elemento

I

aspetto del bordo (tipo di linea, colore, spessore, ecc...)

I

dimensione del margine e del padding

I

colore di sfondo

le propriet` a si possono applicare anche a un signolo lato della

“scatola” che rappresenta il tag

la descrizione dei dettagli di queste propriet` a pu` o essere trovata

nell’appendice di questa lezione (slides aggiuntive sul sito del

corso).

(28)

Un esempio di uso del box model (1)

Riprendiamo l’esempio:

< b o d y >

< h1 > R i c e t t a : la < s p a n c l a s s = " p i a t t o " > p a s t a al p o m o d o r o < / s p a n > < / h1 >

< p > V e d i a m o ora c o m e p r e p a r a r e un ’ o t t i m a < s p a n c l a s s = " p i a t t o " > p a s t a al p o m o d o r o . < / s p a n > I n n a n z i t u t t o , m e t t e r e a b o l l i r e in una p e n t o l a c a p i e n t e a b b o n d a n t e a c q u a . < / p >

< p > T a g l i a r e a f e t t i n e s o t t i l i la < s p a n c l a s s = " i n g r " > c i p o l l a < / s p a n >

e s o f f r i g g e r l a con l ’ < s p a n c l a s s = " i n g r " > o l i o < / s p a n > in una p a d e l l a f i n o a q u a n d o non sar & a g r a v e ; ben d o r a t a . In s e g u i t o a g g i u n g e r e i < s p a n c l a s s = " i n g r " > p o m o d o r i < / s p a n > e il

< s p a n c l a s s = " i n g r " > b a s i l i c o < / s p a n > . < / p >

< p > Q u a n d o b o l l e l ’ acqua , s a l a r l a e v e r s a r e gli < s p a n c l a s s = " i n g r " >

s p a g h e t t i < / s p a n > . Una v o l t a che gli s p a g h e t t i s o n o cotti , s c o l a r l i e a g g i u n g e r v i il s u g o di p o m o d o r o . < / p >

< / b o d y >

(29)

Un esempio di uso del box model (2)

Il foglio di stile:

h1 {

text - a l i g n : c e n t e r ; }

p {

w i d t h : 300 px ; m a r g i n : 20 px a u t o ; }

s p a n . i n g r {

b o r d e r : 2 px d a s h e d red ; p a d d i n g : 0 px 10 px ; }

(30)

Il posizionamento degli elementi (1)

Il box model consente di descrivere la dimensione, posizione e spaziatura di ogni elemento di un documento HTML

Il browser legge in sequenza i vari tag del documento HTML e visualizza i contenuti disponendo le corrispondenti “scatole” (box) in uno dei seguenti modi (a seconda del tag usato):

I

Gli elementi di tipo block (es. div, p, li, ecc...) vengono disposti l’uno sotto l’altro in successione verticale

I

Gli elementi di tipo inline (es. span, strong, ecc...) vengono disposti l’uno accanto all’altro in successione orizzontale Inoltre, usando opportune proprit` a CSS si pu` o

I

Visualizzare un elemento di tipo block come se fosse inline e viceversa

I

Impostare una visualizzazione float, in cui la scatola viene spostata all’estrema sinistra o destra, lasciando che le altre scatole vi girino intorno

I

Impostare una posizione assoluta per una scatola nella finestra del

browser (eventualmente nascondendo ci` o che gi` a occupava la posizione

specificata)

(31)

Il posizionamento degli elementi (2)

La propriet` a display consente di impostare la modalit` a di visualizzazione di un elemento

I

block,inline, none (elemento non visualizzato), e altri pi` u specifici Esempio: men` u disposto in orizzontale

a {

d i s p l a y : b l o c k ;

b o r d e r : 2 px s o l i d b l a c k ; b a c k g r o u n d - c o l o r : y e l l o w ; w i d t h : 100 px ;

m a r g i n : 20 px ; p a d d i n g : 20 px ; text - a l i g n : c e n t e r ; text - d e c o r a t i o n : n o n e ; }

< a h r e f = " ... " > H o m e < / a >

< a h r e f = " ... " > D o w n l o a d s < / a >

< a h r e f = " ... " > C o n t a t t i < / a >

(32)

Il posizionamento degli elementi (3)

La propriet` a position consente di specificare il tipo di

posizionamento dell’elemento all’interno della finestra del browser.

Possibili valori:

I

static (valore di default) segue il flusso normale di visualizzazione degli elementi

I

relative consente di specificare la posizione in maniera relativa rispetto al punto in cui l’elemento sarebbe visualizzato di default

I

fixed consente di specificare una posizione fissata relativa alla finestra del browser (l’elemento non viene “scrollato via” (rimane fermo) quando si agisce sulla barra di scorrimento)

I

absolute consente di specificare una posizione con coordinate assolute all’interno dello spazio messo a disposizione dall’elemento che lo contiene

Le posizioni (assolute e relative) sono espresse tramite le propriet` a

left,top,right e bottom

(33)

Il posizionamento degli elementi (4)

div # m e n u {

w i d t h : 300 px ; h e i g h t : 300 px ; b o r d e r : s o l i d ; p o s i t i o n : f i x e d ; top : 100 px ; l e f t : 30 px ; }

div # m e n u a {

b o r d e r : s o l i d red ; w i d t h : 150 px ; p o s i t i o n : a b s o l u t e ; }

a # a1 { top : 10 px ; l e f t : 10 px ; }

a # a2 { top : 100 px ; l e f t : 100 px ; }

a # a3 { top : 200 px ; l e f t : 50 px ; }

< div id = " m e n u " >

< a id = " a1 " h r e f = " ... " > H o m e < / a >

< a id = " a2 " h r e f = " ... " > D o w n l o a d s < / a >

< a id = " a3 " h r e f = " ... " > C o n t a t t i < / a >

< / div >

(34)

Il posizionamento degli elementi (5)

Con CSS ` e possibile anche “accumulare” elementi sulla sinistra (o sulla destra) usando la propriet` a float

Impostando float:left; l’elemento viene visualizzato all’estrema sinistra, con gli altri elementi disposti attorno ad esso

Se si setta la propriet` a float per pi` u elementi questi vengono

“impilati”, sulla sinistra (o sulla destra), eventualmente disposti su pi` u righe

Gli elementi si ridispongono, se necessario, quando si ridimensiona la finestra del browser

Per evitare che gli altri elementi del documento HTML si dispongano

attorno all’elemento floating si pu` o usare la propriet` a clear

(35)

Il posizionamento degli elementi (6)

Un esempio di floating:

p {

m a r g i n : 0 px ; }

p . c i t a z i o n e {

f l o a t : l e f t ; b o r d e r : s o l i d red ; font - s t y l e : i t a l i c ; m a r g i n : 10 px ; p a d d i n g : 20 px ; }

applicato a:

< p > Un po ’ di t e s t o di r i e m p i e m e n t o o r g a n i z z a t o in p a r a g r a f i < / p >

< p c l a s s = " c i t a z i o n e " > Una c i t a z i o n e da e v i d e n z i a r e < / p >

< p > Un po ’ di t e s t o di r i e m p i e m e n t o o r g a n i z z a t o in p a r a g r a f i < / p >

< p > Un po ’ di t e s t o di r i e m p i e m e n t o o r g a n i z z a t o in p a r a g r a f i < / p >

< p > Un po ’ di t e s t o di r i e m p i e m e n t o o r g a n i z z a t o in p a r a g r a f i < / p >

(36)

Il posizionamento degli elementi (7)

Altri esempi di uso di floating:

Il sito web di questo corso include un men` u disposto alla sinistra del documento usando la propriet` a float

Il corso CSS su http://www.w3schools.com nella sezione “CSS

floating” mostra alcuni esempi interessanti sull’uso di float

Riferimenti

Documenti correlati

IMPEGNO DI SPESA PER ATTOVITA' CORRELATE ALLO SVOLGIMENTO DEL TURNO DI BALLOTTAGGIO DEL 19 GIUGNO 20. 23-AFFIDAMENTO IN ECONOMIA - AFFIDAMENTO

&lt;oggetto&gt;IMPEGNO DI SPESA PER ATTIVITA' CORRELATE ALLO SVOLGIMENTO DELLE ELEZIONI AMMINISTRATIVE 05/06/2016&lt;/oggetto&gt;. &lt;sceltaContraente&gt;23-AFFIDAMENTO IN ECONOMIA

[r]

[r]

õôõôõôõôõô õôõô õô õô

• This means that it is possible to define parametric

17 563 ./0123453.67893:2;??89@A=B3C83:DEFG.3/=@3F=@2113L/CA2=C;3MN3O3PQR STTUTTVUWXYZ[Y\UT]ZWTUY^YWZ_Y`ab cZV]dUXUY\UT]ZWTUY e fg\XhgdY\UT]ZWTUY ijY`ikb lXgmdUYnhTUgTUY

H eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee W8eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeAf U8 6HI eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeW... g7