1.简单指数平滑
指数平滑法是基于滑动平均法延伸而来的,滑动平均是把前N个序列的平均值作为N+1的预测,不断地往后计算,获得一条相对平滑的曲线。但是指数平滑法则认为,时间越靠近那么应该予以的权重就越大。赋予权重的大小一般以α表示 权重随观测时间的久远程度呈指数型下降 — 最早的观察值被赋予最小的权值
适用于预测没有明显趋势或季节因素的数据
$$ \[\begin{equation}
\begin{split}
&\hat{y}_{t+1|t} = \alpha y_t + \alpha(1-\alpha) y_{t-1}+ \alpha(1-\alpha)^2 y_{t-2} + \alpha(1-\alpha)^3 y_{t-3} +... \\
&将时刻1的第一个拟合值表示为l_0(我们必须进行估计)\\
&由 \hat{y}_{t+1|t} = \alpha y_t + (1- \alpha)\hat{y}_{t|t-1} ,即\hat{y}_{2|1} = \alpha y_1 + (1- \alpha)l_0, \hat{y}_{3|2} = \alpha y_2 + (1- \alpha)\hat{y}_{2|1},...\\
&得 \color{red}{\hat{y}_{t+1|t}= \sum_{j=1}^{t-1}{\alpha(1-\alpha)^j y_{t-j} + (1-\alpha)^tl_0}}\\
\end{split}
\end{equation}\] \[
最小化下式来估计未知参数的值和初始值
\] SSE = {t=1}^{T}{(y_t - {t|t-1})^2} = _{t=1}{T}{{e_t}2} $$
library(fpp2)
oildata <- window(oil, start=1996)
# Estimate parameters
#ses函数可以对后面的5个观测进行预测,
fit <- ses(oildata, h=5)
fit$model
Simple exponential smoothing
Call:
ses(y = oildata, h = 5)
Smoothing parameters:
alpha = 0.8339
Initial states:
l = 446.5868
sigma: 29.8282
AIC AICc BIC
178.1430 179.8573 180.8141
# Accuracy of one-step-ahead training errors
#accuracy函数所给出的是在训练集中得到的准确度指标。
round(accuracy(fit),2)
ME RMSE MAE MPE MAPE MASE ACF1
Training set 6.4 28.12 22.26 1.1 4.61 0.93 -0.03
#> ME RMSE MAE MPE MAPE MASE ACF1
#> Training set 6.4 28.12 22.26 1.1 4.61 0.93 -0.03
autoplot(fit) +
autolayer(fitted(fit), series="Fitted") +
ylab("Oil (millions of tonnes)") + xlab("Year")

2.Holt指数平滑(考虑趋势性)/霍尔特的线性趋势法
Holt (1957) 将简单指数平滑法扩展到可以预测具有趋势的数据。 该方法包含一个预测方程和两个平滑方程(一个用于水平,一个用于趋势): \[
\begin{align*}
\text{Forecast equation}&& \hat{y}_{t+h|t} &= \ell_{t} + hb_{t} \\
\text{Level equation} && \ell_{t} &= \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + b_{t-1})\\
\text{Trend equation} && b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)b_{t-1},
\end{align*}
\]
air <- window(ausair, start=1990)
fc <- holt(air, h=5)
fc$model
Holt's method
Call:
holt(y = air, h = 5)
Smoothing parameters:
alpha = 0.8302
beta = 1e-04
Initial states:
l = 15.5715
b = 2.1017
sigma: 2.3645
AIC AICc BIC
141.1291 143.9863 147.6083
可以看到这个方法比之前获得了一些新的参数,如beta和b。beta是趋势性的指数,它表示随着时间的变化,时间序列趋势所发生的变化。而b则是初始值。
###阻尼趋势方法(削弱趋势) 该方法有一种变式,叫做Damped trend methods(阻尼趋势方法)。 它的假设是,一个序列在短期内是具有一定趋势的,但是在长期中却是围绕着一个均值在波动。 \[\begin{align*}
\hat{y}_{t+h|t} &= \ell_{t} + (\phi+\phi^2 + \dots + \phi^{h})b_{t} \\
\ell_{t} &= \alpha y_{t} + (1 - \alpha)(\ell_{t-1} + \phi b_{t-1})\\
b_{t} &= \beta^*(\ell_{t} - \ell_{t-1}) + (1 -\beta^*)\phi b_{t-1}。
\end{align*}\]
这里引入一个新的参数ϕ,0<ϕ<1,一般在0.8到0.98之间,如果等于1。 ϕ(读作phi)是用来削弱趋势性的参数。ϕ越大则对趋势削弱的效果越小,等于1的时候则完全没有削弱的效果(与传统的Holt平滑法无异)。 如果0<ϕ<1,那么随着预测后续变量越多,将会让预测趋近于\[ \ell_T+\phi b_T/(1-\phi) \]
fc <- holt(air, h=15)
fc2 <- holt(air, damped=TRUE, phi = 0.9, h=15)
autoplot(air) +
autolayer(fc, series="Holt's method", PI=FALSE) +
autolayer(fc2, series="Damped Holt's method", PI=FALSE) +
ggtitle("Forecasts from Holt's method") + xlab("Year") +
ylab("Air passengers in Australia (millions)") +
guides(colour=guide_legend(title="Forecast"))

