Mehrfaktorielle Varianzanalyse

mehranova$Alkohol<-factor(mehranova$Alkohol, levels=c("gering", "mittel", "hoch")) 

Hypothese

Haupteffekt A
H0:Es gibt keinen Unterschied zwischen dem Geschlecht und der gesungenen Anzahl an Songs.
H1:Es gibt einen Unterschied zwischen dem Geschlecht und der gesungenen Anzahl an Songs.

Haupteffekt B
H0:Es gibt einen Unterschied zwischen dem Alkoholgehalt und der gesungenen Anzahl an Songs.
H1:Es gibt einen Unterschied zwischen dem Alkoholgehalt und der gesungenen Anzahl an Songs.

Interaktion AxB
H1: Es gibt einen Unterschied zwischen dem Geschlecht, bzw. dem Alkoholgehalt des ersten Getränkes und der Anzahl der gesungenen Songs.
H0: Es gibt keinen Unterschied zwischen dem Geschlecht, bzw. dem Alkoholgehalt des ersten Getränkes und der Anzahl der gesungenen Songs.

Voraussetzungen für die mehrfaktorielle Varianzanalyse (ohne Messwiederholung)

Die abhängige Variable ist intervallskaliert -> ist gegeben, sogar absolutskaliert.

Die unabhängigen Variablen (Geschlecht und Alkoholgehalt) sind kategorial (nominal- oder ordinalskaliert) -> sind sie. Die durch die Faktoren gebildeten Gruppen sind unabhängig -> Entweder ist der Gast biologisch weiblich / männlich , bzw. der Alkoholgehalt des ersten Getränkes ist entweder 0.05 | 0.15 | 0.35.

Die abhängige Variablen ist normalverteilt innerhalb jeder der Gruppen. Ab 25 Probanden pro Gruppe sind Verletzungen dieser Voraussetzung unproblematisch-> siehe Histogramm

omogenität der Varianzen: Die Gruppen stammen aus Grundgesamtheiten mit annähernd identischen Varianzen der abhängigen Variablen -> siehe Levene-Test

Deskriptive Statistiken + Prüfung der Voraussetzung

Histogramm zur Prüfung der Normalvertweilung

Alkohol

library(dplyr)
library(ggplot2)
mehranova %>%
  group_by(Alkohol) %>%
  ggplot(aes(Songs, color=Alkohol)) + 
  geom_histogram(aes(fill = Alkohol), binwidth = 1.5) +
  facet_wrap(~Alkohol) +
  theme_grey()+
  labs(x= "Anzahl der Songs",y = "Anzahl" )

Die Daten sind normalverteilt innerhalb der Gruppe Alkohol und Anzahl der gesungenen Songs.


mehranova %>%
  group_by(Geschlecht) %>%
  ggplot(aes(Songs, color=Geschlecht)) + 
  geom_histogram(aes(fill = Geschlecht), binwidth = 3.3) +
  facet_wrap(~Geschlecht) +
  theme_grey()+
  labs(x= "Anzahl der Songs",y = "Anzahl" )

Die Daten sind normalverteilt innerhalb der Gruppe Geschlecht und Anzahl der gesungenen Songs, nicht sehr schön. Ab 25 Teilnehmer pro Gruppe ist das Testverfahren robust.

ggplot(mehranova, aes(x=Songs))+
geom_histogram()+
theme_grey()+
facet_wrap(Alkohol~Geschlecht, ncol = 2)

Ab 25 Teilnehmer pro Gruppe ist das Testverfahren robust. Jedoch gibt es Schwierigkeiten bei der Normalverteilung bei mittlerem Alkoholgehalt bei den weiblichen Barbesuchern.

Boxplot

ggplot(mehranova, aes(Geschlecht, Songs, fill=factor(Alkohol))) +
geom_boxplot() +
theme_minimal()+
labs(fill = "Alkoholniveau", x="Geschlecht", y="Anzahl Songs")

Deskriptive Statistiken

mehranova %>%
group_by(Alkohol) %>%
  summarize(Anzahl = n(), Mittelwert = mean(Songs), Median = median(Songs), Standardabweichung = sd(Songs)) %>%
  mutate_if(is.numeric, round, 2)

Bei geringem Alkoholgehalt werden 2.66 Songs im Schnitt gesungen (SD = 1.15, n = 50). Bei mittlerem Alkoholgehalt singen die Barbesucher 5.88 Songs im Durchschnitt (SD = 1.92, n = 50). Bei hoher Alkoholgehalt singen die Barbesucher deutlich mehr Songs - im Schnitt 11 Songs (SD = 2.54, n = 50).

mehranova %>%
group_by(Geschlecht) %>%
  summarize(Anzahl = n(), Mittelwert = mean(Songs), Median = median(Songs), Standardabweichung = sd(Songs)) %>%
  mutate_if(is.numeric, round, 2)

Es zeichnet sich ein schwieriges Bild. Der Geschlechterunterschied ist nur minimal. Barbesucher singen 6.44 Songs im Schnitt, wohingegen Barbesucherinnen 6.59 Songs singen. Darüber hinaus zeigen auch die Standardabweichung und der Mittelwert, dass wahrscheinlich keine Signifikanz vorliegt.

mehranova %>%
group_by(Geschlecht, Alkohol) %>%
  summarize(Anzahl = n(), Mittelwert = mean(Songs), Median = median(Songs), Standardabweichung = sd(Songs)) %>%
  mutate_if(is.numeric, round, 2)
`summarise()` has grouped output by 'Geschlecht'. You can override using the `.groups` argument.
`mutate_if()` ignored the following grouping variables:
Column `Geschlecht`

Bei geringer Alkoholgehalt singen die Männer (M = 3.24, SD = 1.164) mehr Songs als die Frauen (M = 2.08, SD = .81). Dies ist auch bei mittlerer Alkoholgehalt ebenfalls der Fall (Männer: M = 6.8, SD = 1.75; Frauen: M = 4.96, SD = .1.64). Bei hoher Alkoholgehalt ist es genau umgekehrt: Die Frauen (M = 12.72, SD = 2.03) singen deutlich mehr Songs als die Männer(M = 9.28, SD = 1.69).

Alternative


mittel <-tapply(mehranova$Songs, list(mehranova$Alkohol, mehranova$Geschlecht), mean, na.rm=TRUE)
mittel
          m     w
gering 3.24  2.08
mittel 6.80  4.96
hoch   9.28 12.72

sd <-tapply(mehranova$Songs, list(mehranova$Alkohol, mehranova$Geschlecht), sd, na.rm=TRUE)
sd
              m         w
gering 1.164760 0.8124038
mittel 1.755942 1.6451950
hoch   1.696074 2.0314199

anzahlprogruppe <- tapply(mehranova$Songs, list(mehranova$Alkohol, mehranova$Geschlecht), function(x) sum(!is.na(x)))
anzahlprogruppe 
        m  w
gering 25 25
mittel 25 25
hoch   25 25

Profildiagramm


ggplot(mehranova, aes(x=Alkohol, y=Songs, group=Geschlecht, color= Geschlecht))+
  stat_summary(fun.y = mean, geom="point", size=3)+
  stat_summary(fun.y = mean, geom="line")+
  stat_summary(fun.data = mean_cl_normal, geom="errorbar",width=.2, size=.25)+
  labs(x="Alkohol", y="Anzahl der Songs")+
  theme_classic()
`fun.y` is deprecated. Use `fun` instead.`fun.y` is deprecated. Use `fun` instead.

Levene -Test

Der Levene-Test prüft die Nullhypothese, dass die Varianzen der Gruppen sich nicht unterscheiden. Ist der Levene-Test nicht signifikant, so kann von homogenen Varianzen ausgegangen. Wäre der Levene-Test jedoch signifikant, so wäre eine der Grundvoraussetzungen der Varianzanalyse verletzt. Gegen leichte Verletzungen gilt die Varianzanalyse als robust; vor allem bei genügend grossen und etwa gleich grossen Gruppen sind Verletzungen nicht problematisch. Bei ungleich grossen Gruppen führt eine starke Verletzung der Varianzhomogenität zu einer Verzerrung des F-Tests. Alternativ können dann auf den Brown-Forsythe-Test oder den Welch-Test zurückgegriffen werden. Dabei handelt es sich um adjustierte F-Tests.

library(car)
leveneTest(Songs ~ Alkohol*Geschlecht, data = mehranova, center = "mean")
Levene's Test for Homogeneity of Variance (center = "mean")
       Df F value    Pr(>F)    
group   5  5.6264 9.088e-05 ***
      144                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Im vorliegenden Beispiel ist der Levene-Test signifikant (F(5,144) = 5.626, p < .000 ), so dass von Varianzheterogenität ausgegangen werden kann. Da die Varianzen leider nicht gleich sind, ist es zu empfehlen eine Korrektur mithilfe des Welch-Tests durchzuführen.

Entscheiungsregeln

Mit Welch-Korrektur: p < 0.05 => Ergebnis Signifikant –> Varianzen heterogen

Ohne Welch-Korrektur: p > 0.05 => Ergebnis nicht Signifikant –> Varianzen homogen –> H0 mit Annahme Var1=Var2=… -> Var_n wird angenommen

Ergebnisse der mehrfaktorielle Varianzanalyse (ohne Messwiederholung)

Keine Welch-Korrektur - ist der Standard


mehrAnova1 <- lm(Songs ~ Geschlecht*Alkohol, data = mehranova)
myAnova <- Anova(mehrAnova1 , type = 3)
myAnova
Anova Table (Type III tests)

Response: Songs
                   Sum Sq  Df  F value    Pr(>F)    
(Intercept)        262.44   1 106.3228 < 2.2e-16 ***
Geschlecht          16.82   1   6.8143  0.009999 ** 
Alkohol            460.88   2  93.3585 < 2.2e-16 ***
Geschlecht:Alkohol 206.25   2  41.7799 4.912e-15 ***
Residuals          355.44 144                       
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

mit Welch-Korrektur ist zur Kontrolle gedacht

Es liegt eine Verletzung der Varianzhomogenität vor(siehe Levene-Test). Daher sollte ein robusterer Test berücksichtigt werden (* mit welch* ). Allerdings bieten sich hier keine weitgehend akzeptierten Verfahren an. Daher wird der Standard weitergeführt.


geschlechtwelch <- oneway.test(Songs~Geschlecht, data = mehranova, var.equal = F)
geschlechtwelch

    One-way analysis of means (not assuming equal variances)

data:  Songs and Geschlecht
F = 0.051224, num df = 1.00, denom df = 122.72, p-value = 0.8213

