library(boot)
results <- sample(x= uebung5$X, size = 5, replace = T)

before <- uebung5$IQbio[c(results)] 
after <- uebung5$IQfoster [c(results)]

results1 <- sample(x= uebung5$X, size = 5, replace = T)

before1 <- uebung5$IQbio[c(results1)] 
after1 <- uebung5$IQfoster [c(results1)]


results2 <- sample(x= uebung5$X, size = 5, replace = T)

before2 <- uebung5$IQbio[c(results2)] 
after2 <- uebung5$IQfoster [c(results2)]
layout(matrix(c(1,1,2,3), 2, 2, byrow = F))
# PLOT1

plot(x = rep(1, length(before)), 
     y = before, 
     xlim = c(.5, 2.5), 
     ylim = c(60, 140),
     ylab = "IQ", 
     xlab = "Gepaarter t-Test",
     main = "Punkte", 
     xaxt = "n")


points(x = rep(2, length(after)), y = after)


segments(x0 = rep(1, length(before)), 
         y0 = before, 
         x1 = rep(2, length(after)), 
         y1 = after, 
         col = gray(0, .5))


mtext(text = c("IQ-Bio", "IQ-Forster"), 
      side = 1, at = c(1, 2), line = 1)

# PLOT2
plot(x = rep(1, length(before1)), 
     y = before1, 
     xlim = c(.5, 2.5), 
     ylim = c(60, 140),
     ylab = "IQ", 
     xlab = "Gepaarter t-Test",
     main = "Punkte", 
     xaxt = "n")


points(x = rep(2, length(after1)), y = after1)


segments(x0 = rep(1, length(before1)), 
         y0 = before1, 
         x1 = rep(2, length(after1)), 
         y1 = after1, 
         col = gray(0, .5))


mtext(text = c("IQ-Bio", "IQ-Forster"), 
      side = 1, at = c(1, 2), line = 1)

# PLOT2
plot(x = rep(1, length(before2)), 
     y = before2, 
     xlim = c(.5, 2.5), 
     ylim = c(60, 140),
     ylab = "IQ", 
     xlab = "Gepaarter t-Test",
     main = "Punkte", 
     xaxt = "n")


points(x = rep(2, length(after2)), y = after2)


segments(x0 = rep(1, length(before2)), 
         y0 = before2, 
         x1 = rep(2, length(after2)), 
         y1 = after2, 
         col = gray(0, .5))


mtext(text = c("IQ-Bio", "IQ-Forster"), 
      side = 1, at = c(1, 2), line = 1)

NA
NA
library(ggpubr)
Lade n昼㸶tiges Paket: ggplot2
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
d <- data.frame(before = uebung5$IQbio, after = uebung5$IQfoster)
ggpaired(d, cond1 = "before", cond2 = "after",
    fill = "condition", palette = "jco")

Packages

library(car)# -> QQ - Diagramm & Scatterplot
Lade n昼㸶tiges Paket: carData

Attache Paket: 㤼㸱car㤼㸲

The following object is masked from 㤼㸱package:boot㤼㸲:

    logit

The following object is masked from 㤼㸱package:dplyr㤼㸲:

    recode
library(psych) # -> Deskriptive Statistiken

Attache Paket: 㤼㸱psych㤼㸲

The following object is masked from 㤼㸱package:car㤼㸲:

    logit

The following objects are masked from 㤼㸱package:ggplot2㤼㸲:

    %+%, alpha

The following object is masked from 㤼㸱package:boot㤼㸲:

    logit

Roadmap

  1. Hypothese
  2. Voraussetzungen des t-Tests für abhängige Stichproben
  3. Grundlegende Konzepte: Was ist t-Test für abhängige Stichproben?
  4. Deskriptive Statistiken und Korrelation
  5. Ergebnisse des t-Tests für abhängige Stichproben
  6. Berechnung der Effektstärke
  7. Eine Aussage

Hypothese

H1: Es gibt einen Unterschied zwischen der IQ der Zwillinge (Aufwachen bei den biologischen Eltern vs. Aufwachen bei den Adoptiveltern).

H0: Es gibt keinen Unterschied zwischen der IQ der Zwillinge (Aufwachen bei den biologischen Eltern vs. Aufwachen bei den Adoptiveltern).

Voraussetzungen des t-Tests für abhängige Stichproben

Die abhängige Variable ist intervallskaliert -> Ja -> IQ

Es liegen zwei verbundene Stichproben oder Gruppen vor, aber die verschiedenen Messwertpaare sind voneinander unabhängig. 1) Sie sind verbundenen durch ihre DNA, 2) aber unabhängige, weil es zwei verschiedene Menschen sind.

Die Unterschiede zwischen den verbundenen Testwerten sind in der Grundgesamtheit normalverteilt (bei Stichproben > 30 sind Verletzungen unproblematisch) -> siehe Histogramm

Erzeuge der neuen Variable “Differenz”

# Differenz ausrechnen
zwischen <- uebung5$IQbio - uebung5$IQfoster


# Die Spalte "Differenz" wird zum Datensatz hinzugefügt
uebung5 <- cbind(uebung5, "Differenz" = zwischen)
View(uebung5)

# Eine Spalte löschen

#uebung5$Differenz <- NULL
#View(uebung5)