fc2$model
Damped Holt's method
Call:
holt(y = air, h = 15, damped = TRUE, phi = 0.9)
Smoothing parameters:
alpha = 0.763
beta = 0.2526
phi = 0.9
Initial states:
l = 14.5766
b = 3.7517
sigma: 2.6165
AIC AICc BIC
145.3965 148.2536 151.8757
autoplot(air) +
autolayer(fc, series="Holt's method", PI=FALSE) +
autolayer(fc2, series="Damped Holt's method", PI=FALSE) +
ggtitle("Forecasts from Holt's method") + xlab("Year") +
ylab("Air passengers in Australia (millions)") +
guides(colour=guide_legend(title="Forecast"))

###Holt-Winters’平滑法 考虑季节性因素,进而提出Holt-Winters’平滑法。其中,季节性可以分为可加和可乘两种,如果季节性随着时间变化而变化,那么应该使用可乘,否则使用可加。 Holt-Winters’平滑法一样可以考虑趋势衰减,是要设置damp参数为TRUE即可。
aust <- window(austourists,start=2005)
fit1 <- hw(aust,seasonal="additive")
fit2 <- hw(aust,seasonal="multiplicative")
rbind(accuracy(fit1),accuracy(fit2))
ME RMSE MAE MPE MAPE MASE ACF1
Training set 0.008115785 1.763305 1.374062 -0.2860248405 2.973922 0.4502579 -0.06272507
Training set 0.092062283 1.575631 1.254960 -0.0006505533 2.705390 0.4112302 -0.07955726
autoplot(aust) +
autolayer(fit1, series="HW additive forecasts", PI=FALSE) +
autolayer(fit2, series="HW multiplicative forecasts",
PI=FALSE) +
xlab("年份") + ylab("澳大利亚国际游客过夜的天数(百万)") +
guides(colour=guide_legend(title="预测值"))+
theme(text = element_text(family = "STHeiti"))+
theme(plot.title = element_text(hjust = 0.5))