Für den Faktor Geschlecht wird kein Haupteffekt ersichtlich. Die Anzahl der gesungenen Songs scheint demnach unabhängig vom Geschlecht zu sein (F(1,122.72) = .0512, p = .8213).


alkoholwelch <- oneway.test(Songs~Alkohol, data = mehranova, var.equal = F)
alkoholwelch

    One-way analysis of means (not assuming equal variances)

data:  Songs and Alkohol
F = 238.45, num df = 2.000, denom df = 88.419, p-value < 2.2e-16

Es gibt einen Haupteffekt der Alkoholgehalt auf die Anzahl der gesungenen Songs (F(2,88.419) = 238.45, p = .000). Das bedeutet, dass Gäste der Karaoke-Bar in Abhängigkeit des Alkoholgehalt unterschiedlich viele Songs singen.


AXBwelch <- oneway.test(Songs~Alkohol*Geschlecht, data = mehranova, var.equal = F)
AXBwelch 

    One-way analysis of means (not assuming equal variances)

data:  Songs and Alkohol * Geschlecht
F = 173.72, num df = 5.000, denom df = 65.716, p-value < 2.2e-16

Der Interaktionsterm von Alkoholgehalt und Geschlecht auf die Anzahl der gesungenen Songs ist signifikant (F(5,65.716) = 173.72, p = .000). Der Effekt von Alkoholgehalt hängt demnach zu einem gewissen Teil vom Geschlecht ab.

#zusammenfassung <- rbind(alkoholwelch,geschlechtwelch,AXBwelch)

Post-Hoc-Test

st ein Haupteffekt oder eine Interaktion signifikant, so ist zwar bestätigt, dass ein Effekt vorliegt, doch ist nach wie vor unklar, welche Faktorstufen sich unterscheiden, sobald ein Faktor mehr als zwei Ausprägungen aufweist. (Bei zwei Ausprägungen unterscheiden sich eben diese zwei Ausprägungen voneinander, sonst wäre der F-Test nicht signifikant.) Im vorliegenden Beispiel liegen ein Effekt der Alkoholgehalt sowie ein Interaktionseffekt vor. Post-hoc-Tests können einfach eingesetzt werden, um zu prüfen, welche Levels der Alkoholgehalt sich unterscheiden. Für die Interaktion ist dies in SPSS nicht implementiert.

Wie bereits erwähnt wurde, beinhaltet der Faktor Alkoholgehalt drei Stufen. Aus dem signifikanten Haupteffekt lässt sich nicht ableiten, welche der Faktorstufen einen signifikant unterschiedlichen Einfluss auf die abhängige Variable haben. Zu diesem Zweck werden Tukey-korrigierte Mehrfachvergleiche berechnet.

Bei der Berechnung von Post-hoc-Tests wird im Prinzip für jede Kombination von zwei Mittelwerten ein t-Test durchgeführt. Im aktuellen Beispiel der Alkoholgehalt mit drei Gruppen, bzw. zwei Gruppen sind dies 15 Tests. Multiple Tests sind jedoch problematisch, da der Alpha-Fehler (die fälschliche Ablehnung der Nullhypothese) mit der Anzahl der Vergleiche steigt. Wird nur ein t-Test mit einem Signifikanzlevel von .05 durchgeführt, so beträgt die Wahrscheinlichkeit des Nicht-Eintreffens des Alpha-Fehlers 95%. Werden jedoch 15 solcher Paarvergleiche vorgenommen, so beträgt die Nicht-Eintreffens-Wahrscheinlichkeit des Alpha-Fehlers (.95)15 = .4632. Um die Wahrscheinlichkeit des Eintreffens des Alpha-Fehlers zu bestimmen, wird 1 -.4632 = .5367 gerechnet. Die Wahrscheinlichkeit des Eintreffens des Alpha-Fehlers liegt somit bei 53.67%. Diese Fehlerwahrscheinlichkeit wird als “Familywise Error Rate” bezeichnet.

Um dieses Problem zu beheben, kann zum Beispiel die Tukey-Korrektur angewendet werden. Hierbei wird α durch die Anzahl der Paarvergleiche dividiert. Im hier aufgeführten Fall ist dies .05/15 = .00333. Bei diesem Kozept handelt es sich um eine allgemeine Information.

Die Tukey berücksichtigt die Korrektur, daher kann weiter gegen 0.05 getestet werden.


PostHoc <- aov(Songs ~ Geschlecht*Alkohol, data=mehranova) 
#Alternativ auch der Name des Zwischenspeichers "mehr" - PostHoc <- aov(mehr)  
TukeyHSD(PostHoc)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = Songs ~ Geschlecht * Alkohol, data = mehranova)

$Geschlecht
         diff        lwr       upr    p adj
w-m 0.1466667 -0.3604403 0.6537736 0.568437

$Alkohol
              diff      lwr      upr p adj
mittel-gering 3.22 2.475868 3.964132     0
hoch-gering   8.34 7.595868 9.084132     0
hoch-mittel   5.12 4.375868 5.864132     0

$`Geschlecht:Alkohol`
                   diff        lwr        upr     p adj
w:gering-m:gering -1.16 -2.4435564  0.1235564 0.1013365
m:mittel-m:gering  3.56  2.2764436  4.8435564 0.0000000
w:mittel-m:gering  1.72  0.4364436  3.0035564 0.0022313
m:hoch-m:gering    6.04  4.7564436  7.3235564 0.0000000
w:hoch-m:gering    9.48  8.1964436 10.7635564 0.0000000
m:mittel-w:gering  4.72  3.4364436  6.0035564 0.0000000
w:mittel-w:gering  2.88  1.5964436  4.1635564 0.0000000
m:hoch-w:gering    7.20  5.9164436  8.4835564 0.0000000
w:hoch-w:gering   10.64  9.3564436 11.9235564 0.0000000
w:mittel-m:mittel -1.84 -3.1235564 -0.5564436 0.0008204
m:hoch-m:mittel    2.48  1.1964436  3.7635564 0.0000017
w:hoch-m:mittel    5.92  4.6364436  7.2035564 0.0000000
m:hoch-w:mittel    4.32  3.0364436  5.6035564 0.0000000
w:hoch-w:mittel    7.76  6.4764436  9.0435564 0.0000000
w:hoch-m:hoch      3.44  2.1564436  4.7235564 0.0000000

Wie vermutet, zeichnet sich bei Geschlecht keine signifikant ab. Die Alkoholgehaltskombinationen unterscheiden sich signifikant.

Für das vorliegende Beispiel wird ersichtlich, dass sich der Alkoholgehalt und das Geschlecht bezüglich der gesungenen Songs signifikant unterscheiden (p < .05). Jedoch kann kein Unterschied für das Geschlecht mit einer geringem Alkoholgehalt von 0.05 Prozent festgestellt werden (p < .05). Es können 5 Gruppen gebildet werden.

  1. Was ist sig und was nicht? 14 von 15 Vergleichen sind sig. (p < .05). Nicht sig. ist w:gering-m:gering (p = .1013365)

  2. Generalisierbarkeit /Unabhängigkeit - global?

Vier Gruppen sind unabhängige / generalisierbar.

  1. Gruppenbildung?

Es können 5 Gruppen gebildet werden.

  1. Interaktion?

Bei geringerem Alkoholgehalt lag Männer (M = 3.24, SD = 1.164) über jenem der Frauen (M = 2.08, SD = .81), allerdings konnte der Unterschied im Post-Hoc nicht bestätigt werden. Bei mittlerer Alkoholgehalt (Männer: M = 6.8, SD = 1.75; Frauen: M = 4.96, SD = .1.64) konnte der Mittelwertsunterschied bestätigt werden. Bei hohem Alkoholgehalt verhält es sich genau andersrum - Frauen sangen (M = 12.72, SD = 2.03) deutlich mehr Songs als die Männer (M = 12.72, SD = 2.03). Das Ergebnis konnte bestätigt werden.

Alternativ

Bonferroni und Tukey: sehr strenge Kontrolle des Fehlers 1. Art, zu geringe Teststärke, deshalb zu konservativ. Bei wenigen Paarvergleichen hat Bonferroni mehr Teststärke, bei vielen Paarvergleichen hat Tukey mehr Teststärke.



pairwise.t.test(mehranova$Songs, mehranova$Geschlecht, data=mehranova, pool.sd=T,var.equal=FALSE)

    Pairwise comparisons using t tests with pooled SD 

data:  mehranova$Songs and mehranova$Geschlecht 

  m   
w 0.82

P value adjustment method: holm 
pairwise.t.test(mehranova$Songs, mehranova$Alkohol, data=mehranova, pool.sd=T,var.equal=F)

    Pairwise comparisons using t tests with pooled SD 

data:  mehranova$Songs and mehranova$Alkohol 

       gering  mittel 
mittel 9.2e-14 -      
hoch   < 2e-16 < 2e-16

P value adjustment method: holm 

Bei diesem Testverfahren muss der aplhawert korrigiert werden.

newalpha<-  0.05/15
newalpha
[1] 0.003333333
interaktion=paste(mehranova$Geschlecht, mehranova$Alkohol, sep=".") 

pairwise.t.test(mehranova$Songs, interaktion, data=mehranova, var.equal=FALSE)

    Pairwise comparisons using t tests with pooled SD 

data:  mehranova$Songs and interaktion 

         m.gering m.hoch  m.mittel w.gering w.hoch 
m.hoch   < 2e-16  -       -        -        -      
m.mittel 2.5e-12  4.6e-07 -        -        -      
w.gering 0.01000  < 2e-16 < 2e-16  -        -      
w.hoch   < 2e-16  9.5e-12 < 2e-16  < 2e-16  -      
w.mittel 0.00033  < 2e-16 0.00018  6.8e-09  < 2e-16

P value adjustment method: holm 

Games - Howell

interaktion=paste(mehranova$Geschlecht, mehranova$Alkohol, sep=".") 

mehranova["interaktion"] <- interaktion

View(mehranova)
#Faktor A
mehranova$Geschlecht <- as.factor(mehranova$Geschlecht)
ANOVA <- aov(Songs~Geschlecht, mehranova)
erg <- PMCMRplus::gamesHowellTest(ANOVA)
summary (erg)

    Pairwise comparisons using Games-Howell test

data: Songs by Geschlecht
alternative hypothesis: two.sided
P value adjustment method: none
H0
---
Signif. codes: 0 㤼㸱***㤼㸲 0.001 㤼㸱**㤼㸲 0.01 㤼㸱*㤼㸲 0.05 㤼㸱.㤼㸲 0.1 㤼㸱 㤼㸲 1
# Faktor B
mehranova$Alkohol <- as.factor(mehranova$Alkohol)
ANOVA <- aov(Songs~Alkohol, mehranova)
erg <- PMCMRplus::gamesHowellTest(ANOVA)
summary (erg)

    Pairwise comparisons using Games-Howell test

