PPT - Universität Paderborn

Werbung
HEINZ NIXDORF INSTITUT
Universität Paderborn
Algorithmen und Komplexität
Algorithmen für
Peer-to-Peer-Netzwerke
Sommersemester 2004
02.07.2004
11. Vorlesung
Christian Schindelhauer
1
HEINZ NIXDORF INSTITUT
ORGANISATION
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Abschlussveranstaltung:
Terminvorschläge:
Freitag
Freitag
Dienstag
Mögliche Veranstaltungsform:
1. Barbecue/Grillen
2. Fußball
3. Basketball
4. Kegeln/Bowlen
5. Wandern
11. Radtour
13. Kino
30.07. 10-15 Uhr
30.07. 19-23 Uhr
03.08. 20-24 Uhr
6. Fahrt mit Almetalbahn 01.08.
7. Freibadbesuch
8. Paintball
9. Kartbahn
10. Wasserski
12. Bungee-Springen
14. ...
Algorithmen für Peer-to-PeerNetzwerke
2
ORGANISATION
HEINZ NIXDORF INSTITUT
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Mündliche Prüfung:
Termine:
13.-17.09.2004 (10-17 Uhr)
04.-08.10.2004 (10-17 Uhr)
Angebot:
Öffentliche mündliche Prüfung am 30.07.2004 09:00 Uhr
mit einem freiwilligen Teilnehmer
(als Abschluss der Vorlesung)
Algorithmen für Peer-to-PeerNetzwerke
3
HEINZ NIXDORF INSTITUT
Kapitel III
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Algorithmen für Peer-toPeer-Netzwerke
Epidemische
Informationsausbreitung
und
Datenaggregation
Algorithmen für Peer-to-PeerNetzwerke
4
HEINZ NIXDORF INSTITUT
Epidemische Algorithmen
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Synonym:
– Gerücht, Virus, Nachricht, Epidemie
 Epicast
– Neue Information wird zum Gerücht
– Solange das Gerücht neu ist, wird es weiterverbreitet
– Ist das Gerücht alt, soll es schon allen bekannt sein
 Epidemischer Algorithmus [Demers et al 87]
– verbreitet Information wie einen Virus
– robuste Alternative zu Broadcast
 Kommunikationsform:
– Random-Call-Modell
 Für die Analyse betrachten wir nur ein Gerücht
– Gelten die Eigenschaften mit hoher Wahrscheinlichkeit, dann gilt es auch für
polynomiell viele Gerüchte
Algorithmen für Peer-to-PeerNetzwerke
5
HEINZ NIXDORF INSTITUT
Anruf-Model (Random Call)
 Kommunikation wird synchronisiert
modelliert in Runden
 In jeder Runde kontaktiert jeder
Teilnehmer einen uniform zufällig
gewählten Teilnehmer
 Man unterscheidet dei
