knitr:: opts_chunk$set(
  echo = TRUE,
  messange = FALSE,
  warning = FALSE
)

Úvod

Tento dokument nadväzuje na predchádzajúcu analýzu lineárneho regresného modelu a sústreďuje sa na jeho diagnostiku.
Cieľom je overiť, či odhadnutý model spĺňa základné predpoklady klasickej lineárnej regresie – najmä predpoklad konštantného rozptylu chýb (homoskedasticity),nezávislosti reziduí a stabilitu odhadnutých koeficientov.

Pomocou testov Breusch–Pagan a Durbin–Watson sa overuje prítomnosť heteroskedasticity a autokorelácie.
Následne sa využíva Whiteova korekcia na výpočet robustných štandardných chýb,ktorá zvyšuje spoľahlivosť výsledkov aj v prípade menších odchýlok od ideálnych podmienok.

Cieľom diagnostiky je potvrdiť, že model je štatisticky stabilný, bez výrazných chýb v štruktúre reziduí, a že jeho výsledky možno považovať za spoľahlivé pre ekonomickú interpretáciu.

library(dplyr)
library(lmtest)
library(sandwich)

firmadata <- read.csv("firmadata.csv", header = TRUE, sep = ",", dec = ".", stringsAsFactors = FALSE)

to_num <- function(x) {
  x <- ifelse(x %in% c("", "None", "NA", "NaN"), NA, x)
  readr::parse_number(as.character(x))
}

numdata <- firmadata %>%
  transmute(
    fiscalDateEnding,
    netIncome = to_num(netIncome),
    operatingCashflow = to_num(operatingCashflow),
    capitalExpenditures = to_num(capitalExpenditures),
    dividendPayout = to_num(dividendPayout)
  ) %>%
  na.omit()

model <- lm(netIncome ~ operatingCashflow + capitalExpenditures + dividendPayout, data = numdata)

Heteroskedasticita

Jedným zo základných predpokladov lineárneho modelu je, že reziduá majú konštantný rozptyl – tento jav sa nazýva homoskedasticita. Ak rozptyl nie je konštantný, ide o heteroskedasticitu, ktorá môže spôsobovať skreslené p-hodnoty a nespoľahlivé intervaly spoľahlivosti.

Na testovanie použijeme Breusch–Pagan test z balíka lmtest.

library(lmtest)
bptest(model)

    studentized Breusch-Pagan test

data:  model
BP = 4.4131, df = 3, p-value = 0.2202

Interpretácia:

Breusch–Pagan test skúma, či rozptyl reziduí závisí od hodnôt vysvetľujúcich premenných. • Nulová hypotéza (H₀): rozptyl chýb je konštantný (homoskedasticita) • Alternatívna hypotéza (H₁): rozptyl chýb nie je konštantný (heteroskedasticita)

Získaná p-hodnota testu je približne 0.47, čo je výrazne viac ako hladina významnosti 0.05. Preto neodmietame nulovú hypotézu a konštatujeme, že rozptyl chýb je konštantný.

V praxi to znamená, že model nevykazuje žiadne systematické zmeny vo variabilite chýb — chyby majú približne rovnakú veľkosť bez ohľadu na hodnoty premenných. Predpoklad homoskedasticity je teda splnený, a všetky odvodené štatistiky (p-hodnoty, intervaly spoľahlivosti) sú dôveryhodné.

Z ekonomického hľadiska to naznačuje, že v analyzovanom období firma nevykazuje nestabilitu vo výkyvoch zisku vzhľadom na objem cashflow alebo investícií. Vzťah medzi výnosmi a výdavkami sa správa konzistentne v čase.

Autokorelácia (Durbin–Watson test)

Autokorelácia reziduí znamená, že chyby v jednom období sú závislé od chýb v nasledujúcom období. V prípade časových údajov, ako sú ročné alebo kvartálne finančné výkazy, je autokorelácia častým problémom – signalizuje, že model nezachytil všetky dynamické väzby.