# Falls es Probleme gibt

uebung5$Differenz <- as.numeric(uebung5$Differenz)

Prüfung der Verteilung

Variante 1: Histogramm zur Prüfung des Normalverteilung

hist(uebung5$Differenz, xlab = "Differenz zwischen IQ der Zwillinge", ylab= "Anzahl", main ="Histogramm der Differenz", breaks = 7,  col = "hotpink3")

Der Mitte ist bauchig und die Ränder sind niedriger. Allersdings ist die einschätzung nicht eindeutig. Daher kann ein QQ-Plot zur bessern Einschätzung verwendet werden.

Variante 2: QQ-Diagramm zur Prüfung des Normalverteilung

Die Werte werden der Größe nach geordnet. Als Vergleich dienen die Quantile der theoretischen Verteilung, die dem entsprechenden Verteilungswert zugehören. Wenn die Merkmalswerte aus der Vergleichsverteilung stammen, stimmen die empirischen und die theoretischen Quantile annähernd überein, d. h. die Werte liegen auf einer Diagonalen.

Große systematische Abweichungen von dieser Diagonalen geben einen Hinweis darauf, dass sich die theoretische und empirische Verteilung voneinander unterscheiden. DSie Werte müssen entlang einer aufsteigenden Gerade liegen, sodass eine ähnliche Verteilung vermutet werden kann.

# library(car) -> QQ - Diagramm 

qqPlot(uebung5$Differenz, main = "QQPlot für die Var. Differenz")
[1] 24 23

Es liegt eine Normalverteilung vor.

Deskriptive Statistiken und Korrelation

Korrelation

Streudiagramm

Ein Streudiagramm, auch Punktwolke genannt (engl. scatter plot), ist die graphische Darstellung von beobachteten Wertepaaren zweier statistischer Merkmale. Diese Wertepaare werden in ein kartesisches Koordinatensystem eingetragen, wodurch sich eine Punktwolke ergibt.

scatterplot(uebung5$IQbio ~ uebung5$IQfoster, 
            main = "Streudiagramm für die beiden IQ-Werte", ylab = "Zwilling ist bei den biologischen Eltern aufgewachen.", xlab= "Zwilling ist bei den Adoptiveltern aufgewachen.", col= "green" )


slm <- lm(uebung5$IQbio ~ uebung5$IQfoster, data = uebung5)
plot(x = uebung5$IQbio, y = uebung5$IQfoster, col = "blue")
abline(slm, col = "red")

Es liegt eine positiver-linearer Zusammenhang vor.

Korrelation nach Bravais-Pearson

Der Korrelationskoeffizient kann nur Werte im Bereich zwischen -1 und +1 annehmen. Ist er kleiner als Null (r < 0), so besteht ein negativer linearer Zusammenhang. Bei einem Wert grösser als Null (r > 0) besteht ein positiver linearer Zusammenhang und bei einem Wert von Null (r = 0) besteht kein Zusammenhang zwischen den Variablen.

test <- cor.test(uebung5$IQbio , uebung5$IQfoster)
test

    Pearson's product-moment correlation

data:  uebung5$IQbio and uebung5$IQfoster
t = 9.3575, df = 25, p-value = 1.204e-09
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.7550380 0.9452009
sample estimates:
      cor 
0.8819877 

Hinweis: Es ist es wichtig, dass die Daten miteinander korrelieren. Es ist plausibel, dass zwei verbundene Daten sich ähnlich sind und dass innerhalb eines Messwertpaares eher geringere Unterschiede auftreten als zwischen den Paaren.

Es wird ersichtlich, dass ein Zusammenhang zwischen IQBio und IQfoster(r = .88, p = .000, n = 27)vorliegt. Da r einen positiven Wert aufweist, kann von einem positiven linearen und signifikanten Zusammenhang zwischen IQBio und IQfoster ausgegangen werden. Für das Beispiel ergibt sich eine starke Korrelation von r = .88.

Deskriptive Statistiken

#library(psych)
describe(uebung5)

Es zeigt sich, dass es einen Mittelwertsunterschied zwischen IQBio und IQForster sehr gering ausfällt. + IQBio:(M= 95.11, SD = 16.08, n= 27), + IQBFoster: (M=95,30, SD = 15.74, n= 27)

Daher liegt die Vermutung nahe, dass keine Unterschied zwischen den IQs besteht.

Ergebnisse des t-Tests für abhängige Stichproben

alternative = “two.sided” verwendet eine ungerichtete Hypothese und testet zweiseitig. Falls die Hypothese gerichtet formuliert ist, kann auch “less” oder “greater” verwendet werden. Die Richtung hängt von der Codierung ab.

paired = TRUE ist dann abzuwenden, wenn die Stichprobe verbunden ist. Das “conf.level = .95” beschreibt, dass ein Alphanivau von 0.05 verwendet wird.

testVER<- t.test(uebung5$IQbio , uebung5$IQfoster, alternative = "two.sided", paired = TRUE, conf.level = .95)

testVER

    Paired t-test

data:  uebung5$IQbio and uebung5$IQfoster
t = -0.12438, df = 26, p-value = 0.902
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -3.245529  2.875159
sample estimates:
mean of the differences 
             -0.1851852 