Kommunikationsmodelle
– Push: Der Anrufer gibt die Information
dem Angerufenen
– Pull: Der Angerufene gibt die
Information dem Anrufer
– Push&Pull: Kombination von Push
und Pull
Push&Pull
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Push
Pull
Algorithmen für Peer-to-PeerNetzwerke
6
Epidemische Algorithmen in Peer-to-PeerNetzwerken
HEINZ NIXDORF INSTITUT
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Epidemische Algorithmen sind älter als Peer-to-Peer-Netzwerke
– 1987 versus 1999
Epidemische Algorithmen brauchen zufällige Adressierung
– Viele Peer-to-Peer-Netzwerke unterstützen dies
– Gnutella
• Random Walk erreicht zufällige Adressierung
– CAN:
• Verwende Sprung zwischen den Realitäten
• Dadurch zufälliger Sprung in O(1) Hops
– CHORD, Koorde, Viceroy
• Zufälliger Sprung in log n Hops
– Pastry, Tapestry
• Zufälliger Sprung in log n Hops
Algorithmen für Peer-to-PeerNetzwerke
7
HEINZ NIXDORF INSTITUT
Notation
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Betrachte eine Nachricht
n:
Anzahl Teilnehmer
I(t):
S(t) = n-I(t)
Menge der informierten/infizierten Knoten
Menge der noch nicht Informierten
i(t) = |I(t)|/n
s(t) =1-i(t)
Relativer Anteil der Informierten
Relativer Anteil der Nicht-Informierten
Algorithmen für Peer-to-PeerNetzwerke
8
HEINZ NIXDORF INSTITUT
Struktur des Anruf-Modells
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Betrachte feste Runde
Ausgrad: immer 1
Eingrad
– 0 mit Wahrscheinlichkeit
– 1 mit Wahrscheinlichkeit
– k mit Wahrscheinlichkeit
Für große n und kleineres k Poisson-Verteilung mit Erwartungswert 1
Algorithmen für Peer-to-PeerNetzwerke
9
HEINZ NIXDORF INSTITUT
Push-Modell: Anfangsphase s(t) = o(1)
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
3 Möglichkeiten in Runde t:
– Ein infomierter Anrufer ruft einen bereits informierten Knoten an, W’keit i(t)
– Ein informierter Anrufer ruft den selben Knoten wie ein anderer Knoten an:
W’keit i(t)
W’keit, dass ein Knoten ohne Erfolg anruft: 2i(t)
W’keit für Infektion eines neuen Knoten, falls i(t)  s(t)/2: 1 – 2i(t)
E[i(t+1)]  i(t) + i(t) (1-2 i(t)) = 2 i(t) – 2i(t)2  2 i(t)
Algorithmen für Peer-to-PeerNetzwerke
10
HEINZ NIXDORF INSTITUT
Push-Modell: Startphase & Exponentielles
Wachstum
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
W’keit für Infektion eines neuen Knoten, falls i(t)  s(t)/2: 1 – 2i(t)
E[i(t+1)]  2 i(t) – 2i(t)2  2 i(t)
1.Startphase: I(t)  2 c (ln n)2
o Varianz von i(t+1) relativ groß
o daher Verdopplung von i(t) erst nach O(1) Runden mit hoher W’keit
2.Exponentielles Wachstum: I(t)  [2 c (ln n)2, n/(log n)]
o (fast) Verdopplung mit hoher W’keit, d.h. 1-O(n-c)
o Beweis durch Chernoff-Schranke:
o Für unabhängige Zufallsvariablen Xi{0,1}
und
mit
Algorithmen für Peer-to-PeerNetzwerke
11
Push-Modell: Startphase & Exponentielles
Wachstum
Beweis durch Chernoff-Schranke:
Für unabhängige Zufallsvariablen Xi{0,1} und
HEINZ NIXDORF INSTITUT
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
mit
Sei  = 1/(ln n) und E[Xm]  2 c (ln n)3
Dann gilt
2 E[Xm] /2  c ln n
Damit ist
Algorithmen für Peer-to-PeerNetzwerke
12
HEINZ NIXDORF INSTITUT
Push-Modell: Startphase & Exponentielles
Wachstum
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
W’keit für Infektion eines neuen Knoten, falls i(t)  s(t)/2: 1 – 2i(t)
 E[i(t+1)]  2 i(t) – 2i(t)2  2 i(t)
3. Zwischenphase I(t)  [n/(log n), n/3]
o Term 2i(t)2  2i(t)/(log n) kann nicht mehr vernachlässigt werden
o Trotzdem mit 2i(t) – 2i(t)2  4/3 i(t) noch exponentielles Wachstum,
aber Basis < 2
4. Sättigung: I(t)  n/3
o W’keit, dass ein Gesunder von I(t) = c n Infizierten nicht kontaktiert wird:
• Damit konstante W’keit für Infektion:  1 – e–1/3 und  1 – e–1
o Daher E[s(t+1)]  e–i(t) s(t)  e–1/3 s(t)
• Gilt mittels Chernoff-Schranke auch mit hoher W’keit
• Exponentielles Schrumpfen der Gesunden
• Basis konvergiert gegen 1/e
Algorithmen für Peer-to-PeerNetzwerke
13
HEINZ NIXDORF INSTITUT
Gerüchteausbreitung: Push
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
1
i(t)
s(t)
Zeit
0
Startphase:
log2 n
i(t)<1/2
Sättigung:
s(t) < 1/2
ln n
Sicherung
c ln n
Algorithmen für Peer-to-PeerNetzwerke
14
HEINZ NIXDORF INSTITUT
Anruf-Model (Random Call)
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Infektionsmodelle:
– Push-Modell:
• Der Anrufer infiziert den Angerufenen
– Pull-Modell:
• Der Angerufene infiziert den Anrufer
– Push&Pull-Modell:
• Beides
Algorithmen für Peer-to-PeerNetzwerke
15
HEINZ NIXDORF INSTITUT
Pull-Modell
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Gegeben: Rel. Anteil s(t) gesunder Knoten und i(t) Infizierter
– W’keit, dass gesunder Knoten einen Infizierten kontaktiert: i(t)
E[s(t+1)] = s(t) – s(t) i(t) = s(t) (1 – i(t)) = s(t)2
E[i(t+1)] = 1-s(t)2 = 1 – (1 – i(t))2 = 2 i(t) – i(t)2  2 i(t)
– Approximation funktioniert nur, falls i(t) klein
 Problem:
