Задание 1. Коофициент корреляции цены рубля и нефти в американских долларах.
rm(list=ls()) # clears out memory
usd.data="./QUANDL_USDRUB.csv"
oil.data="./QUANDL_OPECOIL.csv"
url_usd="https://www.quandl.com/api/v1/datasets/CURRFX/USDRUB.csv?trim_start=2014-08-01"
download.file(url_usd, usd.data, "wget")
url_oil="https://www.quandl.com/api/v1/datasets/OPEC/ORB.csv?trim_start=2014-08-01"
download.file(url_oil, oil.data, "wget")
usd.data <- read.csv(usd.data, header = TRUE, sep = ",")
oil.data <- read.csv(oil.data, header = TRUE, sep = ",")
merged.data <- merge(usd.data,oil.data, by="Date")
rub_vs_oil = data.frame(DATE=merged.data$Date,
RUB=merged.data$Rate,
OIL=merged.data$Value)

Расчитаем коэффициент корреляции по формуле
\[
r_{xy} = \frac{\sum(X - \widetilde{X})(Y - \widetilde{Y})}{\sqrt{\sum(X - \widetilde{X})^2}\sqrt{\sum(Y - \widetilde{Y})^2}}
\]
rub_avg = weighted.mean(rub_vs_oil$RUB)
oil_avg = weighted.mean(rub_vs_oil$OIL)
x = rub_vs_oil$RUB - rub_avg
y = rub_vs_oil$OIL - oil_avg
r_xy = (t(x) %*% y) / (sqrt(t(x)%*%x) * sqrt(t(y)%*%y))
r_xy
[,1]
[1,] -0.9610832
Вывод: выборочне величины имеют явно выраженную линейную зависимость
Задание 2. Регрессионный анализ цены рубля и нефти
Начнем с модели линейной регрессии \(y^* = a + bx\). Вычислим \(b\) и \(a\) по формулам
\[
b = r_{xy} \frac{s_{y}}{s_{x}}
\] \[
a = E[Y] - bE[X]
\]
b = r_xy * sqrt( t(y)%*%y / t(x)%*%x)
a = weighted.mean(rub_vs_oil$OIL) - b * weighted.mean(rub_vs_oil$RUB)
a = 152.11 b = -1.67
Отобразим полученную линию регресии на графике

Интересно сравнить результаты полученные врчучную с пакетным методом. Видим, что они совпадают.
lm(formula = OIL ~ RUB, data = rub_vs_oil)
Call:
lm(formula = OIL ~ RUB, data = rub_vs_oil)
Coefficients:
(Intercept) RUB
152.111 -1.669
Посмотрим на гистограмму остатков и вычислим их дисперсию

Дисперсия: 21.07
Рассмотри модель не линейной регрессии \[
y^*=sin(w_1x+w_2) + w_3x + w_4
\]
Nonlinear regression model
model: OIL ~ sin(w1 * RUB + w2) + w3 * RUB + w4
data: rub_vs_oil
w1 w2 w3 w4
1.041 1.529 -1.668 152.088
residual sum-of-squares: 14183
Number of iterations to convergence: 19
Achieved convergence tolerance: 1.908e-06