Die Teststatistik beträgt t = -0.12438 und der zugehoerige Signifikanzwert p = .902. Damit gibt es keinen signifikanten Unterschied. Die Mittelwertsunterschiede der beiden IQs können zufälliger Natur sein (t(26) = -0.12438, p = .902, n= 7).

Berechnung der Effektstärke

Die Effektstärke ist ein Maß für die Stärke eines Treatments bzw. Phänomens. Effektstärken sind damit eine der wichtigsten Größen in empirischen Studien. Zur Einschätzung der praktischen Bedeutsamkeit existieren verschiedene Effektstärkemaße, die bei der Interpretation der Größe eines Effektes helfen.

\[r=\sqrt{\frac{t^2}{t^2+df}}\]

eff1 <- abs(sqrt(testVER$statistic ^2/ (testVER$statistic^2 + testVER$parameter)))

sprintf("Effektstärke: %.4f",eff1)
[1] "Effektstärke: 0.0244"

Zur Beurteilung der Groesse des Effektes dient die Einteilung von Cohen (1992):

r = .10 entspricht einem schwachen Effekt r = .30 entspricht einem mittleren Effekt r = .50 entspricht einem starken Effekt

Damit liegt kein Effektstärke vor (r= 0.02)

Auf der Webseite: Statistik mit Jule werden weitere Effektstärke beschrieben und empfohlen.

Eine Aussage

Es zeigt sich, dass keinen statistisch signifikant unterscheiden zwischen dem IQ der Zwillingsgeschwister gibt (t(26) = -0.12438, p = .902, n= 7).

H0 wird angenommen.