– falls i(t)  (log n)2 exponentielles Wachstum nicht sicher
– Bis exponentielles Wachstum sicher startet, dauert es O(log n) Schritte
Aber dann:
– Falls s(t)  1/2: Anteil Gesunder wird in jedem Schritt quadriert,
• d.h. E[s(t+ O(log log n))] = 0,
– Falls i(t)  1/2, dann sind nach O(log log n) Schritten sind alle infiziert
Algorithmen für Peer-to-PeerNetzwerke
16
HEINZ NIXDORF INSTITUT
Gerüchteausbreitung: Pull
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
1
s(t)
i(t)
Zeit
0
Startphase
i(t) < 1/2
O(ln n) + log2n
Sättigung
s(t) < 1/2
log log n
Sicherung
O(log log n)
Algorithmen für Peer-to-PeerNetzwerke
17
HEINZ NIXDORF INSTITUT
Push&Pull-Modell
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
o Kombiniert Wachstumsverhalten von Push und Pull
1. Startphase: i(t)  2 c (ln n)2
• Push: Verdopplung von i(t) nach O(1) Runden mit hoher W’keit
2. Exponentielles Wachstum: I(t)  [2 c (ln n)2, n/(log n)]
• Push und Pull: (fast) Verdreifachung mit hoher W’keit in jeder Runde,
d.h. i(t+1)  3 (1-1/(log n)) i(t)
3. Zwischenphase I(t)  [n/(log n), n/3]
• Push und Pull: Verlangsamtes exponentielles Wachstum
4. Quadratisches Schrumpfen I(t)  n/3
• durch Pull:
E[s(t+1)]  s(t)2
• Mit Chernoff-Schranke gilt mit hoher W’keit
s(t+1)  2 s(t)2
und damit nach zwei Runden für s(t)  1/21/2
s(t+2)  s(t)2
Algorithmen für Peer-to-PeerNetzwerke
18
HEINZ NIXDORF INSTITUT
Gerüchteausbreitung: Push & Pull
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
1
s(t)
i(t)
Zeit
0
Startphase
log3n
i(t)<1/2
Sättigung
s(t) < 1/2
log log n
Sicherung
c log log n
Algorithmen für Peer-to-PeerNetzwerke
19
HEINZ NIXDORF INSTITUT
Shenkers Min-Counter-Algorithmus
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Einfache Terminierungsstrategie:
– Falls Gerücht älter als maxctr, dann stoppe Weitergabe
 Vorteil:
– Einfaches Verfahren
 Nachteile:
– Wahl von maxctr entscheidend
• Falls maxctr zu niedrig, werden nicht alle Knoten informiert
• Falls maxctr zu hoch, entsteht Nachrichtenoverhead (n maxctr)
– Optimale Wahl bei
• Push-Kommunikation: maxctr = O(log n)
 Nachrichtenmenge: O(n log n)
• Pull-Kommunikation: maxctr = O(log n)
 Nachrichtenmenge: O(n log n)
• Push&Pull-Kommunikation: maxctr = log3n + O(log log n)
 Nachrichtenmenge: O(n log log n)
Algorithmen für Peer-to-PeerNetzwerke
20
HEINZ NIXDORF INSTITUT
Terminierung von Gerüchten
Min-Counter-Algorithmus
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Jeder für sich schätzt ein Gerücht für
– „neu“, „alt“, „sehr alt“, „sehr sehr alt“, „sehr sehr sehr alt“, ... ,
– „sehrmaxctr alt“ = „uralt“ ein.
 Am Anfang ist jedes Gerücht „neu“.
 Gerüchte werden nicht jünger.
 Erfährt jemand ein Gerücht
– zum ersten Mal übernimmt er das Alter.
– zum zweiten Mal oder mehr als zweimal gleichzeitig, setzt er das Alter um eins
höher.
 Solange ein Gerücht nicht „uralt“ ist, erzählt man es weiter.
 Falls ein Gerücht „uralt“ ist, wird es noch maxctr Runden lang in jeder Runde
erzählt und dann vergessen.
Algorithmen für Peer-to-PeerNetzwerke
21
HEINZ NIXDORF INSTITUT
Der Min-Counter-Algorithmus
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Benutzt Kommunikation
– Wird das Gerücht von allen Kontaktpartnern als älter erachtet,
wird der Alter-Zähler erhöht
 Shenkers Min-Counter-Algorithmus für maxctr = O( log log n)