data: Songs by Alkohol
alternative hypothesis: two.sided
P value adjustment method: none
H0
---
Signif. codes: 0 㤼㸱***㤼㸲 0.001 㤼㸱**㤼㸲 0.01 㤼㸱*㤼㸲 0.05 㤼㸱.㤼㸲 0.1 㤼㸱 㤼㸲 1
#Interaktion

mehranova$interaktion <- as.factor(mehranova$interaktion)
ANOVA <- aov(Songs~interaktion, mehranova)
erg <- PMCMRplus::gamesHowellTest(ANOVA)
summary (erg)

    Pairwise comparisons using Games-Howell test

data: Songs by interaktion
alternative hypothesis: two.sided
P value adjustment method: none
H0
---
Signif. codes: 0 㤼㸱***㤼㸲 0.001 㤼㸱**㤼㸲 0.01 㤼㸱*㤼㸲 0.05 㤼㸱.㤼㸲 0.1 㤼㸱 㤼㸲 1

Das par. Eta-Quadrat

Das partielle Eta-Quadrat (partielles η2) ist in Abbildung ausgegeben.

\[\eta^2_{partial A}= \frac {QS_A}{QS_A+QS_{inn}}\]

\[\eta^2_{partial B}= \frac {QS_B}{QS_B+QS_{inn}}\]

\[\eta^2_{partial AxB}= \frac {QS_{AxB}}{QS_{AxB}+QS_{inn}}\]

\[\eta_A= \frac {QS_A}{QS_{total}}\] \[\eta_B= \frac {QS_B}{QS_{total}}\] \[\eta_{AxB}= \frac {QS_{AxB}}{QS_{total}}\]


eta <- effectsize::eta_squared(mehrAnova1, partial = TRUE)
eta
Parameter          | Eta2 (partial) |       90% CI
--------------------------------------------------
Geschlecht         |       2.26e-03 | [0.00, 0.03]
Alkohol            |           0.83 | [0.80, 0.86]
Geschlecht:Alkohol |           0.37 | [0.26, 0.45]

Im vorliegenden Beispiel ist der Effekt des Geschlechts nicht signifikant. Daher wird dessen partielles Eta-Quadrat nicht betrachtet. Für die Alkoholgehalt beträgt das partielle Eta-Quadrat .833. Das heisst, die Alkoholgehalt erklärt 83% derjenigen Fehlervariation, die das Modell hätte, wäre Alkoholgehalt nicht im Modell. Das partielle Eta-Quadrat der Interaktion beträgt .367 und erklärt daher 3% der ohne die Interaktion ungeklärten Variation.

Berechnung der Effektstärke

\[f=\sqrt\frac{\eta^{2}}{1-\eta^{2}}=\sqrt\frac{eta^{2}}{1-eta^{2}}\]

Effektstärke fürs Geschlecht


effgender <- sqrt(eta$Eta2_partial[1]/(1-eta$Eta2_partial[1]))

sprintf("Effektstärke fürs Geschlecht: f= %.3f", effgender)
[1] "Effektstärke fürs Geschlecht: f= 0.048"

Effektstärke fürs Alkoholgehalt


effalk <- sqrt(eta$Eta2_partial[2]/(1-eta$Eta2_partial[2]))

sprintf("Effektstärke fürs Alkoholgehalt: f= %.3f",effalk)
[1] "Effektstärke fürs Alkoholgehalt: f= 2.231"

Effektstärke für die Interaktion


effAxB <- sqrt(eta$Eta2_partial[3]/(1-eta$Eta2_partial[3]))

sprintf("Effektstärke für die Interaktion: f= %.3f",effAxB)
[1] "Effektstärke für die Interaktion: f= 0.762"

Um zu beurteilen, wie gross dieser Effekt ist, kann man sich an der Einteilung von Cohen (1988) orientieren:

\[ \begin{align} \text{Schwacher Effekt: } 0.10 &< ||f|| < 0.25 \\ \text{Schwacher bis mittlerer Effekt: } 0.25 &= ||f|| \\ \text{Mittlerer Effekt: } 0.25 &< ||f|| < 0.40 \\ \text{Mittlerer bis starker Effekt: }0.40 &= ||f|| \\ \text{Starker Effekt: } 0.40 &< ||f|| \end{align} \]

Damit entsprechen die Effektstärken von 2.23 und 0.76 einem starken Effekt. Für Geschlecht liegt natürlich kein Effekt vor - es sei nur der Vollständigkeit erwähnt.

Eine Aussage

Hypothesen

Es zeigt sich, dass es keinen Unterschied zwichen dem Geschlecht und der Anzahl an gesungenen Songs allein gibt (F(1,122.72) = .0512, p = .8213). H0 für den Haupteffekt A wird angenommen.

Allerdings je nach Alkoholgehalt des ersten Getränkes gibt es einen Unterschied zwischen den gesungenen Songs (F(2,88.419) = 238.45, p = .000). H0 für den Haupteffekt B wird verworfen.

Der Interaktionsterm von Alkoholgehalt und Geschlecht auf die Anzahl der gesungenen Songs ist signifikant (F(5,65.716) = 173.72, p = .000). Der Effekt von Alkoholgehalt hängt demnach zu einem gewissen Teil vom Geschlecht ab. H0 für den Interaktion AxB wird verworfen.

Post- Hoc - Test

Der PostHoc wurde mit Tukey durchgeführt. Für Geschlecht zeigte sich keine signifikant ab (p = 0.101). Es zeigt, dass sich alle Gruppen für Alkoholgehalt signifikant unterscheiden: Gering (M = 2.66 ,SD = 1.15, N=50), mittlere Alkoholniveau (M = 5.88, SD = 1.92, n=50) und hohe Alkoholniveau (M = 11, SD = 2.54, n=50).

Zudem zeigt sich eine signifikante Interaktion von Geschlecht und Alkoholgehalt auf die Anzahl der gesungenen Songs.Dies weist darauf hin, dass sich Alkoholgehalt je nach Geschlecht unterschiedlich auswirkt.

Bei geringerem Alkoholgehalt lag Männer (M = 3.24, SD = 1.164) über jenem der Frauen (M = 2.08, SD = .81), allerdings konnte der Unterschied im Post-Hoc nicht bestätigt werden. Bei mittlerer Alkoholgehalt (Männer: M = 6.8, SD = 1.75; Frauen: M = 4.96, SD = .1.64) konnte der Mittelwertsunterschied bestätigt werden.

Bei hohem Alkoholgehalt verhält es sich genau andersrum - Frauen sangen (M = 12.72, SD = 2.03) deutlich mehr Songs als die Männer (M = 12.72, SD = 2.03). Das Ergebnis konnte bestätigt werden.

Effektstärke