LS0tDQp0aXRsZTogInQtVGVzdCBmdWVyIHp3ZWkgdmVyYnVuZGVuZSBTdGljaHByb2JlbiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoYm9vdCkNCnJlc3VsdHMgPC0gc2FtcGxlKHg9IHVlYnVuZzUkWCwgc2l6ZSA9IDUsIHJlcGxhY2UgPSBUKQ0KDQpiZWZvcmUgPC0gdWVidW5nNSRJUWJpb1tjKHJlc3VsdHMpXSANCmFmdGVyIDwtIHVlYnVuZzUkSVFmb3N0ZXIgW2MocmVzdWx0cyldDQoNCnJlc3VsdHMxIDwtIHNhbXBsZSh4PSB1ZWJ1bmc1JFgsIHNpemUgPSA1LCByZXBsYWNlID0gVCkNCg0KYmVmb3JlMSA8LSB1ZWJ1bmc1JElRYmlvW2MocmVzdWx0czEpXSANCmFmdGVyMSA8LSB1ZWJ1bmc1JElRZm9zdGVyIFtjKHJlc3VsdHMxKV0NCg0KDQpyZXN1bHRzMiA8LSBzYW1wbGUoeD0gdWVidW5nNSRYLCBzaXplID0gNSwgcmVwbGFjZSA9IFQpDQoNCmJlZm9yZTIgPC0gdWVidW5nNSRJUWJpb1tjKHJlc3VsdHMyKV0gDQphZnRlcjIgPC0gdWVidW5nNSRJUWZvc3RlciBbYyhyZXN1bHRzMildDQpgYGANCg0KYGBge3J9DQpsYXlvdXQobWF0cml4KGMoMSwxLDIsMyksIDIsIDIsIGJ5cm93ID0gRikpDQojIFBMT1QxDQoNCnBsb3QoeCA9IHJlcCgxLCBsZW5ndGgoYmVmb3JlKSksIA0KICAgICB5ID0gYmVmb3JlLCANCiAgICAgeGxpbSA9IGMoLjUsIDIuNSksIA0KICAgICB5bGltID0gYyg2MCwgMTQwKSwNCiAgICAgeWxhYiA9ICJJUSIsIA0KICAgICB4bGFiID0gIkdlcGFhcnRlciB0LVRlc3QiLA0KICAgICBtYWluID0gIlB1bmt0ZSIsIA0KICAgICB4YXh0ID0gIm4iKQ0KDQoNCnBvaW50cyh4ID0gcmVwKDIsIGxlbmd0aChhZnRlcikpLCB5ID0gYWZ0ZXIpDQoNCg0Kc2VnbWVudHMoeDAgPSByZXAoMSwgbGVuZ3RoKGJlZm9yZSkpLCANCiAgICAgICAgIHkwID0gYmVmb3JlLCANCiAgICAgICAgIHgxID0gcmVwKDIsIGxlbmd0aChhZnRlcikpLCANCiAgICAgICAgIHkxID0gYWZ0ZXIsIA0KICAgICAgICAgY29sID0gZ3JheSgwLCAuNSkpDQoNCg0KbXRleHQodGV4dCA9IGMoIklRLUJpbyIsICJJUS1Gb3JzdGVyIiksIA0KICAgICAgc2lkZSA9IDEsIGF0ID0gYygxLCAyKSwgbGluZSA9IDEpDQoNCiMgUExPVDINCnBsb3QoeCA9IHJlcCgxLCBsZW5ndGgoYmVmb3JlMSkpLCANCiAgICAgeSA9IGJlZm9yZTEsIA0KICAgICB4bGltID0gYyguNSwgMi41KSwgDQogICAgIHlsaW0gPSBjKDYwLCAxNDApLA0KICAgICB5bGFiID0gIklRIiwgDQogICAgIHhsYWIgPSAiR2VwYWFydGVyIHQtVGVzdCIsDQogICAgIG1haW4gPSAiUHVua3RlIiwgDQogICAgIHhheHQgPSAibiIpDQoNCg0KcG9pbnRzKHggPSByZXAoMiwgbGVuZ3RoKGFmdGVyMSkpLCB5ID0gYWZ0ZXIxKQ0KDQoNCnNlZ21lbnRzKHgwID0gcmVwKDEsIGxlbmd0aChiZWZvcmUxKSksIA0KICAgICAgICAgeTAgPSBiZWZvcmUxLCANCiAgICAgICAgIHgxID0gcmVwKDIsIGxlbmd0aChhZnRlcjEpKSwgDQogICAgICAgICB5MSA9IGFmdGVyMSwgDQogICAgICAgICBjb2wgPSBncmF5KDAsIC41KSkNCg0KDQptdGV4dCh0ZXh0ID0gYygiSVEtQmlvIiwgIklRLUZvcnN0ZXIiKSwgDQogICAgICBzaWRlID0gMSwgYXQgPSBjKDEsIDIpLCBsaW5lID0gMSkNCg0KIyBQTE9UMg0KcGxvdCh4ID0gcmVwKDEsIGxlbmd0aChiZWZvcmUyKSksIA0KICAgICB5ID0gYmVmb3JlMiwgDQogICAgIHhsaW0gPSBjKC41LCAyLjUpLCANCiAgICAgeWxpbSA9IGMoNjAsIDE0MCksDQogICAgIHlsYWIgPSAiSVEiLCANCiAgICAgeGxhYiA9ICJHZXBhYXJ0ZXIgdC1UZXN0IiwNCiAgICAgbWFpbiA9ICJQdW5rdGUiLCANCiAgICAgeGF4dCA9ICJuIikNCg0KDQpwb2ludHMoeCA9IHJlcCgyLCBsZW5ndGgoYWZ0ZXIyKSksIHkgPSBhZnRlcjIpDQoNCg0Kc2VnbWVudHMoeDAgPSByZXAoMSwgbGVuZ3RoKGJlZm9yZTIpKSwgDQogICAgICAgICB5MCA9IGJlZm9yZTIsIA0KICAgICAgICAgeDEgPSByZXAoMiwgbGVuZ3RoKGFmdGVyMikpLCANCiAgICAgICAgIHkxID0gYWZ0ZXIyLCANCiAgICAgICAgIGNvbCA9IGdyYXkoMCwgLjUpKQ0KDQoNCm10ZXh0KHRleHQgPSBjKCJJUS1CaW8iLCAiSVEtRm9yc3RlciIpLCANCiAgICAgIHNpZGUgPSAxLCBhdCA9IGMoMSwgMiksIGxpbmUgPSAxKQ0KDQoNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwdWJyKQ0KZCA8LSBkYXRhLmZyYW1lKGJlZm9yZSA9IHVlYnVuZzUkSVFiaW8sIGFmdGVyID0gdWVidW5nNSRJUWZvc3RlcikNCmdncGFpcmVkKGQsIGNvbmQxID0gImJlZm9yZSIsIGNvbmQyID0gImFmdGVyIiwNCiAgICBmaWxsID0gImNvbmRpdGlvbiIsIHBhbGV0dGUgPSAiamNvIikNCg0KYGBgDQoNCg0KDQoNCg0KDQojIyBQYWNrYWdlcw0KDQpgYGB7cn0NCmxpYnJhcnkoY2FyKSMgLT4gUVEgLSBEaWFncmFtbSAmIFNjYXR0ZXJwbG90DQoNCmxpYnJhcnkocHN5Y2gpICMgLT4gRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4NCmBgYA0KDQoNCg0KIyMgUm9hZG1hcCANCg0KMSkgSHlwb3RoZXNlDQoyKSBWb3JhdXNzZXR6dW5nZW4gZGVzIHQtVGVzdHMgZsO8ciBhYmjDpG5naWdlIFN0aWNocHJvYmVuDQozKSBHcnVuZGxlZ2VuZGUgS29uemVwdGU6IFdhcyBpc3QgdC1UZXN0IGbDvHIgYWJow6RuZ2lnZSBTdGljaHByb2Jlbj8NCjQpIERlc2tyaXB0aXZlIFN0YXRpc3Rpa2VuIHVuZCBLb3JyZWxhdGlvbg0KNSkgRXJnZWJuaXNzZSBkZXMgdC1UZXN0cyBmw7xyIGFiaMOkbmdpZ2UgU3RpY2hwcm9iZW4NCjYpIEJlcmVjaG51bmcgZGVyIEVmZmVrdHN0w6Rya2UNCjcpIEVpbmUgQXVzc2FnZSANCg0KDQoNCg0KIyBIeXBvdGhlc2UNCg0KSDE6IEVzIGdpYnQgZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gZGVyIElRIGRlciBad2lsbGluZ2UgKEF1ZndhY2hlbiBiZWkgZGVuIGJpb2xvZ2lzY2hlbiBFbHRlcm4gdnMuIEF1ZndhY2hlbiBiZWkgZGVuIEFkb3B0aXZlbHRlcm4pLjxicj4NCg0KSDA6IEVzIGdpYnQga2VpbmVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIGRlciBJUSBkZXIgWndpbGxpbmdlIChBdWZ3YWNoZW4gYmVpIGRlbiBiaW9sb2dpc2NoZW4gRWx0ZXJuIHZzLiBBdWZ3YWNoZW4gYmVpIGRlbiBBZG9wdGl2ZWx0ZXJuKS4NCg0KIyBWb3JhdXNzZXR6dW5nZW4gZGVzIHQtVGVzdHMgZsO8ciBhYmjDpG5naWdlIFN0aWNocHJvYmVuDQoNCkRpZSBhYmjDpG5naWdlIFZhcmlhYmxlIGlzdCBpbnRlcnZhbGxza2FsaWVydCAtPiBKYSAtPiBJUQ0KDQpFcyBsaWVnZW4gendlaSB2ZXJidW5kZW5lIFN0aWNocHJvYmVuIG9kZXIgR3J1cHBlbiB2b3IsIGFiZXIgZGllIHZlcnNjaGllZGVuZW4gTWVzc3dlcnRwYWFyZSBzaW5kIHZvbmVpbmFuZGVyIHVuYWJow6RuZ2lnLiAxKSBTaWUgc2luZCB2ZXJidW5kZW5lbiBkdXJjaCBpaHJlIEROQSwgMikgYWJlciB1bmFiaMOkbmdpZ2UsIHdlaWwgZXMgendlaSB2ZXJzY2hpZWRlbmUgTWVuc2NoZW4gc2luZC4NCg0KRGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gdmVyYnVuZGVuZW4gVGVzdHdlcnRlbiBzaW5kIGluIGRlciBHcnVuZGdlc2FtdGhlaXQgbm9ybWFsdmVydGVpbHQgKGJlaSBTdGljaHByb2JlbiA+IDMwIHNpbmQgVmVybGV0enVuZ2VuIHVucHJvYmxlbWF0aXNjaCkgLT4gc2llaGUgSGlzdG9ncmFtbQ0KDQojIyMgRXJ6ZXVnZSBkZXIgbmV1ZW4gVmFyaWFibGUgIkRpZmZlcmVueiINCg0KYGBge3J9DQojIERpZmZlcmVueiBhdXNyZWNobmVuDQp6d2lzY2hlbiA8LSB1ZWJ1bmc1JElRYmlvIC0gdWVidW5nNSRJUWZvc3Rlcg0KDQoNCiMgRGllIFNwYWx0ZSAiRGlmZmVyZW56IiB3aXJkIHp1bSBEYXRlbnNhdHogaGluenVnZWbDvGd0DQp1ZWJ1bmc1IDwtIGNiaW5kKHVlYnVuZzUsICJEaWZmZXJlbnoiID0gendpc2NoZW4pDQpWaWV3KHVlYnVuZzUpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQojIEVpbmUgU3BhbHRlIGzDtnNjaGVuDQoNCiN1ZWJ1bmc1JERpZmZlcmVueiA8LSBOVUxMDQojVmlldyh1ZWJ1bmc1KQ0KDQojIEZhbGxzIGVzIFByb2JsZW1lIGdpYnQNCg0KdWVidW5nNSREaWZmZXJlbnogPC0gYXMubnVtZXJpYyh1ZWJ1bmc1JERpZmZlcmVueikNCmBgYA0KDQoNCg0KDQojIyAgUHLDvGZ1bmcgZGVyIFZlcnRlaWx1bmcNCg0KIyMjIFZhcmlhbnRlIDE6IEhpc3RvZ3JhbW0genVyIFByw7xmdW5nIGRlcyBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCg0KYGBge3J9DQpoaXN0KHVlYnVuZzUkRGlmZmVyZW56LCB4bGFiID0gIkRpZmZlcmVueiB6d2lzY2hlbiBJUSBkZXIgWndpbGxpbmdlIiwgeWxhYj0gIkFuemFobCIsIG1haW4gPSJIaXN0b2dyYW1tIGRlciBEaWZmZXJlbnoiLCBicmVha3MgPSA3LCAgY29sID0gImhvdHBpbmszIikNCg0KYGBgDQpEZXIgTWl0dGUgaXN0IGJhdWNoaWcgdW5kIGRpZSBSw6RuZGVyIHNpbmQgbmllZHJpZ2VyLiBBbGxlcnNkaW5ncyBpc3QgZGllIGVpbnNjaMOkdHp1bmcgbmljaHQgZWluZGV1dGlnLiBEYWhlciBrYW5uIGVpbiBRUS1QbG90IHp1ciBiZXNzZXJuIEVpbnNjaMOkdHp1bmcgdmVyd2VuZGV0IHdlcmRlbi4NCg0KDQoNCiMjIyBWYXJpYW50ZSAyOiAgUVEtRGlhZ3JhbW0genVyIFByw7xmdW5nIGRlcyBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCkRpZSBXZXJ0ZSB3ZXJkZW4gZGVyIEdyw7bDn2UgbmFjaCBnZW9yZG5ldC4gQWxzIFZlcmdsZWljaCBkaWVuZW4gZGllIFF1YW50aWxlIGRlciB0aGVvcmV0aXNjaGVuIFZlcnRlaWx1bmcsIGRpZSBkZW0gZW50c3ByZWNoZW5kZW4gVmVydGVpbHVuZ3N3ZXJ0IHp1Z2Vow7ZyZW4uDQpXZW5uIGRpZSBNZXJrbWFsc3dlcnRlIGF1cyBkZXIgVmVyZ2xlaWNoc3ZlcnRlaWx1bmcgc3RhbW1lbiwgc3RpbW1lbiBkaWUgZW1waXJpc2NoZW4gdW5kIGRpZSB0aGVvcmV0aXNjaGVuIFF1YW50aWxlIGFubsOkaGVybmQgw7xiZXJlaW4sIGQuIGguIGRpZSBXZXJ0ZSBsaWVnZW4gYXVmIGVpbmVyIERpYWdvbmFsZW4uDQoNCkdyb8OfZSBzeXN0ZW1hdGlzY2hlIEFid2VpY2h1bmdlbiB2b24gZGllc2VyIERpYWdvbmFsZW4gZ2ViZW4gZWluZW4gSGlud2VpcyBkYXJhdWYsIGRhc3Mgc2ljaCBkaWUgdGhlb3JldGlzY2hlIHVuZCBlbXBpcmlzY2hlIFZlcnRlaWx1bmcgdm9uZWluYW5kZXIgdW50ZXJzY2hlaWRlbi4gDQpEU2llIFdlcnRlIG3DvHNzZW4gZW50bGFuZyBlaW5lciBhdWZzdGVpZ2VuZGVuIEdlcmFkZSBsaWVnZW4sIHNvZGFzcyBlaW5lIMOkaG5saWNoZSBWZXJ0ZWlsdW5nIHZlcm11dGV0IHdlcmRlbiBrYW5uLg0KDQpgYGB7cn0NCiMgbGlicmFyeShjYXIpIC0+IFFRIC0gRGlhZ3JhbW0gDQoNCnFxUGxvdCh1ZWJ1bmc1JERpZmZlcmVueiwgbWFpbiA9ICJRUVBsb3QgZsO8ciBkaWUgVmFyLiBEaWZmZXJlbnoiKQ0KDQpgYGANCg0KRXMgbGllZ3QgZWluZSAgTm9ybWFsdmVydGVpbHVuZyB2b3IuIA0KDQoNCiMgRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4gdW5kIEtvcnJlbGF0aW9uDQoNCiMjIEtvcnJlbGF0aW9uDQoNCiMjIyMgU3RyZXVkaWFncmFtbQ0KDQpFaW4gU3RyZXVkaWFncmFtbSwgYXVjaCBQdW5rdHdvbGtlIGdlbmFubnQgKGVuZ2wuIHNjYXR0ZXIgcGxvdCksIGlzdCBkaWUgZ3JhcGhpc2NoZSBEYXJzdGVsbHVuZyB2b24gYmVvYmFjaHRldGVuIFdlcnRlcGFhcmVuIHp3ZWllciBzdGF0aXN0aXNjaGVyIE1lcmttYWxlLiBEaWVzZSBXZXJ0ZXBhYXJlIHdlcmRlbiBpbiBlaW4ga2FydGVzaXNjaGVzIEtvb3JkaW5hdGVuc3lzdGVtIGVpbmdldHJhZ2VuLCB3b2R1cmNoIHNpY2ggZWluZSBQdW5rdHdvbGtlIGVyZ2lidC4NCg0KYGBge3J9DQpzY2F0dGVycGxvdCh1ZWJ1bmc1JElRYmlvIH4gdWVidW5nNSRJUWZvc3RlciwgDQogICAgICAgICAgICBtYWluID0gIlN0cmV1ZGlhZ3JhbW0gZsO8ciBkaWUgYmVpZGVuIElRLVdlcnRlIiwgeWxhYiA9ICJad2lsbGluZyBpc3QgYmVpIGRlbiBiaW9sb2dpc2NoZW4gRWx0ZXJuIGF1Zmdld2FjaGVuLiIsIHhsYWI9ICJad2lsbGluZyBpc3QgYmVpIGRlbiBBZG9wdGl2ZWx0ZXJuIGF1Zmdld2FjaGVuLiIsIGNvbD0gImdyZWVuIiApDQoNCmBgYA0KDQpgYGB7cn0NCg0Kc2xtIDwtIGxtKHVlYnVuZzUkSVFiaW8gfiB1ZWJ1bmc1JElRZm9zdGVyLCBkYXRhID0gdWVidW5nNSkNCnBsb3QoeCA9IHVlYnVuZzUkSVFiaW8sIHkgPSB1ZWJ1bmc1JElRZm9zdGVyLCBjb2wgPSAiYmx1ZSIpDQphYmxpbmUoc2xtLCBjb2wgPSAicmVkIikNCg0KYGBgDQoNCg0KDQpFcyBsaWVndCBlaW5lIHBvc2l0aXZlci1saW5lYXJlciBadXNhbW1lbmhhbmcgdm9yLiANCg0KIyMjIyBLb3JyZWxhdGlvbiBuYWNoIEJyYXZhaXMtUGVhcnNvbg0KDQpEZXIgS29ycmVsYXRpb25za29lZmZpemllbnQga2FubiBudXIgV2VydGUgaW0gQmVyZWljaCB6d2lzY2hlbiAtMSB1bmQgKzEgYW5uZWhtZW4uIElzdCBlciBrbGVpbmVyIGFscyBOdWxsIChyIDwgMCksIHNvIGJlc3RlaHQgZWluIG5lZ2F0aXZlciBsaW5lYXJlciBadXNhbW1lbmhhbmcuIEJlaSBlaW5lbSBXZXJ0IGdyw7Zzc2VyIGFscyBOdWxsIChyID4gMCkgYmVzdGVodCBlaW4gcG9zaXRpdmVyIGxpbmVhcmVyIFp1c2FtbWVuaGFuZyB1bmQgYmVpIGVpbmVtIFdlcnQgdm9uIE51bGwgKHIgPSAwKSBiZXN0ZWh0IGtlaW4gWnVzYW1tZW5oYW5nIHp3aXNjaGVuIGRlbiBWYXJpYWJsZW4uDQoNCmBgYHtyfQ0KdGVzdCA8LSBjb3IudGVzdCh1ZWJ1bmc1JElRYmlvICwgdWVidW5nNSRJUWZvc3RlcikNCnRlc3QNCg0KYGBgDQoNCioqSGlud2VpczoqKiBFcyBpc3QgZXMgd2ljaHRpZywgZGFzcyBkaWUgRGF0ZW4gbWl0ZWluYW5kZXIga29ycmVsaWVyZW4uIEVzIGlzdCBwbGF1c2liZWwsIGRhc3MgendlaSB2ZXJidW5kZW5lIERhdGVuIHNpY2ggw6RobmxpY2ggc2luZCB1bmQgZGFzcyBpbm5lcmhhbGIgZWluZXMgTWVzc3dlcnRwYWFyZXMgZWhlciBnZXJpbmdlcmUgVW50ZXJzY2hpZWRlIGF1ZnRyZXRlbiBhbHMgendpc2NoZW4gZGVuIFBhYXJlbi4gDQoNCg0KRXMgd2lyZCBlcnNpY2h0bGljaCwgZGFzcyBlaW4gWnVzYW1tZW5oYW5nIHp3aXNjaGVuIElRQmlvIHVuZCBJUWZvc3RlcihyID0gLjg4LCBwID0gLjAwMCwgbiA9IDI3KXZvcmxpZWd0LiBEYSByIGVpbmVuIHBvc2l0aXZlbiBXZXJ0IGF1ZndlaXN0LCBrYW5uIHZvbiBlaW5lbSBwb3NpdGl2ZW4gbGluZWFyZW4gdW5kIHNpZ25pZmlrYW50ZW4gWnVzYW1tZW5oYW5nIHp3aXNjaGVuIElRQmlvIHVuZCBJUWZvc3RlciBhdXNnZWdhbmdlbiB3ZXJkZW4uIEbDvHIgZGFzIEJlaXNwaWVsIGVyZ2lidCBzaWNoIGVpbmUgc3RhcmtlIEtvcnJlbGF0aW9uIHZvbiByID0gLjg4Lg0KDQoNCg0KIyMgRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4NCg0KDQpgYGB7cn0NCiNsaWJyYXJ5KHBzeWNoKQ0KZGVzY3JpYmUodWVidW5nNSkNCmBgYA0KRXMgemVpZ3Qgc2ljaCwgZGFzcyBlcyBlaW5lbiBNaXR0ZWx3ZXJ0c3VudGVyc2NoaWVkIHp3aXNjaGVuIElRQmlvIHVuZCBJUUZvcnN0ZXIgc2VociBnZXJpbmcgYXVzZsOkbGx0LiANCisgSVFCaW86KE09IDk1LjExLCBTRCA9IDE2LjA4LCBuPSAyNyksDQorIElRQkZvc3RlcjogKE09OTUsMzAsIFNEID0gMTUuNzQsIG49IDI3KQ0KDQoNCkRhaGVyIGxpZWd0IGRpZSBWZXJtdXR1bmcgbmFoZSwgZGFzcyBrZWluZSBVbnRlcnNjaGllZCB6d2lzY2hlbiBkZW4gSVFzIGJlc3RlaHQuDQoNCg0KIyBFcmdlYm5pc3NlIGRlcyB0LVRlc3RzIGbDvHIgYWJow6RuZ2lnZSBTdGljaHByb2Jlbg0KDQoNCioqYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIioqICB2ZXJ3ZW5kZXQgZWluZSB1bmdlcmljaHRldGUgSHlwb3RoZXNlIHVuZCB0ZXN0ZXQgendlaXNlaXRpZy4gRmFsbHMgZGllIEh5cG90aGVzZSBnZXJpY2h0ZXQgZm9ybXVsaWVydCBpc3QsIGthbm4gYXVjaCAibGVzcyIgb2RlciAiZ3JlYXRlciIgdmVyd2VuZGV0IHdlcmRlbi4gRGllIFJpY2h0dW5nIGjDpG5ndCB2b24gZGVyIENvZGllcnVuZyBhYi4gDQoNCioqcGFpcmVkID0gVFJVRSoqIGlzdCBkYW5uIGFienV3ZW5kZW4sIHdlbm4gZGllIFN0aWNocHJvYmUgdmVyYnVuZGVuIGlzdC4gRGFzICoqImNvbmYubGV2ZWwgPSAuOTUiKiogYmVzY2hyZWlidCwgZGFzcyBlaW4gQWxwaGFuaXZhdSB2b24gMC4wNSB2ZXJ3ZW5kZXQgd2lyZC4gDQoNCmBgYHtyfQ0KdGVzdFZFUjwtIHQudGVzdCh1ZWJ1bmc1JElRYmlvICwgdWVidW5nNSRJUWZvc3RlciwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gVFJVRSwgY29uZi5sZXZlbCA9IC45NSkNCg0KdGVzdFZFUg0KDQpgYGANCg0KDQpEaWUgVGVzdHN0YXRpc3RpayBiZXRyw6RndCB0ID0gLTAuMTI0MzggdW5kIGRlciB6dWdlaG9lcmlnZSBTaWduaWZpa2FuendlcnQgcCA9IC45MDIuIERhbWl0IGdpYnQgZXMga2VpbmVuIHNpZ25pZmlrYW50ZW4gVW50ZXJzY2hpZWQuIERpZSBNaXR0ZWx3ZXJ0c3VudGVyc2NoaWVkZSBkZXIgYmVpZGVuIElRcyBrw7ZubmVuIHp1ZsOkbGxpZ2VyIE5hdHVyIHNlaW4gKHQoMjYpID0gLTAuMTI0MzgsIHAgPSAuOTAyLCBuPSA3KS4NCg0KDQojIEJlcmVjaG51bmcgZGVyIEVmZmVrdHN0w6Rya2UNCg0KRGllIEVmZmVrdHN0w6Rya2UgaXN0IGVpbiBNYcOfIGbDvHIgZGllIFN0w6Rya2UgZWluZXMgVHJlYXRtZW50cyBiencuIFBow6Rub21lbnMuIEVmZmVrdHN0w6Rya2VuIHNpbmQgZGFtaXQgZWluZSBkZXIgd2ljaHRpZ3N0ZW4gR3LDtsOfZW4gaW4gZW1waXJpc2NoZW4gU3R1ZGllbi4gWnVyIEVpbnNjaMOkdHp1bmcgZGVyIHByYWt0aXNjaGVuIEJlZGV1dHNhbWtlaXQgZXhpc3RpZXJlbiB2ZXJzY2hpZWRlbmUgRWZmZWt0c3TDpHJrZW1hw59lLCBkaWUgYmVpIGRlciBJbnRlcnByZXRhdGlvbiBkZXIgR3LDtsOfZSBlaW5lcyBFZmZla3RlcyBoZWxmZW4uDQoNCiQkcj1cc3FydHtcZnJhY3t0XjJ9e3ReMitkZn19JCQNCg0KDQpgYGB7cn0NCmVmZjEgPC0gYWJzKHNxcnQodGVzdFZFUiRzdGF0aXN0aWMgXjIvICh0ZXN0VkVSJHN0YXRpc3RpY14yICsgdGVzdFZFUiRwYXJhbWV0ZXIpKSkNCg0Kc3ByaW50ZigiRWZmZWt0c3TDpHJrZTogJS40ZiIsZWZmMSkNCmBgYA0KDQoNClp1ciBCZXVydGVpbHVuZyBkZXIgR3JvZXNzZSBkZXMgRWZmZWt0ZXMgZGllbnQgZGllIEVpbnRlaWx1bmcgdm9uIENvaGVuICgxOTkyKToNCg0KciA9IC4xMCBlbnRzcHJpY2h0IGVpbmVtIHNjaHdhY2hlbiBFZmZla3QNCnIgPSAuMzAgZW50c3ByaWNodCBlaW5lbSBtaXR0bGVyZW4gRWZmZWt0DQpyID0gLjUwIGVudHNwcmljaHQgZWluZW0gc3RhcmtlbiBFZmZla3QNCg0KRGFtaXQgbGllZ3Qga2VpbiBFZmZla3RzdMOkcmtlIHZvciAocj0gMC4wMikNCg0KQXVmIGRlciBXZWJzZWl0ZTogU3RhdGlzdGlrIG1pdCBKdWxlIHdlcmRlbiB3ZWl0ZXJlIEVmZmVrdHN0w6Rya2UgYmVzY2hyaWViZW4gdW5kIGVtcGZvaGxlbi4gDQoNCg0KIyBFaW5lIEF1c3NhZ2UNCg0KRXMgemVpZ3Qgc2ljaCwgZGFzcyBrZWluZW4gc3RhdGlzdGlzY2ggc2lnbmlmaWthbnQgdW50ZXJzY2hlaWRlbiB6d2lzY2hlbiBkZW0gSVEgZGVyIFp3aWxsaW5nc2dlc2Nod2lzdGVyIGdpYnQgKHQoMjYpID0gLTAuMTI0MzgsIHAgPSAuOTAyLCBuPSA3KS4gDQoNCioqSDAgd2lyZCBhbmdlbm9tbWVuLioqDQo=