– Jeder Spieler P führt Variable für Gerücht Variable
– A: Spieler P kennt Gerücht P nicht: ctrr(P) initialisiert mit 0
– B: Falls Teilnehmer P hört Gerücht R zum ersten Mal:
ctrR(P)  1
– B: Falls Teilnehmer Q1, Q2, …, Qm Kommunikationspartner von P in dieser Runde
Falls mini(ctrR(Qi)  ctrR(P) dann ctrR(P)  ctrR(P) + 1
– C: Falls ctrR(P)  maxctr erzählte Gerücht für weitere maxctr Runden
danach D: stoppe Weiterübertragung des Gerüchts
Theorem
Der Min-Counter-Algorithmus informiert für Push&Pull-Kommunikation alle
Teilnehmer in log3n + O(log log n) Runden mit W’keit 1nc,
wobei maximal O(n log log n) Gerüchte übertragen werden.
Algorithmen für Peer-to-PeerNetzwerke
22
HEINZ NIXDORF INSTITUT
Der Min-Counter-Algorithmus
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Theorem
Shenkers Min-Counter-Algorithmus
informiert für Push&PullKommunikation alle Teilnehmer mit
W’keit 1nc, wobei maximal
O(n log log n) Nachrichten
übertragen werden.
Algorithmen für Peer-to-PeerNetzwerke
23
HEINZ NIXDORF INSTITUT
Push, Pull und Push&Pull
Verwendet man
...
Operationen
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Push
Pull
Push&Pull
O(log n)
O(log log n)
O(log log n)
O(log n)
O(log n)
log3n +
O(log log n)
O(n log n)
O(n log log n)
O(n log log n)
dann muss man
maxctr auf
...
setzen
und informiert in
...
Runden (Zeit)
alle Knoten mit ...
Nachrichten mit
Wahrscheinlich-keit
1—n —c
Algorithmen für Peer-to-PeerNetzwerke
24
HEINZ NIXDORF INSTITUT
Wie gut sind O(n log log n) Nachrichten?
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Theorem
Solange die Namen der Peers nicht verwendet werden, benötigt man im
Random-Call-Modell
1. mindestens Ω(log n) Runden und
2. mindestens Ω(n log log n) Nachrichten
o Sind die Namen verfügbar, kann man in O(n) Nachrichten die Information
verteilen
o Lösung:
o Verwende Verbindungen nur, wenn ein Baum addressiert wird
Algorithmen für Peer-to-PeerNetzwerke
25
HEINZ NIXDORF INSTITUT
Anwendung von epidemischer
Informationsausbreitung
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Datenaggregation
Alberto Montresor
Márk Jelasity
Ozalp Babaoglu
Universität Bologna
2003
Algorithmen für Peer-to-PeerNetzwerke
26
HEINZ NIXDORF INSTITUT
Zählen als Beispiel
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Wie kann man die Anzahl der Teilnehmer bestimmen?
1. Ansatz
– Setze Zähler auf 1 und gib diese Information den Nachbarn weiter
– Dieser erhöht den Zähler um 1 und gibt sie wieder weiter
Problem:
– Funktioniert nur mit Ring, benötigt Zeit n-1
2. Ansatz
– Epidemische Verbreitung einer Liste, in die sich jeder Teilnehmer einträgt
– Laufzeit O(log n)
– Nachricht O(n log log n) mit Push/Pull
– Nachteil: Nachrichtenlänge O(n)
– Eigenliche Nachrichtenmenge: n2 log log n
Algorithmen für Peer-to-PeerNetzwerke
27
HEINZ NIXDORF INSTITUT
3. Ansatz für Zählen
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
In Chord-Datenstruktur
– Betrachte Abstand zu den nächsten O(log n) Nachbarn auf den Ring
– Abweichung um Faktor 1-c mit Faktor n-c
– Distanz1/n kann mit O(log n) Samples hinreichend genau bestimmt werden
Funktioniert nur für solche P2P-Netzwerke
Kann man auch exakt zählen mit Hilfe von Push & Pull ?
Algorithmen für Peer-to-PeerNetzwerke
28
Datenaggregation: Zählen
[Jelaisty, Montresor `03]
HEINZ NIXDORF INSTITUT
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Betrachte folgenden Prozess
Initalisierung:
– Ein Teilnehmer startet den Zählvorgang und setzt seine Variable s1=1
Verbreitung:
– Jeder Teilnehmer i , der von einem zählenden Peer j zum ersten Mal
kontaktiert wird, setzt si = 0
Ausgleich:
– Kontaktiert Peer i den Peer j setzen beide:
• si = (si+sj)/2
• sj = (si+sj)/2
Algorithmen für Peer-to-PeerNetzwerke
29
HEINZ NIXDORF INSTITUT
Der Average-Algorithmus
Eingabe: s1,...,sn
–lokal an den Peers vorhanden
Ausgabe:
–wird an allen Peers approximiert
Kommunikationsmodell
–wird durch getPair() festgelegt
–In der Regeln kommen alle Peers
gleichwahrscheinlich vor
–In jeder Runde wird ein Peer
ausgewählt
Algorithmus (eine Runde):
–loop n do
• (i,j) = getPair()
• si = (si+sj)/2
• sj = (si+sj)/2
–od
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Theorem:
Nach O(log n) Runden gilt für alle Peers i
mit hoher Wahrscheinlichkeit.
wenn getPair dem Push oder PullKommunikationsmodell folgt
Algorithmen für Peer-to-PeerNetzwerke
30
HEINZ NIXDORF INSTITUT
Beweisidee: Datenaggregation Zählen
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Betrachte empirisches Mittel und empirische Varianz
 Betrachte den Konvergenzfaktor
definiert als
 Dann kann gezeigt werden
 For t = Ω(log n) gilt dann
 Daraus folgt
 und
Algorithmen für Peer-to-PeerNetzwerke
31
HEINZ NIXDORF INSTITUT
Simulation
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Ein Knoten wurde mit 100.000
initialisiert
 Alle anderen Knoten mit 0
 Kommunikationsnetzwerk mit 20
Nachbarn einmalig uniform gewählt
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
benötigt.
Algorithmen für Peer-to-PeerNetzwerke
32
HEINZ NIXDORF INSTITUT
Netzwerkabschätzung von dynamischen
Netzwerken
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Zählprozess wird immer wieder neu
gestartet
 Schnelle Approximation
 wird durch Simulationsergebnisse
nahegelegt
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
benötigt.
Algorithmen für Peer-to-PeerNetzwerke
33
HEINZ NIXDORF INSTITUT
Peer-Ausfälle
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
Im schlimmsten Fall, fallen die Peers zu Beginn aus.
Angenommen pfn Knoten fallen gleichverteilt durch einen Zufallsprozess
aus
Sei mf das Mittel von si
Theorem
 Mit zunehmender Teilnehmerzahl, nimmt der Einfluss der ausfallenden
Peers ab (bei gleicher Ausfallwahrscheinlichkeit).
Algorithmen für Peer-to-PeerNetzwerke
34
HEINZ NIXDORF INSTITUT
Weitere Aggregations-Funktionen
Min
– f(x,y) = min (x,y)
– Berechnet Minimum
Max
– f(x,y) = max(x,y)
– Berechnet größtes Element
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Summe
– Verwende Average mit Initialisierung
der Summanden, Ergebnis sei s
– Verwende Average zum Zählen von n
– Ausgabe: n s
 Geometrisches Mittel
– Verwende in Average:
Analyse analog zu Rumor
Spreading
– Minimum ist das Gerücht
– Kombination mit
Terminierungsmechanismum
 Produkt:
– Kombination aus Geometrisches
Mittel g und Anzahl der Peers
• gn
Algorithmen für Peer-to-PeerNetzwerke
35
HEINZ NIXDORF INSTITUT
Datenaggregation
 Funktioniert auf jeder
zusammenhängenden
Netzwerktopologie
– und nicht nur im Random-Call-Modell
– dort aber mit logarithmischer
Konvergenzzeit
 Konvergenz ist stark abhängig von der
Netzwerkstruktur
– für statische Netzwerk Analyse mit
Markov-Prozessen möglich (für
Average)
 Polynomielle Laufzeit auf
– Ring
– Gitter
Universität Paderborn
Algorithmen und Komplexität
Christian Schindelhauer
 Logarithmische Konvergenz im
–Baum
–Hyperwürfel
–De-Brujin-Netzwerke
–Butterfly-Netzwerke
–CAN mit mehreren Realitäten
 Offene Fragen:
–Welche Funktionen sind für
Datenaggregation geeignet
–Läßt sich der Unterschied von Pushund Pull nachweisen?
Algorithmen für Peer-to-PeerNetzwerke
36
HEINZ NIXDORF INSTITUT
Universität Paderborn
Algorithmen und Komplexität
Vielen Dank
Ende der 11. Vorlesung
Nächste Vorlesung:
Nächste Übung:
Fr. 09.07.2004 9-11 Uhr
Mo. 05.07.2004 10/11/16 Uhr (A/B/C)
37
Herunterladen