Die Effektstärken sind sowohl für den Haupteffekt der Alkoholgehalt (f = 2.23) als auch für die Interaktion (f = 0,76) nach Cohen (1988) ein starker Effekt

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCg0KYGBge3J9DQptZWhyYW5vdmEkQWxrb2hvbDwtZmFjdG9yKG1laHJhbm92YSRBbGtvaG9sLCBsZXZlbHM9YygiZ2VyaW5nIiwgIm1pdHRlbCIsICJob2NoIikpIA0KYGBgDQoNCg0KIyBIeXBvdGhlc2UgDQoNCkhhdXB0ZWZmZWt0IEE8YnI+DQpIMDpFcyBnaWJ0IGtlaW5lbiBVbnRlcnNjaGllZCB6d2lzY2hlbiBkZW0gR2VzY2hsZWNodCB1bmQgZGVyIGdlc3VuZ2VuZW4gQW56YWhsIGFuIFNvbmdzLjxicj4NCkgxOkVzIGdpYnQgZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gZGVtIEdlc2NobGVjaHQgdW5kIGRlciBnZXN1bmdlbmVuIEFuemFobCBhbiBTb25ncy48YnI+DQoNCg0KSGF1cHRlZmZla3QgQjxicj4NCkgwOkVzIGdpYnQgZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gZGVtIEFsa29ob2xnZWhhbHQgdW5kIGRlciBnZXN1bmdlbmVuIEFuemFobCBhbiBTb25ncy48YnI+DQpIMTpFcyBnaWJ0IGVpbmVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIGRlbSBBbGtvaG9sZ2VoYWx0IHVuZCBkZXIgZ2VzdW5nZW5lbiBBbnphaGwgYW4gU29uZ3MuPGJyPg0KDQpJbnRlcmFrdGlvbiBBeEI8YnI+DQpIMTogRXMgZ2lidCBlaW5lbiBVbnRlcnNjaGllZCB6d2lzY2hlbiBkZW0gR2VzY2hsZWNodCwgYnp3LiAgZGVtIEFsa29ob2xnZWhhbHQgZGVzIGVyc3RlbiBHZXRyw6Rua2VzIHVuZCBkZXIgQW56YWhsIGRlciBnZXN1bmdlbmVuIFNvbmdzLiA8YnI+DQpIMDogRXMgZ2lidCBrZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gZGVtIEdlc2NobGVjaHQsIGJ6dy4gIGRlbSBBbGtvaG9sZ2VoYWx0IGRlcyBlcnN0ZW4gR2V0csOkbmtlcyB1bmQgZGVyIEFuemFobCBkZXIgZ2VzdW5nZW5lbiBTb25ncy4gPGJyPg0KDQoNCg0KIyBWb3JhdXNzZXR6dW5nZW4gZsO8ciBkaWUgbWVocmZha3RvcmllbGxlIFZhcmlhbnphbmFseXNlIChvaG5lIE1lc3N3aWVkZXJob2x1bmcpIA0KDQoNCg0KRGllIGFiaMOkbmdpZ2UgVmFyaWFibGUgaXN0IGludGVydmFsbHNrYWxpZXJ0IC0+IGlzdCBnZWdlYmVuLCBzb2dhciBhYnNvbHV0c2thbGllcnQuIA0KDQpEaWUgdW5hYmjDpG5naWdlbiBWYXJpYWJsZW4gKEdlc2NobGVjaHQgdW5kIEFsa29ob2xnZWhhbHQpIHNpbmQga2F0ZWdvcmlhbCAobm9taW5hbC0gb2RlciBvcmRpbmFsc2thbGllcnQpIC0+IHNpbmQgc2llLg0KRGllIGR1cmNoIGRpZSBGYWt0b3JlbiBnZWJpbGRldGVuIEdydXBwZW4gc2luZCB1bmFiaMOkbmdpZyAtPiBFbnR3ZWRlciBpc3QgZGVyIEdhc3QgYmlvbG9naXNjaCB3ZWlibGljaCAvICBtw6RubmxpY2ggLCBiencuIGRlciBBbGtvaG9sZ2VoYWx0IGRlcyBlcnN0ZW4gR2V0csOkbmtlcyBpc3QgZW50d2VkZXIgMC4wNSB8IDAuMTUgfCAwLjM1Lg0KDQpEaWUgYWJow6RuZ2lnZSBWYXJpYWJsZW4gaXN0IG5vcm1hbHZlcnRlaWx0IGlubmVyaGFsYiBqZWRlciBkZXIgR3J1cHBlbi4gQWIgMjUgUHJvYmFuZGVuIHBybyBHcnVwcGUgc2luZCBWZXJsZXR6dW5nZW4gZGllc2VyIFZvcmF1c3NldHp1bmcgdW5wcm9ibGVtYXRpc2NoLT4gc2llaGUgSGlzdG9ncmFtbSANCg0Kb21vZ2VuaXTDpHQgZGVyIFZhcmlhbnplbjogRGllIEdydXBwZW4gc3RhbW1lbiBhdXMgR3J1bmRnZXNhbXRoZWl0ZW4gbWl0IGFubsOkaGVybmQgaWRlbnRpc2NoZW4gVmFyaWFuemVuIGRlciBhYmjDpG5naWdlbiBWYXJpYWJsZW4gLT4gc2llaGUgTGV2ZW5lLVRlc3QNCg0KDQojCURlc2tyaXB0aXZlIFN0YXRpc3Rpa2VuICsgUHLDvGZ1bmcgZGVyIFZvcmF1c3NldHp1bmcNCg0KDQojIyMgSGlzdG9ncmFtbSB6dXIgUHLDvGZ1bmcgZGVyIE5vcm1hbHZlcnR3ZWlsdW5nDQoNCiMjIyMgQWxrb2hvbA0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQptZWhyYW5vdmEgJT4lDQogIGdyb3VwX2J5KEFsa29ob2wpICU+JQ0KICBnZ3Bsb3QoYWVzKFNvbmdzLCBjb2xvcj1BbGtvaG9sKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKGZpbGwgPSBBbGtvaG9sKSwgYmlud2lkdGggPSAxLjUpICsNCiAgZmFjZXRfd3JhcCh+QWxrb2hvbCkgKw0KICB0aGVtZV9ncmV5KCkrDQogIGxhYnMoeD0gIkFuemFobCBkZXIgU29uZ3MiLHkgPSAiQW56YWhsIiApDQpgYGANCg0KRGllIERhdGVuIHNpbmQgbm9ybWFsdmVydGVpbHQgaW5uZXJoYWxiIGRlciBHcnVwcGUgQWxrb2hvbCB1bmQgQW56YWhsIGRlciBnZXN1bmdlbmVuIFNvbmdzLg0KDQoNCg0KYGBge3J9DQoNCm1laHJhbm92YSAlPiUNCiAgZ3JvdXBfYnkoR2VzY2hsZWNodCkgJT4lDQogIGdncGxvdChhZXMoU29uZ3MsIGNvbG9yPUdlc2NobGVjaHQpKSArIA0KICBnZW9tX2hpc3RvZ3JhbShhZXMoZmlsbCA9IEdlc2NobGVjaHQpLCBiaW53aWR0aCA9IDMuMykgKw0KICBmYWNldF93cmFwKH5HZXNjaGxlY2h0KSArDQogIHRoZW1lX2dyZXkoKSsNCiAgbGFicyh4PSAiQW56YWhsIGRlciBTb25ncyIseSA9ICJBbnphaGwiICkNCg0KYGBgDQpEaWUgRGF0ZW4gc2luZCBub3JtYWx2ZXJ0ZWlsdCBpbm5lcmhhbGIgZGVyIEdydXBwZSBHZXNjaGxlY2h0IHVuZCBBbnphaGwgZGVyIGdlc3VuZ2VuZW4gU29uZ3MsIG5pY2h0IHNlaHIgc2Now7ZuLiBBYiAyNSBUZWlsbmVobWVyIHBybyBHcnVwcGUgaXN0IGRhcyBUZXN0dmVyZmFocmVuIHJvYnVzdC4gDQpgYGB7cn0NCmdncGxvdChtZWhyYW5vdmEsIGFlcyh4PVNvbmdzKSkrDQpnZW9tX2hpc3RvZ3JhbSgpKw0KdGhlbWVfZ3JleSgpKw0KZmFjZXRfd3JhcChBbGtvaG9sfkdlc2NobGVjaHQsIG5jb2wgPSAyKQ0KYGBgIA0KQWIgMjUgVGVpbG5laG1lciBwcm8gR3J1cHBlIGlzdCBkYXMgVGVzdHZlcmZhaHJlbiByb2J1c3QuIEplZG9jaCBnaWJ0IGVzIFNjaHdpZXJpZ2tlaXRlbiBiZWkgZGVyIE5vcm1hbHZlcnRlaWx1bmcgYmVpIG1pdHRsZXJlbSBBbGtvaG9sZ2VoYWx0IGJlaSBkZW4gd2VpYmxpY2hlbiBCYXJiZXN1Y2hlcm4uIA0KDQojIyMgQm94cGxvdA0KDQoNCg0KYGBge3J9DQpnZ3Bsb3QobWVocmFub3ZhLCBhZXMoR2VzY2hsZWNodCwgU29uZ3MsIGZpbGw9ZmFjdG9yKEFsa29ob2wpKSkgKw0KZ2VvbV9ib3hwbG90KCkgKw0KdGhlbWVfbWluaW1hbCgpKw0KbGFicyhmaWxsID0gIkFsa29ob2xuaXZlYXUiLCB4PSJHZXNjaGxlY2h0IiwgeT0iQW56YWhsIFNvbmdzIikNCmBgYA0KDQojIERlc2tyaXB0aXZlIFN0YXRpc3Rpa2VuDQoNCg0KYGBge3J9DQptZWhyYW5vdmEgJT4lDQpncm91cF9ieShBbGtvaG9sKSAlPiUNCiAgc3VtbWFyaXplKEFuemFobCA9IG4oKSwgTWl0dGVsd2VydCA9IG1lYW4oU29uZ3MpLCBNZWRpYW4gPSBtZWRpYW4oU29uZ3MpLCBTdGFuZGFyZGFid2VpY2h1bmcgPSBzZChTb25ncykpICU+JQ0KICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpDQpgYGANCg0KQmVpIGdlcmluZ2VtIEFsa29ob2xnZWhhbHQgd2VyZGVuIDIuNjYgU29uZ3MgaW0gU2Nobml0dCBnZXN1bmdlbiAoU0QgPSAxLjE1LCBuID0gNTApLiBCZWkgbWl0dGxlcmVtIEFsa29ob2xnZWhhbHQgc2luZ2VuIGRpZSBCYXJiZXN1Y2hlciA1Ljg4IFNvbmdzIGltIER1cmNoc2Nobml0dCAoU0QgPSAxLjkyLCBuID0gNTApLiBCZWkgaG9oZXIgQWxrb2hvbGdlaGFsdCBzaW5nZW4gZGllIEJhcmJlc3VjaGVyIGRldXRsaWNoIG1laHIgU29uZ3MgLSBpbSBTY2huaXR0IDExIFNvbmdzIChTRCA9IDIuNTQsIG4gPSA1MCkuDQoNCg0KYGBge3J9DQptZWhyYW5vdmEgJT4lDQpncm91cF9ieShHZXNjaGxlY2h0KSAlPiUNCiAgc3VtbWFyaXplKEFuemFobCA9IG4oKSwgTWl0dGVsd2VydCA9IG1lYW4oU29uZ3MpLCBNZWRpYW4gPSBtZWRpYW4oU29uZ3MpLCBTdGFuZGFyZGFid2VpY2h1bmcgPSBzZChTb25ncykpICU+JQ0KICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpDQpgYGANCg0KDQoNCkVzIHplaWNobmV0IHNpY2ggZWluIHNjaHdpZXJpZ2VzIEJpbGQuIERlciBHZXNjaGxlY2h0ZXJ1bnRlcnNjaGllZCBpc3QgbnVyIG1pbmltYWwuIEJhcmJlc3VjaGVyIHNpbmdlbiA2LjQ0IFNvbmdzIGltIFNjaG5pdHQsIHdvaGluZ2VnZW4gQmFyYmVzdWNoZXJpbm5lbiA2LjU5IFNvbmdzIHNpbmdlbi4gRGFyw7xiZXIgaGluYXVzIHplaWdlbiBhdWNoIGRpZSBTdGFuZGFyZGFid2VpY2h1bmcgdW5kIGRlciBNaXR0ZWx3ZXJ0LCBkYXNzIHdhaHJzY2hlaW5saWNoIGtlaW5lIFNpZ25pZmlrYW56IHZvcmxpZWd0LiANCg0KDQoNCmBgYHtyfQ0KbWVocmFub3ZhICU+JQ0KZ3JvdXBfYnkoR2VzY2hsZWNodCwgQWxrb2hvbCkgJT4lDQogIHN1bW1hcml6ZShBbnphaGwgPSBuKCksIE1pdHRlbHdlcnQgPSBtZWFuKFNvbmdzKSwgTWVkaWFuID0gbWVkaWFuKFNvbmdzKSwgU3RhbmRhcmRhYndlaWNodW5nID0gc2QoU29uZ3MpKSAlPiUNCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCAyKQ0KYGBgDQoNCg0KQmVpIGdlcmluZ2VyIEFsa29ob2xnZWhhbHQgc2luZ2VuIGRpZSBNw6RubmVyIChNID0gMy4yNCwgU0QgPSAxLjE2NCkgbWVociBTb25ncyBhbHMgZGllIEZyYXVlbiAoTSA9IDIuMDgsIFNEID0gLjgxKS4gDQpEaWVzIGlzdCBhdWNoIGJlaSBtaXR0bGVyZXIgQWxrb2hvbGdlaGFsdCBlYmVuZmFsbHMgZGVyIEZhbGwgKE3DpG5uZXI6IE0gPSA2LjgsIFNEID0gMS43NTsgRnJhdWVuOiBNID0gNC45NiwgU0QgPSAuMS42NCkuIA0KQmVpIGhvaGVyIEFsa29ob2xnZWhhbHQgaXN0IGVzIGdlbmF1IHVtZ2VrZWhydDogRGllIEZyYXVlbiAoTSA9IDEyLjcyLCBTRCA9IDIuMDMpIHNpbmdlbiBkZXV0bGljaCBtZWhyIFNvbmdzIGFscyBkaWUgTcOkbm5lcihNID0gOS4yOCwgU0QgPSAxLjY5KS4NCg0KDQojIEFsdGVybmF0aXZlIA0KDQoNCmBgYHtyfQ0KDQptaXR0ZWwgPC10YXBwbHkobWVocmFub3ZhJFNvbmdzLCBsaXN0KG1laHJhbm92YSRBbGtvaG9sLCBtZWhyYW5vdmEkR2VzY2hsZWNodCksIG1lYW4sIG5hLnJtPVRSVUUpDQptaXR0ZWwNCg0KYGBgDQoNCmBgYHtyfQ0KDQpzZCA8LXRhcHBseShtZWhyYW5vdmEkU29uZ3MsIGxpc3QobWVocmFub3ZhJEFsa29ob2wsIG1laHJhbm92YSRHZXNjaGxlY2h0KSwgc2QsIG5hLnJtPVRSVUUpDQpzZA0KDQpgYGANCg0KYGBge3J9DQoNCmFuemFobHByb2dydXBwZSA8LSB0YXBwbHkobWVocmFub3ZhJFNvbmdzLCBsaXN0KG1laHJhbm92YSRBbGtvaG9sLCBtZWhyYW5vdmEkR2VzY2hsZWNodCksIGZ1bmN0aW9uKHgpIHN1bSghaXMubmEoeCkpKQ0KYW56YWhscHJvZ3J1cHBlIA0KYGBgDQoNCg0KDQojIFByb2ZpbGRpYWdyYW1tIA0KDQoNCmBgYHtyfQ0KDQpnZ3Bsb3QobWVocmFub3ZhLCBhZXMoeD1BbGtvaG9sLCB5PVNvbmdzLCBncm91cD1HZXNjaGxlY2h0LCBjb2xvcj0gR2VzY2hsZWNodCkpKw0KICBzdGF0X3N1bW1hcnkoZnVuLnkgPSBtZWFuLCBnZW9tPSJwb2ludCIsIHNpemU9MykrDQogIHN0YXRfc3VtbWFyeShmdW4ueSA9IG1lYW4sIGdlb209ImxpbmUiKSsNCiAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9jbF9ub3JtYWwsIGdlb209ImVycm9yYmFyIix3aWR0aD0uMiwgc2l6ZT0uMjUpKw0KICBsYWJzKHg9IkFsa29ob2wiLCB5PSJBbnphaGwgZGVyIFNvbmdzIikrDQogIHRoZW1lX2NsYXNzaWMoKQ0KDQoNCmBgYA0KDQoNCg0KIyBMZXZlbmUgLVRlc3QgDQoNCkRlciBMZXZlbmUtVGVzdCBwcsO8ZnQgZGllIE51bGxoeXBvdGhlc2UsIGRhc3MgZGllIFZhcmlhbnplbiBkZXIgR3J1cHBlbiBzaWNoIG5pY2h0IHVudGVyc2NoZWlkZW4uIElzdCBkZXIgTGV2ZW5lLVRlc3QgbmljaHQgc2lnbmlmaWthbnQsIHNvIGthbm4gdm9uIGhvbW9nZW5lbiBWYXJpYW56ZW4gYXVzZ2VnYW5nZW4uIFfDpHJlIGRlciBMZXZlbmUtVGVzdCBqZWRvY2ggc2lnbmlmaWthbnQsIHNvIHfDpHJlIGVpbmUgZGVyIEdydW5kdm9yYXVzc2V0enVuZ2VuIGRlciBWYXJpYW56YW5hbHlzZSB2ZXJsZXR6dC4gR2VnZW4gbGVpY2h0ZSBWZXJsZXR6dW5nZW4gZ2lsdCBkaWUgVmFyaWFuemFuYWx5c2UgYWxzIHJvYnVzdDsgdm9yIGFsbGVtIGJlaSBnZW7DvGdlbmQgZ3Jvc3NlbiB1bmQgZXR3YSBnbGVpY2ggZ3Jvc3NlbiBHcnVwcGVuIHNpbmQgVmVybGV0enVuZ2VuIG5pY2h0IHByb2JsZW1hdGlzY2guIEJlaSB1bmdsZWljaCBncm9zc2VuIEdydXBwZW4gZsO8aHJ0IGVpbmUgc3RhcmtlIFZlcmxldHp1bmcgZGVyIFZhcmlhbnpob21vZ2VuaXTDpHQgenUgZWluZXIgVmVyemVycnVuZyBkZXMgRi1UZXN0cy4gQWx0ZXJuYXRpdiBrw7ZubmVuIGRhbm4gYXVmIGRlbiBCcm93bi1Gb3JzeXRoZS1UZXN0IG9kZXIgZGVuIFdlbGNoLVRlc3QgenVyw7xja2dlZ3JpZmZlbiB3ZXJkZW4uIERhYmVpIGhhbmRlbHQgZXMgc2ljaCB1bSBhZGp1c3RpZXJ0ZSBGLVRlc3RzLiANCg0KYGBge3J9DQpsaWJyYXJ5KGNhcikNCmBgYA0KDQpgYGB7cn0NCmxldmVuZVRlc3QoU29uZ3MgfiBBbGtvaG9sKkdlc2NobGVjaHQsIGRhdGEgPSBtZWhyYW5vdmEsIGNlbnRlciA9ICJtZWFuIikNCmBgYA0KDQpJbSB2b3JsaWVnZW5kZW4gQmVpc3BpZWwgaXN0IGRlciBMZXZlbmUtVGVzdCBzaWduaWZpa2FudCAoRig1LDE0NCkgPSA1LjYyNiwgcCA8IC4wMDAgKSwgc28gZGFzcyB2b24gVmFyaWFuemhldGVyb2dlbml0w6R0IGF1c2dlZ2FuZ2VuIHdlcmRlbiBrYW5uLiBEYSBkaWUgVmFyaWFuemVuIGxlaWRlciBuaWNodCBnbGVpY2ggc2luZCwgaXN0IGVzIHp1IGVtcGZlaGxlbiBlaW5lIEtvcnJla3R1ciBtaXRoaWxmZSBkZXMgV2VsY2gtVGVzdHMgZHVyY2h6dWbDvGhyZW4uIA0KDQojIyMgRW50c2NoZWl1bmdzcmVnZWxuDQoNCipNaXQgV2VsY2gtS29ycmVrdHVyKjogcCA8IDAuMDUgPT4gRXJnZWJuaXMgU2lnbmlmaWthbnQgLS0+IFZhcmlhbnplbiBoZXRlcm9nZW4NCg0KKk9obmUgV2VsY2gtS29ycmVrdHVyKjogcCA+IDAuMDUgPT4gRXJnZWJuaXMgbmljaHQgU2lnbmlmaWthbnQgLS0+IFZhcmlhbnplbiBob21vZ2VuIC0tPiBIMCBtaXQgQW5uYWhtZSBWYXIxPVZhcjI9Li4uIC0+IFZhcl9uIHdpcmQgYW5nZW5vbW1lbg0KDQoNCiMJRXJnZWJuaXNzZSBkZXIgbWVocmZha3RvcmllbGxlIFZhcmlhbnphbmFseXNlIChvaG5lIE1lc3N3aWVkZXJob2x1bmcpDQoNCipLZWluZSBXZWxjaC1Lb3JyZWt0dXIgKiAtIGlzdCBkZXIgU3RhbmRhcmQNCmBgYHtyfQ0KDQptZWhyQW5vdmExIDwtIGxtKFNvbmdzIH4gR2VzY2hsZWNodCpBbGtvaG9sLCBkYXRhID0gbWVocmFub3ZhKQ0KbXlBbm92YSA8LSBBbm92YShtZWhyQW5vdmExICwgdHlwZSA9IDMpDQpteUFub3ZhDQpgYGANCg0KKm1pdCBXZWxjaC1Lb3JyZWt0dXIgKiBpc3QgenVyIEtvbnRyb2xsZSBnZWRhY2h0IA0KDQpFcyBsaWVndCBlaW5lIFZlcmxldHp1bmcgZGVyIFZhcmlhbnpob21vZ2VuaXTDpHQgdm9yKHNpZWhlIExldmVuZS1UZXN0KS4gRGFoZXIgc29sbHRlIGVpbiByb2J1c3RlcmVyIFRlc3QgYmVyw7xja3NpY2h0aWd0IHdlcmRlbiAoKiBtaXQgd2VsY2gqICkuICoqQWxsZXJkaW5ncyBiaWV0ZW4gc2ljaCBoaWVyIGtlaW5lIHdlaXRnZWhlbmQgYWt6ZXB0aWVydGVuIFZlcmZhaHJlbiBhbioqLiBEYWhlciB3aXJkIGRlciBTdGFuZGFyZCB3ZWl0ZXJnZWbDvGhydC4gDQoNCg0KYGBge3J9DQoNCmdlc2NobGVjaHR3ZWxjaCA8LSBvbmV3YXkudGVzdChTb25nc35HZXNjaGxlY2h0LCBkYXRhID0gbWVocmFub3ZhLCB2YXIuZXF1YWwgPSBGKQ0KZ2VzY2hsZWNodHdlbGNoDQpgYGANCkbDvHIgZGVuIEZha3RvciBHZXNjaGxlY2h0IHdpcmQga2VpbiBIYXVwdGVmZmVrdCBlcnNpY2h0bGljaC4gRGllIEFuemFobCBkZXIgZ2VzdW5nZW5lbiBTb25ncyBzY2hlaW50IGRlbW5hY2ggdW5hYmjDpG5naWcgdm9tIEdlc2NobGVjaHQgenUgc2VpbiAoRigxLDEyMi43MikgPSAuMDUxMiwgcCA9IC44MjEzKS4NCg0KDQpgYGB7cn0NCg0KYWxrb2hvbHdlbGNoIDwtIG9uZXdheS50ZXN0KFNvbmdzfkFsa29ob2wsIGRhdGEgPSBtZWhyYW5vdmEsIHZhci5lcXVhbCA9IEYpDQphbGtvaG9sd2VsY2gNCmBgYA0KDQpFcyBnaWJ0IGVpbmVuIEhhdXB0ZWZmZWt0IGRlciBBbGtvaG9sZ2VoYWx0IGF1ZiBkaWUgQW56YWhsIGRlciBnZXN1bmdlbmVuIFNvbmdzIChGKDIsODguNDE5KSA9IDIzOC40NSwgcCA9IC4wMDApLg0KRGFzIGJlZGV1dGV0LCBkYXNzIEfDpHN0ZSBkZXIgS2FyYW9rZS1CYXIgaW4gQWJow6RuZ2lna2VpdCBkZXMgQWxrb2hvbGdlaGFsdCB1bnRlcnNjaGllZGxpY2ggdmllbGUgU29uZ3Mgc2luZ2VuLiANCg0KYGBge3J9DQoNCkFYQndlbGNoIDwtIG9uZXdheS50ZXN0KFNvbmdzfkFsa29ob2wqR2VzY2hsZWNodCwgZGF0YSA9IG1laHJhbm92YSwgdmFyLmVxdWFsID0gRikNCkFYQndlbGNoIA0KYGBgDQpEZXIgSW50ZXJha3Rpb25zdGVybSB2b24gQWxrb2hvbGdlaGFsdCB1bmQgR2VzY2hsZWNodCBhdWYgZGllIEFuemFobCBkZXIgZ2VzdW5nZW5lbiBTb25ncyBpc3Qgc2lnbmlmaWthbnQgKEYoNSw2NS43MTYpID0gMTczLjcyLCBwID0gLjAwMCkuIERlciBFZmZla3Qgdm9uIEFsa29ob2xnZWhhbHQgaMOkbmd0IGRlbW5hY2ggenUgZWluZW0gZ2V3aXNzZW4gVGVpbCB2b20gR2VzY2hsZWNodCBhYi4gDQoNCg0KDQpgYGB7cn0NCiN6dXNhbW1lbmZhc3N1bmcgPC0gcmJpbmQoYWxrb2hvbHdlbGNoLGdlc2NobGVjaHR3ZWxjaCxBWEJ3ZWxjaCkNCg0KYGBgDQoNCg0KIwlQb3N0LUhvYy1UZXN0DQoNCnN0IGVpbiBIYXVwdGVmZmVrdCBvZGVyIGVpbmUgSW50ZXJha3Rpb24gc2lnbmlmaWthbnQsIHNvIGlzdCB6d2FyIGJlc3TDpHRpZ3QsIGRhc3MgZWluIEVmZmVrdCB2b3JsaWVndCwgZG9jaCBpc3QgbmFjaCB3aWUgdm9yIHVua2xhciwgd2VsY2hlIEZha3RvcnN0dWZlbiBzaWNoIHVudGVyc2NoZWlkZW4sIHNvYmFsZCBlaW4gRmFrdG9yIG1laHIgYWxzIHp3ZWkgQXVzcHLDpGd1bmdlbiBhdWZ3ZWlzdC4gKEJlaSB6d2VpIEF1c3Byw6RndW5nZW4gdW50ZXJzY2hlaWRlbiBzaWNoIGViZW4gZGllc2UgendlaSBBdXNwcsOkZ3VuZ2VuIHZvbmVpbmFuZGVyLCBzb25zdCB3w6RyZSBkZXIgRi1UZXN0IG5pY2h0IHNpZ25pZmlrYW50LikgSW0gdm9ybGllZ2VuZGVuIEJlaXNwaWVsIGxpZWdlbiBlaW4gRWZmZWt0IGRlciBBbGtvaG9sZ2VoYWx0IHNvd2llIGVpbiBJbnRlcmFrdGlvbnNlZmZla3Qgdm9yLiBQb3N0LWhvYy1UZXN0cyBrw7ZubmVuIGVpbmZhY2ggZWluZ2VzZXR6dCB3ZXJkZW4sIHVtIHp1IHByw7xmZW4sIHdlbGNoZSBMZXZlbHMgZGVyIEFsa29ob2xnZWhhbHQgc2ljaCB1bnRlcnNjaGVpZGVuLiBGw7xyIGRpZSBJbnRlcmFrdGlvbiBpc3QgZGllcyBpbiBTUFNTIG5pY2h0IGltcGxlbWVudGllcnQuDQoNCldpZSBiZXJlaXRzIGVyd8OkaG50IHd1cmRlLCBiZWluaGFsdGV0IGRlciBGYWt0b3IgQWxrb2hvbGdlaGFsdCBkcmVpIFN0dWZlbi4gQXVzIGRlbSBzaWduaWZpa2FudGVuIEhhdXB0ZWZmZWt0IGzDpHNzdCBzaWNoIG5pY2h0IGFibGVpdGVuLCB3ZWxjaGUgZGVyIEZha3RvcnN0dWZlbiBlaW5lbiBzaWduaWZpa2FudCB1bnRlcnNjaGllZGxpY2hlbiBFaW5mbHVzcyBhdWYgZGllIGFiaMOkbmdpZ2UgVmFyaWFibGUgaGFiZW4uIFp1IGRpZXNlbSBad2VjayB3ZXJkZW4gVHVrZXkta29ycmlnaWVydGUgTWVocmZhY2h2ZXJnbGVpY2hlIGJlcmVjaG5ldC4NCg0KQmVpIGRlciBCZXJlY2hudW5nIHZvbiBQb3N0LWhvYy1UZXN0cyB3aXJkIGltIFByaW56aXAgZsO8ciBqZWRlIEtvbWJpbmF0aW9uIHZvbiB6d2VpIE1pdHRlbHdlcnRlbiBlaW4gdC1UZXN0IGR1cmNoZ2Vmw7xocnQuIEltIGFrdHVlbGxlbiBCZWlzcGllbCBkZXIgQWxrb2hvbGdlaGFsdCBtaXQgZHJlaSBHcnVwcGVuLCBiencuIHp3ZWkgR3J1cHBlbiBzaW5kIGRpZXMgMTUgVGVzdHMuIE11bHRpcGxlIFRlc3RzIHNpbmQgamVkb2NoIHByb2JsZW1hdGlzY2gsIGRhIGRlciBBbHBoYS1GZWhsZXIgKGRpZSBmw6Rsc2NobGljaGUgQWJsZWhudW5nIGRlciBOdWxsaHlwb3RoZXNlKSBtaXQgZGVyIEFuemFobCBkZXIgVmVyZ2xlaWNoZSBzdGVpZ3QuIFdpcmQgbnVyIGVpbiB0LVRlc3QgbWl0IGVpbmVtIFNpZ25pZmlrYW56bGV2ZWwgdm9uIC4wNSBkdXJjaGdlZsO8aHJ0LCBzbyBiZXRyw6RndCBkaWUgV2FocnNjaGVpbmxpY2hrZWl0IGRlcyBOaWNodC1FaW50cmVmZmVucyBkZXMgQWxwaGEtRmVobGVycyA5NSUuIFdlcmRlbiBqZWRvY2ggMTUgc29sY2hlciBQYWFydmVyZ2xlaWNoZSB2b3JnZW5vbW1lbiwgc28gYmV0csOkZ3QgZGllIE5pY2h0LUVpbnRyZWZmZW5zLVdhaHJzY2hlaW5saWNoa2VpdCBkZXMgQWxwaGEtRmVobGVycyAoLjk1KTE1ID0gLjQ2MzIuIFVtIGRpZSBXYWhyc2NoZWlubGljaGtlaXQgZGVzIEVpbnRyZWZmZW5zIGRlcyBBbHBoYS1GZWhsZXJzIHp1IGJlc3RpbW1lbiwgd2lyZCAxIC0uNDYzMiA9IC41MzY3IGdlcmVjaG5ldC4gRGllIFdhaHJzY2hlaW5saWNoa2VpdCBkZXMgRWludHJlZmZlbnMgZGVzIEFscGhhLUZlaGxlcnMgbGllZ3Qgc29taXQgYmVpIDUzLjY3JS4gRGllc2UgRmVobGVyd2FocnNjaGVpbmxpY2hrZWl0IHdpcmQgYWxzICJGYW1pbHl3aXNlIEVycm9yIFJhdGUiIGJlemVpY2huZXQuDQoNClVtIGRpZXNlcyBQcm9ibGVtIHp1IGJlaGViZW4sIGthbm4genVtIEJlaXNwaWVsIGRpZSBUdWtleS1Lb3JyZWt0dXIgYW5nZXdlbmRldCB3ZXJkZW4uIEhpZXJiZWkgd2lyZCDOsSBkdXJjaCBkaWUgQW56YWhsIGRlciBQYWFydmVyZ2xlaWNoZSBkaXZpZGllcnQuIEltIGhpZXIgYXVmZ2Vmw7xocnRlbiBGYWxsIGlzdCBkaWVzIC4wNS8xNSA9IC4wMDMzMy4gQmVpIGRpZXNlbSBLb3plcHQgaGFuZGVsdCBlcyBzaWNoIHVtIGVpbmUgYWxsZ2VtZWluZSBJbmZvcm1hdGlvbi4NCg0KDQoqRGllIFR1a2V5IGJlcsO8Y2tzaWNodGlndCBkaWUgS29ycmVrdHVyLCBkYWhlciBrYW5uIHdlaXRlciBnZWdlbiAwLjA1IGdldGVzdGV0IHdlcmRlbi4qDQoNCmBgYHtyfQ0KDQpQb3N0SG9jIDwtIGFvdihTb25ncyB+IEdlc2NobGVjaHQqQWxrb2hvbCwgZGF0YT1tZWhyYW5vdmEpIA0KI0FsdGVybmF0aXYgYXVjaCBkZXIgTmFtZSBkZXMgWndpc2NoZW5zcGVpY2hlcnMgIm1laHIiIC0gUG9zdEhvYyA8LSBhb3YobWVocikgIA0KVHVrZXlIU0QoUG9zdEhvYykNCg0KYGBgDQpXaWUgdmVybXV0ZXQsIHplaWNobmV0IHNpY2ggYmVpIEdlc2NobGVjaHQga2VpbmUgc2lnbmlmaWthbnQgYWIuIERpZSBBbGtvaG9sZ2VoYWx0c2tvbWJpbmF0aW9uZW4gdW50ZXJzY2hlaWRlbiBzaWNoIHNpZ25pZmlrYW50LiANCg0KRsO8ciBkYXMgdm9ybGllZ2VuZGUgQmVpc3BpZWwgd2lyZCBlcnNpY2h0bGljaCwgZGFzcyBzaWNoIGRlciBBbGtvaG9sZ2VoYWx0IHVuZCBkYXMgR2VzY2hsZWNodCBiZXrDvGdsaWNoIGRlciBnZXN1bmdlbmVuIFNvbmdzIHNpZ25pZmlrYW50IHVudGVyc2NoZWlkZW4gKHAgPCAuMDUpLiBKZWRvY2gga2FubiBrZWluIFVudGVyc2NoaWVkIGbDvHIgZGFzIEdlc2NobGVjaHQgbWl0IGVpbmVyIGdlcmluZ2VtIEFsa29ob2xnZWhhbHQgdm9uIDAuMDUgUHJvemVudCBmZXN0Z2VzdGVsbHQgd2VyZGVuIChwIDwgLjA1KS4gRXMga8O2bm5lbiA1IEdydXBwZW4gZ2ViaWxkZXQgd2VyZGVuLiANCg0KDQoNCjEpIFdhcyBpc3Qgc2lnIHVuZCB3YXMgbmljaHQ/DQoxNCB2b24gMTUgVmVyZ2xlaWNoZW4gc2luZCBzaWcuICAocCA8IC4wNSkuDQpOaWNodCBzaWcuIGlzdCB3OmdlcmluZy1tOmdlcmluZyAocCA9IC4xMDEzMzY1KQ0KDQoyKSBHZW5lcmFsaXNpZXJiYXJrZWl0IC9VbmFiaMOkbmdpZ2tlaXQgIC0gZ2xvYmFsPw0KDQorIG1pdHRlbCB3ZWlibGljaA0KKyBtaXR0ZWwgbcOkbm5saWNoDQorIGhvY2ggd2VpYmxpY2gNCisgaG9jaCBtw6RubmxpY2gNCg0KVmllciBHcnVwcGVuIHNpbmQgdW5hYmjDpG5naWdlIC8gZ2VuZXJhbGlzaWVyYmFyLiANCg0KMykgR3J1cHBlbmJpbGR1bmc/DQoNCkVzIGvDtm5uZW4gNSBHcnVwcGVuIGdlYmlsZGV0IHdlcmRlbi4gDQoNCjQpIEludGVyYWt0aW9uPw0KDQpCZWkgZ2VyaW5nZXJlbSBBbGtvaG9sZ2VoYWx0IGxhZyBNw6RubmVyIChNID0gMy4yNCwgU0QgPSAxLjE2NCkgw7xiZXIgamVuZW0gZGVyIEZyYXVlbiAoTSA9IDIuMDgsIFNEID0gLjgxKSwgYWxsZXJkaW5ncyBrb25udGUgZGVyIFVudGVyc2NoaWVkIGltIFBvc3QtSG9jIG5pY2h0IGJlc3TDpHRpZ3Qgd2VyZGVuLiANCkJlaSBtaXR0bGVyZXIgQWxrb2hvbGdlaGFsdCAoTcOkbm5lcjogTSA9IDYuOCwgU0QgPSAxLjc1OyBGcmF1ZW46IE0gPSA0Ljk2LCBTRCA9IC4xLjY0KSBrb25udGUgZGVyIE1pdHRlbHdlcnRzdW50ZXJzY2hpZWQgYmVzdMOkdGlndCB3ZXJkZW4uIA0KQmVpIGhvaGVtIEFsa29ob2xnZWhhbHQgdmVyaMOkbHQgZXMgc2ljaCBnZW5hdSBhbmRlcnNydW0gLSAgRnJhdWVuIHNhbmdlbiAoTSA9IDEyLjcyLCBTRCA9IDIuMDMpIGRldXRsaWNoIG1laHIgU29uZ3MgYWxzIGRpZSBNw6RubmVyIChNID0gMTIuNzIsIFNEID0gMi4wMykuIERhcyBFcmdlYm5pcyBrb25udGUgYmVzdMOkdGlndCB3ZXJkZW4uDQoNCg0KDQoNCiMjIyBBbHRlcm5hdGl2DQoNCkJvbmZlcnJvbmkgdW5kIFR1a2V5OiBzZWhyIHN0cmVuZ2UgS29udHJvbGxlIGRlcyBGZWhsZXJzIDEuIEFydCwgenUgZ2VyaW5nZSBUZXN0c3TDpHJrZSwgZGVzaGFsYiB6dSBrb25zZXJ2YXRpdi4gQmVpIHdlbmlnZW4gUGFhcnZlcmdsZWljaGVuIGhhdCBCb25mZXJyb25pIG1laHIgVGVzdHN0w6Rya2UsIGJlaSB2aWVsZW4gUGFhcnZlcmdsZWljaGVuIGhhdCBUdWtleSBtZWhyIFRlc3RzdMOkcmtlLg0KDQoNCmBgYHtyfQ0KDQoNCnBhaXJ3aXNlLnQudGVzdChtZWhyYW5vdmEkU29uZ3MsIG1laHJhbm92YSRHZXNjaGxlY2h0LCBkYXRhPW1laHJhbm92YSwgcG9vbC5zZD1ULHZhci5lcXVhbD1GQUxTRSkNCg0KDQpgYGANCg0KYGBge3J9DQpwYWlyd2lzZS50LnRlc3QobWVocmFub3ZhJFNvbmdzLCBtZWhyYW5vdmEkQWxrb2hvbCwgZGF0YT1tZWhyYW5vdmEsIHBvb2wuc2Q9VCx2YXIuZXF1YWw9RikNCg0KYGBgDQoNCkJlaSBkaWVzZW0gVGVzdHZlcmZhaHJlbiBtdXNzIGRlciBhcGxoYXdlcnQga29ycmlnaWVydCB3ZXJkZW4uIA0KDQoNCmBgYHtyfQ0KbmV3YWxwaGE8LSAgMC4wNS8xNQ0KbmV3YWxwaGENCmBgYA0KYGBge3J9DQppbnRlcmFrdGlvbj1wYXN0ZShtZWhyYW5vdmEkR2VzY2hsZWNodCwgbWVocmFub3ZhJEFsa29ob2wsIHNlcD0iLiIpIA0KDQpwYWlyd2lzZS50LnRlc3QobWVocmFub3ZhJFNvbmdzLCBpbnRlcmFrdGlvbiwgZGF0YT1tZWhyYW5vdmEsIHZhci5lcXVhbD1GQUxTRSkNCg0KYGBgDQoNCiMjIEdhbWVzIC0gSG93ZWxsDQoNCmBgYHtyfQ0KaW50ZXJha3Rpb249cGFzdGUobWVocmFub3ZhJEdlc2NobGVjaHQsIG1laHJhbm92YSRBbGtvaG9sLCBzZXA9Ii4iKSANCg0KbWVocmFub3ZhWyJpbnRlcmFrdGlvbiJdIDwtIGludGVyYWt0aW9uDQoNClZpZXcobWVocmFub3ZhKQ0KYGBgDQoNCg0KYGBge3J9DQojRmFrdG9yIEENCm1laHJhbm92YSRHZXNjaGxlY2h0IDwtIGFzLmZhY3RvcihtZWhyYW5vdmEkR2VzY2hsZWNodCkNCkFOT1ZBIDwtIGFvdihTb25nc35HZXNjaGxlY2h0LCBtZWhyYW5vdmEpDQplcmcgPC0gUE1DTVJwbHVzOjpnYW1lc0hvd2VsbFRlc3QoQU5PVkEpDQpzdW1tYXJ5IChlcmcpDQoNCiMgRmFrdG9yIEINCm1laHJhbm92YSRBbGtvaG9sIDwtIGFzLmZhY3RvcihtZWhyYW5vdmEkQWxrb2hvbCkNCkFOT1ZBIDwtIGFvdihTb25nc35BbGtvaG9sLCBtZWhyYW5vdmEpDQplcmcgPC0gUE1DTVJwbHVzOjpnYW1lc0hvd2VsbFRlc3QoQU5PVkEpDQpzdW1tYXJ5IChlcmcpDQoNCg0KI0ludGVyYWt0aW9uDQoNCm1laHJhbm92YSRpbnRlcmFrdGlvbiA8LSBhcy5mYWN0b3IobWVocmFub3ZhJGludGVyYWt0aW9uKQ0KQU5PVkEgPC0gYW92KFNvbmdzfmludGVyYWt0aW9uLCBtZWhyYW5vdmEpDQplcmcgPC0gUE1DTVJwbHVzOjpnYW1lc0hvd2VsbFRlc3QoQU5PVkEpDQpzdW1tYXJ5IChlcmcpDQpgYGANCg0KDQoNCg0KDQoNCg0KIyBEYXMgcGFyLiBFdGEtUXVhZHJhdA0KDQoNCkRhcyBwYXJ0aWVsbGUgRXRhLVF1YWRyYXQgKHBhcnRpZWxsZXMgzrcyKSBpc3QgaW4gQWJiaWxkdW5nIGF1c2dlZ2ViZW4uIA0KDQoNCg0KJCRcZXRhXjJfe3BhcnRpYWwgQX09IFxmcmFjIHtRU19BfXtRU19BK1FTX3tpbm59fSQkDQoNCiQkXGV0YV4yX3twYXJ0aWFsIEJ9PSBcZnJhYyB7UVNfQn17UVNfQitRU197aW5ufX0kJA0KDQokJFxldGFeMl97cGFydGlhbCBBeEJ9PSBcZnJhYyB7UVNfe0F4Qn19e1FTX3tBeEJ9K1FTX3tpbm59fSQkDQoNCg0KJCRcZXRhX0E9IFxmcmFjIHtRU19BfXtRU197dG90YWx9fSQkDQokJFxldGFfQj0gXGZyYWMge1FTX0J9e1FTX3t0b3RhbH19JCQNCiQkXGV0YV97QXhCfT0gXGZyYWMge1FTX3tBeEJ9fXtRU197dG90YWx9fSQkDQoNCg0KDQoNCg0KDQpgYGB7cn0NCg0KZXRhIDwtIGVmZmVjdHNpemU6OmV0YV9zcXVhcmVkKG1laHJBbm92YTEsIHBhcnRpYWwgPSBUUlVFKQ0KZXRhDQoNCmBgYA0KDQpJbSB2b3JsaWVnZW5kZW4gQmVpc3BpZWwgaXN0IGRlciBFZmZla3QgZGVzIEdlc2NobGVjaHRzIG5pY2h0IHNpZ25pZmlrYW50LiBEYWhlciB3aXJkIGRlc3NlbiBwYXJ0aWVsbGVzIEV0YS1RdWFkcmF0IG5pY2h0IGJldHJhY2h0ZXQuIEbDvHIgZGllIEFsa29ob2xnZWhhbHQgYmV0csOkZ3QgZGFzIHBhcnRpZWxsZSBFdGEtUXVhZHJhdCAuODMzLiBEYXMgaGVpc3N0LCBkaWUgQWxrb2hvbGdlaGFsdCBlcmtsw6RydCA4MyUgZGVyamVuaWdlbiBGZWhsZXJ2YXJpYXRpb24sIGRpZSBkYXMgTW9kZWxsIGjDpHR0ZSwgd8OkcmUgQWxrb2hvbGdlaGFsdCBuaWNodCBpbSBNb2RlbGwuIERhcyBwYXJ0aWVsbGUgRXRhLVF1YWRyYXQgZGVyIEludGVyYWt0aW9uIGJldHLDpGd0IC4zNjcgdW5kIGVya2zDpHJ0IGRhaGVyIDMlIGRlciBvaG5lIGRpZSBJbnRlcmFrdGlvbiB1bmdla2zDpHJ0ZW4gVmFyaWF0aW9uLg0KDQoNCg0KDQojCUJlcmVjaG51bmcgZGVyIEVmZmVrdHN0w6Rya2UNCg0KJCRmPVxzcXJ0XGZyYWN7XGV0YV57Mn19ezEtXGV0YV57Mn19PVxzcXJ0XGZyYWN7ZXRhXnsyfX17MS1ldGFeezJ9fSQkDQoNCg0KDQojIyMjIEVmZmVrdHN0w6Rya2UgZsO8cnMgR2VzY2hsZWNodCANCmBgYHtyfQ0KDQplZmZnZW5kZXIgPC0gc3FydChldGEkRXRhMl9wYXJ0aWFsWzFdLygxLWV0YSRFdGEyX3BhcnRpYWxbMV0pKQ0KDQpzcHJpbnRmKCJFZmZla3RzdMOkcmtlIGbDvHJzIEdlc2NobGVjaHQ6IGY9ICUuM2YiLCBlZmZnZW5kZXIpDQoNCmBgYA0KIyMjIyBFZmZla3RzdMOkcmtlIGbDvHJzIEFsa29ob2xnZWhhbHQgDQpgYGB7cn0NCg0KZWZmYWxrIDwtIHNxcnQoZXRhJEV0YTJfcGFydGlhbFsyXS8oMS1ldGEkRXRhMl9wYXJ0aWFsWzJdKSkNCg0Kc3ByaW50ZigiRWZmZWt0c3TDpHJrZSBmw7xycyBBbGtvaG9sZ2VoYWx0OiBmPSAlLjNmIixlZmZhbGspDQoNCmBgYA0KIyMjIyBFZmZla3RzdMOkcmtlIGbDvHIgZGllIEludGVyYWt0aW9uDQpgYGB7cn0NCg0KZWZmQXhCIDwtIHNxcnQoZXRhJEV0YTJfcGFydGlhbFszXS8oMS1ldGEkRXRhMl9wYXJ0aWFsWzNdKSkNCg0Kc3ByaW50ZigiRWZmZWt0c3TDpHJrZSBmw7xyIGRpZSBJbnRlcmFrdGlvbjogZj0gJS4zZiIsZWZmQXhCKQ0KDQoNCmBgYA0KDQoNCg0KVW0genUgYmV1cnRlaWxlbiwgd2llIGdyb3NzIGRpZXNlciBFZmZla3QgaXN0LCBrYW5uIG1hbiBzaWNoIGFuIGRlciBFaW50ZWlsdW5nIHZvbiBDb2hlbiAoMTk4OCkgb3JpZW50aWVyZW46DQoNCiQkDQpcYmVnaW57YWxpZ259DQpcdGV4dHtTY2h3YWNoZXIgRWZmZWt0OiB9IDAuMTAgJjwgfHxmfHwgPCAwLjI1ICAgICAgICAgICAgIFxcDQpcdGV4dHtTY2h3YWNoZXIgYmlzIG1pdHRsZXJlciBFZmZla3Q6IH0gMC4yNSAmPSB8fGZ8fCAgICAgIFxcDQpcdGV4dHtNaXR0bGVyZXIgRWZmZWt0OiB9IDAuMjUgJjwgfHxmfHwgPCAwLjQwICAgICAgICAgICAgIFxcDQpcdGV4dHtNaXR0bGVyZXIgYmlzIHN0YXJrZXIgRWZmZWt0OiB9MC40MCAmPSB8fGZ8fCAgICAgICAgIFxcDQpcdGV4dHtTdGFya2VyIEVmZmVrdDogfSAwLjQwICY8IHx8Znx8ICAgICAgICANClxlbmR7YWxpZ259DQokJA0KDQpEYW1pdCBlbnRzcHJlY2hlbiBkaWUgRWZmZWt0c3TDpHJrZW4gdm9uIDIuMjMgdW5kIDAuNzYgZWluZW0gc3RhcmtlbiBFZmZla3QuDQpGw7xyIEdlc2NobGVjaHQgbGllZ3QgbmF0w7xybGljaCBrZWluIEVmZmVrdCB2b3IgLSBlcyBzZWkgbnVyIGRlciBWb2xsc3TDpG5kaWdrZWl0IGVyd8OkaG50Lg0KIA0KIwlFaW5lIEF1c3NhZ2UNCg0KIyMgSHlwb3RoZXNlbg0KDQpFcyB6ZWlndCBzaWNoLCBkYXNzIGVzIGtlaW5lbiBVbnRlcnNjaGllZCB6d2ljaGVuIGRlbSBHZXNjaGxlY2h0ICB1bmQgZGVyIEFuemFobCBhbiBnZXN1bmdlbmVuIFNvbmdzIGFsbGVpbiBnaWJ0IChGKDEsMTIyLjcyKSA9IC4wNTEyLCBwID0gLjgyMTMpLiBIMCBmw7xyIGRlbiBIYXVwdGVmZmVrdCBBIHdpcmQgYW5nZW5vbW1lbi4NCg0KQWxsZXJkaW5ncyBqZSBuYWNoIEFsa29ob2xnZWhhbHQgZGVzIGVyc3RlbiBHZXRyw6Rua2VzIGdpYnQgZXMgZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gZGVuIGdlc3VuZ2VuZW4gU29uZ3MgIChGKDIsODguNDE5KSA9IDIzOC40NSwgcCA9IC4wMDApLiAgSDAgZsO8ciBkZW4gSGF1cHRlZmZla3QgQiB3aXJkIHZlcndvcmZlbi4NCg0KRGVyIEludGVyYWt0aW9uc3Rlcm0gdm9uIEFsa29ob2xnZWhhbHQgdW5kIEdlc2NobGVjaHQgYXVmIGRpZSBBbnphaGwgZGVyIGdlc3VuZ2VuZW4gU29uZ3MgaXN0IHNpZ25pZmlrYW50IChGKDUsNjUuNzE2KSA9IDE3My43MiwgcCA9IC4wMDApLiBEZXIgRWZmZWt0IHZvbiBBbGtvaG9sZ2VoYWx0IGjDpG5ndCBkZW1uYWNoIHp1IGVpbmVtIGdld2lzc2VuIFRlaWwgdm9tIEdlc2NobGVjaHQgYWIuIEgwIGbDvHIgZGVuIEludGVyYWt0aW9uIEF4QiB3aXJkIHZlcndvcmZlbi4NCg0KIyMgUG9zdC0gSG9jIC0gVGVzdCANCkRlciBQb3N0SG9jIHd1cmRlIG1pdCBUdWtleSBkdXJjaGdlZsO8aHJ0LiBGw7xyIEdlc2NobGVjaHQgemVpZ3RlIHNpY2gga2VpbmUgc2lnbmlmaWthbnQgYWIgKHAgPSAwLjEwMSkuIEVzIHplaWd0LCBkYXNzIHNpY2ggYWxsZSBHcnVwcGVuIGbDvHIgQWxrb2hvbGdlaGFsdCBzaWduaWZpa2FudCB1bnRlcnNjaGVpZGVuOiBHZXJpbmcgKE0gPSAyLjY2ICxTRCA9IDEuMTUsIE49NTApLCBtaXR0bGVyZSBBbGtvaG9sbml2ZWF1IChNID0gNS44OCwgU0QgPSAxLjkyLCBuPTUwKSB1bmQgaG9oZSBBbGtvaG9sbml2ZWF1IChNID0gMTEsIFNEID0gMi41NCwgbj01MCkuDQoNCipadWRlbSB6ZWlndCBzaWNoIGVpbmUgc2lnbmlmaWthbnRlIEludGVyYWt0aW9uIHZvbiBHZXNjaGxlY2h0IHVuZCBBbGtvaG9sZ2VoYWx0IGF1ZiBkaWUgQW56YWhsIGRlciBnZXN1bmdlbmVuIFNvbmdzLkRpZXMgd2Vpc3QgZGFyYXVmIGhpbiwgZGFzcyBzaWNoIEFsa29ob2xnZWhhbHQgamUgbmFjaCBHZXNjaGxlY2h0IHVudGVyc2NoaWVkbGljaCBhdXN3aXJrdC4qDQoNCkJlaSBnZXJpbmdlcmVtIEFsa29ob2xnZWhhbHQgbGFnIE3DpG5uZXIgKE0gPSAzLjI0LCBTRCA9IDEuMTY0KSDDvGJlciBqZW5lbSBkZXIgRnJhdWVuIChNID0gMi4wOCwgU0QgPSAuODEpLCBhbGxlcmRpbmdzIGtvbm50ZSBkZXIgVW50ZXJzY2hpZWQgaW0gUG9zdC1Ib2MgbmljaHQgYmVzdMOkdGlndCB3ZXJkZW4uIA0KQmVpIG1pdHRsZXJlciBBbGtvaG9sZ2VoYWx0IChNw6RubmVyOiBNID0gNi44LCBTRCA9IDEuNzU7IEZyYXVlbjogTSA9IDQuOTYsIFNEID0gLjEuNjQpIGtvbm50ZSBkZXIgTWl0dGVsd2VydHN1bnRlcnNjaGllZCBiZXN0w6R0aWd0IHdlcmRlbi4gDQoNCkJlaSBob2hlbSBBbGtvaG9sZ2VoYWx0IHZlcmjDpGx0IGVzIHNpY2ggZ2VuYXUgYW5kZXJzcnVtIC0gIEZyYXVlbiBzYW5nZW4gKE0gPSAxMi43MiwgU0QgPSAyLjAzKSBkZXV0bGljaCBtZWhyIFNvbmdzIGFscyBkaWUgTcOkbm5lciAoTSA9IDEyLjcyLCBTRCA9IDIuMDMpLiBEYXMgRXJnZWJuaXMga29ubnRlIGJlc3TDpHRpZ3Qgd2VyZGVuLg0KDQoNCg0KIyMgRWZmZWt0c3TDpHJrZSANCg0KRGllIEVmZmVrdHN0w6Rya2VuIHNpbmQgc293b2hsIGbDvHIgZGVuIEhhdXB0ZWZmZWt0IGRlciBBbGtvaG9sZ2VoYWx0IChmID0gMi4yMykgYWxzIGF1Y2ggZsO8ciBkaWUgSW50ZXJha3Rpb24gKGYgPSAwLDc2KSBuYWNoIENvaGVuICgxOTg4KSBlaW4gc3RhcmtlciBFZmZla3QNCg0K