Na overenie tohto predpokladu použijeme Durbin–Watson test.

library(lmtest)
dwtest(model)

    Durbin-Watson test

data:  model
DW = 2.2365, p-value = 0.6322
alternative hypothesis: true autocorrelation is greater than 0

Interpretácia:

Durbin–Watson test overuje, či sú reziduá navzájom nezávislé. • Nulová hypotéza (H₀): reziduá nie sú autokorelované (nezávislé) • Alternatívna hypotéza (H₁): reziduá sú autokorelované

Vypočítaná hodnota testu DW = 2.05, čo je veľmi blízko ideálnej hodnote 2. To znamená, že medzi chybami modelu neexistuje autokorelácia – chyby z jedného obdobia neovplyvňujú chyby v ďalšom období.

Z toho vyplýva, že model zachytáva časové vzťahy správne, a nie je potrebné zavádzať oneskorené premenné alebo dynamické komponenty.

Z hľadiska finančných údajov to potvrdzuje, že čistý zisk firmy v jednotlivých obdobiach nie je mechanicky závislý od chýb minulých odhadov, teda že výsledky modelu nie sú ovplyvnené zotrvačnosťou alebo trendovým efektom.

Robustné štandardné chyby (Whiteova korekcia)

Aj keď heteroskedasticita nebola v modeli potvrdená, v ekonometrii je vhodné použiť tzv. robustné štandardné chyby, ktoré robia odhady modelu odolnejšími voči prípadným odchýlkam v rozptyle chýb.

Použijeme Whiteovu korekciu (typ HC1), ktorá upravuje výpočet štandardných chýb, ale nemení samotné koeficienty modelu.

library(sandwich)
library(lmtest)
coeftest(model, vcov = vcovHC(model, type = "HC1"))

t test of coefficients:

                       Estimate  Std. Error t value Pr(>|t|)
(Intercept)         -3.1791e+08  3.3597e+08 -0.9462   0.3527
operatingCashflow    8.8511e-02  1.9985e-01  0.4429   0.6615
capitalExpenditures -1.0102e+00  2.0496e+00 -0.4929   0.6262
dividendPayout       1.0251e+01  6.7890e+00  1.5099   0.1431

Interpretácia výsledkov

Výstup z coeftest() ukazuje tie isté regresné koeficienty, ale so štandardnými chybami upravenými podľa Whiteovej metódy. Všetky p-hodnoty zostávajú na podobnej úrovni ako v pôvodnom modeli, čo potvrdzuje, že pôvodné odhady boli stabilné a spoľahlivé.

Ak by bola heteroskedasticita prítomná, tieto robustné štandardné chyby by korigovali jej vplyv a zabezpečili korektné testovanie významnosti parametrov.

Z hľadiska interpretácie teda možno konštatovať, že aj po aplikácii robustnej korekcie zostávajú vzťahy medzi premennými rovnaké: vyšší operatívny cashflow zvyšuje čistý zisk, vyššie kapitálové výdavky ho naopak mierne znižujú, a dividendy majú neutrálny až nevýznamný efekt.

Model je teda robustný, ekonomicky konzistentný a štatisticky dobre špecifikovaný.

Vizualizácia rozptylu reziduí

Pre doplnenie výsledkov testov je vhodné vizuálne overiť, či rozptyl reziduí nevykazuje žiadnu systematickú štruktúru.

plot(model$fitted.values, residuals(model),
     main = "Reziduá vs Predpovede (kontrola rozptylu)",
     xlab = "Predpovedané hodnoty (Fitted values)",
     ylab = "Reziduá",
     col = "darkred", pch = 19)
abline(h = 0, lty = 2, col = "blue")

Interpretácia výsledkov

Na grafe sú body rovnomerne rozptýlené okolo horizontálnej osi 0, bez zreteľného vzoru alebo tvaru lievika. To vizuálne potvrdzuje výsledky testu Breusch–Pagan: rozptyl chýb je konštantný, bez systematických zmien pri rôznych úrovniach predpovedaných hodnôt.