Holt-Winters’平滑法一样可以考虑趋势衰减,是要设置damp参数为TRUE即可。 事实上一种比较优秀的方法就是用Holt-Winters’季节可乘的趋势衰减平滑法.
hw(y, damped=TRUE, seasonal=“multiplicative”) #y为要进行平滑的时间序列
自动化平滑模型选择与预测
ETS (误差,趋势,季节性) ,这种标记也可以看作是指数平滑。 每个成分的可能取值为:误差 = {A,M},趋势 = {N,A,A_d },季节性 = { N,A,M }。
ETS(A,N,N):具有加性误差的简单指数平滑 ETS(M,N,N):具有乘性误差的简单指数平滑 ETS(A,A,N):具有加性误差的Holt线性方法 ETS(M,A,N):具有乘性误差的Holt线性方法
https://otexts.com/fppcn/ets.html
引入了ets函数,它不能进行预测,但是能够根据时间序列的状况,选择最佳的模型。
aust <- window(austourists, start=2005)
fit <- ets(aust)
summary(fit)
ETS(M,A,M)
Call:
ets(y = aust)
Smoothing parameters:
alpha = 0.1908
beta = 0.0392
gamma = 2e-04
Initial states:
l = 32.3679
b = 0.9281
s = 1.0218 0.9628 0.7683 1.2471
sigma: 0.0383
AIC AICc BIC
224.8628 230.1569 240.9205
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 0.04836907 1.670893 1.24954 -0.1845609 2.692849 0.409454 0.2005962
LS0tCnRpdGxlOiAiUl/mjIfmlbDlubPmu5Hms5UiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMgMS7nroDljZXmjIfmlbDlubPmu5EKCuaMh+aVsOW5s+a7keazleaYr+WfuuS6jua7keWKqOW5s+Wdh+azleW7tuS8uOiAjOadpeeahO+8jOa7keWKqOW5s+Wdh+aYr+aKiuWJjU7kuKrluo/liJfnmoTlubPlnYflgLzkvZzkuLpOKzHnmoTpooTmtYvvvIzkuI3mlq3lnLDlvoDlkI7orqHnrpfvvIzojrflvpfkuIDmnaHnm7jlr7nlubPmu5HnmoTmm7Lnur/jgILkvYbmmK/mjIfmlbDlubPmu5Hms5XliJnorqTkuLrvvIzml7bpl7TotorpnaDov5HpgqPkuYjlupTor6Xkuojku6XnmoTmnYPph43lsLHotorlpKfjgILotYvkuojmnYPph43nmoTlpKflsI/kuIDoiKzku6XOseihqOekugrmnYPph43pmo/op4LmtYvml7bpl7TnmoTkuYXov5znqIvluqblkYjmjIfmlbDlnovkuIvpmY0g4oCUIOacgOaXqeeahOinguWvn+WAvOiiq+i1i+S6iOacgOWwj+eahOadg+WAvAoK6YCC55So5LqO6aKE5rWL5rKh5pyJ5piO5pi+6LaL5Yq/5oiW5a2j6IqC5Zug57Sg55qE5pWw5o2uCgokJApcYmVnaW57ZXF1YXRpb259IApcYmVnaW57c3BsaXR9CiZcaGF0e3l9X3t0KzF8dH0gPSBcYWxwaGEgeV90ICsgXGFscGhhKDEtXGFscGhhKSB5X3t0LTF9KyBcYWxwaGEoMS1cYWxwaGEpXjIgeV97dC0yfSArIFxhbHBoYSgxLVxhbHBoYSleMyB5X3t0LTN9ICsuLi4gXFwKCiblsIbml7bliLsx55qE56ys5LiA5Liq5ouf5ZCI5YC86KGo56S65Li6bF8w77yI5oiR5Lus5b+F6aG76L+b6KGM5Lyw6K6h77yJXFwKJueUsSBcaGF0e3l9X3t0KzF8dH0gPSBcYWxwaGEgeV90ICsgKDEtIFxhbHBoYSlcaGF0e3l9X3t0fHQtMX0gLOWNs1xoYXR7eX1fezJ8MX0gPSBcYWxwaGEgeV8xICsgKDEtIFxhbHBoYSlsXzDvvIwgXGhhdHt5fV97M3wyfSA9IFxhbHBoYSB5XzIgKyAoMS0gXGFscGhhKVxoYXR7eX1fezJ8MX0sLi4uXFwKJuW+lyBcY29sb3J7cmVkfXtcaGF0e3l9X3t0KzF8dH09IFxzdW1fe2o9MX1ee3QtMX17XGFscGhhKDEtXGFscGhhKV5qIHlfe3Qtan0gKyAoMS1cYWxwaGEpXnRsXzB9fVxcClxlbmR7c3BsaXR9IApcZW5ke2VxdWF0aW9ufSAKJCQK5pyA5bCP5YyW5LiL5byP5p2l5Lyw6K6h5pyq55+l5Y+C5pWw55qE5YC85ZKM5Yid5aeL5YC8CiQkClNTRSA9IFxzdW1fe3Q9MX1ee1R9eyh5X3QgLSBcaGF0e3l9X3t0fHQtMX0pXjJ9ID0gXHN1bV97dD0xfV57VH17e2VfdH1eMn0KJCQKCmBgYHtyfQpsaWJyYXJ5KGZwcDIpCm9pbGRhdGEgPC0gd2luZG93KG9pbCwgc3RhcnQ9MTk5NikKIyBFc3RpbWF0ZSBwYXJhbWV0ZXJzCiNzZXPlh73mlbDlj6/ku6Xlr7nlkI7pnaLnmoQ15Liq6KeC5rWL6L+b6KGM6aKE5rWL77yMCmZpdCA8LSBzZXMob2lsZGF0YSwgaD01KQpmaXQkbW9kZWwKYGBgCgpgYGB7cn0KIyBBY2N1cmFjeSBvZiBvbmUtc3RlcC1haGVhZCB0cmFpbmluZyBlcnJvcnMKI2FjY3VyYWN55Ye95pWw5omA57uZ5Ye655qE5piv5Zyo6K6t57uD6ZuG5Lit5b6X5Yiw55qE5YeG56Gu5bqm5oyH5qCH44CCCnJvdW5kKGFjY3VyYWN5KGZpdCksMikKIz4gICAgICAgICAgICAgICBNRSAgUk1TRSAgIE1BRSBNUEUgTUFQRSBNQVNFICBBQ0YxCiM+IFRyYWluaW5nIHNldCA2LjQgMjguMTIgMjIuMjYgMS4xIDQuNjEgMC45MyAtMC4wMwpgYGAKYGBge3J9CmF1dG9wbG90KGZpdCkgKwogIGF1dG9sYXllcihmaXR0ZWQoZml0KSwgc2VyaWVzPSJGaXR0ZWQiKSArCiAgeWxhYigiT2lsIChtaWxsaW9ucyBvZiB0b25uZXMpIikgKyB4bGFiKCJZZWFyIikKYGBgCgojIDIuSG9sdOaMh+aVsOW5s+a7ke+8iOiAg+iZkei2i+WKv+aAp++8iS/pnI3lsJTnibnnmoTnur/mgKfotovlir/ms5UKCkhvbHQgKDE5NTcpIOWwhueugOWNleaMh+aVsOW5s+a7keazleaJqeWxleWIsOWPr+S7pemihOa1i+WFt+aciei2i+WKv+eahOaVsOaNruOAggror6Xmlrnms5XljIXlkKvkuIDkuKrpooTmtYvmlrnnqIvlkozkuKTkuKrlubPmu5HmlrnnqIvvvIjkuIDkuKrnlKjkuo7msLTlubPvvIzkuIDkuKrnlKjkuo7otovlir/vvInvvJoKJCQKXGJlZ2lue2FsaWduKn0KICBcdGV4dHtGb3JlY2FzdCBlcXVhdGlvbn0mJiBcaGF0e3l9X3t0K2h8dH0gJj0gXGVsbF97dH0gKyBoYl97dH0gXFwKICBcdGV4dHtMZXZlbCBlcXVhdGlvbn0gICAmJiBcZWxsX3t0fSAmPSBcYWxwaGEgeV97dH0gKyAoMSAtIFxhbHBoYSkoXGVsbF97dC0xfSArIGJfe3QtMX0pXFwKICBcdGV4dHtUcmVuZCBlcXVhdGlvbn0gICAmJiBiX3t0fSAgICAmPSBcYmV0YV4qKFxlbGxfe3R9IC0gXGVsbF97dC0xfSkgKyAoMSAtXGJldGFeKiliX3t0LTF977yMClxlbmR7YWxpZ24qfQokJAoKYGBge3J9CmFpciA8LSB3aW5kb3coYXVzYWlyLCBzdGFydD0xOTkwKQpmYyA8LSBob2x0KGFpciwgaD01KQpmYyRtb2RlbApgYGAKCuWPr+S7peeci+WIsOi/meS4quaWueazleavlOS5i+WJjeiOt+W+l+S6huS4gOS6m+aWsOeahOWPguaVsO+8jOWmgmJldGHlkoxi44CCYmV0YeaYr+i2i+WKv+aAp+eahOaMh+aVsO+8jOWug+ihqOekuumaj+edgOaXtumXtOeahOWPmOWMlu+8jOaXtumXtOW6j+WIl+i2i+WKv+aJgOWPkeeUn+eahOWPmOWMluOAguiAjGLliJnmmK/liJ3lp4vlgLzjgIIKCiMjI+mYu+WwvOi2i+WKv+aWueazlSjliYrlvLHotovlir8pCuivpeaWueazleacieS4gOenjeWPmOW8j++8jOWPq+WBmkRhbXBlZCB0cmVuZCBtZXRob2Rz77yI6Zi75bC86LaL5Yq/5pa55rOV77yJ44CCCuWug+eahOWBh+iuvuaYr++8jOS4gOS4quW6j+WIl+WcqOefreacn+WGheaYr+WFt+acieS4gOWumui2i+WKv+eahO+8jOS9huaYr+WcqOmVv+acn+S4reWNtOaYr+WbtOe7leedgOS4gOS4quWdh+WAvOWcqOazouWKqOOAggpcYmVnaW57YWxpZ24qfQogIFxoYXR7eX1fe3QraHx0fSAmPSBcZWxsX3t0fSArIChccGhpK1xwaGleMiArIFxkb3RzICsgXHBoaV57aH0pYl97dH0gXFwKICBcZWxsX3t0fSAmPSBcYWxwaGEgeV97dH0gKyAoMSAtIFxhbHBoYSkoXGVsbF97dC0xfSArIFxwaGkgYl97dC0xfSlcXAogIGJfe3R9ICY9IFxiZXRhXiooXGVsbF97dH0gLSBcZWxsX3t0LTF9KSArICgxIC1cYmV0YV4qKVxwaGkgYl97dC0xfeOAggpcZW5ke2FsaWduKn0KCui/memHjOW8leWFpeS4gOS4quaWsOeahOWPguaVsM+V77yMMDzPlTwx77yM5LiA6Iis5ZyoMC445YiwMC45OOS5i+mXtO+8jOWmguaenOetieS6jjHjgIIKz5XvvIjor7vkvZxwaGnvvInmmK/nlKjmnaXliYrlvLHotovlir/mgKfnmoTlj4LmlbDjgILPlei2iuWkp+WImeWvuei2i+WKv+WJiuW8seeahOaViOaenOi2iuWwj++8jOetieS6jjHnmoTml7blgJnliJnlrozlhajmsqHmnInliYrlvLHnmoTmlYjmnpzvvIjkuI7kvKDnu5/nmoRIb2x05bmz5ruR5rOV5peg5byCKeOAggrlpoLmnpwwPM+VPDHvvIzpgqPkuYjpmo/nnYDpooTmtYvlkI7nu63lj5jph4/otorlpJrvvIzlsIbkvJrorqnpooTmtYvotovov5Hkuo4kJCBcZWxsX1QrXHBoaSBiX1QvKDEtXHBoaSkgJCQKYGBge3J9CmZjMiA8LSBob2x0KGFpciwgZGFtcGVkPVRSVUUsIHBoaSA9IDAuOSwgaD0xNSkKZmMyJG1vZGVsCmBgYApgYGB7cn0KI+WPr+S7peeci+WHuuadpe+8jOe6oue6v+WPr+iDveabtOWKoOWQiOeQhu+8jOiAjOiTnee6v+W+iOWPr+iDveaXoOatouWig+WcsOe9keS4iuS4gOebtOWinumVv+OAguinguWvn+S4gOS4i+aooeWei+WPguaVsO+8mgphdXRvcGxvdChhaXIpICsKICBhdXRvbGF5ZXIoZmMsIHNlcmllcz0iSG9sdCdzIG1ldGhvZCIsIFBJPUZBTFNFKSArCiAgYXV0b2xheWVyKGZjMiwgc2VyaWVzPSJEYW1wZWQgSG9sdCdzIG1ldGhvZCIsIFBJPUZBTFNFKSArCiAgZ2d0aXRsZSgiRm9yZWNhc3RzIGZyb20gSG9sdCdzIG1ldGhvZCIpICsgeGxhYigiWWVhciIpICsKICB5bGFiKCJBaXIgcGFzc2VuZ2VycyBpbiBBdXN0cmFsaWEgKG1pbGxpb25zKSIpICsKICBndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0iRm9yZWNhc3QiKSkKYGBgCgoKIyMjSG9sdC1XaW50ZXJz4oCZ5bmz5ruR5rOVCuiAg+iZkeWto+iKguaAp+WboOe0oO+8jOi/m+iAjOaPkOWHukhvbHQtV2ludGVyc+KAmeW5s+a7keazleOAguWFtuS4re+8jOWto+iKguaAp+WPr+S7peWIhuS4uuWPr+WKoOWSjOWPr+S5mOS4pOenje+8jOWmguaenOWto+iKguaAp+maj+edgOaXtumXtOWPmOWMluiAjOWPmOWMlu+8jOmCo+S5iOW6lOivpeS9v+eUqOWPr+S5mO+8jOWQpuWImeS9v+eUqOWPr+WKoOOAggpIb2x0LVdpbnRlcnPigJnlubPmu5Hms5XkuIDmoLflj6/ku6XogIPomZHotovlir/oobDlh4/vvIzmmK/opoHorr7nva5kYW1w5Y+C5pWw5Li6VFJVReWNs+WPr+OAggoKYGBge3J9CmF1c3QgPC0gd2luZG93KGF1c3RvdXJpc3RzLHN0YXJ0PTIwMDUpCmZpdDEgPC0gaHcoYXVzdCxzZWFzb25hbD0iYWRkaXRpdmUiKQpmaXQyIDwtIGh3KGF1c3Qsc2Vhc29uYWw9Im11bHRpcGxpY2F0aXZlIikKcmJpbmQoYWNjdXJhY3koZml0MSksYWNjdXJhY3koZml0MikpCmBgYAoKCmBgYHtyfQphdXRvcGxvdChhdXN0KSArCiAgYXV0b2xheWVyKGZpdDEsIHNlcmllcz0iSFcgYWRkaXRpdmUgZm9yZWNhc3RzIiwgUEk9RkFMU0UpICsKICBhdXRvbGF5ZXIoZml0Miwgc2VyaWVzPSJIVyBtdWx0aXBsaWNhdGl2ZSBmb3JlY2FzdHMiLAogICAgUEk9RkFMU0UpICsKICB4bGFiKCLlubTku70iKSArIHlsYWIoIua+s+Wkp+WIqeS6muWbvemZhea4uOWuoui/h+WknOeahOWkqeaVsO+8iOeZvuS4h++8iSIpICsKICBndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0i6aKE5rWL5YC8IikpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIlNUSGVpdGkiKSkrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAoKCgoKSG9sdC1XaW50ZXJz4oCZ5bmz5ruR5rOV5LiA5qC35Y+v5Lul6ICD6JmR6LaL5Yq/6KGw5YeP77yM5piv6KaB6K6+572uZGFtcOWPguaVsOS4ulRSVUXljbPlj6/jgIIK5LqL5a6e5LiK5LiA56eN5q+U6L6D5LyY56eA55qE5pa55rOV5bCx5piv55SoSG9sdC1XaW50ZXJzJ+Wto+iKguWPr+S5mOeahOi2i+WKv+ihsOWHj+W5s+a7keazlS4KCmh3KHksIGRhbXBlZD1UUlVFLCBzZWFzb25hbD0ibXVsdGlwbGljYXRpdmUiKSAgI3nkuLropoHov5vooYzlubPmu5HnmoTml7bpl7Tluo/liJcKCiMjIyDoh6rliqjljJblubPmu5HmqKHlnovpgInmi6nkuI7pooTmtYsKRVRTICjor6/lt67vvIzotovlir/vvIzlraPoioLmgKcpIO+8jOi/meenjeagh+iusOS5n+WPr+S7peeci+S9nOaYr+aMh+aVsOW5s+a7keOAggrmr4/kuKrmiJDliIbnmoTlj6/og73lj5blgLzkuLrvvJror6/lt64gPSB7QSxNfe+8jOi2i+WKvyA9IHtOLEEsQV9kIH3vvIzlraPoioLmgKcgPSB7IE4sQSxNIH3jgIIKIApFVFMoQSxOLE4p77ya5YW35pyJ5Yqg5oCn6K+v5beu55qE566A5Y2V5oyH5pWw5bmz5ruRCkVUUyhNLE4sTinvvJrlhbfmnInkuZjmgKfor6/lt67nmoTnroDljZXmjIfmlbDlubPmu5EKRVRTKEEsQSxOKe+8muWFt+acieWKoOaAp+ivr+W3rueahEhvbHTnur/mgKfmlrnms5UKRVRTKE0sQSxOKe+8muWFt+acieS5mOaAp+ivr+W3rueahEhvbHTnur/mgKfmlrnms5UKCmh0dHBzOi8vb3RleHRzLmNvbS9mcHBjbi9ldHMuaHRtbAoK5byV5YWl5LqGZXRz5Ye95pWwLOWug+S4jeiDvei/m+ihjOmihOa1i++8jOS9huaYr+iDveWkn+agueaNruaXtumXtOW6j+WIl+eahOeKtuWGte+8jOmAieaLqeacgOS9s+eahOaooeWei+OAggpgYGB7cn0KYXVzdCA8LSB3aW5kb3coYXVzdG91cmlzdHMsIHN0YXJ0PTIwMDUpCmZpdCA8LSBldHMoYXVzdCkKc3VtbWFyeShmaXQpCmBgYAoKCgoKCgo=