Дисперсия такой модели 19.78, это лишь немного ниже, чем в случае линейной регрессии.
Задание 3. Дисперсионный анализ
Школьник получил в целом 30 оценок по пяти дисциплинам. Выборку постройте сами. Найдите коэффициент детерминации и определите, является уровень значимости дисциплины в общей вариации оценок.
subjects <- gl(5, 6, labels=c('Дисциплина1','Дисциплина2','Дисциплина3','Дисциплина4','Дисциплина5'))
marks <- c(5,4,5,4,5,4, 4,3,4,4,3,3, 5,5,5,4,5,5, 5,4,3,2,5,3, 4,5,3,5,3,4)
ds <- data.frame(subject=subjects, mark=marks)
ds
Нулевая гипотеза \(H_0\): средние значения по дисциплинам равны
Расчитаем средние по дисциплинам
means <- aggregate(mark ~ subject, data=ds, mean)
means
Расчитаем дисперсии по дисциплинам
variances <- aggregate(mark ~ subject, data=ds, var)
variances
Получим оценку дисперсии поппуляции с двух сторон, как внутригрупповую (MSE) и межгрупповую (MSB)
MSE = mean(variances$mark)
MSE
[1] 0.6066667
GM = mean(ds$mark)
MSB = 6 * (t((means$mark - GM)) %*% (means$mark - GM)) / 4
обшее среднее GM = 4.1
MSB = 1.8833333
DFN = 5 - 1
DFD = 30 - 5
MSB/MSE
[,1]
[1,] 3.104396
Отношение \(\frac{MSB}{MSE}=\) 3.1043956
P-значение: 0.0333, что чуть ниже уровня значимости 0.05
Расчитаем также, как раскладывается общая сумма квадратов на составляющие \[
SSQ_{общая} = SSQ_{дисциплины} + SSQ_{ошибки}
\]
ssq_total = (ds$mark - GM) %*% (ds$mark - GM)
ssq_condition = 6 * (t((means$mark - GM)) %*% (means$mark - GM))
ssq_error = (ds[ds$subject=='Дисциплина1',2] - means[1,2]) %*% (ds[ds$subject=='Дисциплина1',2] - means[1,2]) +
(ds[ds$subject=='Дисциплина2',2] - means[2,2]) %*% (ds[ds$subject=='Дисциплина2',2] - means[2,2]) +
(ds[ds$subject=='Дисциплина3',2] - means[3,2]) %*% (ds[ds$subject=='Дисциплина3',2] - means[3,2]) +
(ds[ds$subject=='Дисциплина4',2] - means[4,2]) %*% (ds[ds$subject=='Дисциплина4',2] - means[4,2]) +
(ds[ds$subject=='Дисциплина5',2] - means[5,2]) %*% (ds[ds$subject=='Дисциплина5',2] - means[5,2])
\[
22.7 = 7.5 + 15.2
\]
Интересно сравнить результаты наших вычислений с результатами пакетных. Видно, что они совпадают
da <- aov(mark ~ subject, data=ds)
summary(da)
Df Sum Sq Mean Sq F value Pr(>F)
subject 4 7.533 1.8833 3.104 0.0333 *
Residuals 25 15.167 0.6067
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Делаем вывод, что покрайней мере по одной из дисциплин средняя успеваемость отличается от других групп. Можно также отметить, размер групп 6 элементов сильно вляет на точность метода в худшую сторону.
LS0tCnRpdGxlOiAi0JvQsNCx0L7RgNCw0YLQvtGA0L3QsNGPINGA0LDQsdC+0YLQsCDihJY2IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyDQl9Cw0LTQsNC90LjQtSAxLiDQmtC+0L7RhNC40YbQuNC10L3RgiDQutC+0YDRgNC10LvRj9GG0LjQuCDRhtC10L3RiyDRgNGD0LHQu9GPINC4INC90LXRhNGC0Lgg0LIg0LDQvNC10YDQuNC60LDQvdGB0LrQuNGFINC00L7Qu9C70LDRgNCw0YUuCgoKYGBge3J9CgpybShsaXN0PWxzKCkpICMgY2xlYXJzIG91dCBtZW1vcnkKCnVzZC5kYXRhPSIuL1FVQU5ETF9VU0RSVUIuY3N2IgpvaWwuZGF0YT0iLi9RVUFORExfT1BFQ09JTC5jc3YiCgp1cmxfdXNkPSJodHRwczovL3d3dy5xdWFuZGwuY29tL2FwaS92MS9kYXRhc2V0cy9DVVJSRlgvVVNEUlVCLmNzdj90cmltX3N0YXJ0PTIwMTQtMDgtMDEiCmRvd25sb2FkLmZpbGUodXJsX3VzZCwgdXNkLmRhdGEsICJ3Z2V0IikKCnVybF9vaWw9Imh0dHBzOi8vd3d3LnF1YW5kbC5jb20vYXBpL3YxL2RhdGFzZXRzL09QRUMvT1JCLmNzdj90cmltX3N0YXJ0PTIwMTQtMDgtMDEiCmRvd25sb2FkLmZpbGUodXJsX29pbCwgb2lsLmRhdGEsICJ3Z2V0IikKCgp1c2QuZGF0YSA8LSByZWFkLmNzdih1c2QuZGF0YSwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiwiKQpvaWwuZGF0YSA8LSByZWFkLmNzdihvaWwuZGF0YSwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiwiKQoKYGBgCgpgYGB7cn0KbWVyZ2VkLmRhdGEgPC0gbWVyZ2UodXNkLmRhdGEsb2lsLmRhdGEsIGJ5PSJEYXRlIikKcnViX3ZzX29pbCA9IGRhdGEuZnJhbWUoREFURT1tZXJnZWQuZGF0YSREYXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgUlVCPW1lcmdlZC5kYXRhJFJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIE9JTD1tZXJnZWQuZGF0YSRWYWx1ZSkKYGBgCgpgYGB7ciBlY2hvPUZBTFNFfQpkYXRhX3BvaW50cyA8LSBnZ3Bsb3QoKSArIGdlb21fcG9pbnQoZGF0YT1ydWJfdnNfb2lsLCBhZXMoeD1SVUIsIHk9T0lMKSwgc2l6ZT0xLCBjb2xvdXI9InJlZCIpICsgZ2d0aXRsZSgi0JTQsNC90L3Ri9C1INGBINCw0LLQs9GD0YHRgtCwIDIwMTQiKQpkYXRhX3BvaW50cwpgYGAKCtCg0LDRgdGH0LjRgtCw0LXQvCDQutC+0Y3RhNGE0LjRhtC40LXQvdGCINC60L7RgNGA0LXQu9GP0YbQuNC4INC/0L4g0YTQvtGA0LzRg9C70LUgCgokJApyX3t4eX0gPSBcZnJhY3tcc3VtKFggLSBcd2lkZXRpbGRle1h9KShZIC0gXHdpZGV0aWxkZXtZfSl9e1xzcXJ0e1xzdW0oWCAtIFx3aWRldGlsZGV7WH0pXjJ9XHNxcnR7XHN1bShZIC0gXHdpZGV0aWxkZXtZfSleMn19CiQkCgpgYGB7cn0KcnViX2F2ZyA9IHdlaWdodGVkLm1lYW4ocnViX3ZzX29pbCRSVUIpCm9pbF9hdmcgPSB3ZWlnaHRlZC5tZWFuKHJ1Yl92c19vaWwkT0lMKQp4ID0gcnViX3ZzX29pbCRSVUIgLSBydWJfYXZnCnkgPSBydWJfdnNfb2lsJE9JTCAtIG9pbF9hdmcKcl94eSA9ICh0KHgpICUqJSB5KSAvIChzcXJ0KHQoeCklKiV4KSAqIHNxcnQodCh5KSUqJXkpKQpyX3h5CmBgYAoK0JLRi9Cy0L7QtDog0LLRi9Cx0L7RgNC+0YfQvdC1INCy0LXQu9C40YfQuNC90Ysg0LjQvNC10Y7RgiDRj9Cy0L3QviDQstGL0YDQsNC20LXQvdC90YPRjiDQu9C40L3QtdC50L3Rg9GOINC30LDQstC40YHQuNC80L7RgdGC0YwKCiMjINCX0LDQtNCw0L3QuNC1IDIuINCg0LXQs9GA0LXRgdGB0LjQvtC90L3Ri9C5INCw0L3QsNC70LjQtyDRhtC10L3RiyDRgNGD0LHQu9GPINC4INC90LXRhNGC0LgKCgrQndCw0YfQvdC10Lwg0YEg0LzQvtC00LXQu9C4INC70LjQvdC10LnQvdC+0Lkg0YDQtdCz0YDQtdGB0YHQuNC4ICR5XiogPSBhICsgYngkLiDQktGL0YfQuNGB0LvQuNC8ICRiJCDQuCAkYSQg0L/QviDRhNC+0YDQvNGD0LvQsNC8CgokJApiID0gcl97eHl9ICBcZnJhY3tzX3t5fX17c197eH19CiQkCiQkCmEgPSBFW1ldIC0gYkVbWF0KJCQKCmBgYHtyfQpiID0gcl94eSAqIHNxcnQoIHQoeSklKiV5IC8gdCh4KSUqJXgpCmEgPSB3ZWlnaHRlZC5tZWFuKHJ1Yl92c19vaWwkT0lMKSAtIGIgKiB3ZWlnaHRlZC5tZWFuKHJ1Yl92c19vaWwkUlVCKQpgYGAKCmEgPSBgciByb3VuZChhLDIpYApiID0gYHIgcm91bmQoYiwyKWAgCgoK0J7RgtC+0LHRgNCw0LfQuNC8INC/0L7Qu9GD0YfQtdC90L3Rg9GOINC70LjQvdC40Y4g0YDQtdCz0YDQtdGB0LjQuCDQvdCwINCz0YDQsNGE0LjQutC1CgpgYGB7ciBlY2hvPUZBTFNFfQpkYXRhX3BvaW50cyArIHN0YXRfZnVuY3Rpb24oZGF0YT1ydWJfdnNfb2lsLCBmdW49ZnVuY3Rpb24oeCkgYip4K2EsIGNvbG91ciA9ICJibHVlIikKYGBgCgrQmNC90YLQtdGA0LXRgdC90L4g0YHRgNCw0LLQvdC40YLRjCDRgNC10LfRg9C70YzRgtCw0YLRiyDQv9C+0LvRg9GH0LXQvdC90YvQtSDQstGA0YfRg9GH0L3Rg9GOINGBINC/0LDQutC10YLQvdGL0Lwg0LzQtdGC0L7QtNC+0LwuINCS0LjQtNC40LwsINGH0YLQviDQvtC90Lgg0YHQvtCy0L/QsNC00LDRjtGCLgoKYGBge3J9CmxtKGZvcm11bGEgPSBPSUwgfiBSVUIsIGRhdGEgPSBydWJfdnNfb2lsKQpgYGAKCgrQn9C+0YHQvNC+0YLRgNC40Lwg0L3QsCDQs9C40YHRgtC+0LPRgNCw0LzQvNGDINC+0YHRgtCw0YLQutC+0LIg0Lgg0LLRi9GH0LjRgdC70LjQvCDQuNGFINC00LjRgdC/0LXRgNGB0LjRjgoKYGBge3IgZWNobz1GQUxTRX0KcmVzaWR1YWxzIDwtIHJ1Yl92c19vaWwkT0lMIC0gKGZ1bmN0aW9uKHgpIGIqeCArIGEpKHJ1Yl92c19vaWwkUlVCKQpnZ3Bsb3QoZGF0YT1kYXRhLmZyYW1lKHg9cmVzaWR1YWxzKSwgYWVzKHgpKSArIGdlb21faGlzdG9ncmFtKGNvbD0icmVkIiwgZmlsbD0iZ3JlZW4iLCBhbHBoYSA9IC4yKSArIGdndGl0bGUoItCT0LjRgdGC0L7Qs9GA0LDQvNC80LAg0YDQsNGB0L/RgNC10LTQtdC70LXQvdC40Y8g0L7RgdGC0LDRgtC60L7QsiIpCmBgYArQlNC40YHQv9C10YDRgdC40Y86IGByIHJvdW5kKHZhcihyZXNpZHVhbHMpLDIpYAoKCtCg0LDRgdGB0LzQvtGC0YDQuCDQvNC+0LTQtdC70Ywg0L3QtSDQu9C40L3QtdC50L3QvtC5INGA0LXQs9GA0LXRgdGB0LjQuAokJAp5Xio9c2luKHdfMXgrd18yKSArIHdfM3ggKyB3XzQKJCQKCmBgYHtyIGVjaG89RkFMU0V9Cgptb2RlbDIgPC0gbmxzKGZvcm11bGEgPSBPSUwgfiBzaW4odzEqUlVCICsgdzIpICsgdzMqUlVCICsgdzQsIGRhdGEgPSBydWJfdnNfb2lsLCBzdGFydCA9IGxpc3QodzEgPSAxLCB3MiA9IDEsIHczID0gMSwgdzQgPSAxKSkKbW9kZWwyCgpkYXRhX3BvaW50cyArIHN0YXRfZnVuY3Rpb24oZGF0YT1ydWJfdnNfb2lsLCBmdW49ZnVuY3Rpb24oeCkgc2luKDEuMDQwOTkqeCsxLjUyNzY2KSAtIDEuNjY4NzIqeCArIDE1Mi4xNjU2NCwgY29sb3VyID0gImJsdWUiKQpyZXNpZHVhbHMyIDwtIHJ1Yl92c19vaWwkT0lMIC0gKGZ1bmN0aW9uKHgpIHNpbigxLjA0MDk5KngrMS41Mjc2NikgLSAxLjY2ODcyKnggKyAxNTIuMTY1NjQpKHJ1Yl92c19vaWwkUlVCKQpnZ3Bsb3QoZGF0YT1kYXRhLmZyYW1lKHg9cmVzaWR1YWxzMiksIGFlcyh4KSkgKyBnZW9tX2hpc3RvZ3JhbShjb2w9InJlZCIsIGZpbGw9ImdyZWVuIiwgYWxwaGEgPSAuMikgKyBnZ3RpdGxlKCLQk9C40YHRgtC+0LPRgNCw0LzQvNCwINGA0LDRgdC/0YDQtdC00LXQu9C10L3QuNGPINC+0YHRgtCw0YLQutC+0LIiKQpgYGAK0JTQuNGB0L/QtdGA0YHQuNGPINGC0LDQutC+0Lkg0LzQvtC00LXQu9C4IGByIHJvdW5kKHZhcihyZXNpZHVhbHMyKSwyKWAsINGN0YLQviDQu9C40YjRjCDQvdC10LzQvdC+0LPQviDQvdC40LbQtSwg0YfQtdC8INCyINGB0LvRg9GH0LDQtSDQu9C40L3QtdC50L3QvtC5INGA0LXQs9GA0LXRgdGB0LjQuC4KCiMjINCX0LDQtNCw0L3QuNC1IDMuINCU0LjRgdC/0LXRgNGB0LjQvtC90L3Ri9C5INCw0L3QsNC70LjQtwoKKtCo0LrQvtC70YzQvdC40Log0L/QvtC70YPRh9C40Lsg0LIg0YbQtdC70L7QvCAzMCDQvtGG0LXQvdC+0Log0L/QviDQv9GP0YLQuCDQtNC40YHRhtC40L/Qu9C40L3QsNC8LiDQktGL0LHQvtGA0LrRgyDQv9C+0YHRgtGA0L7QudGC0LUg0YHQsNC80LguINCd0LDQudC00LjRgtC1INC60L7RjdGE0YTQuNGG0LjQtdC90YIg0LTQtdGC0LXRgNC80LjQvdCw0YbQuNC4INC4INC+0L/RgNC10LTQtdC70LjRgtC1LCDRj9Cy0LvRj9C10YLRgdGPINGD0YDQvtCy0LXQvdGMINC30L3QsNGH0LjQvNC+0YHRgtC4INC00LjRgdGG0LjQv9C70LjQvdGLINCyINC+0LHRidC10Lkg0LLQsNGA0LjQsNGG0LjQuCDQvtGG0LXQvdC+0LouKgoKCgpgYGB7cn0Kc3ViamVjdHMgPC0gZ2woNSwgNiwgbGFiZWxzPWMoJ9CU0LjRgdGG0LjQv9C70LjQvdCwMScsJ9CU0LjRgdGG0LjQv9C70LjQvdCwMicsJ9CU0LjRgdGG0LjQv9C70LjQvdCwMycsJ9CU0LjRgdGG0LjQv9C70LjQvdCwNCcsJ9CU0LjRgdGG0LjQv9C70LjQvdCwNScpKQptYXJrcyA8LSBjKDUsNCw1LDQsNSw0LCAgNCwzLDQsNCwzLDMsICA1LDUsNSw0LDUsNSwgIDUsNCwzLDIsNSwzLCAgNCw1LDMsNSwzLDQpCmRzIDwtIGRhdGEuZnJhbWUoc3ViamVjdD1zdWJqZWN0cywgbWFyaz1tYXJrcykKZHMKYGBgCgrQndGD0LvQtdCy0LDRjyDQs9C40L/QvtGC0LXQt9CwICRIXzAkOiDRgdGA0LXQtNC90LjQtSDQt9C90LDRh9C10L3QuNGPINC/0L4g0LTQuNGB0YbQuNC/0LvQuNC90LDQvCDRgNCw0LLQvdGLCgoK0KDQsNGB0YfQuNGC0LDQtdC8INGB0YDQtdC00L3QuNC1INC/0L4g0LTQuNGB0YbQuNC/0LvQuNC90LDQvApgYGB7cn0KbWVhbnMgPC0gYWdncmVnYXRlKG1hcmsgfiBzdWJqZWN0LCBkYXRhPWRzLCBtZWFuKQptZWFucwpgYGAKCtCg0LDRgdGH0LjRgtCw0LXQvCDQtNC40YHQv9C10YDRgdC40Lgg0L/QviDQtNC40YHRhtC40L/Qu9C40L3QsNC8CmBgYHtyfQp2YXJpYW5jZXMgPC0gYWdncmVnYXRlKG1hcmsgfiBzdWJqZWN0LCBkYXRhPWRzLCB2YXIpCnZhcmlhbmNlcwpgYGAKCgrQn9C+0LvRg9GH0LjQvCDQvtGG0LXQvdC60YMg0LTQuNGB0L/QtdGA0YHQuNC4INC/0L7Qv9C/0YPQu9GP0YbQuNC4INGBINC00LLRg9GFINGB0YLQvtGA0L7QvSwg0LrQsNC6INCy0L3Rg9GC0YDQuNCz0YDRg9C/0L/QvtCy0YPRjiAoTVNFKSDQuCDQvNC10LbQs9GA0YPQv9C/0L7QstGD0Y4gKE1TQikKCmBgYHtyfQpNU0UgPSBtZWFuKHZhcmlhbmNlcyRtYXJrKQpNU0UKYGBgCgpgYGB7cn0KR00gPSBtZWFuKGRzJG1hcmspCk1TQiA9IDYgKiAodCgobWVhbnMkbWFyayAtIEdNKSkgJSolIChtZWFucyRtYXJrIC0gR00pKSAvIDQKYGBgCtC+0LHRiNC10LUg0YHRgNC10LTQvdC10LUgR00gPSBgciByb3VuZChHTSwyKWAKCk1TQiA9IGByIE1TQmAKCmBgYHtyfQpERk4gPSA1IC0gMQpERkQgPSAzMCAtIDUKTVNCL01TRQpgYGAK0J7RgtC90L7RiNC10L3QuNC1ICRcZnJhY3tNU0J9e01TRX09JCBgciBNU0IvTVNFYAoKUC3Qt9C90LDRh9C10L3QuNC1OiBgciByb3VuZCgxIC0gcGYoTVNCL01TRSwgREZOLCBERkQpLDUpYCwg0YfRgtC+INGH0YPRgtGMINC90LjQttC1INGD0YDQvtCy0L3RjyDQt9C90LDRh9C40LzQvtGB0YLQuCAwLjA1CgrQoNCw0YHRh9C40YLQsNC10Lwg0YLQsNC60LbQtSwg0LrQsNC6INGA0LDRgdC60LvQsNC00YvQstCw0LXRgtGB0Y8g0L7QsdGJ0LDRjyDRgdGD0LzQvNCwINC60LLQsNC00YDQsNGC0L7QsiDQvdCwINGB0L7RgdGC0LDQstC70Y/RjtGJ0LjQtQokJApTU1Ffe9C+0LHRidCw0Y99ID0gU1NRX3vQtNC40YHRhtC40L/Qu9C40L3Ri30gKyBTU1Ffe9C+0YjQuNCx0LrQuH0KJCQKYGBge3J9CnNzcV90b3RhbCA9IChkcyRtYXJrIC0gR00pICUqJSAoZHMkbWFyayAtIEdNKQpzc3FfY29uZGl0aW9uID0gNiAqICh0KChtZWFucyRtYXJrIC0gR00pKSAlKiUgKG1lYW5zJG1hcmsgLSBHTSkpCnNzcV9lcnJvciA9IChkc1tkcyRzdWJqZWN0PT0n0JTQuNGB0YbQuNC/0LvQuNC90LAxJywyXSAtIG1lYW5zWzEsMl0pICUqJSAoZHNbZHMkc3ViamVjdD09J9CU0LjRgdGG0LjQv9C70LjQvdCwMScsMl0gLSBtZWFuc1sxLDJdKSArIAogIChkc1tkcyRzdWJqZWN0PT0n0JTQuNGB0YbQuNC/0LvQuNC90LAyJywyXSAtIG1lYW5zWzIsMl0pICUqJSAoZHNbZHMkc3ViamVjdD09J9CU0LjRgdGG0LjQv9C70LjQvdCwMicsMl0gLSBtZWFuc1syLDJdKSArCiAgKGRzW2RzJHN1YmplY3Q9PSfQlNC40YHRhtC40L/Qu9C40L3QsDMnLDJdIC0gbWVhbnNbMywyXSkgJSolIChkc1tkcyRzdWJqZWN0PT0n0JTQuNGB0YbQuNC/0LvQuNC90LAzJywyXSAtIG1lYW5zWzMsMl0pICsKICAoZHNbZHMkc3ViamVjdD09J9CU0LjRgdGG0LjQv9C70LjQvdCwNCcsMl0gLSBtZWFuc1s0LDJdKSAlKiUgKGRzW2RzJHN1YmplY3Q9PSfQlNC40YHRhtC40L/Qu9C40L3QsDQnLDJdIC0gbWVhbnNbNCwyXSkgKwogIChkc1tkcyRzdWJqZWN0PT0n0JTQuNGB0YbQuNC/0LvQuNC90LA1JywyXSAtIG1lYW5zWzUsMl0pICUqJSAoZHNbZHMkc3ViamVjdD09J9CU0LjRgdGG0LjQv9C70LjQvdCwNScsMl0gLSBtZWFuc1s1LDJdKSAKYGBgCgokJAoyMi43ID0gNy41ICsgMTUuMgokJAoK0JjQvdGC0LXRgNC10YHQvdC+INGB0YDQsNCy0L3QuNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGC0Ysg0L3QsNGI0LjRhSDQstGL0YfQuNGB0LvQtdC90LjQuSDRgSDRgNC10LfRg9C70YzRgtCw0YLQsNC80Lgg0L/QsNC60LXRgtC90YvRhS4g0JLQuNC00L3Qviwg0YfRgtC+INC+0L3QuCDRgdC+0LLQv9Cw0LTQsNGO0YIKCmBgYHtyfQpkYSA8LSBhb3YobWFyayB+IHN1YmplY3QsIGRhdGE9ZHMpCnN1bW1hcnkoZGEpCmBgYAoKCioq0JTQtdC70LDQtdC8INCy0YvQstC+0LQsINGH0YLQviDQv9C+0LrRgNCw0LnQvdC10Lkg0LzQtdGA0LUg0L/QviDQvtC00L3QvtC5INC40Lcg0LTQuNGB0YbQuNC/0LvQuNC9INGB0YDQtdC00L3Rj9GPINGD0YHQv9C10LLQsNC10LzQvtGB0YLRjCDQvtGC0LvQuNGH0LDQtdGC0YHRjyDQvtGCINC00YDRg9Cz0LjRhSDQs9GA0YPQv9C/LiDQnNC+0LbQvdC+INGC0LDQutC20LUg0L7RgtC80LXRgtC40YLRjCwg0YDQsNC30LzQtdGAINCz0YDRg9C/0L8gNiDRjdC70LXQvNC10L3RgtC+0LIg0YHQuNC70YzQvdC+INCy0LvRj9C10YIg0L3QsCDRgtC+0YfQvdC+0YHRgtGMINC80LXRgtC+0LTQsCDQsiDRhdGD0LTRiNGD0Y4g0YHRgtC+0YDQvtC90YMuKioKCg==