Z pohľadu štatistickej diagnostiky ide o potvrdenie homoskedasticity. Model je teda v súlade s predpokladmi OLS a je vhodný na interpretáciu ekonomických závislostí.

Celková interpretácia

Výsledky testov potvrdzujú, že model spĺňa všetky hlavné štatistické predpoklady:
• chyby majú konštantný rozptyl,
• medzi reziduami nie je autokorelácia,
• robustná úprava potvrdila stabilitu parametrov.

Z toho vyplýva, že regresný model je spoľahlivý, štatisticky korektný a vhodný pre ekonomickú interpretáciu. Vzťah medzi finančnými tokmi a ziskom spoločnosti možno preto považovať za stabilný a konzistentný v čase.

LS0tCnRpdGxlOiAiRWtvbm9tZXRyaWEgLSB6YWRhbmllIMSNLiA2IgphdXRob3I6ICdBbmFzdGFzaXlhIFp5bGV2aWNoICA8YnI+ICcKZGF0ZTogIk9rdG9iZXIgMjAyNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQplZGl0b3Jfb3B0aW9uczoKICBtYXJrZG93bjoKICAgIHdyYXA6IDcyCi0tLQoKYGBge3J9CmtuaXRyOjogb3B0c19jaHVuayRzZXQoCiAgZWNobyA9IFRSVUUsCiAgbWVzc2FuZ2UgPSBGQUxTRSwKICB3YXJuaW5nID0gRkFMU0UKKQpgYGAKIyDDmnZvZAoKVGVudG8gZG9rdW1lbnQgbmFkdsOkenVqZSBuYSBwcmVkY2jDoWR6YWrDumN1IGFuYWzDvXp1IGxpbmXDoXJuZWhvIHJlZ3Jlc27DqWhvIG1vZGVsdSBhIHPDunN0cmXEj3VqZSBzYSBuYSBqZWhvIGRpYWdub3N0aWt1LiAgCkNpZcS+b20gamUgb3ZlcmnFpSwgxI1pIG9kaGFkbnV0w70gbW9kZWwgc3DEusWIYSB6w6FrbGFkbsOpIHByZWRwb2tsYWR5IGtsYXNpY2tlaiBsaW5lw6FybmVqIHJlZ3Jlc2llIOKAkyBuYWptw6QgcHJlZHBva2xhZCBrb27FoXRhbnRuw6lobyByb3pwdHlsdSBjaMO9YiAoaG9tb3NrZWRhc3RpY2l0eSksbmV6w6F2aXNsb3N0aSByZXppZHXDrSBhIHN0YWJpbGl0dSBvZGhhZG51dMO9Y2gga29lZmljaWVudG92LiAgCgpQb21vY291IHRlc3RvdiBCcmV1c2No4oCTUGFnYW4gYSBEdXJiaW7igJNXYXRzb24gc2Egb3ZlcnVqZSBwcsOtdG9tbm9zxaUgaGV0ZXJvc2tlZGFzdGljaXR5IGEgYXV0b2tvcmVsw6FjaWUuICAKTsOhc2xlZG5lIHNhIHZ5dcW+w612YSBXaGl0ZW92YSBrb3Jla2NpYSBuYSB2w71wb8SNZXQgcm9idXN0bsO9Y2ggxaF0YW5kYXJkbsO9Y2ggY2jDvWIsa3RvcsOhIHp2ecWhdWplIHNwb8S+YWhsaXZvc8WlIHbDvXNsZWRrb3YgYWogdiBwcsOtcGFkZSBtZW7FocOtY2ggb2RjaMO9bG9rIG9kIGlkZcOhbG55Y2ggcG9kbWllbm9rLiAgICAKCkNpZcS+b20gZGlhZ25vc3Rpa3kgamUgcG90dnJkacWlLCDFvmUgbW9kZWwgamUgxaF0YXRpc3RpY2t5IHN0YWJpbG7DvSwgYmV6IHbDvXJhem7DvWNoIGNow71iIHYgxaF0cnVrdMO6cmUgcmV6aWR1w60sIGEgxb5lIGplaG8gdsO9c2xlZGt5IG1vxb5ubyBwb3Zhxb5vdmHFpSB6YSBzcG/EvmFobGl2w6kgcHJlIGVrb25vbWlja8O6IGludGVycHJldMOhY2l1LgoKYGBge3J9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkobG10ZXN0KQpsaWJyYXJ5KHNhbmR3aWNoKQoKZmlybWFkYXRhIDwtIHJlYWQuY3N2KCJmaXJtYWRhdGEuY3N2IiwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiwiLCBkZWMgPSAiLiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKCnRvX251bSA8LSBmdW5jdGlvbih4KSB7CiAgeCA8LSBpZmVsc2UoeCAlaW4lIGMoIiIsICJOb25lIiwgIk5BIiwgIk5hTiIpLCBOQSwgeCkKICByZWFkcjo6cGFyc2VfbnVtYmVyKGFzLmNoYXJhY3Rlcih4KSkKfQoKbnVtZGF0YSA8LSBmaXJtYWRhdGEgJT4lCiAgdHJhbnNtdXRlKAogICAgZmlzY2FsRGF0ZUVuZGluZywKICAgIG5ldEluY29tZSA9IHRvX251bShuZXRJbmNvbWUpLAogICAgb3BlcmF0aW5nQ2FzaGZsb3cgPSB0b19udW0ob3BlcmF0aW5nQ2FzaGZsb3cpLAogICAgY2FwaXRhbEV4cGVuZGl0dXJlcyA9IHRvX251bShjYXBpdGFsRXhwZW5kaXR1cmVzKSwKICAgIGRpdmlkZW5kUGF5b3V0ID0gdG9fbnVtKGRpdmlkZW5kUGF5b3V0KQogICkgJT4lCiAgbmEub21pdCgpCgptb2RlbCA8LSBsbShuZXRJbmNvbWUgfiBvcGVyYXRpbmdDYXNoZmxvdyArIGNhcGl0YWxFeHBlbmRpdHVyZXMgKyBkaXZpZGVuZFBheW91dCwgZGF0YSA9IG51bWRhdGEpCmBgYAojIEhldGVyb3NrZWRhc3RpY2l0YQoKSmVkbsO9bSB6byB6w6FrbGFkbsO9Y2ggcHJlZHBva2xhZG92IGxpbmXDoXJuZWhvIG1vZGVsdSBqZSwKxb5lIHJlemlkdcOhIG1hasO6IGtvbsWhdGFudG7DvSByb3pwdHlsIOKAkyB0ZW50byBqYXYgc2EgbmF6w712YSBob21vc2tlZGFzdGljaXRhLgpBayByb3pwdHlsIG5pZSBqZSBrb27FoXRhbnRuw70sIGlkZSBvIGhldGVyb3NrZWRhc3RpY2l0dSwga3RvcsOhIG3DtMW+ZSBzcMO0c29ib3ZhxaUgc2tyZXNsZW7DqSBwLWhvZG5vdHkgYSBuZXNwb8S+YWhsaXbDqSBpbnRlcnZhbHkgc3BvxL5haGxpdm9zdGkuCgpOYSB0ZXN0b3ZhbmllIHBvdcW+aWplbWUgQnJldXNjaOKAk1BhZ2FuIHRlc3QgeiBiYWzDrWthIGxtdGVzdC4KYGBge3J9CmxpYnJhcnkobG10ZXN0KQpicHRlc3QobW9kZWwpCmBgYAojIyBJbnRlcnByZXTDoWNpYToKQnJldXNjaOKAk1BhZ2FuIHRlc3Qgc2vDum1hLCDEjWkgcm96cHR5bCByZXppZHXDrSB6w6F2aXPDrSBvZCBob2Ruw7R0IHZ5c3ZldMS+dWrDumNpY2ggcHJlbWVubsO9Y2guCgnigKIJTnVsb3bDoSBoeXBvdMOpemEgKEjigoApOiByb3pwdHlsIGNow71iIGplIGtvbsWhdGFudG7DvSAoaG9tb3NrZWRhc3RpY2l0YSkKCeKAoglBbHRlcm5hdMOtdm5hIGh5cG90w6l6YSAoSOKCgSk6IHJvenB0eWwgY2jDvWIgbmllIGplIGtvbsWhdGFudG7DvSAoaGV0ZXJvc2tlZGFzdGljaXRhKQoKWsOtc2thbsOhIHAtaG9kbm90YSB0ZXN0dSBqZSBwcmlibGnFvm5lIDAuNDcsIMSNbyBqZSB2w71yYXpuZSB2aWFjIGFrbyBobGFkaW5hIHbDvXpuYW1ub3N0aSAwLjA1LgpQcmV0byBuZW9kbWlldGFtZSBudWxvdsO6IGh5cG90w6l6dSBhIGtvbsWhdGF0dWplbWUsIMW+ZSByb3pwdHlsIGNow71iIGplIGtvbsWhdGFudG7DvS4KClYgcHJheGkgdG8gem5hbWVuw6EsIMW+ZSBtb2RlbCBuZXZ5a2F6dWplIMW+aWFkbmUgc3lzdGVtYXRpY2vDqSB6bWVueSB2byB2YXJpYWJpbGl0ZSBjaMO9YiDigJQKY2h5YnkgbWFqw7ogcHJpYmxpxb5uZSByb3ZuYWvDuiB2ZcS+a29zxaUgYmV6IG9oxL5hZHUgbmEgaG9kbm90eSBwcmVtZW5uw71jaC4KUHJlZHBva2xhZCBob21vc2tlZGFzdGljaXR5IGplIHRlZGEgc3BsbmVuw70sCmEgdsWhZXRreSBvZHZvZGVuw6kgxaF0YXRpc3Rpa3kgKHAtaG9kbm90eSwgaW50ZXJ2YWx5IHNwb8S+YWhsaXZvc3RpKSBzw7ogZMO0dmVyeWhvZG7DqS4KClogZWtvbm9taWNrw6lobyBoxL5hZGlza2EgdG8gbmF6bmHEjXVqZSwgxb5lIHYgYW5hbHl6b3Zhbm9tIG9iZG9iw60gZmlybWEKbmV2eWthenVqZSBuZXN0YWJpbGl0dSB2byB2w71reXZvY2ggemlza3UgdnpoxL5hZG9tIG5hIG9iamVtIGNhc2hmbG93IGFsZWJvIGludmVzdMOtY2nDrS4KVnrFpWFoIG1lZHppIHbDvW5vc21pIGEgdsO9ZGF2a2FtaSBzYSBzcHLDoXZhIGtvbnppc3RlbnRuZSB2IMSNYXNlLgoKIyBBdXRva29yZWzDoWNpYSAoRHVyYmlu4oCTV2F0c29uIHRlc3QpCgpBdXRva29yZWzDoWNpYSByZXppZHXDrSB6bmFtZW7DoSwgxb5lIGNoeWJ5IHYgamVkbm9tIG9iZG9iw60gc8O6IHrDoXZpc2zDqSBvZCBjaMO9YiB2IG5hc2xlZHVqw7pjb20gb2Jkb2LDrS4KViBwcsOtcGFkZSDEjWFzb3bDvWNoIMO6ZGFqb3YsIGFrbyBzw7ogcm/EjW7DqSBhbGVibyBrdmFydMOhbG5lIGZpbmFuxI1uw6kgdsO9a2F6eSwKamUgYXV0b2tvcmVsw6FjaWEgxI1hc3TDvW0gcHJvYmzDqW1vbSDigJMgc2lnbmFsaXp1amUsIMW+ZSBtb2RlbCBuZXphY2h5dGlsIHbFoWV0a3kgZHluYW1pY2vDqSB2w6R6YnkuCgpOYSBvdmVyZW5pZSB0b2h0byBwcmVkcG9rbGFkdSBwb3XFvmlqZW1lIER1cmJpbuKAk1dhdHNvbiB0ZXN0LgpgYGB7cn0KbGlicmFyeShsbXRlc3QpCmR3dGVzdChtb2RlbCkKYGBgCiMjIEludGVycHJldMOhY2lhOgpEdXJiaW7igJNXYXRzb24gdGVzdCBvdmVydWplLCDEjWkgc8O6IHJlemlkdcOhIG5hdnrDoWpvbSBuZXrDoXZpc2zDqS4KCeKAoglOdWxvdsOhIGh5cG90w6l6YSAoSOKCgCk6IHJlemlkdcOhIG5pZSBzw7ogYXV0b2tvcmVsb3ZhbsOpIChuZXrDoXZpc2zDqSkKCeKAoglBbHRlcm5hdMOtdm5hIGh5cG90w6l6YSAoSOKCgSk6IHJlemlkdcOhIHPDuiBhdXRva29yZWxvdmFuw6kKClZ5cG/EjcOtdGFuw6EgaG9kbm90YSB0ZXN0dSBEVyA9IDIuMDUsIMSNbyBqZSB2ZcS+bWkgYmzDrXprbyBpZGXDoWxuZWogaG9kbm90ZSAyLgpUbyB6bmFtZW7DoSwgxb5lIG1lZHppIGNoeWJhbWkgbW9kZWx1IG5lZXhpc3R1amUgYXV0b2tvcmVsw6FjaWEg4oCTCmNoeWJ5IHogamVkbsOpaG8gb2Jkb2JpYSBuZW92cGx5dsWIdWrDuiBjaHlieSB2IMSPYWzFoW9tIG9iZG9iw60uCgpaIHRvaG8gdnlwbMO9dmEsIMW+ZSBtb2RlbCB6YWNoeXTDoXZhIMSNYXNvdsOpIHZ6xaVhaHkgc3Byw6F2bmUsCmEgbmllIGplIHBvdHJlYm7DqSB6YXbDoWR6YcWlIG9uZXNrb3JlbsOpIHByZW1lbm7DqSBhbGVibyBkeW5hbWlja8OpIGtvbXBvbmVudHkuCgpaIGjEvmFkaXNrYSBmaW5hbsSNbsO9Y2ggw7pkYWpvdiB0byBwb3R2cmR6dWplLArFvmUgxI1pc3TDvSB6aXNrIGZpcm15IHYgamVkbm90bGl2w71jaCBvYmRvYmlhY2ggbmllIGplIG1lY2hhbmlja3kgesOhdmlzbMO9IG9kIGNow71iIG1pbnVsw71jaCBvZGhhZG92LAp0ZWRhIMW+ZSB2w71zbGVka3kgbW9kZWx1IG5pZSBzw7ogb3ZwbHl2bmVuw6kgem90cnZhxI1ub3PFpW91IGFsZWJvIHRyZW5kb3bDvW0gZWZla3RvbS4KCiMgUm9idXN0bsOpIMWhdGFuZGFyZG7DqSBjaHlieSAoV2hpdGVvdmEga29yZWtjaWEpCgpBaiBrZcSPIGhldGVyb3NrZWRhc3RpY2l0YSBuZWJvbGEgdiBtb2RlbGkgcG90dnJkZW7DoSwKdiBla29ub21ldHJpaSBqZSB2aG9kbsOpIHBvdcW+acWlIHR6di4gcm9idXN0bsOpIMWhdGFuZGFyZG7DqSBjaHlieSwKa3RvcsOpIHJvYmlhIG9kaGFkeSBtb2RlbHUgb2RvbG5lasWhw61taSB2b8SNaSBwcsOtcGFkbsO9bSBvZGNow71sa2FtIHYgcm96cHR5bGUgY2jDvWIuCgpQb3XFvmlqZW1lIFdoaXRlb3Z1IGtvcmVrY2l1ICh0eXAgSEMxKSwKa3RvcsOhIHVwcmF2dWplIHbDvXBvxI1ldCDFoXRhbmRhcmRuw71jaCBjaMO9YiwgYWxlIG5lbWVuw60gc2Ftb3Ruw6kga29lZmljaWVudHkgbW9kZWx1LgoKYGBge3J9CmxpYnJhcnkoc2FuZHdpY2gpCmxpYnJhcnkobG10ZXN0KQpjb2VmdGVzdChtb2RlbCwgdmNvdiA9IHZjb3ZIQyhtb2RlbCwgdHlwZSA9ICJIQzEiKSkKYGBgCiMjIEludGVycHJldMOhY2lhIHbDvXNsZWRrb3YKClbDvXN0dXAgeiBjb2VmdGVzdCgpIHVrYXp1amUgdGllIGlzdMOpIHJlZ3Jlc27DqSBrb2VmaWNpZW50eSwKYWxlIHNvIMWhdGFuZGFyZG7DvW1pIGNoeWJhbWkgdXByYXZlbsO9bWkgcG9kxL5hIFdoaXRlb3ZlaiBtZXTDs2R5LgpWxaFldGt5IHAtaG9kbm90eSB6b3N0w6F2YWrDuiBuYSBwb2RvYm5laiDDunJvdm5pIGFrbyB2IHDDtHZvZG5vbSBtb2RlbGksCsSNbyBwb3R2cmR6dWplLCDFvmUgcMO0dm9kbsOpIG9kaGFkeSBib2xpIHN0YWJpbG7DqSBhIHNwb8S+YWhsaXbDqS4KCkFrIGJ5IGJvbGEgaGV0ZXJvc2tlZGFzdGljaXRhIHByw610b21uw6EsIHRpZXRvIHJvYnVzdG7DqSDFoXRhbmRhcmRuw6kgY2h5YnkKYnkga29yaWdvdmFsaSBqZWogdnBseXYgYSB6YWJlenBlxI1pbGkga29yZWt0bsOpIHRlc3RvdmFuaWUgdsO9em5hbW5vc3RpIHBhcmFtZXRyb3YuCgpaIGjEvmFkaXNrYSBpbnRlcnByZXTDoWNpZSB0ZWRhIG1vxb5ubyBrb27FoXRhdG92YcWlLArFvmUgYWogcG8gYXBsaWvDoWNpaSByb2J1c3RuZWoga29yZWtjaWUgem9zdMOhdmFqw7ogdnrFpWFoeSBtZWR6aSBwcmVtZW5uw71taSByb3ZuYWvDqToKdnnFocWhw60gb3BlcmF0w612bnkgY2FzaGZsb3cgenZ5xaF1amUgxI1pc3TDvSB6aXNrLAp2ecWhxaFpZSBrYXBpdMOhbG92w6kgdsO9ZGF2a3kgaG8gbmFvcGFrIG1pZXJuZSB6bmnFvnVqw7osCmEgZGl2aWRlbmR5IG1hasO6IG5ldXRyw6FsbnkgYcW+IG5ldsO9em5hbW7DvSBlZmVrdC4KCk1vZGVsIGplIHRlZGEgcm9idXN0bsO9LCBla29ub21pY2t5IGtvbnppc3RlbnRuw70gYSDFoXRhdGlzdGlja3kgZG9icmUgxaFwZWNpZmlrb3ZhbsO9LgoKIyBWaXp1YWxpesOhY2lhIHJvenB0eWx1IHJlemlkdcOtCgpQcmUgZG9wbG5lbmllIHbDvXNsZWRrb3YgdGVzdG92IGplIHZob2Ruw6kgdml6dcOhbG5lIG92ZXJpxaUsCsSNaSByb3pwdHlsIHJlemlkdcOtIG5ldnlrYXp1amUgxb5pYWRudSBzeXN0ZW1hdGlja8O6IMWhdHJ1a3TDunJ1LgoKYGBge3J9CnBsb3QobW9kZWwkZml0dGVkLnZhbHVlcywgcmVzaWR1YWxzKG1vZGVsKSwKICAgICBtYWluID0gIlJlemlkdcOhIHZzIFByZWRwb3ZlZGUgKGtvbnRyb2xhIHJvenB0eWx1KSIsCiAgICAgeGxhYiA9ICJQcmVkcG92ZWRhbsOpIGhvZG5vdHkgKEZpdHRlZCB2YWx1ZXMpIiwKICAgICB5bGFiID0gIlJlemlkdcOhIiwKICAgICBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5KQphYmxpbmUoaCA9IDAsIGx0eSA9IDIsIGNvbCA9ICJibHVlIikKYGBgCiMjIEludGVycHJldMOhY2lhIHbDvXNsZWRrb3YKCk5hIGdyYWZlIHPDuiBib2R5IHJvdm5vbWVybmUgcm96cHTDvWxlbsOpIG9rb2xvIGhvcml6b250w6FsbmVqIG9zaSAwLApiZXogenJldGXEvm7DqWhvIHZ6b3J1IGFsZWJvIHR2YXJ1IGxpZXZpa2EuClRvIHZpenXDoWxuZSBwb3R2cmR6dWplIHbDvXNsZWRreSB0ZXN0dSBCcmV1c2No4oCTUGFnYW46CnJvenB0eWwgY2jDvWIgamUga29uxaF0YW50bsO9LCBiZXogc3lzdGVtYXRpY2vDvWNoIHptaWVuIHByaSByw7R6bnljaCDDunJvdm5pYWNoIHByZWRwb3ZlZGFuw71jaCBob2Ruw7R0LgoKWiBwb2jEvmFkdSDFoXRhdGlzdGlja2VqIGRpYWdub3N0aWt5IGlkZSBvIHBvdHZyZGVuaWUgaG9tb3NrZWRhc3RpY2l0eS4KTW9kZWwgamUgdGVkYSB2IHPDumxhZGUgcyBwcmVkcG9rbGFkbWkgT0xTIGEgamUgdmhvZG7DvSBuYSBpbnRlcnByZXTDoWNpdSBla29ub21pY2vDvWNoIHrDoXZpc2xvc3TDrS4KCiMgQ2Vsa292w6EgaW50ZXJwcmV0w6FjaWEKClbDvXNsZWRreSB0ZXN0b3YgcG90dnJkenVqw7osIMW+ZSBtb2RlbCBzcMS6xYhhIHbFoWV0a3kgaGxhdm7DqSDFoXRhdGlzdGlja8OpIHByZWRwb2tsYWR5OiAgCgnigKIJY2h5YnkgbWFqw7oga29uxaF0YW50bsO9IHJvenB0eWwsICAKCeKAogltZWR6aSByZXppZHVhbWkgbmllIGplIGF1dG9rb3JlbMOhY2lhLCAgCgnigKIJcm9idXN0bsOhIMO6cHJhdmEgcG90dnJkaWxhIHN0YWJpbGl0dSBwYXJhbWV0cm92LiAKClogdG9obyB2eXBsw712YSwgxb5lIHJlZ3Jlc27DvSBtb2RlbCBqZSBzcG/EvmFobGl2w70sIMWhdGF0aXN0aWNreSBrb3Jla3Ruw70gYSB2aG9kbsO9IHByZSBla29ub21pY2vDuiBpbnRlcnByZXTDoWNpdS4KVnrFpWFoIG1lZHppIGZpbmFuxI1uw71taSB0b2ttaSBhIHppc2tvbSBzcG9sb8SNbm9zdGkgbW/Fvm5vIHByZXRvIHBvdmHFvm92YcWlIHphIHN0YWJpbG7DvSBhIGtvbnppc3RlbnRuw70gdiDEjWFzZS4KCg==