Este material tem como objetivo introduzir os conceitos sobre o Modelo Vetorial Autorregressivo (VAR). Neste sentido, vamos entender como tal modelo é especificado, suas condições, como estimá-lo e fazer previsões usando séries temporais multivariadas.
INTRODUÇÃO
Os modelos econômicos em geral são expressos por meio de diversas variáveis. Portanto, o uso de modelos univariados, como visto até o momento, é limitado para expressar modelos econômicos. Um exemplo básico são os modelos macroeconômicos de curto prazo onde PIB, consumo, investimento e gastos governamentais são determinados simultaneamente.
A partir do artigo de Sims (1980), o uso do Modelo Vetorial Autorregressivo (VAR) se difundiu rapidamente e estão entre os instrumentos mais usados para investigar empiricamente a macroeconomia.
Os modelos VAR são sistemas de equações simultâneas que capturam a existência de relações de interdependência entre variáveis, e que permitem avaliar o impacto de choques estocásticos sobre determinada variável do sistema. O Banco Central, assim como a grande maioria de seus pares internacionais, utiliza modelos VAR como instrumento de análise e, principalmente, de previsão de inflação desde a implementação do regime de metas para a inflação, em junho de 1999.
VAR(1)
Uma série temporal multivariada \(\boldsymbol{r_{t}}=(r_{1t},r_{2t},...,r_{kt})^{'}\) composta por \(k\) componentes no tempo \(t\) é um processo VAR de ordem \(1\), ou \(VAR(1)\), se segue o modelo:
\[
\boldsymbol{r_{t}} = \boldsymbol{\phi}_{0} + \boldsymbol{\Phi}\boldsymbol{r}_{t-1} + \boldsymbol{a_{t}}
\] onde \(\boldsymbol{\phi}_{0}\) é um vetor de dimensão \(k\), \(\boldsymbol{\Phi}\) é uma matriz \(k \times k\) e \(\boldsymbol{a_{t}}\) é um ruído branco formado por uma sequência de vetores aleatórios independentes e identicamente distribuídos com média \(0\) e matriz de covariância \(\boldsymbol{\sum_{a}}\). Na literatura, é frequentemente assumido que \(\boldsymbol{a_{t}}\) segue uma distribuição Normal multivariada e que a matriz \(\boldsymbol{\sum_{a}}\) é positiva definida.
Considere o caso bivariado (isto é, \(k=2\), \(\boldsymbol{r_{t}} = (r_{1t},r_{2t})^{'}\) e \(\boldsymbol{a_{t}}=(a_{1t},a_{2t})^{'}\)). O modelo \(VAR(1)\) pode ser escrito como:
\[
\left[\begin{matrix} {r}_{1t} \\ {r}_{2t} \end{matrix} \right] = \left[\begin{matrix} {\phi}_{10} \\ {\phi}_{20} \end{matrix} \right] + \left[ \begin{matrix}{\phi}_{11} \\ {\phi}_{21} \end{matrix}\begin{matrix} {\phi}_{12} \\ {\phi}_{22} \end{matrix} \right] \left[\begin{matrix} {r}_{1,t-1} \\ {r}_{2,t-1} \end{matrix} \right] + \left[\begin{matrix} {a}_{1t} \\ {a}_{2t} \end{matrix} \right] , \sum_{a} = \left[ \begin{matrix}{\sigma}_{1}^{2} \\ {\sigma}_{21} \end{matrix}\begin{matrix} {\sigma}_{12} \\ {\sigma}_{2}^{2} \end{matrix} \right]
\]
onde \(\phi_{ij}\) é o \((i,j)\)-ésimo elemento de \(\boldsymbol{\Phi}\), \(\phi_{i0}\) é o i-ésimo elemento de \(\boldsymbol{\phi}_{0}\), \(var(a_{1t})=\sigma_1^{2}\), \(var(a_{2t})=\sigma_2^{2}\) e \(cov(a_{1t},a_{2t})=\sigma_{12}=\sigma_{21}\).
Equivalentemente, podemos escrever o modelo como:
\[
\begin{aligned}
r_{1t} = \phi_{10} + \phi_{11}r_{1,t-1}+ \phi_{12}r_{2,t-1} + a_{1t} \\
r_{2t} = \phi_{20} + \phi_{21}r_{1,t-1}+ \phi_{22}r_{2,t-1} + a_{2t} \\
\end{aligned}
\]
Tal forma de especificar o modelo (tanto a matricial quanto a última) é chamada de forma reduzida em função da relação contemporânea entre \(r_{1t}\) e \(r_{2t}\) não ser mostrada explicitamente. Observe que trata-se de um modelo composto por duas equações (em função de termos duas variáveis) e cada equação é função de seu valor defasado e da primeira defasagem da outra variável.
Temos duas maneiras de avaliar as equações acima:
- Separadamente
- \(\phi_{12}\) denota a dependência linear de \(r_{1t}\) em relação a \(r_{2,t-1}\) na presença de \(r_{1,t-1}\). Portanto, \(\phi_{12}\) é o efeito condicional de \(r_{2,t-1}\) sobre \(r_{1t}\) dado \(r_{1,t-1}\).
- Se \(\phi_{12}=0\), então \(r_{1t}\) não depende de \(r_{2,t-1}\) e o modelo mostra que \(r_{1t}\) depende apenas de seus valores passados.
- Similarmente, se \(\phi_{21}=0\), então a segunda equação mostra que \(r_{2t}\) não depende de \(r_{1,t-1}\) quando \(r_{2,t-1}\) é dado
- Em conjunto
- Se \(\phi_{12}=0\) e \(\phi_{21} \neq 0\) o que mostra que \(r_{1t}\) não depende de \(r_{2t}\), mas \(r_{2t}\) depende de \(r_{1t}\). Consequentemente, temos uma relação unidirecional de \(r_{1t}\) para \(r_{2t}\). Na literatura de econometria, o modelo implica na existência de causalidade de Granger entre as duas séries com \(r_{1t}\) causando \(r_{2t}\), mas não sendo causada por \(r_{2t}\).
- Se \(\phi_{12}=\phi_{21}=0\), então \(r_{1t}\) e \(r_{2t}\) não são dinâmicamenta corelacionados. Neste caso, cada série segue um modelo AR(1) univariado. Dizemos que as duas séries são desacopladas.
- Se \(\phi_{12} \neq 0\) e \(\phi_{21} \neq 0\), então existe uma relação entre as duas séries, ou seja, elas se impactam.
Além disso, um choque em \(r_{1t}\) por meio de \(a_{1t}\) tem efeito contemporâneo sobre \(r_{1t}\). No período seguinte, este efeito se torna \(r_{1,t-1}\) e afeta \(r_{2t}\) que no período seguinte se torna \(r_{2,t-1}\) e afeta \(r_{1t}\) e assim sucessivamente.
Em um modelo estacionário este efeito do choque desaparece após alguns períodos. Como definimos anteriormente, uma série temporal multivariada \(\boldsymbol{r_{t}}\) é fracamente estacionária se tem média constante (\(\boldsymbol{\mu} = E(\boldsymbol{r_{t}})\)) e matriz de covariância constante (\(\boldsymbol{\Gamma}_{t,l}=Cov(\boldsymbol{r_{t}},\boldsymbol{r_{t-l}})=\boldsymbol{\Gamma}_{l}\)), onde \(l\) é uma defasagem qualquer. Assim, precisamos confirmar se o modelo VAR(1) respeita as hipóteses de estacionariedade fraca, como segue:
Fazendo uso das hipóteses \(E(\boldsymbol{r}_{t})=E(\boldsymbol{r}_{t-1})=\boldsymbol{\mu}\) e que \(E(\boldsymbol{a}_{t})=0\), temos:
\[
\begin{aligned}
& E(\boldsymbol{r}_{t}) = \boldsymbol{\phi}_0 + \boldsymbol{\Phi}E(\boldsymbol{r}_{t-1}) \\
& \boldsymbol{\mu} = \boldsymbol{\phi}_0 + \boldsymbol{\Phi}\boldsymbol{\mu} \\
& \boldsymbol{\mu} = (\boldsymbol{I}-\boldsymbol{\Phi})^{-1}\boldsymbol{\phi}_0
\end{aligned}
\]
onde \(\boldsymbol{I}\) é uma matriz identidade \(k \times k\) e a matriz \(\boldsymbol{I}-\boldsymbol{\Phi}\) deve ser não singular (determinante diferente de zero) para que a inversa exista e, consequentemente, o vetor de médias.
- MATRIZ DE COVARIÂNCIA CONSTANTE
Reescrevendo a média do processo como \(\boldsymbol{\phi_{0}} = (\boldsymbol{I}-\boldsymbol{\Phi})\boldsymbol{\mu}\), podemos escrever o modelo VAR(1) como:
\[
\begin{aligned}
& \boldsymbol{r_{t}} = (\boldsymbol{I}-\boldsymbol{\Phi})\boldsymbol{\mu} + \boldsymbol{\Phi}\boldsymbol{r_{t-1}} + \boldsymbol{a_{t}} \\
& \boldsymbol{r_{t}} = \boldsymbol{\mu} - \boldsymbol{\Phi}\boldsymbol{\mu} + \boldsymbol{\Phi}\boldsymbol{r_{t-1}} + \boldsymbol{a_{t}} \\
& (\boldsymbol{r_{t}} - \boldsymbol{\mu}) = \boldsymbol{\Phi}(\boldsymbol{r_{t-1}}-\boldsymbol{\mu}) + \boldsymbol{a_{t}}
\end{aligned}
\] Fazendo \(\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{r_{t}}-\boldsymbol{\mu}\), temos:
\[
\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-1}+\boldsymbol{a_{t}}
\] Esta formulação é apenas uma forma diferente de escrever o modelo VAR(1) definido no início do texto. Substituindo \(\widetilde{\boldsymbol{r}}_{t-1}\) recursivamente, produz:
\[
\begin{aligned}
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}(\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-2}+\boldsymbol{a_{t-1}})+\boldsymbol{a_{t}}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}^{2}\widetilde{\boldsymbol{r}}_{t-2}+\boldsymbol{\Phi}\boldsymbol{a_{t-1}}+\boldsymbol{a_{t}}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}^{2}(\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-3}+\boldsymbol{a_{t-2}})+\boldsymbol{\Phi}\boldsymbol{a_{t-1}}+\boldsymbol{a_{t}}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}^{3}\widetilde{\boldsymbol{r}}_{t-3}+\boldsymbol{\Phi}^{2}\boldsymbol{a_{t-2}}+\boldsymbol{\Phi}\boldsymbol{a_{t-1}}+\boldsymbol{a_{t}}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{a_{t}} + \boldsymbol{\Phi}\boldsymbol{a_{t-1}} + \boldsymbol{\Phi}^{2}\boldsymbol{a_{t-2}} + \boldsymbol{\Phi}^{3}\boldsymbol{a}_{t-3}+...
\end{aligned}
\]
Esta formulação mostra algumas características de um processo VAR(1). Elas são:
- Uma vez que \(\boldsymbol{a_{t}}\) é serialmente não correlacionado (em função da hipótese de ser um ruído branco), segue que \(Cov(\boldsymbol{a_{t}},\boldsymbol{r_{t-l}})=\boldsymbol{0}\).
- Multiplicando a expressão por \(\boldsymbol{a_{t}}^{'}\), calculando o valor esperado e usando a hipótese de \(\boldsymbol{a_{t}}\) ser serialmente não correlacionado, obtemos \(Cov(\boldsymbol{r}_{t},\boldsymbol{a}_{t})=\boldsymbol{\sum_{a}}\).
- Para um VAR(1), \(\widetilde{\boldsymbol{r}}_{t}\) e consequentemente \(\boldsymbol{r_{t}}\) dependerá dos erros passados com matriz de coeficientes igual a \(\boldsymbol{\Phi}^{j}\). Para esta dependência ser significativa \(\boldsymbol{\Phi}^{j}\) deve convergir para zero na medida que \(j \rightarrow \infty\). Isto significa que os \(k\) autovalores de \(\boldsymbol{\Phi}\) devem ser menores que \(1\), caso contrário \(\boldsymbol{\Phi}^{j}\) vai explodir quando \(j \rightarrow \infty\).
Usado as hipóteses acima e \(Cov(\boldsymbol{a}_{t})=\boldsymbol{\sum_{a}}\) para qualquer \(t\), temos que a covariância de \(\boldsymbol{r_{t}}\) será:
\[
Cov(\boldsymbol{r_{t}})=Cov(\widetilde{\boldsymbol{r}}_{t})=\boldsymbol{\Gamma_{0}}=\boldsymbol{\sum_{a}}+\boldsymbol{\Phi}\boldsymbol{\sum_{a}}\boldsymbol{\Phi}^{'}+\boldsymbol{\Phi}^{2}\boldsymbol{\sum_{a}}(\boldsymbol{\Phi}^{2})^{'}+...= \sum_{i=0}^{\infty}{\boldsymbol{\Phi}^{i}\boldsymbol{\sum_{a}}(\boldsymbol{\Phi}^{i})^{'}}
\] onde \(\boldsymbol{\Phi}^{0}=\boldsymbol{I}\) é uma matriz identidade \(k \times k\). Note que a covariância do processo não depende de qualquer \(t\), sendo invariante do tempo.
- MATRIZES DE COVARIÂNCIA E CORRELAÇÃO CRUZADA DEPENDENTE APENAS DE \(l\)
Sabemos que o modelo reescrito usando \(\boldsymbol{\Phi_{0}} = (\boldsymbol{I}-\boldsymbol{\Phi})\boldsymbol{\mu}\) e \(\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{r_{t}}-\boldsymbol{\mu}\) pode ser definido como:
\[
\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-1}+\boldsymbol{a_{t}}
\]
Multiplicando ambos os lados por \(\widetilde{\boldsymbol{r}}_{t-l}^{'}=(\boldsymbol{r_{t-l}}-\boldsymbol{\mu})^{'}\), usando a hipótese de que \(E(\boldsymbol{a_{t}},\widetilde{\boldsymbol{r}}^{'}_{t-l})=\boldsymbol{0}\) em função de \(\boldsymbol{a_{t}}\) ser um ruído branco e calculando o valor esperado, teremos a matriz de covariância cruzada para qualquer defasagem \(l>0\):
\[
\begin{aligned}
& E(\widetilde{\boldsymbol{r}}_{t},\widetilde{\boldsymbol{r}}^{'}_{t-l})=\boldsymbol{\Phi}E(\widetilde{\boldsymbol{r}}_{t-1},\widetilde{\boldsymbol{r}}_{t-l}^{'}) \\
& E[(\boldsymbol{r_{t}}-\boldsymbol{\mu})(\boldsymbol{r_{t-l}}-\boldsymbol{\mu})^{'}] = \boldsymbol{\Phi}E[(\boldsymbol{r_{t-1}}-\boldsymbol{\mu})(\boldsymbol{r_{t-l}}-\boldsymbol{\mu})^{'}]
\end{aligned}
\] que pode ser escrita usando \(\boldsymbol{\Gamma}_{l}\)
\[
\boldsymbol{\Gamma}_{l} = \boldsymbol{\Phi}\boldsymbol{\Gamma}_{l-1}
\] onde \(\boldsymbol{\Gamma}_{l}\) é a matriz de covariância cruzada de \(\boldsymbol{r_{t}}\) para a defasagem \(l\).
Sabemos que a divisão da matriz de covariância cruzada pela matriz de desvios-padrão proporcionará a correlação cruzada. Assim, teremos:
\[
\boldsymbol{\rho_{l}} = \boldsymbol{D^{-1}}\boldsymbol{\Phi}\boldsymbol{\Gamma_{l-1}}\boldsymbol{D^{-1}} = \boldsymbol{\Upsilon}\boldsymbol{\rho_{l-1}}
\] onde \(\boldsymbol{\Upsilon}= \boldsymbol{D^{-1}}\boldsymbol{\Phi}\boldsymbol{D^{-1}}\). Consequentemente, a matriz de correlação cruzada de um modelo VAR(1) será:
\[
\boldsymbol{\rho_{l}} = \boldsymbol{\Upsilon}^{l}\boldsymbol{\rho_{0}}
\] para \(l>0\).
VAR(p)
Uma série temporal multivariada \(\boldsymbol{r_{t}}=(r_{1t},r_{2t},...,r_{kt})^{'}\) composta por \(k\) componentes no tempo \(t\) é um processo VAR de ordem \(p\), ou \(VAR(p)\), se para \(p>0\) segue o modelo:
\[
\boldsymbol{r_{t}} = \boldsymbol{\phi}_{0} + \boldsymbol{\Phi}_{1}\boldsymbol{r_{t-1}} +...+\boldsymbol{\Phi}_{p}\boldsymbol{r}_{t-p} + \boldsymbol{a_{t}}
\] onde \(\boldsymbol{\phi}_{0}\) é um vetor de dimensão \(k\), \(\boldsymbol{\Phi}_{j}\) são matrizes \(k \times k\) para \(j=1,...,p\) e \(\boldsymbol{a_{t}}\) é um ruído branco formado por uma sequência de vetores aleatórios independentes e identicamente distribuídos com média \(0\) e matriz de covariância \(\boldsymbol{\sum_{a}}\). Na literatura, é frequentemente assumido que \(\boldsymbol{a_{t}}\) segue uma distribuição Normal multivariada e que a matriz \(\boldsymbol{\sum_{a}}\) é positiva definida.
Utilizando um operador de defasagem \(B\), podemos reescrever o modelo como:
\[
(\boldsymbol{I}-\boldsymbol{\Phi}_{1}B-...-\boldsymbol{\Phi}_{p}B^{p})\boldsymbol{r}_{t}=\phi_0+\boldsymbol{a}_{t}
\] onde \(\boldsymbol{I}\) é uma matriz identidade \(k \times k\). Esta representação também pode ser reescrita como:
\[
\boldsymbol{\Phi}(B)\boldsymbol{r}_{t}=\phi_0+\boldsymbol{a}_{t}
\] onde \(\boldsymbol{\Phi}(B)=\boldsymbol{I}-\boldsymbol{\Phi}_{1}B-...-\boldsymbol{\Phi}_{p}B^{p}\) é uma matriz polinomial. Se \(\boldsymbol{r}_{t}\) é fracamente estacionário, então temos:
\[
\boldsymbol{\mu} = (\boldsymbol{I}-\boldsymbol{\Phi}_{1}-...-\boldsymbol{\Phi}_{p})^{-1}\boldsymbol{\phi}_0
\] onde \((\boldsymbol{I}-\boldsymbol{\Phi}_{1}-...-\boldsymbol{\Phi}_{p})^{-1}\) deve ser não singular (determinante diferente de zero) para que o vetor de médias exista. Fazendo \(\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{r_{t}}-\boldsymbol{\mu}\) o VAR(p) se torna:
\[
\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}_{1}\widetilde{\boldsymbol{r}}_{t-1}+...+\boldsymbol{\Phi}_{p}\widetilde{\boldsymbol{r}}_{t-p}+ \boldsymbol{a_{t}}
\]
Usando esta equação e o mesmo processo aplicado nas propriedades de estacionariedade do VAR(1), obtemos:
- \(Cov(\boldsymbol{r}_{t},\boldsymbol{a}_{t})=\boldsymbol{\sum_{a}}\) que é a matriz de covariância de \(\boldsymbol{a}_{t}\)
- \(Cov(\boldsymbol{a_{t}},\boldsymbol{r_{t-l}})=\boldsymbol{0}\) para \(l>0\)
- \(\boldsymbol{\Gamma}_{l} = \boldsymbol{\Phi}_{1}\boldsymbol{\Gamma}_{l-1}+...+\boldsymbol{\Phi}_{p}\boldsymbol{\Gamma}_{l-p}\) para \(l>0\)
ESTIMAÇÃO
Um modelo VAR(p) pode ser estimado por mínimos quadrados ordinários (MQO), método da máxima verossimilhança (MV) ou pelo procedimento bayesiano de estimação. Aqui, vamos mostrar brevemente como fazer uso de MQO e MV para obter os parâmetros do modelo VAR(p).
- MÍNIMOS QUADRADOS ORDINÁRIOS
Suponha que temos a amostra \(\left\{\boldsymbol{r}_{t}|t=1,,...,T \right\}\) para estimar um modelo VAR(p). Os parâmetros de interesse são \(\left\{\boldsymbol{\phi}_{0},\boldsymbol{\Phi}_{1},...,\boldsymbol{\Phi}_{p} \right\}\) e \(\boldsymbol{\sum_{a}}\). Para a estimação via MQO, os dados disponíveis são \(t=p+1,...,T\) e a equação a ser estimada é:
\[
\boldsymbol{r_{t}} = \boldsymbol{\phi}_{0} + \boldsymbol{\Phi}_{1}\boldsymbol{r}_{t-1} +...+\boldsymbol{\Phi}_{p}\boldsymbol{r}_{t-p} + \boldsymbol{a_{t}}
\] onde a matriz de covariância de \(\boldsymbol{a_{t}}\) é \(\boldsymbol{\sum_{a}}\). Considere o caso bivariado (isto é, \(k=2\), \(\boldsymbol{r_{t}} = (r_{1t},r_{2t})^{'}\) e \(\boldsymbol{a_{t}}=(a_{1t},a_{2t})^{'}\)) e o modelo \(VAR(p)\) pode ser escrito como:
\[
\begin{aligned}
r_{1t} = \phi_{10} + \phi_{11}^{1}r_{1,t-1}+ \phi_{12}^{1}r_{2,t-1} +...+ \phi_{11}^{p}r_{1,t-p}+ \phi_{12}^{p}r_{2,t-p} + a_{1t} \\
r_{2t} = \phi_{20} + \phi_{21}^{1}r_{1,t-1}+ \phi_{22}^{1}r_{2,t-1} +...+ \phi_{21}^{p}r_{1,t-p}+ \phi_{22}^{p}r_{2,t-p} + a_{2t} \\
\end{aligned}
\] Que em formato matricial pode ser expresso como abaixo:
\[
\left[\begin{matrix} \boldsymbol{r}_{1} \\ \boldsymbol{r}_{2} \end{matrix} \right] = \left[ \begin{matrix}\boldsymbol{X}_{1} \\ \boldsymbol{0} \end{matrix}\begin{matrix} \boldsymbol{0} \\ \boldsymbol{X}_{2} \end{matrix} \right] \left[\begin{matrix} \boldsymbol{\beta}_{1} \\ \boldsymbol{\beta}_{2} \end{matrix} \right] + \left[\begin{matrix} \boldsymbol{A}_{1} \\ \boldsymbol{A}_{2} \end{matrix} \right]
\] onde para cada série temporal (no nosso caso \(k=1,2\)) teremos:
\[
\boldsymbol{X}_{1} = \boldsymbol{X}_{2} = \begin{bmatrix}
1 & r_{1,p} & r_{2,p} & ... & r_{1,1} & r_{2,1} \\
1 & r_{1,p+1} & r_{2,p+1} & ... & r_{1,2} & r_{2,2} \\
\vdots & \vdots & \vdots & \vdots &\vdots & \vdots \\
1 & r_{1,T-1} & r_{2,T-1} & ... & r_{1,T-1} & r_{2,T-1}
\end{bmatrix}
\] e \(\boldsymbol{r}_{k}= \left[r_{k,p+1}, ..., r_{k,T}\right]^{'}\), \(\boldsymbol{\beta}_k = \left[\begin{matrix} {\phi}_{10} & {\phi}_{k1}^{1} & {\phi}_{k2}^{1} & ... & {\phi}_{k1}^{p} & {\phi}_{k2}^{p} \end{matrix} \right]^{'}\) e \(\boldsymbol{A}_{k}= \left[a_{k,p+1}, ..., a_{k,T}\right]^{'}\).
Note que aplicar o método de mínimos quadrados ordinários (MQO) sobre cada uma das equações do modelo VAR(p) gerará para cada equação (usando a notação matricial anterior):
\[
\boldsymbol{\hat{\beta}}_{k} = (\boldsymbol{X}_{1}^{'}\boldsymbol{X}_{1})^{-1}\boldsymbol{X}_{1}^{'}\boldsymbol{r}_{k}
\]
tal estimador é consistente e assintoticamente eficiente. Além disso, é igual ao estimador obtido por meio do método da máxima verossimilhança condicional. Em função de estarmos com as mesmas variáveis explicativas em cada equação (o retorno de cada ativo como função de suas defasagens e das defasagens dos outros ativos), o estimador obtido ao aplicar o método de mínimos quadrados em cada uma das equações separadamente é equivalente ao estimador obtido pelo método multivariado (todas as equações ao mesmo tempo).
O estimador de mínimos quadrados para a matriz de covariância dos erros será:
\[
\boldsymbol{\hat{\sum}_a} = \frac{1}{T-p - (kp+1)} \sum_{t=p+1}^{T}{\boldsymbol{\hat{a}_{t}}\boldsymbol{\hat{a}_{t}}^{'}}
\] onde o denominador é a amostra efetiva (disponível para estimação) menos o número de parâmetros na equação para cada série temporal que compõe \(\boldsymbol{r_{t}}\).
- VEROSSIMILHANÇA CONDICIONAL
Para estimação do modelo VAR(p) via máxima veorssimilhança assumimos que \(\boldsymbol{a}_{t}\) segue uma distribuição Normal multivariada. Deixe \(\boldsymbol{r}_{h:q}\) denotar as observações de \(t=h\) até \(t=q\) (inclusive). A função de verossimilhança condicional dos dados pode ser escrita como:
\[
\begin{aligned}
L\left(\boldsymbol{r}_{(p+1):T}|\boldsymbol{r}_{1:p},\boldsymbol{\beta},\boldsymbol{\sum}_a\right) = & \prod_{t=p+1}^{T}{p \left(\boldsymbol{r}_{t}|\boldsymbol{r}_{1:(t-1)},\boldsymbol{\beta},\boldsymbol{\sum}_a\right)} \\
= & \prod_{t=p+1}^{T}{p \left(\boldsymbol{a}_{t}|\boldsymbol{r}_{1:(t-1)},\boldsymbol{\beta},\boldsymbol{\sum}_a\right)} \\
= & \prod_{t=p+1}^{T}{p \left(\boldsymbol{a}_{t}|\boldsymbol{\beta},\boldsymbol{\sum}_a\right)} \\
= & \frac{1}{(2\pi)^\frac{1}{2}\left| \boldsymbol{\sum}_a \right|^{\frac{1}{2}}} exp \left[\frac{-1}{2}\boldsymbol{a}_{t}{'}\boldsymbol{\sum}_a \boldsymbol{a}_{t}\right] \\
\end{aligned}
\] e o logaritmo da verossimilhança condicional se torna:
\[
\ln L \left(\boldsymbol{\beta},\boldsymbol{\sum}_a\right) = c - \frac{T-p}{2}log\left(\left| \boldsymbol{\sum}_a\right|\right)-\frac{1}{2}\sum_{t=p+1}^{T}{tr\left(\boldsymbol{a}_{t}{'}\boldsymbol{\sum}_a \boldsymbol{a}_{t}\right)}
\] Assim, aplicando tal função de verossimilhança condicional aos dados do problema encontremos as estimativas para o vetor de parâmetros \(\boldsymbol{\hat{\beta}}\) e \(\boldsymbol{\hat{\sum}_a}\) que maximizam o logaritmo da verossimilhança condicional.
DEFININDO A ORDEM p DO MODELO:
Já sabemos da efetividade dos critérios de informação para selecionar um modelo estatístico. Basicamente, todos os critérios de informação são baseados em verossimilhança e consistem de dois componentes.
O primeiro está relacionado com a qualidade do ajuste do modelo enquanto o segundo penaliza modelos complicados (muitos parâmetros a serem estimados). A qualidade do ajuste de um modelo é frequentemente medido pela máxima verossimilhança.
Três critérios são comumente usados para determinar a ordem de um modelo VAR(p). Assumindo que \(\boldsymbol{a_{t}}\) segue uma distribuição Normal multivariada, esses três critérios para um VAR(l) são:
\[
AIC(l)= \ln \left| \boldsymbol{\hat{\sum}_{a,l}} \right| + \frac{2}{T}lk^{2}
\]
\[
BIC(l)= \ln \left| \boldsymbol{\hat{\sum}_{a,l}} \right| + \frac{\ln(T)}{T}lk^{2}
\] \[
HQ(l)= \ln \left| \boldsymbol{\hat{\sum}_{a,l}} \right| + \frac{2\ln[\ln(T)]}{T}lk^{2}
\]
onde \(T\) é o tamanho da amostra, \(l\) a defasagem do modelo e \(\boldsymbol{\hat{\sum}}_{a,l}\) é a estimativa de máxima verossimilhança para \(\boldsymbol{\sum}_{a}\) que é a matriz de variâncias e covariâncias dos resíduos. Enquanto o critério AIC penaliza cada parâmetro por um fator \(2\), BIC e HQ aplicam uma penalidade que depende do tamanho da amostra. Podemos seguir o seguinte processo:
- Estimar diversos modelos VAR com diferentes valores para \(p\) por meio do método de máxima verossimilhança condicional;
- Escolher dentre os modelos aquele que apresente menor valor para algum critério de interesse.
DIAGNÓSTICO DO MODELO ESTIMADO:
Como já vimos no caso univariado, verificar o modelo também conhecido como analisar os resíduos tem um papel importante na construção de um modelo econométrico. Os principais objetivos desta análise são garantir que o modelo ajustado é adequado.
Tipicamente, um modelo ajustado é dito ser adequado se:
- Todos os parâmetros estimados são estatísticamente significantes
- O objetivo é eliminar do modelo parâmetros que não são estatísticamente significantes. Se alguma variável não Granger-causa as outras variáveis, podemos encontrar coeficientes nulos. Além disso, os dados não podem ser ricos o suficiente para fornecer estimativas precisas.
- Assim, simplificamos o modelo VAR estimado usando, por exemplo, o critério de manter apenas parâmetros que são estatísticamente significantes ao nível de 5%.
- Os resíduos não apresentam autocorrelação serial, correlação cruzada ou heterocedasticidade condicional
- Os resíduos de um modelo adequado deveríam se comportar como um ruído branco. Para verificar a autocorrelação serial podemos fazer uso dos gráficos da FAC e FACP dos resíduos de cada equação do modelo estimado. O ideal é não ter defasagens significativas.
- Já a correlação cruzada pode ser visualizada por meio de gráfico ou via teste estatístico (conforme explicado neste link).
- A presença de heterocedasticidade condicional viesa a análise dado que há o pressuposto que a variância do termo de erro de cada equação do modelo seja constante. A verificação da heterocedasticidade condicional pode ser feita pelo gráfico da FAC do quadrado dos resíduos de cada equação.
- Analisar a estabildiade do modelo estimado através dos autovalores associados ao mesmo:
- Em módulo os autovalores do modelo precisam ser menores que 1 para que o modelo seja estacionário
- Não podemos confundir a estacionariedade do modelo com a estacionariedade individual das séries
- Os resíduos não violam a hipótese de distribuição, por exemplo, Normal.
CAUSALIDADE DE GRANGER:
Granger (1969) introduziu o conceito de causalidade, que é fácil de inserir a partir de um modelo VAR. Considere o caso de uma série temporal bivariada e a previsão \(h\) passos à frente. Neste caso, podemos usar o modelo VAR e o modelo univariado para cada componente e produzir as previsões.
Dizemos que \(r_{1t}\) causa \(r_{2t}\) se a previsão bivariada de \(r_{2t}\) tem maior acurácia do que a previsão univariada. Em outras palavra, sobre a abordagem de Granger (1969), dizemos que \(r_{1t}\) causa \(r_{2t}\) se as informações passadas de \(r_{1t}\) aumentam a acurácia da previsão de \(r_{2t}\) em relação a previsão obtida por meio de um modelo univariado para \(r_{2t}\).
Porém, o teste não informa nada a respeito de causalidade em termos literais, mas oferece evidências estatísticas de que oscilações passadas de uma variável estão correlacionadas com as de outra variável.
Em um sistema bivariado, testar se \(r_{2t}\) Granger-causa \(r_{1t}\) equivale a estimar se para a equação abaixo, \(\beta_{2,t-i}=0\) para qualquer \(i=1,...,k\).
\[
r_{1t} = \mu_1 + \beta_{1,t-1}r_{1,t-1}+...+\beta_{1,t-p}r_{1,t-p}+\beta_{2,t-1}r_{2,t-1}+...+\beta_{2,t-k}r_{2,t-k}+\varepsilon_{1,t}
\] Assim, temos o seguinte teste F convencional (para qualquer \(i=1,...,k\)):
\[
\begin{aligned}
& H_{0}: \beta_{2,t-i}=0 &r_{2t}~\text{não Granger-causa}~r_{1t} \\
& H_{1}: \beta_{2,t-i}\neq0 &r_{2t}~\text{Granger-causa}~r_{1t}
\end{aligned}
\]
Basicamente, verificamos o p-valor da estatística de teste e decidimos se rejeitamos ou aceitamos a hipótese nula. Tal teste é realizado após a estimação de um modelo VAR. Além do objetivo proposto pelo teste, podemos utilizá-lo após estimar um modelo VAR e verificar que há defasagens não estatísticamente significantes e assim, decidir por retirá-las ou não de alguma equação do modelo VAR.
FUNÇÃO IMPULSO-RESPOSTA:
Esta função mostra os efeitos de choques nas variáveis do sistema e possibilita calcular o impacto (sinal e magnitude) dinâmico de mudança em uma variável sobre ela e as demais variáveis do modelo ao longo do tempo. Assim, procura-se medir o efeito de um choque unitário em uma variável no período \(t\) sobre todas as variáveis em períodos subsequentes.
Os coeficientes da função impulso-resposta são os coeficientes obtidos por meio da inversão do VAR(p) em um Modelo Vetorial de Médias Móveis, VMA(\(\infty\)). Seja um VAR(1) com variáveis medidas em termos de desvios das médias, ou seja, \(\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{r_{t}}-\boldsymbol{\mu}\):
\[
\widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-1}+\boldsymbol{a_{t}}
\] Esta formulação é apenas uma forma diferente de escrever o modelo VAR(1) definido no início do texto. Substituindo \(\widetilde{\boldsymbol{r}}_{t-1}\) recursivamente, produz:
\[
\begin{aligned}
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}(\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-2}+\boldsymbol{a}_{t-1})+\boldsymbol{a}_{t}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}^{2}\widetilde{\boldsymbol{r}}_{t-2}+\boldsymbol{\Phi}\boldsymbol{a}_{t-1}+\boldsymbol{a}_{t}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}^{2}(\boldsymbol{\Phi}\widetilde{\boldsymbol{r}}_{t-3}+\boldsymbol{a}_{t-2})+\boldsymbol{\Phi}\boldsymbol{a}_{t-1}+\boldsymbol{a}_{t}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{\Phi}^{3}\widetilde{\boldsymbol{r}}_{t-3}+\boldsymbol{\Phi}^{2}\boldsymbol{a}_{t-2}+\boldsymbol{\Phi}\boldsymbol{a}_{t-1}+\boldsymbol{a}_{t}\\
& \widetilde{\boldsymbol{r}}_{t}=\boldsymbol{a_{t}} + \boldsymbol{\Phi}\boldsymbol{a}_{t-1} + \boldsymbol{\Phi}^{2}\boldsymbol{a}_{t-2} + \boldsymbol{\Phi}^{3}\boldsymbol{a}_{t-3}+... \\
& \widetilde{\boldsymbol{r}}_{t} = \sum_{i=0}^{t-1}{\boldsymbol{\Phi}^{i}\boldsymbol{a}_{t-i}}~~\text{sendo}~\boldsymbol{\Phi}^{0}=\boldsymbol{I}
\end{aligned}
\]
que é a inversão do VAR(1) em um VMA(\(\infty\)). A interpretação da função de impulso-resposta é dada por:
\[
\frac{\partial \boldsymbol{r_{t}}}{\partial \boldsymbol{a_{t-i}}} = \boldsymbol{\Phi}^{i}
\] em que o elemento \((m,n)\) de \(\Phi^{i}\) mostra o efeito de uma unidade de aumento no erro da variável \(n\) no tempo \(t\) sobre a variável \(m\) no tempo \(t+i\), mantendo-se constante todos os outros erros. Se as variáveis estão medidas nos logarítmos os valores da função impulso-resposta podem ser interpretados como elasticidades. Normalmente a análise da função impulso-resposta se prende ao valor da resposta ao choque unitário, ao sinal e quantos períodos leva para o efeito do choque desaparecer. Para um VAR estável esta função eventualmente descresce até atingir zero.
Por exemplo, para um sistema consistindo de taxa de inflação \(\left(r_{1t}\right)\) e taxa de juros \(\left(r_{2t}\right)\), o efeito de um aumento na taxa de inflação pode ser de interesse. No mundo real, tal incremento ou choque pode ser exogeneamente originado fora do sistema por eventos como a greve dos caminhoneiros. Assim, suponha o sistema:
\[
\boldsymbol{r_{t}} = \left[\begin{matrix} r_{1t} \\ r_{2t} \end{matrix} \right]
\] e que ocorreu um choque na inflação. Para isolar tal efeito, suponha que os juros bem como a inflação assumem seu valor médio antes de \(t=0\), ou seja, que \(\boldsymbol{r_{t}} = \boldsymbol{\mu}\) para \(t < 0\). O aumento na inflação por uma unidade no período \(t=0\) será \(a_{10}=1\).
Agora, podemos mapear o que acontece com o sistema durante os períodos \(t=1,2,...\) se nenhum outro choque ocorrer, ou seja, \(\boldsymbol{a}_{2}=...=\boldsymbol{a}_{t}=\boldsymbol{0}\). Além disso, se assumirmos que as duas variáveis tem média igual a zero (\(\phi_{0}=0\)) e que são modeladas por um \(VAR(1)\) que pode ser escrito como:
\[
\boldsymbol{r}_{t}=\boldsymbol{\Phi}\boldsymbol{r}_{t-1}+\boldsymbol{a_{t}}
\] Supondo que já conhecemos a matriz \(\boldsymbol{\Phi}\), o modelo é reescrito como:
\[
\boldsymbol{r_{t}} = \left[\begin{matrix} r_{1t} \\ r_{2t} \end{matrix} \right] = \left[ \begin{matrix}0.5 \\ 0.1 \end{matrix}\begin{matrix} 0 \\ 0.1 \end{matrix} \right] \left[\begin{matrix} {r}_{1,t-1} \\ {r}_{2,t-1} \end{matrix} \right] + \left[\begin{matrix} {a}_{1t} \\ {a}_{2t} \end{matrix} \right]
\]
Adicionando no sistema um choque unitário na primeira variável (inflação) em \(t=0\), temos:
\[
\boldsymbol{r_{0}} = \left[\begin{matrix} r_{10} \\ r_{20} \end{matrix} \right] = \left[\begin{matrix} 1 \\ 0 \end{matrix} \right]
\]
\[
\boldsymbol{r_{1}} = \boldsymbol{\Phi}\boldsymbol{r}_{0} \Rightarrow \left[\begin{matrix} r_{11} \\ r_{21} \end{matrix} \right] = \left[ \begin{matrix}0.5 \\ 0.1 \end{matrix}\begin{matrix} 0 \\ 0.1 \end{matrix} \right]\left[\begin{matrix} 1 \\ 0 \end{matrix} \right] = \left[\begin{matrix} 0.5 \\ 0.1 \end{matrix} \right]
\]
\[
\boldsymbol{r_{2}} = \boldsymbol{\Phi}\boldsymbol{r}_{1} = \boldsymbol{\Phi}\boldsymbol{\Phi}\boldsymbol{r}_{0} = \boldsymbol{\Phi}^2\boldsymbol{r}_{0} \Rightarrow \left[\begin{matrix} r_{12} \\ r_{22} \end{matrix} \right] = \left[ \begin{matrix}0.5 \\ 0.1 \end{matrix}\begin{matrix} 0 \\ 0.1 \end{matrix} \right] \left[ \begin{matrix}0.5 \\ 0.1 \end{matrix}\begin{matrix} 0 \\ 0.1 \end{matrix} \right]\left[\begin{matrix} 1 \\ 0 \end{matrix} \right] = \left[\begin{matrix} 0.25 \\ 0.06 \end{matrix} \right]\left[\begin{matrix} 1 \\ 0 \end{matrix} \right] = \left[\begin{matrix} 0.25 \\ 0.06 \end{matrix} \right]
\] Perceba que \(\boldsymbol{r_{i}}= \left(r_{1i},r_{2i}\right)^{'}\) é a primeira coluna de \({\boldsymbol{\Phi}^{i}}\) que é obtida de:
\[
\boldsymbol{r}_{t}=\boldsymbol{\Phi}^{i}\boldsymbol{a_{i}}
\] onde \(\boldsymbol{a_{i}^{'}}=\left(0,0,...,1,...,0\right)\) e os elementos de \(\boldsymbol{\Phi}^{i}\) representam o efeito de um choque unitário nas variáveis do sistema depois de \(i\) períodos.
- FUNÇÃO IMPULSO-RESPOSTA ORTOGONALIZADA
Uma hipótese problemática no tipo de resposta ao impulso mostrada anteriormente é que este choque ocorre apenas em uma variável em um tempo. Tal hipótese é razoável se as variáveis são independentes.
Em geral, a matriz de variância e covariância do termo de erro \(\boldsymbol{a}_t\) não é diagonal, ou seja, existe correlação contemporânea entre os erros das diferentes equações do modelo VAR. Assim, os choques são contemporâneamente correlacionados e isso impede que se tenha o efeito puro/líquido de cada choque.
Quando ocorre choque em uma variável do sistema seu efeito se confunde com o efeito advindo da correlação dos erros de outras variáveis. Não há como garantir que o choque ocorre em cada variável isoladamente. Para contornar este problema é necessário transformar os erros em erros ortogonais que terão matriz de variância e covariâncias diagonal. Esta operaçãopode ser denominada de ortogonalização dos erros ou diagonolização da matriz de variâncias e covariâncias.
DECOMPOSIÇÃO DA VARIÂNCIA DO ERRO DE PREVISÃO:
Uma análise complementar à função de impulso-resposta é a decomposição da variância do erro de previsão que procura determinar qual a percentagem da variância do erro de previsão de uma variável que é devido a ela e qual percentagem é devido a cada uma das outras variáveis do modelo ao longo do horizonte de previsão. Esta análise fornece elementos para se inferir sobre causalidade ao longo de um período temporal e sobre qual variável é mais exógena no sistema.
As previsões obtidas com o modelo VAR contém dois elementos: o valor esperado para a variável e o choque inesperado em cada equação. A decomposição de variância inicia com o cálculo da variância do erro de previsão do VAR na forma de médias móveis, isto é, na forma invertida VMA(\(\infty\)). Assim, o erro de previsão \(h\) períodos à frente no modelo VAR(p) na forma VMA(\(\infty\)) é dado por:
\[
\widetilde{\boldsymbol{r}}_{t+h}-E\left[\widetilde{\boldsymbol{r}}_{t+h}|T\right]=\boldsymbol{a}_{t+h} + \boldsymbol{\Phi}\boldsymbol{a}_{t+h-1} + \boldsymbol{\Phi}^{2}\boldsymbol{a}_{t+h-2} + \boldsymbol{\Phi}^{3}\boldsymbol{a}_{t+h-3}+... \\
\] O lado esquerdo desta equação é a diferença entre o valor observado do vetor de variáveis endógenas no tempo \(t+h\) e o valor previsto pelo VAR. O lado direito é a representação VMA(\(\infty\)) dos erros de previsão. Observe que o erro de previsão corrente depende dos termos de erros passados. A análise precisa ser feita com os erros ortogonais.
A decomposição da variância do erro de previsão é, normalmente, apresentada em forma de tabela que indica a percentagem do erro de previsão de uma variável que pode ser atribuída a ela e a cada uma das outras do sistema \(h\) períodos à frente depois do choque. Uma variável tipicamente exógena terá alta percentagem explicada por ela própria por um longo período. Se uma variável é importante para a dinâmica temporal de outra variável, um erro de previsão na primeira variável terá efeito sobre o erro de previsão na segunda.
Basicamente, a análise concentra no percentual da variância do erro de previsão de uma variável que decorre dela e de cada uma das outras, se o percentual varia ao longo do horizonte e por quantos períodos uma variável permanece importante para explicar a outra.
MODELO VETORIAL AUTORREGRESSIVO ESTRUTURAL (SVAR)
Nesta parte vamos apresentar o modelo VAR estrutural (SVAR) como uma extensão do modelo VAR mostrado anteriormente. Apesar do modelo VAR conseguir captar as características dinâmicas de séries temporais multivariadas, identificamos a necessidade de transformar a matriz de variância e covariâncias dos erros para se ter choques ortogonais, isto é, não correlacionados, para a análise correta das funções de impulso-resposta e decomposição do erro de previsão.
Contudo, mesmo tendo erros ortogonais surge a dificuldade de como interpretar as funções impulso-resposta sem referência à teoria econômica. A incorporação da teoria para definir as relações contemporâneas entre as variáveis conduz ao VAR na forma estrutural (SVAR).
Uma série temporal multivariada \(\boldsymbol{r_{t}}=(r_{1t},r_{2t},...,r_{kt})^{'}\) composta por \(k\) componentes no tempo \(t\) é um processo VAR de ordem \(p\), ou \(VAR(p)\), se para \(p>0\) segue o modelo:
\[
\boldsymbol{r_{t}} = \boldsymbol{\phi}_{0} + \boldsymbol{\Phi}_{1}\boldsymbol{r_{t-1}} +...+\boldsymbol{\Phi}_{p}\boldsymbol{r}_{t-p} + \boldsymbol{a_{t}}
\] onde \(\boldsymbol{\phi}_{0}\) é um vetor de dimensão \(k\), \(\boldsymbol{\Phi}_{j}\) são matrizes \(k \times k\) para \(j=1,...,p\) e \(\boldsymbol{a_{t}}\) é um ruído branco formado por uma sequência de vetores aleatórios independentes e identicamente distribuídos com média \(0\) e matriz de covariância \(\boldsymbol{\sum_{a}}\).
Assumindo \(\boldsymbol{\phi}_{0}=0\) para simplificar a notação e assumindo a representação de médias móveis, VMA(\(\infty\)), dada por:
\[
\begin{aligned}
\boldsymbol{r}_{t}=\boldsymbol{a_{t}} + \boldsymbol{\Phi}\boldsymbol{a}_{t-1} + \boldsymbol{\Phi}^{2}\boldsymbol{a}_{t-2} + \boldsymbol{\Phi}^{3}\boldsymbol{a}_{t-3}+...
\end{aligned}
\] em que \(\widetilde{\boldsymbol{r}}_{t} = \sum_{i=0}^{t-1}{\boldsymbol{\Phi}^{i}\boldsymbol{a}_{t-i}}~~\text{sendo}~\boldsymbol{\Phi}^{0}=\boldsymbol{I}\).
Como vimos, os coeficntes das matrizes \(\boldsymbol{\Phi}^{i}\) fornecem as respostas das variáveis a choques nos sistema, constituindo as funções impulso-resposta. Porém, quando os erros \(\boldsymbol{a_{t}}\) são contemporaneamente correlacionados esses coeficientes não refletem de forma adequada os efeitos dos choques nas variáveis do sistema. Assim, os erros devem ser ortogonalizados de modo a apresentarem matriz de variâncias e covariâncias diagonal (ausência de covariância). A ortogonalização consiste em uma transformação dos erros gerando outro vetor de erros com matriz de variâncias e covariâncias diagonal. No entanto, esta transformação envolve modificar todo o modelo o que traz consequências para o relacionamento contemporâneo entre as variáveis.
Dado \(\boldsymbol{\sum_{a}}\) simétrica e positiva definida, existe uma matriz \(P\) não singular (determinante diferente de zero) tal que \(\boldsymbol{P}\boldsymbol{\sum_{a}}\boldsymbol{P}^{'}\) é uma matriz diagonal. Multiplicando o modelo por \(\boldsymbol{P}\), tem-se:
\[
\begin{aligned}
&&& \boldsymbol{P}\boldsymbol{r}_{t} = \boldsymbol{P} \boldsymbol{\Phi}_{1}\boldsymbol{r_{t-1}} +...+\boldsymbol{P}\boldsymbol{\Phi}_{p}\boldsymbol{r}_{t-p} + \boldsymbol{P}\boldsymbol{a_{t}} \\
\\
&&& \boldsymbol{P}\boldsymbol{r}_{t} = \boldsymbol{\Phi}_{1}^{*}\boldsymbol{r_{t-1}} +...+\boldsymbol{\Phi}_{p}^{*}\boldsymbol{r}_{t-p} + \boldsymbol{u_{t}} \\
\end{aligned}
\] que constitui um novo modelo, com novo erro \(\boldsymbol{u_{t}}= \boldsymbol{P}\boldsymbol{a_{t}}\) e com o termo \(\boldsymbol{P}\boldsymbol{r}_{t}\) do lado esquerdo que incorpora relações contemporâneas entre as variáveis do sistema.
Tal modelo é conhecido como VAR Estrutural que permite a análise de funções impulso-resposta ortogonais, decomposição da variância do erro de previsão e estimativas de coeficientes de relações contemporâneas entre as variáveis. A matriz de variâncias e covariâncias dos erros estruturais é dada por:
\[
Var(\boldsymbol{u_{t}}) = \boldsymbol{\sum_{u}} = E\left[\boldsymbol{u_t}\boldsymbol{u_{t}^{'}}\right] = E\left[\boldsymbol{P}\boldsymbol{a_{t}}\boldsymbol{a_{t}^{'}}\boldsymbol{P}^{'}\right] = \boldsymbol{P}E\left[\boldsymbol{a_{t}}\boldsymbol{a_{t}^{'}}\right]\boldsymbol{P}^{'} = \boldsymbol{P}\boldsymbol{\sum_{a}}\boldsymbol{P}^{'}
\]
De forma alternativa, podemos definir um VAR a partir de um SVAR. Considere o seguinte modelo SVAR:
\[
\begin{aligned}
\boldsymbol{A}\boldsymbol{r}_{t} = \boldsymbol{A}_{1}^{*}\boldsymbol{r_{t-1}} +...+\boldsymbol{A}_{p}^{*}\boldsymbol{r}_{t-p} + \boldsymbol{B}\boldsymbol{u_{t}} \\
\end{aligned}
\]
Pré-multiplicando por \(\boldsymbol{A}^{-1}\), temos:
\[
\begin{aligned}
&&& \boldsymbol{A}^{-1}\boldsymbol{A}\boldsymbol{r}_{t} = \boldsymbol{A}^{-1}\boldsymbol{A}_{1}^{*}\boldsymbol{r_{t-1}} +...+\boldsymbol{A}^{-1}\boldsymbol{A}_{p}^{*}\boldsymbol{r}_{t-p} + \boldsymbol{A}^{-1}\boldsymbol{B}\boldsymbol{u_{t}} \\
\\
&&& \boldsymbol{r}_{t} = \boldsymbol{\Phi}_{1}\boldsymbol{r_{t-1}} +...+\boldsymbol{\Phi}_{p}\boldsymbol{r}_{t-p} + \boldsymbol{a_{t}}
\end{aligned}
\]
que é um VAR padrão e \(\boldsymbol{a_{t}}=\boldsymbol{A}^{-1}\boldsymbol{B}\boldsymbol{u_{t}}\), ou , \(\boldsymbol{A}\boldsymbol{a_{t}} = \boldsymbol{B}\boldsymbol{u_{t}}\).
Observe que \(\boldsymbol{a_{t}}\) são os erros do modelo VAR na sua forma reduzida (correlacionados) enquanto que \(\boldsymbol{u_{t}}\) são os erros da forma estrutural (não correlacionados).
Como é possível observar, o modelo estrutural não é observável, mas a forma reduzida pode ser estimada. A estratégia é especificar e estimar o VAR e depois estimar o SVAR e concentrar na análise de funções impulso-resposta, decomposição de variância e relações contemporâneas entre as variáveis.
Para estimar o SVAR temos que resolver primeiro o problema de identificação. Será que a partir da estimativa de \(\boldsymbol{\sum_{a}}\) é possível obter estimativas dos coeficientes de \(\boldsymbol{A}\) e \(\boldsymbol{B}\) do modelo estrutural?
Para isso, é preciso impor restrições nas matrizes \(\boldsymbol{A}\) e \(\boldsymbol{B}\). O número de restrições necessário para alcançar identificação depende da relação entre o número de coeficientes estimados na forma reduzida e o número de coeficientes a serem obtidos na forma estrutural. É um problema de número de incógnitas e de número de equações (relações) semelhante à condição de ordem em equações simultâneas.
O número de parâmetros do VAR que servem para identificar os elementos das matrizes \(\boldsymbol{A}\) e \(\boldsymbol{B}\) é o número de coeficientes não redundantes da matriz de variâncias e covariâncias \(\boldsymbol{\sum_{a}}\). Os coeficientes das variáveis defasadas não contam. Como \(\boldsymbol{\sum_{a}}\) é simétrica, temos \(\frac{k\left(k+1\right)}{2}=\frac{k^2+k}{2}\) coeficientes que é o número máximo de elementos identificáveis em \(\boldsymbol{A}\) e \(\boldsymbol{B}\). Se nosso modelo tem \(3\) variáveis, teremos \(\frac{3\left(3+1\right)}{2}=6\) elementos em \(\boldsymbol{\sum_{a}}\) e só podemos identificar 6 elementos em \(\boldsymbol{A}\) e \(\boldsymbol{B}\). Por outro lado, se nosso modelo tem \(4\) variáveis, teremos \(\frac{4\left(4+1\right)}{2}=10\) elementos em \(\boldsymbol{\sum_{a}}\) e só podemos identificar \(10\) elementos em \(\boldsymbol{A}\) e \(\boldsymbol{B}\).
Resumindo, temos \(k\) elementos em \(\boldsymbol{A}\) e \(k\) elementos em \(\boldsymbol{B}\) totalizando \(2k^2\) elementos a serem identificados em \(A\) e \(B\) (por exemplo, para \(k=2\) as matrizes \(\boldsymbol{A}\) e \(\boldsymbol{B}\) são \(2 \times 2\) e teremos \(4\) elementos em cada, totalizando \(2k^2=8\) elementos a serem identificados). Porém, como mostramos anteriormente, apenas \(\frac{k\left(k+1\right)}{2}=\frac{k^2+k}{2}\) destes elementos são observados/estimados pela matriz \(\boldsymbol{\sum_{a}}\).
Para identificar \(2k^2\) coeficientes desconhecidos a partir de \(\frac{k\left(k+1\right)}{2}\) valores de \(\boldsymbol{\sum_{a}}\), será necessário impor \(2k^2 - \frac{k\left(k+1\right)}{2} = k^2 + \frac{k\left(k-1\right)}{2}\) restrições nas matrizes \(\boldsymbol{A}\) e \(\boldsymbol{B}\).
Com base em \(\boldsymbol{A}\boldsymbol{a_{t}} = \boldsymbol{B}\boldsymbol{u_{t}}\) e dependendo das restrições impostas, três tipos de modelos SVAR podem ser definidos:
Neste modelo a idéia é modelar as relações contemporâneas entre as variáveis diretamente pela matriz \(\boldsymbol{A}\) considerando \(\boldsymbol{B} = \boldsymbol{I}_k\), isto é:
\[
\boldsymbol{A}\boldsymbol{a_{t}} = \boldsymbol{u_{t}}
\] o que reduz o número de valores desconhecidos de \(2k^2\) para \(k^2\), pois só temos a matriz \(\boldsymbol{A}\) a ser identificada. Assim, o número mínimo de restrições para identificação será \(\frac{k\left(k-1\right)}{2}\).
Por exemplo, em um sistema de \(4\) variáveis temos \(16\) elementos a serem identificados. Os elementos estimados são \(10\) da matriz \(\boldsymbol{\sum_{a}}\). Logo, temos que impor, no mínimo \(6\) restrições. A matriz \(\boldsymbol{A}\) seria:
\[
\boldsymbol{A} = \begin{bmatrix}
a_{11} & 0 & 0 & 0 \\
a_{21} & a_{22} & 0 & 0\\
a_{31} & a_{32} & a_{33} & 0\\
a_{41} & a_{42} & a_{43} & a_{44}
\end{bmatrix}
\]
Assim, o sistema é exatamente identificado. Se colocarmos \(1\) na diagonal principal o sistema fica super identificado. Se a teroai indica um relacionamento contemporâneo não recursivo, os zeros podem aparecer em posições diferentes fora da diagonal principal.
Neste modelo, ao invés de modelar diretamente as relações contemporâneas entre as variáveis, especifica-se as relações entre os erros identificando-se os choques estruturais diretamente pelos choques da forma reduzida. A matriz \(\boldsymbol{A}\) é considerada identidade, isto é, \(\boldsymbol{A}=\boldsymbol{I}_k\). Logo,
\[
\boldsymbol{a_{t}} = \boldsymbol{B}\boldsymbol{u_{t}}
\] Ou seja, os erros da forma reduzida são funções lineares dos erros estruturais. O número mínimo de restrições para identificação também é \(\frac{k\left(k-1\right)}{2}\).
É o modelo que considera os dois tipos de restrições simultâneamente, ou seja:
\[
\boldsymbol{A}\boldsymbol{a_{t}} = \boldsymbol{B}\boldsymbol{u_{t}}
\]
Como \(\boldsymbol{A}\) e \(\boldsymbol{B}\) têm \(k^2\) elementos cada, temos que impor no mínimo \(k^2 + \frac{k\left(k-1\right)}{2}\) restrições para identificação.
Para o exemplo do modelo VAR do BACEN apresentado em sala de aula, poderíamos estimar um SVAR do tipo AB (ignorando as defasagens de \(\boldsymbol{r_{t}}\) e \(\phi_0\)), como segue:
\[
\begin{aligned}
&&& \boldsymbol{A}\boldsymbol{r_{t}} = \boldsymbol{B}\boldsymbol{u_{t}} \\
\\
&&& \begin{bmatrix}
1 & 0 & 0 & 0 \\
a_{21} & 1 & 0 & 0\\
a_{31} & a_{32} & 1 & 0\\
a_{41} & a_{42} & a_{43} & 1
\end{bmatrix}\begin{bmatrix}
\Delta juros \\
\Delta cambio \\
\Delta adm \\
\Delta livres
\end{bmatrix} =
\begin{bmatrix}
b_{11} & 0 & 0 & 0 \\
0 & b_{22} & 0 & 0 \\
0 & 0 & b_{33} & 0 \\
0 & 0 & 0 & b_{44}
\end{bmatrix} \begin{bmatrix}
u_{juros} \\
u_{cambio} \\
u_{adm} \\
u_{livres}
\end{bmatrix}
\\
\end{aligned}
\]
Como \(k=4\), é necessário um mínimo de \(2k^2 - \frac{k\left(k+1\right)}{2} = k^2 + \frac{k\left(k-1\right)}{2} = 22\) restrições em \(\boldsymbol{A}\) e \(\boldsymbol{B}\) para identificação do modelo. Observe que exatamenteo \(22\) restrições foram impostas e o sistema é exatamente identificado.
Se chamarmos \(\boldsymbol{r_{t-1}},...,\boldsymbol{r_{t-p}}\) de “termos defasados”, o modelo pode ser escrito como:
\[
\begin{aligned}
&&& \Delta juros_{t} = \phi_{10} + \text{termos defasados}~ + b_{11}u_{juros} \\
\\
&&& \Delta cambio_{t} = \phi_{20} -a_{21} \Delta juros_{t}~+\text{termos defasados}~ + b_{22}u_{cambio} \\
\\
&&& \Delta adm_{t} = \phi_{30} -a_{31} \Delta juros_{t}-a_{32} \Delta cambio_{t}~+\text{termos defasados}~ + b_{33}u_{adm} \\
\\
&&& \Delta livres_{t} = \phi_{40} -a_{41} \Delta juros_{t}-a_{42} \Delta cambio_{t}-a_{43} \Delta adm_{t}~+\text{termos defasados}~ + b_{44}u_{livres} \\
\end{aligned}
\] Observe que a forma como escrevemos as matrizes \(\boldsymbol{A}\) e \(\boldsymbol{B}\) definiram que a variável mais endógena é \(\Delta livres\) e a mais exógena é \(\Delta juros\). Isso é de suma importância quando temos embasamento teórico capaz de sustentar esta escolha.
Perceba que a forma de especificação de \(\boldsymbol{A}\) altera a caracterização das variáveis como mais endógenas e mais exógenas. Por exemplo, caso optássemos por:
\[
\begin{aligned}
&&& \begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0\\
a_{31} & 0 & 1 & 0\\
a_{41} & 0 & a_{43} & 1
\end{bmatrix}\begin{bmatrix}
\Delta juros \\
\Delta cambio \\
\Delta adm \\
\Delta livres
\end{bmatrix} =
\begin{bmatrix}
b_{11} & 0 & 0 & 0 \\
0 & b_{22} & 0 & 0 \\
0 & 0 & b_{33} & 0 \\
0 & 0 & 0 & b_{44}
\end{bmatrix} \begin{bmatrix}
u_{juros} \\
u_{cambio} \\
u_{adm} \\
u_{livres}
\end{bmatrix}
\\
\end{aligned}
\]
Como \(k=4\), é necessário um mínimo de \(2k^2 - \frac{k\left(k+1\right)}{2} = k^2 + \frac{k\left(k-1\right)}{2} = 22\) restrições em \(\boldsymbol{A}\) e \(\boldsymbol{B}\) para identificação do modelo. Observe que \(25\) restrições foram impostas e o sistema é super identificado.
Se chamarmos \(\boldsymbol{r_{t-1}},...,\boldsymbol{r_{t-p}}\) de “termos defasados”, o modelo pode ser escrito como:
\[
\begin{aligned}
&&& \Delta juros_{t} = \phi_{10} + \text{termos defasados}~ + b_{11}u_{juros} \\
\\
&&& \Delta cambio_{t} = \phi_{20} ~+\text{termos defasados}~ + b_{22}u_{cambio} \\
\\
&&& \Delta adm_{t} = \phi_{30} -a_{31} \Delta juros_{t}~+\text{termos defasados}~ + b_{33}u_{adm} \\
\\
&&& \Delta livres_{t} = \phi_{40} -a_{41} \Delta juros_{t}-a_{42} \Delta cambio_{t}~+\text{termos defasados}~ + b_{44}u_{livres} \\
\end{aligned}
\] Agora, temos duas variáveis mais exógenas no sistema que são \(\Delta juros\) e \(\Delta cambio\) enquanto que a variável mais endógena continua sendo \(\Delta livres\).
Como outro exemplo, suponha o modelo apresentado por Lutkepohl (2005) envolvendo as variáveis produto (\(q_t\)), taxa de juros (\(i_t\)) e moeda (\(m_t\)). Os erros da forma reduzida são denotados por:
\[
\boldsymbol{a_{t}} = \left(a_{t}^{q}, a_{t}^{i}, a_{t}^{m} \right)^{'}
\] e os erros estruturais por:
\[
\boldsymbol{u_{t}} = \left(u_{t}^{IS}, u_{t}^{LM}, u_{t}^{m} \right)^{'}
\] De acordo com uma visão keynesiana a relação entre os erros da forma reduzida e os erros estruturais é dada por:
\[
\begin{aligned}
& a_{t}^{q} = -a_{12}a_{t}^{i} + b_{11}u_{t}^{IS}~~\text{que representa a curva IS} \\
& \\
& a_{t}^{i} = -a_{21}a_{t}^{q} -a_{23}a_{t}^{m} + b_{22}u_{t}^{LM}~~\text{que representa a curva LM} \\
\\
& a_{t}^{m} = b_{33}u_{t}^{m}~~\text{que representa a regra de oferta de moeda} \\
\end{aligned}
\]
A primeira equação representa uma curva IS com um parâmetro negativo para o termo de erro da taxa de juros e um choque estrutural na própria IS. A segunda equação é melhor entendida resolvendo a demanda por moeda em função do termo derro na taxa de juros, ou seja, \(a_{t}^{m} = \beta_{1}a_{t}^{q} + \beta_{2}a_{t}^{i} + u_{t}^{LM}\) de onde se tira que \(\beta_{1}\) deve ser positivo porque mais moeda é necessário para um maior volume de transação e que \(\beta_{2}\) deve ser negativo porque quanto mais alta a taxa de juros maior o custo de se reter moeda e, consequentemente, menor a quantidade de moeda será demandada. Por fim, a terceira equação postula que o termo de erro da base monetária é determinado por choques exógenos na oferta monetária. As três equações forma um modelo AB que pode ser escrito na forma \(\boldsymbol{A}\boldsymbol{a_{t}} = \boldsymbol{B}\boldsymbol{u_{t}}\):
\[
\begin{bmatrix}
1 & a_{12} & 0 \\
a_{21} & 1 & a_{23} \\
0 & 0 & 1
\end{bmatrix} \boldsymbol{a_{t}} =
\begin{bmatrix}
b_{11} & 0 & 0 \\
0 & b_{22} & 0 \\
0 & 0 & b_{33}
\end{bmatrix}\boldsymbol{u_{t}}
\]
Como \(k=3\), é necessário um mínimo de \(2k^2 - \frac{k\left(k+1\right)}{2} = k^2 + \frac{k\left(k-1\right)}{2} = 12\) restrições em \(\boldsymbol{A}\) e \(\boldsymbol{B}\) para identificação do modelo. Com três \(1\) e três \(0\) em \(\boldsymbol{A}\) e seis \(0\) em \(\boldsymbol{B}\) a condição é satisfeita e o modelo é exatamente identificado.
PROCESSO DE ESTIMAÇÃO
Abaixo, os passos para estimação e avaliação dos modelos VAR, SVAR e VEC. Apesar de ainda não termos estudado os modelos VEC (próxima etapa da disciplina), o processo aqui considera tal modelo. Porém, perceba que dependendo das decisões nas etapas, seguimos com a estimação dos modelos VAR e SVAR.
- Visualizar os dados e identificar observações fora do padrão (outliers, sazonalidade, tendência)
- Se necessário, transformar os dados para estabilizar a variância (logaritmo ou retirar sazonalidade, por exemplo)
- Avaliar a função de correlação cruzada para confirmar a possibilidade de modelagem multivariada.
- Testar se os dados são estacionários ou cointegrados:
- Caso não tenha raiz unitária (estacionários), estimar VAR com as séries em nível
- Caso tenha raiz unitária, mas sem cointegração é preciso diferenciar os dados até se tornarem estacionários e estimar VAR com as séries diferenciadas
- Caso tenha raiz unitária, mas com cointegração devemos estimar o VEC com as séries em nível
- Definir a ordem \(p\) para os dados em análise por meio de critérios de informação (escolher modelo com menor AIC, por exemplo)
- Estimar o modelo escolhido no passo 4
- Se VAR (forma reduzida):
- Verificar significância estatística do modelo estimado e, caso seja necessário, eliminar parâmetros não significantes.
- Analisar a causalidade de Granger (variáveis que não granger causa as demais podem ser retiradas do modelo)
- Se SVAR (forma estrutural):
- Definir a estrutura para as matrizes A e B e o modelo de interesse (A, B ou AB)
- Verificar significância estatística do modelo estimado e, caso seja necessário, eliminar parâmetros não significantes.
- Analisar a causalidade de Granger (variáveis que não granger causa as demais podem ser retiradas do modelo)
- Se VEC (Modelo Vetorial de Correção de Erros)
- Usar a quantidade de vetores de cointegração obtidos no teste de cointegração para estimar o modelo VEC
- Examinar se os resíduos se comportam como ruído branco e condições de estacionariedade do modelo. Caso contrário, retornar ao passo 3 ou 4.
- Verificar a autocorrelação serial por meio da FAC e FACP dos resíduos de cada equação do modelo estimado. O ideal é não ter defasagens significativas.
- Verificar correlação cruzada por meio da FCC dos resíduos.
- Analisar a estabildiade do modelo estimado através dos autovalores associados ao mesmo.
- Verificar a distribuição de probabilidade (Normal) para os resíduos de cada equação do modelo.
- Analisar heterocedasticidade condicional (resíduos devem ser homocedasticos, ou seja, variância condicional constante)
- Uma vez que os resíduos são ruído branco e o modelo é estável:
- Analisar funções de resposta ao impulso
- Analisar a importância das variáveis para explicar a variância do erro de previsão de cada variável
- Fazer previsões paras as variáveis do modelo
REFERÊNCIAS
Granger, Clive WJ. 1969. “Investigating Causal Relations by Econometric Models and Cross-Spectral Methods.” Econometrica Journal of the Econometric Society, 424–38.
Lutkepohl, Helmut. 2005. New Introduction to Multiple Time Series Analysis. Springer Science & Business Media.
Sims, Christopher A. 1980. “Macroeconomics and Reality.” Econometrica Journal of the Econometric Society, 1–48.
Tiao, George C, and George EP Box. 1981. “Modeling Multiple Time Series with Applications” 76. Journal of the American Statistical Association: 802–16.
Tsay, Ruey S. 2010. Analysis of Financial Time Series. John Wiley & Sons.
———. 2013. Multivariate Time Series Analysis with R and Financial Application. John Wiley & Sons.
———. 2014. An Introduction to Analysis of Financial Data with R. John Wiley & Sons.
LS0tCnRpdGxlOiA8Y2VudGVyPiA8aDI+IDxiPiBNb2RlbG8gVmV0b3JpYWwgQXV0b3JyZWdyZXNzaXZvIChWQVIpIDwvYj4gPC9oMj4gPC9jZW50ZXI+IAphdXRob3I6IDxjZW50ZXI+IEh1ZHNvbiBDaGF2ZXMgQ29zdGEgPC9jZW50ZXI+CmdyYXBoaWNzOiB5ZXMKbGlua2NvbG9yOiBibHVlCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBjZXJ1bGVhbgogICAgZmlnX2NhcHRpb246IHllcwpyZWZlcmVuY2VzOgotIGlkOiB0c2F5MjAxNGludHJvZHVjdGlvbgogIHRpdGxlOiBBbiBpbnRyb2R1Y3Rpb24gdG8gYW5hbHlzaXMgb2YgZmluYW5jaWFsIGRhdGEgd2l0aCBSCiAgYXV0aG9yOgogIC0gZmFtaWx5OiBUc2F5CiAgICBnaXZlbjogUnVleSBTCiAgcHVibGlzaGVyOiBKb2huIFdpbGV5IFwmIFNvbnMKICB0eXBlOiBib29rCiAgaXNzdWVkOgogICAgeWVhcjogMjAxNAotIGlkOiB0c2F5MjAxMGFuYWx5c2lzCiAgdGl0bGU6IEFuYWx5c2lzIG9mIGZpbmFuY2lhbCB0aW1lIHNlcmllcwogIGF1dGhvcjoKICAtIGZhbWlseTogVHNheQogICAgZ2l2ZW46IFJ1ZXkgUwogIHB1Ymxpc2hlcjogSm9obiBXaWxleSBcJiBTb25zCiAgdHlwZTogYm9vawogIGlzc3VlZDoKICAgIHllYXI6IDIwMTAKLSBpZDogdHNheTIwMTNtdWx0aXZhcmlhdGUKICB0aXRsZTogTXVsdGl2YXJpYXRlIHRpbWUgc2VyaWVzIGFuYWx5c2lzIHdpdGggUiBhbmQgZmluYW5jaWFsIGFwcGxpY2F0aW9uCiAgYXV0aG9yOgogIC0gZmFtaWx5OiBUc2F5CiAgICBnaXZlbjogUnVleSBTCiAgcHVibGlzaGVyOiBKb2huIFdpbGV5IFwmIFNvbnMKICB0eXBlOiBib29rCiAgaXNzdWVkOgogICAgeWVhcjogMjAxMwotIGlkOiB0aWFvMTk4MW1vZGVsaW5nCiAgdGl0bGU6IE1vZGVsaW5nIG11bHRpcGxlIHRpbWUgc2VyaWVzIHdpdGggYXBwbGljYXRpb25zCiAgYXV0aG9yOgogIC0gZmFtaWx5OiBUaWFvCiAgICBnaXZlbjogR2VvcmdlIEMKICAtIGZhbWlseTogQm94CiAgICBnaXZlbjogR2VvcmdlIEVQCiAgcHVibGlzaGVyOiBKb3VybmFsIG9mIHRoZSBBbWVyaWNhbiBTdGF0aXN0aWNhbCBBc3NvY2lhdGlvbgogIHR5cGU6IGFydGljbGUtam91cm5hbAogIHZvbHVtZTogNzYKICBwYWdlOiA4MDItODE2CiAgaXNzdWVkOgogICAgeWVhcjogMTk4MQotIGlkOiBncmFuZ2VyMTk2OWludmVzdGlnYXRpbmcKICB0aXRsZTogSW52ZXN0aWdhdGluZyBjYXVzYWwgcmVsYXRpb25zIGJ5IGVjb25vbWV0cmljIG1vZGVscyBhbmQgY3Jvc3Mtc3BlY3RyYWwgbWV0aG9kcwogIGF1dGhvcjoKICAtIGZhbWlseTogR3JhbmdlcgogICAgZ2l2ZW46IENsaXZlIFdKCiAgcHVibGlzaGVyOiBFY29ub21ldHJpY2EgSm91cm5hbCBvZiB0aGUgRWNvbm9tZXRyaWMgU29jaWV0eQogIHR5cGU6IGFydGljbGUtam91cm5hbAogIHBhZ2U6IDQyNC00MzgKICBpc3N1ZWQ6CiAgICB5ZWFyOiAxOTY5Ci0gaWQ6IHNpbXMxOTgwbWFjcm9lY29ub21pY3MKICB0aXRsZTogTWFjcm9lY29ub21pY3MgYW5kIHJlYWxpdHkKICBhdXRob3I6CiAgLSBmYW1pbHk6IFNpbXMKICAgIGdpdmVuOiBDaHJpc3RvcGhlciBBCiAgcHVibGlzaGVyOiBFY29ub21ldHJpY2EgSm91cm5hbCBvZiB0aGUgRWNvbm9tZXRyaWMgU29jaWV0eQogIHR5cGU6IGFydGljbGUtam91cm5hbAogIHBhZ2U6IDEtNDgKICBpc3N1ZWQ6CiAgICB5ZWFyOiAxOTgwCi0gaWQ6IGx1dGtlcG9obDIwMDVuZXcKICB0aXRsZTogTmV3IGludHJvZHVjdGlvbiB0byBtdWx0aXBsZSB0aW1lIHNlcmllcyBhbmFseXNpcwogIGF1dGhvcjoKICAtIGZhbWlseTogTHV0a2Vwb2hsCiAgICBnaXZlbjogSGVsbXV0CiAgcHVibGlzaGVyOiBTcHJpbmdlciBTY2llbmNlICYgQnVzaW5lc3MgTWVkaWEKICB0eXBlOiBib29rCiAgaXNzdWVkOgogICAgeWVhcjogMjAwNQpub2NpdGU6IHwgCiAgQHRzYXkyMDE0aW50cm9kdWN0aW9uLCBAdHNheTIwMTBhbmFseXNpcywgQHRzYXkyMDEzbXVsdGl2YXJpYXRlLCBAdGlhbzE5ODFtb2RlbGluZywgQGdyYW5nZXIxOTY5aW52ZXN0aWdhdGluZywgQHNpbXMxOTgwbWFjcm9lY29ub21pY3MsIEBsdXRrZXBvaGwyMDA1bmV3Ci0tLQoKRXN0ZSBtYXRlcmlhbCB0ZW0gY29tbyBvYmpldGl2byBpbnRyb2R1emlyIG9zIGNvbmNlaXRvcyBzb2JyZSBvICoqTW9kZWxvIFZldG9yaWFsIEF1dG9ycmVncmVzc2l2byAoVkFSKSoqLiBOZXN0ZSBzZW50aWRvLCB2YW1vcyBlbnRlbmRlciBjb21vIHRhbCBtb2RlbG8gw6kgZXNwZWNpZmljYWRvLCBzdWFzIGNvbmRpw6fDtWVzLCBjb21vIGVzdGltw6EtbG8gZSBmYXplciBwcmV2aXPDtWVzIHVzYW5kbyBzw6lyaWVzIHRlbXBvcmFpcyBtdWx0aXZhcmlhZGFzLiAKCmBgYHtyLCBlY2hvPUZBTFNFfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjICAgICBQQUNPVEVTICAgICAjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBDYXJyZWdhciBubyBhbWJpZW50ZSBvcyBwYWNvdGVzIG5lY2Vzc8OhcmlvcyBwYXJhIHJlcGxpY2FyIG9zIGPDs2RpZ29zIGFiYWl4bwpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUocXVhbnRtb2QpKQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoUXVhbmRsKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGZvcmVjYXN0KSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGRwbHlyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKG1hZ3JpdHRyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGhpZ2hjaGFydGVyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGR5Z3JhcGhzKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGdncGxvdDIpKQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoTVRTKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKHZhcnMpKQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUodXJjYSkpCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZShzZWFzb25hbCkpCmBgYAoKIyMjIyMgKipJTlRST0RVw4fDg08qKgoKT3MgbW9kZWxvcyBlY29uw7RtaWNvcyBlbSBnZXJhbCBzw6NvIGV4cHJlc3NvcyBwb3IgbWVpbyBkZSBkaXZlcnNhcyB2YXJpw6F2ZWlzLiBQb3J0YW50bywgbyB1c28gZGUgbW9kZWxvcyB1bml2YXJpYWRvcywgY29tbyB2aXN0byBhdMOpIG8gbW9tZW50bywgw6kgbGltaXRhZG8gcGFyYSBleHByZXNzYXIgbW9kZWxvcyBlY29uw7RtaWNvcy4gVW0gZXhlbXBsbyBiw6FzaWNvIHPDo28gb3MgbW9kZWxvcyBtYWNyb2Vjb27DtG1pY29zIGRlIGN1cnRvIHByYXpvIG9uZGUgUElCLCBjb25zdW1vLCBpbnZlc3RpbWVudG8gZSBnYXN0b3MgZ292ZXJuYW1lbnRhaXMgc8OjbyBkZXRlcm1pbmFkb3Mgc2ltdWx0YW5lYW1lbnRlLiAKCkEgcGFydGlyIGRvIGFydGlnbyBkZSBAc2ltczE5ODBtYWNyb2Vjb25vbWljcywgbyB1c28gZG8gKipNb2RlbG8gVmV0b3JpYWwgQXV0b3JyZWdyZXNzaXZvIChWQVIpKiogc2UgZGlmdW5kaXUgcmFwaWRhbWVudGUgZSBlc3TDo28gZW50cmUgb3MgaW5zdHJ1bWVudG9zIG1haXMgdXNhZG9zIHBhcmEgaW52ZXN0aWdhciBlbXBpcmljYW1lbnRlIGEgbWFjcm9lY29ub21pYS4gCgpPcyBtb2RlbG9zICoqVkFSKiogc8OjbyBzaXN0ZW1hcyBkZSBlcXVhw6fDtWVzIHNpbXVsdMOibmVhcyBxdWUgY2FwdHVyYW0gYSBleGlzdMOqbmNpYSBkZSByZWxhw6fDtWVzIGRlIGludGVyZGVwZW5kw6puY2lhIGVudHJlIHZhcmnDoXZlaXMsIGUgcXVlIHBlcm1pdGVtIGF2YWxpYXIgbyBpbXBhY3RvIGRlIGNob3F1ZXMgZXN0b2PDoXN0aWNvcyBzb2JyZSBkZXRlcm1pbmFkYSB2YXJpw6F2ZWwgZG8gc2lzdGVtYS4gTyBCYW5jbyBDZW50cmFsLCBhc3NpbSBjb21vIGEgZ3JhbmRlIG1haW9yaWEgZGUgc2V1cyBwYXJlcyBpbnRlcm5hY2lvbmFpcywgdXRpbGl6YSBtb2RlbG9zIFZBUiBjb21vIGluc3RydW1lbnRvIGRlIGFuw6FsaXNlIGUsIHByaW5jaXBhbG1lbnRlLCBkZSBwcmV2aXPDo28gZGUgaW5mbGHDp8OjbyBkZXNkZSBhIGltcGxlbWVudGHDp8OjbyBkbyByZWdpbWUgZGUgbWV0YXMgcGFyYSBhIGluZmxhw6fDo28sIGVtIGp1bmhvIGRlIDE5OTkuCgojIyMjIyAqKlZBUigxKSoqCgpVbWEgc8OpcmllIHRlbXBvcmFsIG11bHRpdmFyaWFkYSAkXGJvbGRzeW1ib2x7cl97dH19PShyX3sxdH0scl97MnR9LC4uLixyX3trdH0pXnsnfSQgY29tcG9zdGEgcG9yICRrJCBjb21wb25lbnRlcyBubyB0ZW1wbyAkdCQgw6kgdW0gcHJvY2Vzc28gVkFSIGRlIG9yZGVtICQxJCwgb3UgJFZBUigxKSQsIHNlIHNlZ3VlIG8gbW9kZWxvOgoKJCQKXGJvbGRzeW1ib2x7cl97dH19ID0gXGJvbGRzeW1ib2x7XHBoaX1fezB9ICsgXGJvbGRzeW1ib2x7XFBoaX1cYm9sZHN5bWJvbHtyfV97dC0xfSArIFxib2xkc3ltYm9se2Ffe3R9fQokJApvbmRlICRcYm9sZHN5bWJvbHtccGhpfV97MH0kIMOpIHVtIHZldG9yIGRlIGRpbWVuc8OjbyAkayQsICRcYm9sZHN5bWJvbHtcUGhpfSQgw6kgdW1hIG1hdHJpeiAkayBcdGltZXMgayQgZSAkXGJvbGRzeW1ib2x7YV97dH19JCDDqSB1bSBydcOtZG8gYnJhbmNvIGZvcm1hZG8gcG9yIHVtYSBzZXF1w6puY2lhIGRlIHZldG9yZXMgYWxlYXTDs3Jpb3MgaW5kZXBlbmRlbnRlcyBlIGlkZW50aWNhbWVudGUgZGlzdHJpYnXDrWRvcyBjb20gbcOpZGlhICQwJCBlIG1hdHJpeiBkZSBjb3ZhcmnDom5jaWEgJFxib2xkc3ltYm9se1xzdW1fe2F9fSQuIE5hIGxpdGVyYXR1cmEsIMOpIGZyZXF1ZW50ZW1lbnRlIGFzc3VtaWRvIHF1ZSAkXGJvbGRzeW1ib2x7YV97dH19JCBzZWd1ZSB1bWEgZGlzdHJpYnVpw6fDo28gTm9ybWFsIG11bHRpdmFyaWFkYSBlIHF1ZSBhIG1hdHJpeiAkXGJvbGRzeW1ib2x7XHN1bV97YX19JCDDqSBwb3NpdGl2YSBkZWZpbmlkYS4gCgpDb25zaWRlcmUgbyBjYXNvIGJpdmFyaWFkbyAoaXN0byDDqSwgJGs9MiQsICRcYm9sZHN5bWJvbHtyX3t0fX0gPSAocl97MXR9LHJfezJ0fSleeyd9JCBlICRcYm9sZHN5bWJvbHthX3t0fX09KGFfezF0fSxhX3sydH0pXnsnfSQpLiBPIG1vZGVsbyAkVkFSKDEpJCBwb2RlIHNlciBlc2NyaXRvIGNvbW86IAoKJCQKXGxlZnRbXGJlZ2lue21hdHJpeH0ge3J9X3sxdH0gXFwge3J9X3sydH0gXGVuZHttYXRyaXh9IFxyaWdodF0gPSBcbGVmdFtcYmVnaW57bWF0cml4fSB7XHBoaX1fezEwfSBcXCB7XHBoaX1fezIwfSBcZW5ke21hdHJpeH0gXHJpZ2h0XSArIFxsZWZ0WyBcYmVnaW57bWF0cml4fXtccGhpfV97MTF9IFxcIHtccGhpfV97MjF9IFxlbmR7bWF0cml4fVxiZWdpbnttYXRyaXh9IHtccGhpfV97MTJ9IFxcIHtccGhpfV97MjJ9IFxlbmR7bWF0cml4fSBccmlnaHRdIFxsZWZ0W1xiZWdpbnttYXRyaXh9IHtyfV97MSx0LTF9IFxcIHtyfV97Mix0LTF9IFxlbmR7bWF0cml4fSBccmlnaHRdICsgXGxlZnRbXGJlZ2lue21hdHJpeH0ge2F9X3sxdH0gXFwge2F9X3sydH0gXGVuZHttYXRyaXh9IFxyaWdodF0gLCAgXHN1bV97YX0gPSAgXGxlZnRbIFxiZWdpbnttYXRyaXh9e1xzaWdtYX1fezF9XnsyfSBcXCB7XHNpZ21hfV97MjF9IFxlbmR7bWF0cml4fVxiZWdpbnttYXRyaXh9IHtcc2lnbWF9X3sxMn0gXFwge1xzaWdtYX1fezJ9XnsyfSBcZW5ke21hdHJpeH0gXHJpZ2h0XQokJAoKb25kZSAkXHBoaV97aWp9JCDDqSBvICQoaSxqKSQtw6lzaW1vIGVsZW1lbnRvIGRlICRcYm9sZHN5bWJvbHtcUGhpfSQsICRccGhpX3tpMH0kIMOpIG8gaS3DqXNpbW8gZWxlbWVudG8gZGUgJFxib2xkc3ltYm9se1xwaGl9X3swfSQsICR2YXIoYV97MXR9KT1cc2lnbWFfMV57Mn0kLCAkdmFyKGFfezJ0fSk9XHNpZ21hXzJeezJ9JCBlICRjb3YoYV97MXR9LGFfezJ0fSk9XHNpZ21hX3sxMn09XHNpZ21hX3syMX0kLiAKCkVxdWl2YWxlbnRlbWVudGUsIHBvZGVtb3MgZXNjcmV2ZXIgbyBtb2RlbG8gY29tbzoKCiQkClxiZWdpbnthbGlnbmVkfQpyX3sxdH0gPSBccGhpX3sxMH0gKyBccGhpX3sxMX1yX3sxLHQtMX0rIFxwaGlfezEyfXJfezIsdC0xfSArIGFfezF0fSBcXApyX3sydH0gPSBccGhpX3syMH0gKyBccGhpX3syMX1yX3sxLHQtMX0rIFxwaGlfezIyfXJfezIsdC0xfSArIGFfezJ0fSBcXApcZW5ke2FsaWduZWR9CiQkCgpUYWwgZm9ybWEgZGUgZXNwZWNpZmljYXIgbyBtb2RlbG8gKHRhbnRvIGEgbWF0cmljaWFsIHF1YW50byBhIMO6bHRpbWEpIMOpIGNoYW1hZGEgZGUgKipmb3JtYSByZWR1emlkYSoqIGVtIGZ1bsOnw6NvIGRhIHJlbGHDp8OjbyBjb250ZW1wb3LDom5lYSBlbnRyZSAkcl97MXR9JCBlICRyX3sydH0kIG7Do28gc2VyIG1vc3RyYWRhIGV4cGxpY2l0YW1lbnRlLiBPYnNlcnZlIHF1ZSB0cmF0YS1zZSBkZSB1bSBtb2RlbG8gY29tcG9zdG8gcG9yIGR1YXMgZXF1YcOnw7VlcyAoZW0gZnVuw6fDo28gZGUgdGVybW9zIGR1YXMgdmFyacOhdmVpcykgZSBjYWRhIGVxdWHDp8OjbyDDqSBmdW7Dp8OjbyBkZSBzZXUgdmFsb3IgZGVmYXNhZG8gZSBkYSBwcmltZWlyYSBkZWZhc2FnZW0gZGEgb3V0cmEgdmFyacOhdmVsLiAKClRlbW9zIGR1YXMgbWFuZWlyYXMgZGUgYXZhbGlhciBhcyBlcXVhw6fDtWVzIGFjaW1hOgoKMS4gU2VwYXJhZGFtZW50ZQogICAgKiAkXHBoaV97MTJ9JCBkZW5vdGEgYSBkZXBlbmTDqm5jaWEgbGluZWFyIGRlICRyX3sxdH0kIGVtIHJlbGHDp8OjbyBhICRyX3syLHQtMX0kIG5hIHByZXNlbsOnYSBkZSAkcl97MSx0LTF9JC4gUG9ydGFudG8sICRccGhpX3sxMn0kIMOpIG8gZWZlaXRvIGNvbmRpY2lvbmFsIGRlICRyX3syLHQtMX0kIHNvYnJlICRyX3sxdH0kIGRhZG8gJHJfezEsdC0xfSQuCiAgICAqIFNlICRccGhpX3sxMn09MCQsIGVudMOjbyAkcl97MXR9JCBuw6NvIGRlcGVuZGUgZGUgJHJfezIsdC0xfSQgZSBvIG1vZGVsbyBtb3N0cmEgcXVlICRyX3sxdH0kIGRlcGVuZGUgYXBlbmFzIGRlIHNldXMgdmFsb3JlcyBwYXNzYWRvcy4KICAgICogU2ltaWxhcm1lbnRlLCBzZSAkXHBoaV97MjF9PTAkLCBlbnTDo28gYSBzZWd1bmRhIGVxdWHDp8OjbyBtb3N0cmEgcXVlICRyX3sydH0kIG7Do28gZGVwZW5kZSBkZSAkcl97MSx0LTF9JCBxdWFuZG8gJHJfezIsdC0xfSQgw6kgZGFkbwoyLiBFbSBjb25qdW50bwogICAgKiBTZSAkXHBoaV97MTJ9PTAkIGUgJFxwaGlfezIxfSBcbmVxIDAkIG8gcXVlIG1vc3RyYSBxdWUgJHJfezF0fSQgbsOjbyBkZXBlbmRlIGRlICRyX3sydH0kLCBtYXMgJHJfezJ0fSQgZGVwZW5kZSBkZSAkcl97MXR9JC4gQ29uc2VxdWVudGVtZW50ZSwgdGVtb3MgdW1hIHJlbGHDp8OjbyB1bmlkaXJlY2lvbmFsIGRlICRyX3sxdH0kIHBhcmEgJHJfezJ0fSQuIE5hIGxpdGVyYXR1cmEgZGUgZWNvbm9tZXRyaWEsIG8gbW9kZWxvIGltcGxpY2EgbmEgZXhpc3TDqm5jaWEgZGUgY2F1c2FsaWRhZGUgZGUgR3JhbmdlciBlbnRyZSBhcyBkdWFzIHPDqXJpZXMgY29tICRyX3sxdH0kIGNhdXNhbmRvICRyX3sydH0kLCBtYXMgbsOjbyBzZW5kbyBjYXVzYWRhIHBvciAkcl97MnR9JC4KICAgICogU2UgJFxwaGlfezEyfT1ccGhpX3syMX09MCQsIGVudMOjbyAkcl97MXR9JCBlICRyX3sydH0kIG7Do28gc8OjbyBkaW7Dom1pY2FtZW50YSBjb3JlbGFjaW9uYWRvcy4gTmVzdGUgY2FzbywgY2FkYSBzw6lyaWUgc2VndWUgdW0gbW9kZWxvIEFSKDEpIHVuaXZhcmlhZG8uIERpemVtb3MgcXVlIGFzIGR1YXMgc8OpcmllcyBzw6NvIGRlc2Fjb3BsYWRhcy4KICAgICogU2UgJFxwaGlfezEyfSBcbmVxIDAkIGUgJFxwaGlfezIxfSBcbmVxIDAkLCBlbnTDo28gZXhpc3RlIHVtYSByZWxhw6fDo28gZW50cmUgYXMgZHVhcyBzw6lyaWVzLCBvdSBzZWphLCBlbGFzIHNlIGltcGFjdGFtLiAKICAgIApBbMOpbSBkaXNzbywgdW0gY2hvcXVlIGVtICRyX3sxdH0kIHBvciBtZWlvIGRlICRhX3sxdH0kIHRlbSBlZmVpdG8gY29udGVtcG9yw6JuZW8gc29icmUgJHJfezF0fSQuIE5vIHBlcsOtb2RvIHNlZ3VpbnRlLCBlc3RlIGVmZWl0byBzZSB0b3JuYSAkcl97MSx0LTF9JCBlIGFmZXRhICRyX3sydH0kIHF1ZSBubyBwZXLDrW9kbyBzZWd1aW50ZSBzZSB0b3JuYSAkcl97Mix0LTF9JCBlIGFmZXRhICRyX3sxdH0kIGUgYXNzaW0gc3VjZXNzaXZhbWVudGUuIAoKRW0gdW0gbW9kZWxvIGVzdGFjaW9uw6FyaW8gZXN0ZSBlZmVpdG8gZG8gY2hvcXVlIGRlc2FwYXJlY2UgYXDDs3MgYWxndW5zIHBlcsOtb2Rvcy4gQ29tbyBkZWZpbmltb3MgYW50ZXJpb3JtZW50ZSwgdW1hIHPDqXJpZSB0ZW1wb3JhbCBtdWx0aXZhcmlhZGEgJFxib2xkc3ltYm9se3Jfe3R9fSQgw6kgZnJhY2FtZW50ZSBlc3RhY2lvbsOhcmlhIHNlIHRlbSBtw6lkaWEgY29uc3RhbnRlICgkXGJvbGRzeW1ib2x7XG11fSA9IEUoXGJvbGRzeW1ib2x7cl97dH19KSQpIGUgbWF0cml6IGRlIGNvdmFyacOibmNpYSBjb25zdGFudGUgKCRcYm9sZHN5bWJvbHtcR2FtbWF9X3t0LGx9PUNvdihcYm9sZHN5bWJvbHtyX3t0fX0sXGJvbGRzeW1ib2x7cl97dC1sfX0pPVxib2xkc3ltYm9se1xHYW1tYX1fe2x9JCksIG9uZGUgJGwkIMOpIHVtYSBkZWZhc2FnZW0gcXVhbHF1ZXIuIEFzc2ltLCBwcmVjaXNhbW9zIGNvbmZpcm1hciBzZSBvIG1vZGVsbyAqKlZBUigxKSoqIHJlc3BlaXRhIGFzIGhpcMOzdGVzZXMgZGUgZXN0YWNpb25hcmllZGFkZSBmcmFjYSwgY29tbyBzZWd1ZToKCiogKipNw4lESUEgQ09OU1RBTlRFKioKICAgIApGYXplbmRvIHVzbyBkYXMgaGlww7N0ZXNlcyAkRShcYm9sZHN5bWJvbHtyfV97dH0pPUUoXGJvbGRzeW1ib2x7cn1fe3QtMX0pPVxib2xkc3ltYm9se1xtdX0kIGUgcXVlICRFKFxib2xkc3ltYm9se2F9X3t0fSk9MCQsIHRlbW9zOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYgRShcYm9sZHN5bWJvbHtyfV97dH0pID0gXGJvbGRzeW1ib2x7XHBoaX1fMCArIFxib2xkc3ltYm9se1xQaGl9RShcYm9sZHN5bWJvbHtyfV97dC0xfSkgXFwKJiBcYm9sZHN5bWJvbHtcbXV9ID0gXGJvbGRzeW1ib2x7XHBoaX1fMCArIFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7XG11fSBcXAomIFxib2xkc3ltYm9se1xtdX0gPSAoXGJvbGRzeW1ib2x7SX0tXGJvbGRzeW1ib2x7XFBoaX0pXnstMX1cYm9sZHN5bWJvbHtccGhpfV8wClxlbmR7YWxpZ25lZH0KJCQKCm9uZGUgJFxib2xkc3ltYm9se0l9JCDDqSB1bWEgbWF0cml6IGlkZW50aWRhZGUgJGsgXHRpbWVzIGskIGUgYSBtYXRyaXogJFxib2xkc3ltYm9se0l9LVxib2xkc3ltYm9se1xQaGl9JCBkZXZlIHNlciBuw6NvIHNpbmd1bGFyIChkZXRlcm1pbmFudGUgZGlmZXJlbnRlIGRlIHplcm8pIHBhcmEgcXVlIGEgaW52ZXJzYSBleGlzdGEgZSwgY29uc2VxdWVudGVtZW50ZSwgbyB2ZXRvciBkZSBtw6lkaWFzLgoKKiAqKk1BVFJJWiBERSBDT1ZBUknDgk5DSUEgQ09OU1RBTlRFKioKClJlZXNjcmV2ZW5kbyBhIG3DqWRpYSBkbyBwcm9jZXNzbyBjb21vICRcYm9sZHN5bWJvbHtccGhpX3swfX0gPSAoXGJvbGRzeW1ib2x7SX0tXGJvbGRzeW1ib2x7XFBoaX0pXGJvbGRzeW1ib2x7XG11fSQsIHBvZGVtb3MgZXNjcmV2ZXIgbyBtb2RlbG8gKipWQVIoMSkqKiBjb21vOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYgXGJvbGRzeW1ib2x7cl97dH19ID0gKFxib2xkc3ltYm9se0l9LVxib2xkc3ltYm9se1xQaGl9KVxib2xkc3ltYm9se1xtdX0gKyBcYm9sZHN5bWJvbHtcUGhpfVxib2xkc3ltYm9se3Jfe3QtMX19ICsgXGJvbGRzeW1ib2x7YV97dH19IFxcCiYgXGJvbGRzeW1ib2x7cl97dH19ID0gXGJvbGRzeW1ib2x7XG11fSAtIFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7XG11fSArIFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7cl97dC0xfX0gKyBcYm9sZHN5bWJvbHthX3t0fX0gXFwKJiAoXGJvbGRzeW1ib2x7cl97dH19IC0gXGJvbGRzeW1ib2x7XG11fSkgPSBcYm9sZHN5bWJvbHtcUGhpfShcYm9sZHN5bWJvbHtyX3t0LTF9fS1cYm9sZHN5bWJvbHtcbXV9KSArIFxib2xkc3ltYm9se2Ffe3R9fQpcZW5ke2FsaWduZWR9CiQkCkZhemVuZG8gJFx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0fT1cYm9sZHN5bWJvbHtyX3t0fX0tXGJvbGRzeW1ib2x7XG11fSQsIHRlbW9zOgoKJCQKXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9PVxib2xkc3ltYm9se1xQaGl9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtMX0rXGJvbGRzeW1ib2x7YV97dH19CiQkCkVzdGEgZm9ybXVsYcOnw6NvIMOpIGFwZW5hcyB1bWEgZm9ybWEgZGlmZXJlbnRlIGRlIGVzY3JldmVyIG8gbW9kZWxvICoqVkFSKDEpKiogZGVmaW5pZG8gbm8gaW7DrWNpbyBkbyB0ZXh0by4gU3Vic3RpdHVpbmRvICRcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dC0xfSQgcmVjdXJzaXZhbWVudGUsIHByb2R1ejoKCiQkClxiZWdpbnthbGlnbmVkfQomIFx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0fT1cYm9sZHN5bWJvbHtcUGhpfShcYm9sZHN5bWJvbHtcUGhpfVx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0LTJ9K1xib2xkc3ltYm9se2Ffe3QtMX19KStcYm9sZHN5bWJvbHthX3t0fX1cXCAKJiBcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7XFBoaX1eezJ9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtMn0rXGJvbGRzeW1ib2x7XFBoaX1cYm9sZHN5bWJvbHthX3t0LTF9fStcYm9sZHN5bWJvbHthX3t0fX1cXCAKJiBcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7XFBoaX1eezJ9KFxib2xkc3ltYm9se1xQaGl9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtM30rXGJvbGRzeW1ib2x7YV97dC0yfX0pK1xib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YV97dC0xfX0rXGJvbGRzeW1ib2x7YV97dH19XFwgCiYgXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9PVxib2xkc3ltYm9se1xQaGl9XnszfVx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0LTN9K1xib2xkc3ltYm9se1xQaGl9XnsyfVxib2xkc3ltYm9se2Ffe3QtMn19K1xib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YV97dC0xfX0rXGJvbGRzeW1ib2x7YV97dH19XFwgCiYgXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9PVxib2xkc3ltYm9se2Ffe3R9fSArIFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YV97dC0xfX0gKyBcYm9sZHN5bWJvbHtcUGhpfV57Mn1cYm9sZHN5bWJvbHthX3t0LTJ9fSArIFxib2xkc3ltYm9se1xQaGl9XnszfVxib2xkc3ltYm9se2F9X3t0LTN9Ky4uLgpcZW5ke2FsaWduZWR9CiQkCgpFc3RhIGZvcm11bGHDp8OjbyBtb3N0cmEgYWxndW1hcyBjYXJhY3RlcsOtc3RpY2FzIGRlIHVtIHByb2Nlc3NvICoqVkFSKDEpKiouIEVsYXMgc8OjbzoKCjEuIFVtYSB2ZXogcXVlICRcYm9sZHN5bWJvbHthX3t0fX0kIMOpIHNlcmlhbG1lbnRlIG7Do28gY29ycmVsYWNpb25hZG8gKGVtIGZ1bsOnw6NvIGRhIGhpcMOzdGVzZSBkZSBzZXIgdW0gcnXDrWRvIGJyYW5jbyksIHNlZ3VlIHF1ZSAkQ292KFxib2xkc3ltYm9se2Ffe3R9fSxcYm9sZHN5bWJvbHtyX3t0LWx9fSk9XGJvbGRzeW1ib2x7MH0kLiAKMi4gTXVsdGlwbGljYW5kbyBhIGV4cHJlc3PDo28gcG9yICRcYm9sZHN5bWJvbHthX3t0fX1eeyd9JCwgY2FsY3VsYW5kbyBvIHZhbG9yIGVzcGVyYWRvIGUgdXNhbmRvIGEgaGlww7N0ZXNlIGRlICRcYm9sZHN5bWJvbHthX3t0fX0kIHNlciBzZXJpYWxtZW50ZSBuw6NvIGNvcnJlbGFjaW9uYWRvLCBvYnRlbW9zICRDb3YoXGJvbGRzeW1ib2x7cn1fe3R9LFxib2xkc3ltYm9se2F9X3t0fSk9XGJvbGRzeW1ib2x7XHN1bV97YX19JC4KMy4gUGFyYSB1bSAqKlZBUigxKSoqLCAkXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9JCBlIGNvbnNlcXVlbnRlbWVudGUgJFxib2xkc3ltYm9se3Jfe3R9fSQgZGVwZW5kZXLDoSBkb3MgZXJyb3MgcGFzc2Fkb3MgY29tIG1hdHJpeiBkZSBjb2VmaWNpZW50ZXMgaWd1YWwgYSAkXGJvbGRzeW1ib2x7XFBoaX1ee2p9JC4gUGFyYSBlc3RhIGRlcGVuZMOqbmNpYSBzZXIgc2lnbmlmaWNhdGl2YSAkXGJvbGRzeW1ib2x7XFBoaX1ee2p9JCBkZXZlIGNvbnZlcmdpciBwYXJhIHplcm8gbmEgbWVkaWRhIHF1ZSAkaiBccmlnaHRhcnJvdyAgXGluZnR5JC4gSXN0byBzaWduaWZpY2EgcXVlIG9zICRrJCBhdXRvdmFsb3JlcyBkZSAkXGJvbGRzeW1ib2x7XFBoaX0kIGRldmVtIHNlciBtZW5vcmVzIHF1ZSAkMSQsIGNhc28gY29udHLDoXJpbyAkXGJvbGRzeW1ib2x7XFBoaX1ee2p9JCB2YWkgZXhwbG9kaXIgcXVhbmRvICRqIFxyaWdodGFycm93ICBcaW5mdHkkLgoKVXNhZG8gYXMgaGlww7N0ZXNlcyBhY2ltYSBlICRDb3YoXGJvbGRzeW1ib2x7YX1fe3R9KT1cYm9sZHN5bWJvbHtcc3VtX3thfX0kIHBhcmEgcXVhbHF1ZXIgJHQkLCB0ZW1vcyBxdWUgYSBjb3ZhcmnDom5jaWEgZGUgJFxib2xkc3ltYm9se3Jfe3R9fSQgc2Vyw6E6CgokJApDb3YoXGJvbGRzeW1ib2x7cl97dH19KT1Db3YoXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9KT1cYm9sZHN5bWJvbHtcR2FtbWFfezB9fT1cYm9sZHN5bWJvbHtcc3VtX3thfX0rXGJvbGRzeW1ib2x7XFBoaX1cYm9sZHN5bWJvbHtcc3VtX3thfX1cYm9sZHN5bWJvbHtcUGhpfV57J30rXGJvbGRzeW1ib2x7XFBoaX1eezJ9XGJvbGRzeW1ib2x7XHN1bV97YX19KFxib2xkc3ltYm9se1xQaGl9XnsyfSleeyd9Ky4uLj0gXHN1bV97aT0wfV57XGluZnR5fXtcYm9sZHN5bWJvbHtcUGhpfV57aX1cYm9sZHN5bWJvbHtcc3VtX3thfX0oXGJvbGRzeW1ib2x7XFBoaX1ee2l9KV57J319CiQkCm9uZGUgJFxib2xkc3ltYm9se1xQaGl9XnswfT1cYm9sZHN5bWJvbHtJfSQgw6kgdW1hIG1hdHJpeiBpZGVudGlkYWRlICRrIFx0aW1lcyBrJC4gTm90ZSBxdWUgYSBjb3ZhcmnDom5jaWEgZG8gcHJvY2Vzc28gbsOjbyBkZXBlbmRlIGRlIHF1YWxxdWVyICR0JCwgc2VuZG8gaW52YXJpYW50ZSBkbyB0ZW1wby4gCgoqICoqTUFUUklaRVMgREUgQ09WQVJJw4JOQ0lBIEUgQ09SUkVMQcOHw4NPIENSVVpBREEgREVQRU5ERU5URSBBUEVOQVMgREUgJGwkKioKClNhYmVtb3MgcXVlIG8gbW9kZWxvIHJlZXNjcml0byB1c2FuZG8gJFxib2xkc3ltYm9se1xQaGlfezB9fSA9IChcYm9sZHN5bWJvbHtJfS1cYm9sZHN5bWJvbHtcUGhpfSlcYm9sZHN5bWJvbHtcbXV9JCBlICRcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7cl97dH19LVxib2xkc3ltYm9se1xtdX0kIHBvZGUgc2VyIGRlZmluaWRvIGNvbW86CgokJApcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7XFBoaX1cd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dC0xfStcYm9sZHN5bWJvbHthX3t0fX0KJCQKCk11bHRpcGxpY2FuZG8gYW1ib3Mgb3MgbGFkb3MgcG9yICRcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dC1sfV57J309KFxib2xkc3ltYm9se3Jfe3QtbH19LVxib2xkc3ltYm9se1xtdX0pXnsnfSQsIHVzYW5kbyBhIGhpcMOzdGVzZSBkZSBxdWUgJEUoXGJvbGRzeW1ib2x7YV97dH19LFx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19XnsnfV97dC1sfSk9XGJvbGRzeW1ib2x7MH0kIGVtIGZ1bsOnw6NvIGRlICRcYm9sZHN5bWJvbHthX3t0fX0kIHNlciB1bSBydcOtZG8gYnJhbmNvIGUgY2FsY3VsYW5kbyBvIHZhbG9yIGVzcGVyYWRvLCB0ZXJlbW9zIGEgbWF0cml6IGRlIGNvdmFyacOibmNpYSBjcnV6YWRhIHBhcmEgcXVhbHF1ZXIgZGVmYXNhZ2VtICRsPjAkOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYgRShcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH0sXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1eeyd9X3t0LWx9KT1cYm9sZHN5bWJvbHtcUGhpfUUoXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtMX0sXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtbH1eeyd9KSBcXAomIEVbKFxib2xkc3ltYm9se3Jfe3R9fS1cYm9sZHN5bWJvbHtcbXV9KShcYm9sZHN5bWJvbHtyX3t0LWx9fS1cYm9sZHN5bWJvbHtcbXV9KV57J31dID0gXGJvbGRzeW1ib2x7XFBoaX1FWyhcYm9sZHN5bWJvbHtyX3t0LTF9fS1cYm9sZHN5bWJvbHtcbXV9KShcYm9sZHN5bWJvbHtyX3t0LWx9fS1cYm9sZHN5bWJvbHtcbXV9KV57J31dClxlbmR7YWxpZ25lZH0KJCQKcXVlIHBvZGUgc2VyIGVzY3JpdGEgdXNhbmRvICRcYm9sZHN5bWJvbHtcR2FtbWF9X3tsfSQgCgokJApcYm9sZHN5bWJvbHtcR2FtbWF9X3tsfSA9IFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7XEdhbW1hfV97bC0xfQokJApvbmRlICRcYm9sZHN5bWJvbHtcR2FtbWF9X3tsfSQgw6kgYSBtYXRyaXogZGUgY292YXJpw6JuY2lhIGNydXphZGEgZGUgJFxib2xkc3ltYm9se3Jfe3R9fSQgcGFyYSBhIGRlZmFzYWdlbSAkbCQuIAoKU2FiZW1vcyBxdWUgYSBkaXZpc8OjbyBkYSBtYXRyaXogZGUgY292YXJpw6JuY2lhIGNydXphZGEgcGVsYSBtYXRyaXogZGUgZGVzdmlvcy1wYWRyw6NvIHByb3BvcmNpb25hcsOhIGEgY29ycmVsYcOnw6NvIGNydXphZGEuIEFzc2ltLCB0ZXJlbW9zOgoKJCQKXGJvbGRzeW1ib2x7XHJob197bH19ID0gXGJvbGRzeW1ib2x7RF57LTF9fVxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7XEdhbW1hX3tsLTF9fVxib2xkc3ltYm9se0Reey0xfX0gPSBcYm9sZHN5bWJvbHtcVXBzaWxvbn1cYm9sZHN5bWJvbHtccmhvX3tsLTF9fQokJApvbmRlICRcYm9sZHN5bWJvbHtcVXBzaWxvbn09IFxib2xkc3ltYm9se0Reey0xfX1cYm9sZHN5bWJvbHtcUGhpfVxib2xkc3ltYm9se0Reey0xfX0kLiBDb25zZXF1ZW50ZW1lbnRlLCBhIG1hdHJpeiBkZSBjb3JyZWxhw6fDo28gY3J1emFkYSBkZSB1bSBtb2RlbG8gKipWQVIoMSkqKiBzZXLDoToKCiQkClxib2xkc3ltYm9se1xyaG9fe2x9fSA9IFxib2xkc3ltYm9se1xVcHNpbG9ufV57bH1cYm9sZHN5bWJvbHtccmhvX3swfX0KJCQKcGFyYSAkbD4wJC4KCiMjIyMjICoqVkFSKHApKioKClVtYSBzw6lyaWUgdGVtcG9yYWwgbXVsdGl2YXJpYWRhICRcYm9sZHN5bWJvbHtyX3t0fX09KHJfezF0fSxyX3sydH0sLi4uLHJfe2t0fSleeyd9JCBjb21wb3N0YSBwb3IgJGskIGNvbXBvbmVudGVzIG5vIHRlbXBvICR0JCDDqSB1bSBwcm9jZXNzbyBWQVIgZGUgb3JkZW0gJHAkLCBvdSAkVkFSKHApJCwgc2UgcGFyYSAkcD4wJCBzZWd1ZSBvIG1vZGVsbzoKCgokJApcYm9sZHN5bWJvbHtyX3t0fX0gPSBcYm9sZHN5bWJvbHtccGhpfV97MH0gKyBcYm9sZHN5bWJvbHtcUGhpfV97MX1cYm9sZHN5bWJvbHtyX3t0LTF9fSArLi4uK1xib2xkc3ltYm9se1xQaGl9X3twfVxib2xkc3ltYm9se3J9X3t0LXB9ICsgIFxib2xkc3ltYm9se2Ffe3R9fQokJApvbmRlICRcYm9sZHN5bWJvbHtccGhpfV97MH0kIMOpIHVtIHZldG9yIGRlIGRpbWVuc8OjbyAkayQsICRcYm9sZHN5bWJvbHtcUGhpfV97an0kIHPDo28gbWF0cml6ZXMgJGsgXHRpbWVzIGskIHBhcmEgJGo9MSwuLi4scCQgZSAkXGJvbGRzeW1ib2x7YV97dH19JCDDqSB1bSBydcOtZG8gYnJhbmNvIGZvcm1hZG8gcG9yIHVtYSBzZXF1w6puY2lhIGRlIHZldG9yZXMgYWxlYXTDs3Jpb3MgaW5kZXBlbmRlbnRlcyBlIGlkZW50aWNhbWVudGUgZGlzdHJpYnXDrWRvcyBjb20gbcOpZGlhICQwJCBlIG1hdHJpeiBkZSBjb3ZhcmnDom5jaWEgJFxib2xkc3ltYm9se1xzdW1fe2F9fSQuIE5hIGxpdGVyYXR1cmEsIMOpIGZyZXF1ZW50ZW1lbnRlIGFzc3VtaWRvIHF1ZSAkXGJvbGRzeW1ib2x7YV97dH19JCBzZWd1ZSB1bWEgZGlzdHJpYnVpw6fDo28gTm9ybWFsIG11bHRpdmFyaWFkYSBlIHF1ZSBhIG1hdHJpeiAkXGJvbGRzeW1ib2x7XHN1bV97YX19JCDDqSBwb3NpdGl2YSBkZWZpbmlkYS4gCgpVdGlsaXphbmRvIHVtIG9wZXJhZG9yIGRlIGRlZmFzYWdlbSAkQiQsIHBvZGVtb3MgcmVlc2NyZXZlciBvIG1vZGVsbyBjb21vOgoKJCQKKFxib2xkc3ltYm9se0l9LVxib2xkc3ltYm9se1xQaGl9X3sxfUItLi4uLVxib2xkc3ltYm9se1xQaGl9X3twfUJee3B9KVxib2xkc3ltYm9se3J9X3t0fT1ccGhpXzArXGJvbGRzeW1ib2x7YX1fe3R9CiQkCm9uZGUgJFxib2xkc3ltYm9se0l9JCDDqSB1bWEgbWF0cml6IGlkZW50aWRhZGUgJGsgXHRpbWVzIGskLiBFc3RhIHJlcHJlc2VudGHDp8OjbyB0YW1iw6ltIHBvZGUgc2VyIHJlZXNjcml0YSBjb21vOgoKJCQKXGJvbGRzeW1ib2x7XFBoaX0oQilcYm9sZHN5bWJvbHtyfV97dH09XHBoaV8wK1xib2xkc3ltYm9se2F9X3t0fQokJApvbmRlICRcYm9sZHN5bWJvbHtcUGhpfShCKT1cYm9sZHN5bWJvbHtJfS1cYm9sZHN5bWJvbHtcUGhpfV97MX1CLS4uLi1cYm9sZHN5bWJvbHtcUGhpfV97cH1CXntwfSQgw6kgdW1hIG1hdHJpeiBwb2xpbm9taWFsLiBTZSAkXGJvbGRzeW1ib2x7cn1fe3R9JCDDqSBmcmFjYW1lbnRlIGVzdGFjaW9uw6FyaW8sIGVudMOjbyB0ZW1vczoKCiQkClxib2xkc3ltYm9se1xtdX0gPSAoXGJvbGRzeW1ib2x7SX0tXGJvbGRzeW1ib2x7XFBoaX1fezF9LS4uLi1cYm9sZHN5bWJvbHtcUGhpfV97cH0pXnstMX1cYm9sZHN5bWJvbHtccGhpfV8wCiQkCm9uZGUgJChcYm9sZHN5bWJvbHtJfS1cYm9sZHN5bWJvbHtcUGhpfV97MX0tLi4uLVxib2xkc3ltYm9se1xQaGl9X3twfSleey0xfSQgZGV2ZSBzZXIgbsOjbyBzaW5ndWxhciAoZGV0ZXJtaW5hbnRlIGRpZmVyZW50ZSBkZSB6ZXJvKSBwYXJhIHF1ZSBvIHZldG9yIGRlIG3DqWRpYXMgZXhpc3RhLiBGYXplbmRvICRcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7cl97dH19LVxib2xkc3ltYm9se1xtdX0kIG8gKipWQVIocCkqKiBzZSB0b3JuYToKCiQkClx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0fT1cYm9sZHN5bWJvbHtcUGhpfV97MX1cd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dC0xfSsuLi4rXGJvbGRzeW1ib2x7XFBoaX1fe3B9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtcH0rIFxib2xkc3ltYm9se2Ffe3R9fQokJAoKVXNhbmRvIGVzdGEgZXF1YcOnw6NvIGUgbyBtZXNtbyBwcm9jZXNzbyBhcGxpY2FkbyBuYXMgcHJvcHJpZWRhZGVzIGRlIGVzdGFjaW9uYXJpZWRhZGUgZG8gKipWQVIoMSkqKiwgb2J0ZW1vczoKCgoxLiAkQ292KFxib2xkc3ltYm9se3J9X3t0fSxcYm9sZHN5bWJvbHthfV97dH0pPVxib2xkc3ltYm9se1xzdW1fe2F9fSQgcXVlIMOpIGEgbWF0cml6IGRlIGNvdmFyacOibmNpYSBkZSAkXGJvbGRzeW1ib2x7YX1fe3R9JAoyLiAkQ292KFxib2xkc3ltYm9se2Ffe3R9fSxcYm9sZHN5bWJvbHtyX3t0LWx9fSk9XGJvbGRzeW1ib2x7MH0kIHBhcmEgJGw+MCQgCjMuICRcYm9sZHN5bWJvbHtcR2FtbWF9X3tsfSA9IFxib2xkc3ltYm9se1xQaGl9X3sxfVxib2xkc3ltYm9se1xHYW1tYX1fe2wtMX0rLi4uK1xib2xkc3ltYm9se1xQaGl9X3twfVxib2xkc3ltYm9se1xHYW1tYX1fe2wtcH0kIHBhcmEgJGw+MCQKCiMjIyMjICoqRVNUSU1Bw4fDg08qKgoKVW0gbW9kZWxvICoqVkFSKHApKiogcG9kZSBzZXIgZXN0aW1hZG8gcG9yIG3DrW5pbW9zIHF1YWRyYWRvcyBvcmRpbsOhcmlvcyAoTVFPKSwgbcOpdG9kbyBkYSBtw6F4aW1hIHZlcm9zc2ltaWxoYW7Dp2EgKE1WKSBvdSBwZWxvIHByb2NlZGltZW50byBiYXllc2lhbm8gZGUgZXN0aW1hw6fDo28uIEFxdWksIHZhbW9zIG1vc3RyYXIgYnJldmVtZW50ZSBjb21vIGZhemVyIHVzbyBkZSBNUU8gZSBNViBwYXJhIG9idGVyIG9zIHBhcsOibWV0cm9zIGRvIG1vZGVsbyAqKlZBUihwKSoqLgoKKiAqKk3DjU5JTU9TIFFVQURSQURPUyBPUkRJTsOBUklPUyoqCgpTdXBvbmhhIHF1ZSB0ZW1vcyBhIGFtb3N0cmEgJFxsZWZ0XHtcYm9sZHN5bWJvbHtyfV97dH18dD0xLCwuLi4sVCBccmlnaHRcfSQgcGFyYSBlc3RpbWFyIHVtIG1vZGVsbyAqKlZBUihwKSoqLiBPcyBwYXLDom1ldHJvcyBkZSBpbnRlcmVzc2Ugc8OjbyAkXGxlZnRce1xib2xkc3ltYm9se1xwaGl9X3swfSxcYm9sZHN5bWJvbHtcUGhpfV97MX0sLi4uLFxib2xkc3ltYm9se1xQaGl9X3twfSBccmlnaHRcfSQgZSAkXGJvbGRzeW1ib2x7XHN1bV97YX19JC4gUGFyYSBhIGVzdGltYcOnw6NvIHZpYSBNUU8sIG9zIGRhZG9zIGRpc3BvbsOtdmVpcyBzw6NvICR0PXArMSwuLi4sVCQgZSBhIGVxdWHDp8OjbyBhIHNlciBlc3RpbWFkYSDDqToKCiQkClxib2xkc3ltYm9se3Jfe3R9fSA9IFxib2xkc3ltYm9se1xwaGl9X3swfSArIFxib2xkc3ltYm9se1xQaGl9X3sxfVxib2xkc3ltYm9se3J9X3t0LTF9ICsuLi4rXGJvbGRzeW1ib2x7XFBoaX1fe3B9XGJvbGRzeW1ib2x7cn1fe3QtcH0gKyAgXGJvbGRzeW1ib2x7YV97dH19CiQkCm9uZGUgYSBtYXRyaXogZGUgY292YXJpw6JuY2lhIGRlICRcYm9sZHN5bWJvbHthX3t0fX0kIMOpICRcYm9sZHN5bWJvbHtcc3VtX3thfX0kLiBDb25zaWRlcmUgbyBjYXNvIGJpdmFyaWFkbyAoaXN0byDDqSwgJGs9MiQsICRcYm9sZHN5bWJvbHtyX3t0fX0gPSAocl97MXR9LHJfezJ0fSleeyd9JCBlICRcYm9sZHN5bWJvbHthX3t0fX09KGFfezF0fSxhX3sydH0pXnsnfSQpIGUgbyAgbW9kZWxvICRWQVIocCkkIHBvZGUgc2VyIGVzY3JpdG8gY29tbzoKCiQkClxiZWdpbnthbGlnbmVkfQpyX3sxdH0gPSBccGhpX3sxMH0gKyBccGhpX3sxMX1eezF9cl97MSx0LTF9KyBccGhpX3sxMn1eezF9cl97Mix0LTF9ICsuLi4rIFxwaGlfezExfV57cH1yX3sxLHQtcH0rIFxwaGlfezEyfV57cH1yX3syLHQtcH0gKyBhX3sxdH0gXFwKcl97MnR9ID0gXHBoaV97MjB9ICsgXHBoaV97MjF9XnsxfXJfezEsdC0xfSsgXHBoaV97MjJ9XnsxfXJfezIsdC0xfSArLi4uKyBccGhpX3syMX1ee3B9cl97MSx0LXB9KyBccGhpX3syMn1ee3B9cl97Mix0LXB9ICsgIGFfezJ0fSBcXApcZW5ke2FsaWduZWR9CiQkClF1ZSBlbSBmb3JtYXRvIG1hdHJpY2lhbCBwb2RlIHNlciBleHByZXNzbyBjb21vIGFiYWl4bzoKCiQkClxsZWZ0W1xiZWdpbnttYXRyaXh9IFxib2xkc3ltYm9se3J9X3sxfSBcXCBcYm9sZHN5bWJvbHtyfV97Mn0gXGVuZHttYXRyaXh9IFxyaWdodF0gPSBcbGVmdFsgXGJlZ2lue21hdHJpeH1cYm9sZHN5bWJvbHtYfV97MX0gXFwgXGJvbGRzeW1ib2x7MH0gXGVuZHttYXRyaXh9XGJlZ2lue21hdHJpeH0gXGJvbGRzeW1ib2x7MH0gXFwgXGJvbGRzeW1ib2x7WH1fezJ9IFxlbmR7bWF0cml4fSBccmlnaHRdIFxsZWZ0W1xiZWdpbnttYXRyaXh9IFxib2xkc3ltYm9se1xiZXRhfV97MX0gXFwgXGJvbGRzeW1ib2x7XGJldGF9X3syfSBcZW5ke21hdHJpeH0gXHJpZ2h0XSArIFxsZWZ0W1xiZWdpbnttYXRyaXh9IFxib2xkc3ltYm9se0F9X3sxfSBcXCBcYm9sZHN5bWJvbHtBfV97Mn0gXGVuZHttYXRyaXh9IFxyaWdodF0KJCQKb25kZSBwYXJhIGNhZGEgc8OpcmllIHRlbXBvcmFsIChubyBub3NzbyBjYXNvICRrPTEsMiQpIHRlcmVtb3M6CgokJApcYm9sZHN5bWJvbHtYfV97MX0gPSBcYm9sZHN5bWJvbHtYfV97Mn0gPSBcYmVnaW57Ym1hdHJpeH0KICAgIDEgJiByX3sxLHB9ICYgcl97MixwfSAmIC4uLiAmIHJfezEsMX0gJiByX3syLDF9IFxcCiAgICAxICYgcl97MSxwKzF9ICYgcl97MixwKzF9ICYgIC4uLiAmIHJfezEsMn0gJiByX3syLDJ9IFxcClx2ZG90cyAmIFx2ZG90cyAmIFx2ZG90cyAmIFx2ZG90cyAgJlx2ZG90cyAmIFx2ZG90cyBcXAogICAgMSAmIHJfezEsVC0xfSAmIHJfezIsVC0xfSAmIC4uLiAmIHJfezEsVC0xfSAmIHJfezIsVC0xfQogIFxlbmR7Ym1hdHJpeH0KJCQKZSAkXGJvbGRzeW1ib2x7cn1fe2t9PSBcbGVmdFtyX3trLHArMX0sIC4uLiwgcl97ayxUfVxyaWdodF1eeyd9JCwgJFxib2xkc3ltYm9se1xiZXRhfV9rID0gXGxlZnRbXGJlZ2lue21hdHJpeH0ge1xwaGl9X3sxMH0gJiB7XHBoaX1fe2sxfV57MX0gJiB7XHBoaX1fe2syfV57MX0gJiAuLi4gJiB7XHBoaX1fe2sxfV57cH0gJiB7XHBoaX1fe2syfV57cH0gXGVuZHttYXRyaXh9IFxyaWdodF1eeyd9JCBlICRcYm9sZHN5bWJvbHtBfV97a309IFxsZWZ0W2Ffe2sscCsxfSwgLi4uLCBhX3trLFR9XHJpZ2h0XV57J30kLgoKTm90ZSBxdWUgYXBsaWNhciBvIG3DqXRvZG8gZGUgbcOtbmltb3MgcXVhZHJhZG9zIG9yZGluw6FyaW9zIChNUU8pIHNvYnJlIGNhZGEgdW1hIGRhcyBlcXVhw6fDtWVzIGRvIG1vZGVsbyAqKlZBUihwKSoqIGdlcmFyw6EgcGFyYSBjYWRhIGVxdWHDp8OjbyAodXNhbmRvIGEgbm90YcOnw6NvIG1hdHJpY2lhbCBhbnRlcmlvcik6CgokJApcYm9sZHN5bWJvbHtcaGF0e1xiZXRhfX1fe2t9ID0gKFxib2xkc3ltYm9se1h9X3sxfV57J31cYm9sZHN5bWJvbHtYfV97MX0pXnstMX1cYm9sZHN5bWJvbHtYfV97MX1eeyd9XGJvbGRzeW1ib2x7cn1fe2t9CiQkCgp0YWwgZXN0aW1hZG9yIMOpIGNvbnNpc3RlbnRlIGUgYXNzaW50b3RpY2FtZW50ZSBlZmljaWVudGUuIEFsw6ltIGRpc3NvLCDDqSBpZ3VhbCBhbyBlc3RpbWFkb3Igb2J0aWRvIHBvciBtZWlvIGRvIG3DqXRvZG8gZGEgbcOheGltYSB2ZXJvc3NpbWlsaGFuw6dhIGNvbmRpY2lvbmFsLiBFbSBmdW7Dp8OjbyBkZSBlc3Rhcm1vcyBjb20gYXMgbWVzbWFzIHZhcmnDoXZlaXMgZXhwbGljYXRpdmFzIGVtIGNhZGEgZXF1YcOnw6NvIChvIHJldG9ybm8gZGUgY2FkYSBhdGl2byBjb21vIGZ1bsOnw6NvIGRlIHN1YXMgZGVmYXNhZ2VucyBlIGRhcyBkZWZhc2FnZW5zIGRvcyBvdXRyb3MgYXRpdm9zKSwgbyBlc3RpbWFkb3Igb2J0aWRvIGFvIGFwbGljYXIgbyBtw6l0b2RvIGRlIG3DrW5pbW9zIHF1YWRyYWRvcyBlbSBjYWRhIHVtYSBkYXMgZXF1YcOnw7VlcyBzZXBhcmFkYW1lbnRlIMOpIGVxdWl2YWxlbnRlIGFvIGVzdGltYWRvciBvYnRpZG8gcGVsbyBtw6l0b2RvIG11bHRpdmFyaWFkbyAodG9kYXMgYXMgZXF1YcOnw7VlcyBhbyBtZXNtbyB0ZW1wbykuIAoKTyBlc3RpbWFkb3IgZGUgbcOtbmltb3MgcXVhZHJhZG9zIHBhcmEgYSBtYXRyaXogZGUgY292YXJpw6JuY2lhIGRvcyBlcnJvcyBzZXLDoToKCiQkClxib2xkc3ltYm9se1xoYXR7XHN1bX1fYX0gPSBcZnJhY3sxfXtULXAgLSAoa3ArMSl9IFxzdW1fe3Q9cCsxfV57VH17XGJvbGRzeW1ib2x7XGhhdHthfV97dH19XGJvbGRzeW1ib2x7XGhhdHthfV97dH19XnsnfX0KJCQKb25kZSBvIGRlbm9taW5hZG9yIMOpIGEgYW1vc3RyYSBlZmV0aXZhIChkaXNwb27DrXZlbCBwYXJhIGVzdGltYcOnw6NvKSBtZW5vcyBvIG7Dum1lcm8gZGUgcGFyw6JtZXRyb3MgbmEgZXF1YcOnw6NvIHBhcmEgY2FkYSBzw6lyaWUgdGVtcG9yYWwgcXVlIGNvbXDDtWUgJFxib2xkc3ltYm9se3Jfe3R9fSQuCgoqICoqVkVST1NTSU1JTEhBTsOHQSBDT05ESUNJT05BTCoqCgpQYXJhIGVzdGltYcOnw6NvIGRvIG1vZGVsbyAqKlZBUihwKSoqIHZpYSBtw6F4aW1hIHZlb3Jzc2ltaWxoYW7Dp2EgYXNzdW1pbW9zIHF1ZSAkXGJvbGRzeW1ib2x7YX1fe3R9JCBzZWd1ZSB1bWEgZGlzdHJpYnVpw6fDo28gTm9ybWFsIG11bHRpdmFyaWFkYS4gRGVpeGUgJFxib2xkc3ltYm9se3J9X3toOnF9JCBkZW5vdGFyIGFzIG9ic2VydmHDp8O1ZXMgZGUgJHQ9aCQgYXTDqSAkdD1xJCAoaW5jbHVzaXZlKS4gQSBmdW7Dp8OjbyBkZSB2ZXJvc3NpbWlsaGFuw6dhIGNvbmRpY2lvbmFsIGRvcyBkYWRvcyBwb2RlIHNlciBlc2NyaXRhIGNvbW86CgokJApcYmVnaW57YWxpZ25lZH0KTFxsZWZ0KFxib2xkc3ltYm9se3J9X3socCsxKTpUfXxcYm9sZHN5bWJvbHtyfV97MTpwfSxcYm9sZHN5bWJvbHtcYmV0YX0sXGJvbGRzeW1ib2x7XHN1bX1fYVxyaWdodCkgPSAgJiBccHJvZF97dD1wKzF9XntUfXtwIFxsZWZ0KFxib2xkc3ltYm9se3J9X3t0fXxcYm9sZHN5bWJvbHtyfV97MToodC0xKX0sXGJvbGRzeW1ib2x7XGJldGF9LFxib2xkc3ltYm9se1xzdW19X2FccmlnaHQpfSBcXAo9ICYgXHByb2Rfe3Q9cCsxfV57VH17cCBcbGVmdChcYm9sZHN5bWJvbHthfV97dH18XGJvbGRzeW1ib2x7cn1fezE6KHQtMSl9LFxib2xkc3ltYm9se1xiZXRhfSxcYm9sZHN5bWJvbHtcc3VtfV9hXHJpZ2h0KX0gXFwKPSAmIFxwcm9kX3t0PXArMX1ee1R9e3AgXGxlZnQoXGJvbGRzeW1ib2x7YX1fe3R9fFxib2xkc3ltYm9se1xiZXRhfSxcYm9sZHN5bWJvbHtcc3VtfV9hXHJpZ2h0KX0gXFwKPSAmIFxmcmFjezF9eygyXHBpKV5cZnJhY3sxfXsyfVxsZWZ0fCBcYm9sZHN5bWJvbHtcc3VtfV9hIFxyaWdodHxee1xmcmFjezF9ezJ9fX0gZXhwIFxsZWZ0W1xmcmFjey0xfXsyfVxib2xkc3ltYm9se2F9X3t0fXsnfVxib2xkc3ltYm9se1xzdW19X2EgXGJvbGRzeW1ib2x7YX1fe3R9XHJpZ2h0XSBcXApcZW5ke2FsaWduZWR9CiQkCmUgbyBsb2dhcml0bW8gZGEgdmVyb3NzaW1pbGhhbsOnYSBjb25kaWNpb25hbCBzZSB0b3JuYToKCiQkClxsbiBMIFxsZWZ0KFxib2xkc3ltYm9se1xiZXRhfSxcYm9sZHN5bWJvbHtcc3VtfV9hXHJpZ2h0KSA9IGMgLSBcZnJhY3tULXB9ezJ9bG9nXGxlZnQoXGxlZnR8IFxib2xkc3ltYm9se1xzdW19X2FccmlnaHR8XHJpZ2h0KS1cZnJhY3sxfXsyfVxzdW1fe3Q9cCsxfV57VH17dHJcbGVmdChcYm9sZHN5bWJvbHthfV97dH17J31cYm9sZHN5bWJvbHtcc3VtfV9hIFxib2xkc3ltYm9se2F9X3t0fVxyaWdodCl9CiQkCkFzc2ltLCBhcGxpY2FuZG8gdGFsIGZ1bsOnw6NvIGRlIHZlcm9zc2ltaWxoYW7Dp2EgY29uZGljaW9uYWwgYW9zIGRhZG9zIGRvIHByb2JsZW1hIGVuY29udHJlbW9zIGFzIGVzdGltYXRpdmFzIHBhcmEgbyB2ZXRvciBkZSBwYXLDom1ldHJvcyAkXGJvbGRzeW1ib2x7XGhhdHtcYmV0YX19JCBlICRcYm9sZHN5bWJvbHtcaGF0e1xzdW19X2F9JCBxdWUgbWF4aW1pemFtIG8gbG9nYXJpdG1vIGRhIHZlcm9zc2ltaWxoYW7Dp2EgY29uZGljaW9uYWwuCgojIyMjIyAqKkRFRklOSU5ETyBBIE9SREVNIHAgRE8gTU9ERUxPOioqCgpKw6Egc2FiZW1vcyBkYSBlZmV0aXZpZGFkZSBkb3MgY3JpdMOpcmlvcyBkZSBpbmZvcm1hw6fDo28gcGFyYSBzZWxlY2lvbmFyIHVtIG1vZGVsbyBlc3RhdMOtc3RpY28uIEJhc2ljYW1lbnRlLCB0b2RvcyBvcyBjcml0w6lyaW9zIGRlIGluZm9ybWHDp8OjbyBzw6NvIGJhc2VhZG9zIGVtIHZlcm9zc2ltaWxoYW7Dp2EgZSBjb25zaXN0ZW0gZGUgZG9pcyBjb21wb25lbnRlcy4gCgpPIHByaW1laXJvIGVzdMOhIHJlbGFjaW9uYWRvIGNvbSBhIHF1YWxpZGFkZSBkbyBhanVzdGUgZG8gbW9kZWxvIGVucXVhbnRvIG8gc2VndW5kbyBwZW5hbGl6YSBtb2RlbG9zIGNvbXBsaWNhZG9zIChtdWl0b3MgcGFyw6JtZXRyb3MgYSBzZXJlbSBlc3RpbWFkb3MpLiBBIHF1YWxpZGFkZSBkbyBhanVzdGUgZGUgdW0gbW9kZWxvIMOpIGZyZXF1ZW50ZW1lbnRlIG1lZGlkbyBwZWxhIG3DoXhpbWEgdmVyb3NzaW1pbGhhbsOnYS4gCgpUcsOqcyBjcml0w6lyaW9zIHPDo28gY29tdW1lbnRlIHVzYWRvcyBwYXJhIGRldGVybWluYXIgYSBvcmRlbSBkZSB1bSBtb2RlbG8gKipWQVIocCkqKi4gQXNzdW1pbmRvIHF1ZSAkXGJvbGRzeW1ib2x7YV97dH19JCBzZWd1ZSB1bWEgZGlzdHJpYnVpw6fDo28gTm9ybWFsIG11bHRpdmFyaWFkYSwgZXNzZXMgdHLDqnMgY3JpdMOpcmlvcyBwYXJhIHVtICoqVkFSKGwpKiogc8OjbzoKCiQkCkFJQyhsKT0gXGxuIFxsZWZ0fCBcYm9sZHN5bWJvbHtcaGF0e1xzdW19X3thLGx9fSBccmlnaHR8ICsgXGZyYWN7Mn17VH1sa157Mn0KJCQKCiQkCkJJQyhsKT0gXGxuIFxsZWZ0fCBcYm9sZHN5bWJvbHtcaGF0e1xzdW19X3thLGx9fSBccmlnaHR8ICsgXGZyYWN7XGxuKFQpfXtUfWxrXnsyfQokJAokJApIUShsKT0gXGxuIFxsZWZ0fCBcYm9sZHN5bWJvbHtcaGF0e1xzdW19X3thLGx9fSBccmlnaHR8ICsgXGZyYWN7MlxsbltcbG4oVCldfXtUfWxrXnsyfQokJAoKb25kZSAkVCQgw6kgbyB0YW1hbmhvIGRhIGFtb3N0cmEsICRsJCBhIGRlZmFzYWdlbSBkbyBtb2RlbG8gZSAkXGJvbGRzeW1ib2x7XGhhdHtcc3VtfX1fe2EsbH0kIMOpIGEgZXN0aW1hdGl2YSBkZSBtw6F4aW1hIHZlcm9zc2ltaWxoYW7Dp2EgcGFyYSAkXGJvbGRzeW1ib2x7XHN1bX1fe2F9JCBxdWUgw6kgYSBtYXRyaXogZGUgdmFyacOibmNpYXMgZSBjb3ZhcmnDom5jaWFzIGRvcyByZXPDrWR1b3MuIEVucXVhbnRvIG8gY3JpdMOpcmlvIEFJQyBwZW5hbGl6YSBjYWRhIHBhcsOibWV0cm8gcG9yIHVtIGZhdG9yICQyJCwgQklDIGUgSFEgYXBsaWNhbSB1bWEgcGVuYWxpZGFkZSBxdWUgZGVwZW5kZSBkbyB0YW1hbmhvIGRhIGFtb3N0cmEuIFBvZGVtb3Mgc2VndWlyIG8gc2VndWludGUgcHJvY2Vzc286CgoxLiBFc3RpbWFyIGRpdmVyc29zIG1vZGVsb3MgVkFSIGNvbSBkaWZlcmVudGVzIHZhbG9yZXMgcGFyYSAkcCQgcG9yIG1laW8gZG8gbcOpdG9kbyBkZSBtw6F4aW1hIHZlcm9zc2ltaWxoYW7Dp2EgY29uZGljaW9uYWw7CjIuIEVzY29saGVyIGRlbnRyZSBvcyBtb2RlbG9zIGFxdWVsZSBxdWUgYXByZXNlbnRlIG1lbm9yIHZhbG9yIHBhcmEgYWxndW0gY3JpdMOpcmlvIGRlIGludGVyZXNzZS4KCiMjIyMjICoqRElBR07Dk1NUSUNPIERPIE1PREVMTyBFU1RJTUFETzoqKgoKQ29tbyBqw6Egdmltb3Mgbm8gY2FzbyB1bml2YXJpYWRvLCB2ZXJpZmljYXIgbyBtb2RlbG8gdGFtYsOpbSBjb25oZWNpZG8gY29tbyBhbmFsaXNhciBvcyByZXPDrWR1b3MgdGVtIHVtIHBhcGVsIGltcG9ydGFudGUgbmEgY29uc3RydcOnw6NvIGRlIHVtIG1vZGVsbyBlY29ub23DqXRyaWNvLiBPcyBwcmluY2lwYWlzIG9iamV0aXZvcyBkZXN0YSBhbsOhbGlzZSBzw6NvIGdhcmFudGlyIHF1ZSBvIG1vZGVsbyBhanVzdGFkbyDDqSBhZGVxdWFkby4KClRpcGljYW1lbnRlLCB1bSBtb2RlbG8gYWp1c3RhZG8gw6kgZGl0byBzZXIgYWRlcXVhZG8gc2U6CgoxLiBUb2RvcyBvcyBwYXLDom1ldHJvcyBlc3RpbWFkb3Mgc8OjbyBlc3RhdMOtc3RpY2FtZW50ZSBzaWduaWZpY2FudGVzCiAgICAqIE8gb2JqZXRpdm8gw6kgZWxpbWluYXIgZG8gbW9kZWxvIHBhcsOibWV0cm9zIHF1ZSBuw6NvIHPDo28gZXN0YXTDrXN0aWNhbWVudGUgc2lnbmlmaWNhbnRlcy4gU2UgYWxndW1hIHZhcmnDoXZlbCBuw6NvIEdyYW5nZXItY2F1c2EgYXMgb3V0cmFzIHZhcmnDoXZlaXMsIHBvZGVtb3MgZW5jb250cmFyIGNvZWZpY2llbnRlcyBudWxvcy4gQWzDqW0gZGlzc28sIG9zIGRhZG9zIG7Do28gcG9kZW0gc2VyIHJpY29zIG8gc3VmaWNpZW50ZSBwYXJhIGZvcm5lY2VyIGVzdGltYXRpdmFzIHByZWNpc2FzLiAKICAgICogQXNzaW0sIHNpbXBsaWZpY2Ftb3MgbyBtb2RlbG8gVkFSIGVzdGltYWRvIHVzYW5kbywgcG9yIGV4ZW1wbG8sIG8gY3JpdMOpcmlvIGRlIG1hbnRlciBhcGVuYXMgcGFyw6JtZXRyb3MgcXVlIHPDo28gZXN0YXTDrXN0aWNhbWVudGUgc2lnbmlmaWNhbnRlcyBhbyBuw612ZWwgZGUgNVwlLgoyLiBPcyByZXPDrWR1b3MgbsOjbyBhcHJlc2VudGFtIGF1dG9jb3JyZWxhw6fDo28gc2VyaWFsLCBjb3JyZWxhw6fDo28gY3J1emFkYSBvdSBoZXRlcm9jZWRhc3RpY2lkYWRlIGNvbmRpY2lvbmFsCiAgICAqIE9zIHJlc8OtZHVvcyBkZSB1bSBtb2RlbG8gYWRlcXVhZG8gZGV2ZXLDrWFtIHNlIGNvbXBvcnRhciBjb21vIHVtIHJ1w61kbyBicmFuY28uIFBhcmEgdmVyaWZpY2FyIGEgYXV0b2NvcnJlbGHDp8OjbyBzZXJpYWwgcG9kZW1vcyBmYXplciB1c28gZG9zIGdyw6FmaWNvcyBkYSBGQUMgZSBGQUNQIGRvcyByZXPDrWR1b3MgZGUgY2FkYSBlcXVhw6fDo28gZG8gbW9kZWxvIGVzdGltYWRvLiBPIGlkZWFsIMOpIG7Do28gdGVyIGRlZmFzYWdlbnMgc2lnbmlmaWNhdGl2YXMuIAogICAgKiBKw6EgYSBjb3JyZWxhw6fDo28gY3J1emFkYSBwb2RlIHNlciB2aXN1YWxpemFkYSBwb3IgbWVpbyBkZSBncsOhZmljbyBvdSB2aWEgdGVzdGUgZXN0YXTDrXN0aWNvIChjb25mb3JtZSBleHBsaWNhZG8gbmVzdGUgW2xpbmtdKGh0dHBzOi8vcnB1YnMuY29tL2h1ZHNvbmNoYXZzL211bHRpc2VyaWVzKSkuCiAgICAqIEEgcHJlc2Vuw6dhIGRlIGhldGVyb2NlZGFzdGljaWRhZGUgY29uZGljaW9uYWwgdmllc2EgYSBhbsOhbGlzZSBkYWRvIHF1ZSBow6EgbyBwcmVzc3Vwb3N0byBxdWUgYSB2YXJpw6JuY2lhIGRvIHRlcm1vIGRlIGVycm8gZGUgY2FkYSBlcXVhw6fDo28gZG8gbW9kZWxvIHNlamEgY29uc3RhbnRlLiBBIHZlcmlmaWNhw6fDo28gZGEgaGV0ZXJvY2VkYXN0aWNpZGFkZSBjb25kaWNpb25hbCBwb2RlIHNlciBmZWl0YSBwZWxvIGdyw6FmaWNvIGRhIEZBQyBkbyBxdWFkcmFkbyBkb3MgcmVzw61kdW9zIGRlIGNhZGEgZXF1YcOnw6NvLgozLiBBbmFsaXNhciBhIGVzdGFiaWxkaWFkZSBkbyBtb2RlbG8gZXN0aW1hZG8gYXRyYXbDqXMgZG9zIGF1dG92YWxvcmVzIGFzc29jaWFkb3MgYW8gbWVzbW86CiAgICAqIEVtIG3Ds2R1bG8gb3MgYXV0b3ZhbG9yZXMgZG8gbW9kZWxvIHByZWNpc2FtIHNlciBtZW5vcmVzIHF1ZSAxIHBhcmEgcXVlIG8gbW9kZWxvIHNlamEgZXN0YWNpb27DoXJpbwogICAgKiBOw6NvIHBvZGVtb3MgY29uZnVuZGlyIGEgZXN0YWNpb25hcmllZGFkZSBkbyBtb2RlbG8gY29tIGEgZXN0YWNpb25hcmllZGFkZSBpbmRpdmlkdWFsIGRhcyBzw6lyaWVzCjQuIE9zIHJlc8OtZHVvcyBuw6NvIHZpb2xhbSBhIGhpcMOzdGVzZSBkZSBkaXN0cmlidWnDp8OjbywgcG9yIGV4ZW1wbG8sIE5vcm1hbC4KCiMjIyMjICoqQ0FVU0FMSURBREUgREUgR1JBTkdFUjoqKgoKQGdyYW5nZXIxOTY5aW52ZXN0aWdhdGluZyBpbnRyb2R1eml1IG8gY29uY2VpdG8gZGUgY2F1c2FsaWRhZGUsIHF1ZSDDqSBmw6FjaWwgZGUgaW5zZXJpciBhIHBhcnRpciBkZSB1bSBtb2RlbG8gVkFSLiBDb25zaWRlcmUgbyBjYXNvIGRlIHVtYSBzw6lyaWUgdGVtcG9yYWwgYml2YXJpYWRhIGUgYSBwcmV2aXPDo28gJGgkIHBhc3NvcyDDoCBmcmVudGUuIE5lc3RlIGNhc28sIHBvZGVtb3MgdXNhciBvIG1vZGVsbyBWQVIgZSBvIG1vZGVsbyB1bml2YXJpYWRvIHBhcmEgY2FkYSBjb21wb25lbnRlIGUgcHJvZHV6aXIgYXMgcHJldmlzw7Vlcy4gCgpEaXplbW9zIHF1ZSAkcl97MXR9JCBjYXVzYSAkcl97MnR9JCBzZSBhIHByZXZpc8OjbyBiaXZhcmlhZGEgZGUgJHJfezJ0fSQgdGVtIG1haW9yIGFjdXLDoWNpYSBkbyBxdWUgYSBwcmV2aXPDo28gdW5pdmFyaWFkYS4gRW0gb3V0cmFzIHBhbGF2cmEsIHNvYnJlIGEgYWJvcmRhZ2VtIGRlIEBncmFuZ2VyMTk2OWludmVzdGlnYXRpbmcsIGRpemVtb3MgcXVlICRyX3sxdH0kIGNhdXNhICRyX3sydH0kIHNlIGFzIGluZm9ybWHDp8O1ZXMgcGFzc2FkYXMgZGUgJHJfezF0fSQgYXVtZW50YW0gYSBhY3Vyw6FjaWEgZGEgcHJldmlzw6NvIGRlICRyX3sydH0kIGVtIHJlbGHDp8OjbyBhIHByZXZpc8OjbyBvYnRpZGEgcG9yIG1laW8gZGUgdW0gbW9kZWxvIHVuaXZhcmlhZG8gcGFyYSAkcl97MnR9JC4KClBvcsOpbSwgbyB0ZXN0ZSBuw6NvIGluZm9ybWEgbmFkYSBhIHJlc3BlaXRvIGRlIGNhdXNhbGlkYWRlIGVtIHRlcm1vcyBsaXRlcmFpcywgbWFzIG9mZXJlY2UgZXZpZMOqbmNpYXMgZXN0YXTDrXN0aWNhcyBkZSBxdWUgb3NjaWxhw6fDtWVzIHBhc3NhZGFzIGRlIHVtYSB2YXJpw6F2ZWwgZXN0w6NvIGNvcnJlbGFjaW9uYWRhcyBjb20gYXMgZGUgb3V0cmEgdmFyacOhdmVsLgoKRW0gdW0gc2lzdGVtYSBiaXZhcmlhZG8sIHRlc3RhciBzZSAkcl97MnR9JCBHcmFuZ2VyLWNhdXNhICRyX3sxdH0kIGVxdWl2YWxlIGEgZXN0aW1hciBzZSBwYXJhIGEgZXF1YcOnw6NvIGFiYWl4bywgJFxiZXRhX3syLHQtaX09MCQgcGFyYSBxdWFscXVlciAkaT0xLC4uLixrJC4KCiQkCnJfezF0fSA9IFxtdV8xICsgXGJldGFfezEsdC0xfXJfezEsdC0xfSsuLi4rXGJldGFfezEsdC1wfXJfezEsdC1wfStcYmV0YV97Mix0LTF9cl97Mix0LTF9Ky4uLitcYmV0YV97Mix0LWt9cl97Mix0LWt9K1x2YXJlcHNpbG9uX3sxLHR9CiQkCkFzc2ltLCB0ZW1vcyBvIHNlZ3VpbnRlIHRlc3RlIEYgY29udmVuY2lvbmFsIChwYXJhIHF1YWxxdWVyICRpPTEsLi4uLGskKToKCiQkClxiZWdpbnthbGlnbmVkfQomIEhfezB9OiBcYmV0YV97Mix0LWl9PTAgJnJfezJ0fX5cdGV4dHtuw6NvIEdyYW5nZXItY2F1c2F9fnJfezF0fSBcXAomIEhfezF9OiBcYmV0YV97Mix0LWl9XG5lcTAgJnJfezJ0fX5cdGV4dHtHcmFuZ2VyLWNhdXNhfX5yX3sxdH0KXGVuZHthbGlnbmVkfQokJAoKQmFzaWNhbWVudGUsIHZlcmlmaWNhbW9zIG8gcC12YWxvciBkYSBlc3RhdMOtc3RpY2EgZGUgdGVzdGUgZSBkZWNpZGltb3Mgc2UgcmVqZWl0YW1vcyBvdSBhY2VpdGFtb3MgYSBoaXDDs3Rlc2UgbnVsYS4gVGFsIHRlc3RlIMOpIHJlYWxpemFkbyBhcMOzcyBhIGVzdGltYcOnw6NvIGRlIHVtIG1vZGVsbyBWQVIuIEFsw6ltIGRvIG9iamV0aXZvIHByb3Bvc3RvIHBlbG8gdGVzdGUsIHBvZGVtb3MgdXRpbGl6w6EtbG8gYXDDs3MgZXN0aW1hciB1bSBtb2RlbG8gVkFSIGUgdmVyaWZpY2FyIHF1ZSBow6EgZGVmYXNhZ2VucyBuw6NvIGVzdGF0w61zdGljYW1lbnRlIHNpZ25pZmljYW50ZXMgZSBhc3NpbSwgZGVjaWRpciBwb3IgcmV0aXLDoS1sYXMgb3UgbsOjbyBkZSBhbGd1bWEgZXF1YcOnw6NvIGRvIG1vZGVsbyBWQVIuIAoKIyMjIyMgKipGVU7Dh8ODTyBJTVBVTFNPLVJFU1BPU1RBOioqCgpFc3RhIGZ1bsOnw6NvIG1vc3RyYSBvcyBlZmVpdG9zIGRlIGNob3F1ZXMgbmFzIHZhcmnDoXZlaXMgZG8gc2lzdGVtYSBlIHBvc3NpYmlsaXRhIGNhbGN1bGFyIG8gaW1wYWN0byAoc2luYWwgZSBtYWduaXR1ZGUpIGRpbsOibWljbyBkZSBtdWRhbsOnYSBlbSB1bWEgdmFyacOhdmVsIHNvYnJlIGVsYSBlIGFzIGRlbWFpcyB2YXJpw6F2ZWlzIGRvIG1vZGVsbyBhbyBsb25nbyBkbyB0ZW1wby4gQXNzaW0sIHByb2N1cmEtc2UgbWVkaXIgbyBlZmVpdG8gZGUgdW0gY2hvcXVlIHVuaXTDoXJpbyBlbSB1bWEgdmFyacOhdmVsIG5vIHBlcsOtb2RvICR0JCBzb2JyZSB0b2RhcyBhcyB2YXJpw6F2ZWlzIGVtIHBlcsOtb2RvcyBzdWJzZXF1ZW50ZXMuIAoKT3MgY29lZmljaWVudGVzIGRhIGZ1bsOnw6NvIGltcHVsc28tcmVzcG9zdGEgc8OjbyBvcyBjb2VmaWNpZW50ZXMgb2J0aWRvcyBwb3IgbWVpbyBkYSBpbnZlcnPDo28gZG8gKipWQVIocCkqKiBlbSB1bSAqKk1vZGVsbyBWZXRvcmlhbCBkZSBNw6lkaWFzIE3Ds3ZlaXMqKiwgVk1BKCRcaW5mdHkkKS4gU2VqYSB1bSAqKlZBUigxKSoqIGNvbSB2YXJpw6F2ZWlzIG1lZGlkYXMgZW0gdGVybW9zIGRlIGRlc3Zpb3MgZGFzIG3DqWRpYXMsIG91IHNlamEsICRcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7cl97dH19LVxib2xkc3ltYm9se1xtdX0kOgoKJCQKXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9PVxib2xkc3ltYm9se1xQaGl9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtMX0rXGJvbGRzeW1ib2x7YV97dH19CiQkCkVzdGEgZm9ybXVsYcOnw6NvIMOpIGFwZW5hcyB1bWEgZm9ybWEgZGlmZXJlbnRlIGRlIGVzY3JldmVyIG8gbW9kZWxvICoqVkFSKDEpKiogZGVmaW5pZG8gbm8gaW7DrWNpbyBkbyB0ZXh0by4gU3Vic3RpdHVpbmRvICRcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dC0xfSQgcmVjdXJzaXZhbWVudGUsIHByb2R1ejoKCiQkClxiZWdpbnthbGlnbmVkfQomIFx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0fT1cYm9sZHN5bWJvbHtcUGhpfShcYm9sZHN5bWJvbHtcUGhpfVx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0LTJ9K1xib2xkc3ltYm9se2F9X3t0LTF9KStcYm9sZHN5bWJvbHthfV97dH1cXCAKJiBcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7XFBoaX1eezJ9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtMn0rXGJvbGRzeW1ib2x7XFBoaX1cYm9sZHN5bWJvbHthfV97dC0xfStcYm9sZHN5bWJvbHthfV97dH1cXCAKJiBcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dH09XGJvbGRzeW1ib2x7XFBoaX1eezJ9KFxib2xkc3ltYm9se1xQaGl9XHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3QtM30rXGJvbGRzeW1ib2x7YX1fe3QtMn0pK1xib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YX1fe3QtMX0rXGJvbGRzeW1ib2x7YX1fe3R9XFwgCiYgXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9PVxib2xkc3ltYm9se1xQaGl9XnszfVx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0LTN9K1xib2xkc3ltYm9se1xQaGl9XnsyfVxib2xkc3ltYm9se2F9X3t0LTJ9K1xib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YX1fe3QtMX0rXGJvbGRzeW1ib2x7YX1fe3R9XFwgCiYgXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9PVxib2xkc3ltYm9se2Ffe3R9fSArIFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YX1fe3QtMX0gKyBcYm9sZHN5bWJvbHtcUGhpfV57Mn1cYm9sZHN5bWJvbHthfV97dC0yfSArIFxib2xkc3ltYm9se1xQaGl9XnszfVxib2xkc3ltYm9se2F9X3t0LTN9Ky4uLiBcXAomIFx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0fSA9IFxzdW1fe2k9MH1ee3QtMX17XGJvbGRzeW1ib2x7XFBoaX1ee2l9XGJvbGRzeW1ib2x7YX1fe3QtaX19fn5cdGV4dHtzZW5kb31+XGJvbGRzeW1ib2x7XFBoaX1eezB9PVxib2xkc3ltYm9se0l9ClxlbmR7YWxpZ25lZH0KJCQKCnF1ZSDDqSBhIGludmVyc8OjbyBkbyAqKlZBUigxKSoqIGVtIHVtICoqVk1BKCRcaW5mdHkkKSoqLiBBIGludGVycHJldGHDp8OjbyBkYSBmdW7Dp8OjbyBkZSBpbXB1bHNvLXJlc3Bvc3RhIMOpIGRhZGEgcG9yOgoKJCQKXGZyYWN7XHBhcnRpYWwgXGJvbGRzeW1ib2x7cl97dH19fXtccGFydGlhbCBcYm9sZHN5bWJvbHthX3t0LWl9fX0gPSBcYm9sZHN5bWJvbHtcUGhpfV57aX0KJCQKZW0gcXVlIG8gZWxlbWVudG8gJChtLG4pJCBkZSAkXFBoaV57aX0kIG1vc3RyYSBvIGVmZWl0byBkZSB1bWEgdW5pZGFkZSBkZSBhdW1lbnRvIG5vIGVycm8gZGEgdmFyacOhdmVsICRuJCBubyB0ZW1wbyAkdCQgc29icmUgYSB2YXJpw6F2ZWwgJG0kIG5vIHRlbXBvICR0K2kkLCBtYW50ZW5kby1zZSBjb25zdGFudGUgdG9kb3Mgb3Mgb3V0cm9zIGVycm9zLiBTZSBhcyB2YXJpw6F2ZWlzIGVzdMOjbyBtZWRpZGFzIG5vcyBsb2dhcsOtdG1vcyBvcyB2YWxvcmVzIGRhIGZ1bsOnw6NvIGltcHVsc28tcmVzcG9zdGEgcG9kZW0gc2VyIGludGVycHJldGFkb3MgY29tbyBlbGFzdGljaWRhZGVzLiBOb3JtYWxtZW50ZSBhIGFuw6FsaXNlIGRhIGZ1bsOnw6NvIGltcHVsc28tcmVzcG9zdGEgc2UgcHJlbmRlIGFvIHZhbG9yIGRhIHJlc3Bvc3RhIGFvIGNob3F1ZSB1bml0w6FyaW8sIGFvIHNpbmFsIGUgcXVhbnRvcyBwZXLDrW9kb3MgbGV2YSBwYXJhIG8gZWZlaXRvIGRvIGNob3F1ZSBkZXNhcGFyZWNlci4gUGFyYSB1bSBWQVIgZXN0w6F2ZWwgZXN0YSBmdW7Dp8OjbyBldmVudHVhbG1lbnRlIGRlc2NyZXNjZSBhdMOpIGF0aW5naXIgemVyby4KClBvciBleGVtcGxvLCBwYXJhIHVtIHNpc3RlbWEgY29uc2lzdGluZG8gZGUgdGF4YSBkZSBpbmZsYcOnw6NvICRcbGVmdChyX3sxdH1ccmlnaHQpJCBlIHRheGEgZGUganVyb3MgJFxsZWZ0KHJfezJ0fVxyaWdodCkkLCBvIGVmZWl0byBkZSB1bSBhdW1lbnRvIG5hIHRheGEgZGUgaW5mbGHDp8OjbyBwb2RlIHNlciBkZSBpbnRlcmVzc2UuIE5vIG11bmRvIHJlYWwsIHRhbCBpbmNyZW1lbnRvIG91IGNob3F1ZSBwb2RlIHNlciBleG9nZW5lYW1lbnRlIG9yaWdpbmFkbyBmb3JhIGRvIHNpc3RlbWEgcG9yIGV2ZW50b3MgY29tbyBhIGdyZXZlIGRvcyBjYW1pbmhvbmVpcm9zLiBBc3NpbSwgc3Vwb25oYSBvIHNpc3RlbWE6CgokJApcYm9sZHN5bWJvbHtyX3t0fX0gPSBcbGVmdFtcYmVnaW57bWF0cml4fSByX3sxdH0gXFwgcl97MnR9IFxlbmR7bWF0cml4fSBccmlnaHRdCiQkCmUgcXVlIG9jb3JyZXUgdW0gY2hvcXVlIG5hIGluZmxhw6fDo28uIFBhcmEgaXNvbGFyIHRhbCBlZmVpdG8sIHN1cG9uaGEgcXVlIG9zIGp1cm9zIGJlbSBjb21vIGEgaW5mbGHDp8OjbyBhc3N1bWVtIHNldSB2YWxvciBtw6lkaW8gYW50ZXMgZGUgJHQ9MCQsIG91IHNlamEsIHF1ZSAkXGJvbGRzeW1ib2x7cl97dH19ID0gXGJvbGRzeW1ib2x7XG11fSQgcGFyYSAkdCA8IDAkLiBPIGF1bWVudG8gbmEgaW5mbGHDp8OjbyBwb3IgdW1hIHVuaWRhZGUgbm8gcGVyw61vZG8gJHQ9MCQgc2Vyw6EgJGFfezEwfT0xJC4KCkFnb3JhLCBwb2RlbW9zIG1hcGVhciBvIHF1ZSBhY29udGVjZSBjb20gbyBzaXN0ZW1hIGR1cmFudGUgb3MgcGVyw61vZG9zICR0PTEsMiwuLi4kIHNlIG5lbmh1bSBvdXRybyBjaG9xdWUgb2NvcnJlciwgb3Ugc2VqYSwgJFxib2xkc3ltYm9se2F9X3syfT0uLi49XGJvbGRzeW1ib2x7YX1fe3R9PVxib2xkc3ltYm9sezB9JC4gQWzDqW0gZGlzc28sIHNlIGFzc3VtaXJtb3MgcXVlIGFzIGR1YXMgdmFyacOhdmVpcyB0ZW0gbcOpZGlhIGlndWFsIGEgemVybyAoJFxwaGlfezB9PTAkKSBlIHF1ZSBzw6NvIG1vZGVsYWRhcyBwb3IgdW0gJFZBUigxKSQgcXVlIHBvZGUgc2VyIGVzY3JpdG8gY29tbzoKCiQkClxib2xkc3ltYm9se3J9X3t0fT1cYm9sZHN5bWJvbHtcUGhpfVxib2xkc3ltYm9se3J9X3t0LTF9K1xib2xkc3ltYm9se2Ffe3R9fQokJApTdXBvbmRvIHF1ZSBqw6EgY29uaGVjZW1vcyBhIG1hdHJpeiAkXGJvbGRzeW1ib2x7XFBoaX0kLCBvIG1vZGVsbyDDqSByZWVzY3JpdG8gY29tbzoKCiQkClxib2xkc3ltYm9se3Jfe3R9fSA9IFxsZWZ0W1xiZWdpbnttYXRyaXh9IHJfezF0fSBcXCByX3sydH0gXGVuZHttYXRyaXh9IFxyaWdodF0gPSBcbGVmdFsgXGJlZ2lue21hdHJpeH0wLjUgXFwgMC4xIFxlbmR7bWF0cml4fVxiZWdpbnttYXRyaXh9IDAgXFwgMC4xIFxlbmR7bWF0cml4fSBccmlnaHRdIFxsZWZ0W1xiZWdpbnttYXRyaXh9IHtyfV97MSx0LTF9IFxcIHtyfV97Mix0LTF9IFxlbmR7bWF0cml4fSBccmlnaHRdICsgXGxlZnRbXGJlZ2lue21hdHJpeH0ge2F9X3sxdH0gXFwge2F9X3sydH0gXGVuZHttYXRyaXh9IFxyaWdodF0KJCQKCkFkaWNpb25hbmRvIG5vIHNpc3RlbWEgdW0gY2hvcXVlIHVuaXTDoXJpbyBuYSBwcmltZWlyYSB2YXJpw6F2ZWwgKGluZmxhw6fDo28pIGVtICR0PTAkLCB0ZW1vczoKCiQkClxib2xkc3ltYm9se3JfezB9fSA9IFxsZWZ0W1xiZWdpbnttYXRyaXh9IHJfezEwfSBcXCByX3syMH0gXGVuZHttYXRyaXh9IFxyaWdodF0gPSBcbGVmdFtcYmVnaW57bWF0cml4fSAxIFxcIDAgXGVuZHttYXRyaXh9IFxyaWdodF0KJCQKCiQkClxib2xkc3ltYm9se3JfezF9fSA9IFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7cn1fezB9ICBcUmlnaHRhcnJvdyAgXGxlZnRbXGJlZ2lue21hdHJpeH0gcl97MTF9IFxcIHJfezIxfSBcZW5ke21hdHJpeH0gXHJpZ2h0XSAgPSBcbGVmdFsgXGJlZ2lue21hdHJpeH0wLjUgXFwgMC4xIFxlbmR7bWF0cml4fVxiZWdpbnttYXRyaXh9IDAgXFwgMC4xIFxlbmR7bWF0cml4fSBccmlnaHRdXGxlZnRbXGJlZ2lue21hdHJpeH0gMSBcXCAwIFxlbmR7bWF0cml4fSBccmlnaHRdID0gXGxlZnRbXGJlZ2lue21hdHJpeH0gMC41IFxcIDAuMSBcZW5ke21hdHJpeH0gXHJpZ2h0XQokJAoKCiQkClxib2xkc3ltYm9se3JfezJ9fSA9IFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7cn1fezF9ID0gXGJvbGRzeW1ib2x7XFBoaX1cYm9sZHN5bWJvbHtcUGhpfVxib2xkc3ltYm9se3J9X3swfSA9IFxib2xkc3ltYm9se1xQaGl9XjJcYm9sZHN5bWJvbHtyfV97MH0gXFJpZ2h0YXJyb3cgIFxsZWZ0W1xiZWdpbnttYXRyaXh9IHJfezEyfSBcXCByX3syMn0gXGVuZHttYXRyaXh9IFxyaWdodF0gID0gXGxlZnRbIFxiZWdpbnttYXRyaXh9MC41IFxcIDAuMSBcZW5ke21hdHJpeH1cYmVnaW57bWF0cml4fSAwIFxcIDAuMSBcZW5ke21hdHJpeH0gXHJpZ2h0XSBcbGVmdFsgXGJlZ2lue21hdHJpeH0wLjUgXFwgMC4xIFxlbmR7bWF0cml4fVxiZWdpbnttYXRyaXh9IDAgXFwgMC4xIFxlbmR7bWF0cml4fSBccmlnaHRdXGxlZnRbXGJlZ2lue21hdHJpeH0gMSBcXCAwIFxlbmR7bWF0cml4fSBccmlnaHRdID0gXGxlZnRbXGJlZ2lue21hdHJpeH0gMC4yNSBcXCAwLjA2IFxlbmR7bWF0cml4fSBccmlnaHRdXGxlZnRbXGJlZ2lue21hdHJpeH0gMSBcXCAwIFxlbmR7bWF0cml4fSBccmlnaHRdID0gXGxlZnRbXGJlZ2lue21hdHJpeH0gMC4yNSBcXCAwLjA2IFxlbmR7bWF0cml4fSBccmlnaHRdCiQkClBlcmNlYmEgcXVlICRcYm9sZHN5bWJvbHtyX3tpfX09IFxsZWZ0KHJfezFpfSxyX3syaX1ccmlnaHQpXnsnfSQgw6kgYSBwcmltZWlyYSBjb2x1bmEgZGUgJHtcYm9sZHN5bWJvbHtcUGhpfV57aX19JCBxdWUgw6kgb2J0aWRhIGRlOgoKJCQKXGJvbGRzeW1ib2x7cn1fe3R9PVxib2xkc3ltYm9se1xQaGl9XntpfVxib2xkc3ltYm9se2Ffe2l9fQokJApvbmRlICRcYm9sZHN5bWJvbHthX3tpfV57J319PVxsZWZ0KDAsMCwuLi4sMSwuLi4sMFxyaWdodCkkIGUgb3MgZWxlbWVudG9zIGRlICRcYm9sZHN5bWJvbHtcUGhpfV57aX0kIHJlcHJlc2VudGFtIG8gZWZlaXRvIGRlIHVtIGNob3F1ZSB1bml0w6FyaW8gbmFzIHZhcmnDoXZlaXMgZG8gc2lzdGVtYSBkZXBvaXMgZGUgJGkkIHBlcsOtb2Rvcy4gCgoqICoqRlVOw4fDg08gSU1QVUxTTy1SRVNQT1NUQSBPUlRPR09OQUxJWkFEQSoqCgpVbWEgaGlww7N0ZXNlIHByb2JsZW3DoXRpY2Egbm8gdGlwbyBkZSByZXNwb3N0YSBhbyBpbXB1bHNvIG1vc3RyYWRhIGFudGVyaW9ybWVudGUgw6kgcXVlIGVzdGUgY2hvcXVlIG9jb3JyZSBhcGVuYXMgZW0gdW1hIHZhcmnDoXZlbCBlbSB1bSB0ZW1wby4gVGFsIGhpcMOzdGVzZSDDqSByYXpvw6F2ZWwgc2UgYXMgdmFyacOhdmVpcyBzw6NvIGluZGVwZW5kZW50ZXMuIAoKRW0gZ2VyYWwsIGEgbWF0cml6IGRlIHZhcmnDom5jaWEgZSBjb3ZhcmnDom5jaWEgZG8gdGVybW8gZGUgZXJybyAkXGJvbGRzeW1ib2x7YX1fdCQgbsOjbyDDqSBkaWFnb25hbCwgb3Ugc2VqYSwgZXhpc3RlIGNvcnJlbGHDp8OjbyBjb250ZW1wb3LDom5lYSBlbnRyZSBvcyBlcnJvcyBkYXMgZGlmZXJlbnRlcyBlcXVhw6fDtWVzIGRvIG1vZGVsbyBWQVIuIEFzc2ltLCBvcyBjaG9xdWVzIHPDo28gY29udGVtcG9yw6JuZWFtZW50ZSBjb3JyZWxhY2lvbmFkb3MgZSBpc3NvIGltcGVkZSBxdWUgc2UgdGVuaGEgbyBlZmVpdG8gcHVyby9sw61xdWlkbyBkZSBjYWRhIGNob3F1ZS4gCgpRdWFuZG8gb2NvcnJlIGNob3F1ZSBlbSB1bWEgdmFyacOhdmVsIGRvIHNpc3RlbWEgc2V1IGVmZWl0byBzZSBjb25mdW5kZSBjb20gbyBlZmVpdG8gYWR2aW5kbyBkYSBjb3JyZWxhw6fDo28gZG9zIGVycm9zIGRlIG91dHJhcyB2YXJpw6F2ZWlzLiBOw6NvIGjDoSBjb21vIGdhcmFudGlyIHF1ZSBvIGNob3F1ZSBvY29ycmUgZW0gY2FkYSB2YXJpw6F2ZWwgaXNvbGFkYW1lbnRlLiBQYXJhIGNvbnRvcm5hciBlc3RlIHByb2JsZW1hIMOpIG5lY2Vzc8OhcmlvIHRyYW5zZm9ybWFyIG9zIGVycm9zIGVtIGVycm9zIG9ydG9nb25haXMgcXVlIHRlcsOjbyBtYXRyaXogZGUgdmFyacOibmNpYSBlIGNvdmFyacOibmNpYXMgZGlhZ29uYWwuIEVzdGEgb3BlcmHDp8Ojb3BvZGUgc2VyIGRlbm9taW5hZGEgZGUgb3J0b2dvbmFsaXphw6fDo28gZG9zIGVycm9zIG91IGRpYWdvbm9saXphw6fDo28gZGEgbWF0cml6IGRlIHZhcmnDom5jaWFzIGUgY292YXJpw6JuY2lhcy4gCgojIyMjIyAqKkRFQ09NUE9TScOHw4NPIERBIFZBUknDgk5DSUEgRE8gRVJSTyBERSBQUkVWSVPDg086KioKClVtYSBhbsOhbGlzZSBjb21wbGVtZW50YXIgw6AgZnVuw6fDo28gZGUgaW1wdWxzby1yZXNwb3N0YSDDqSBhIGRlY29tcG9zacOnw6NvIGRhIHZhcmnDom5jaWEgZG8gZXJybyBkZSBwcmV2aXPDo28gcXVlIHByb2N1cmEgZGV0ZXJtaW5hciBxdWFsIGEgcGVyY2VudGFnZW0gZGEgdmFyacOibmNpYSBkbyBlcnJvIGRlIHByZXZpc8OjbyBkZSB1bWEgdmFyacOhdmVsIHF1ZSDDqSBkZXZpZG8gYSBlbGEgZSBxdWFsIHBlcmNlbnRhZ2VtIMOpIGRldmlkbyBhIGNhZGEgdW1hIGRhcyBvdXRyYXMgdmFyacOhdmVpcyBkbyBtb2RlbG8gYW8gbG9uZ28gZG8gaG9yaXpvbnRlIGRlIHByZXZpc8Ojby4gRXN0YSBhbsOhbGlzZSBmb3JuZWNlIGVsZW1lbnRvcyBwYXJhIHNlIGluZmVyaXIgc29icmUgY2F1c2FsaWRhZGUgYW8gbG9uZ28gZGUgdW0gcGVyw61vZG8gdGVtcG9yYWwgZSBzb2JyZSBxdWFsIHZhcmnDoXZlbCDDqSBtYWlzIGV4w7NnZW5hIG5vIHNpc3RlbWEuCgpBcyBwcmV2aXPDtWVzIG9idGlkYXMgY29tIG8gbW9kZWxvIFZBUiBjb250w6ltIGRvaXMgZWxlbWVudG9zOiBvIHZhbG9yIGVzcGVyYWRvIHBhcmEgYSB2YXJpw6F2ZWwgZSBvIGNob3F1ZSBpbmVzcGVyYWRvIGVtIGNhZGEgZXF1YcOnw6NvLiBBIGRlY29tcG9zacOnw6NvIGRlIHZhcmnDom5jaWEgaW5pY2lhIGNvbSBvIGPDoWxjdWxvIGRhIHZhcmnDom5jaWEgZG8gZXJybyBkZSBwcmV2aXPDo28gZG8gVkFSIG5hIGZvcm1hIGRlIG3DqWRpYXMgbcOzdmVpcywgaXN0byDDqSwgbmEgZm9ybWEgaW52ZXJ0aWRhICoqVk1BKCRcaW5mdHkkKSoqLiBBc3NpbSwgbyBlcnJvIGRlIHByZXZpc8OjbyAkaCQgcGVyw61vZG9zIMOgIGZyZW50ZSBubyBtb2RlbG8gKipWQVIocCkqKiBuYSBmb3JtYSAqKlZNQSgkXGluZnR5JCkqKiDDqSBkYWRvIHBvcjoKCiQkClx3aWRldGlsZGV7XGJvbGRzeW1ib2x7cn19X3t0K2h9LUVcbGVmdFtcd2lkZXRpbGRle1xib2xkc3ltYm9se3J9fV97dCtofXxUXHJpZ2h0XT1cYm9sZHN5bWJvbHthfV97dCtofSArIFxib2xkc3ltYm9se1xQaGl9XGJvbGRzeW1ib2x7YX1fe3QraC0xfSArIFxib2xkc3ltYm9se1xQaGl9XnsyfVxib2xkc3ltYm9se2F9X3t0K2gtMn0gKyBcYm9sZHN5bWJvbHtcUGhpfV57M31cYm9sZHN5bWJvbHthfV97dCtoLTN9Ky4uLiBcXAokJApPIGxhZG8gZXNxdWVyZG8gZGVzdGEgZXF1YcOnw6NvIMOpIGEgZGlmZXJlbsOnYSBlbnRyZSBvIHZhbG9yIG9ic2VydmFkbyBkbyB2ZXRvciBkZSB2YXJpw6F2ZWlzIGVuZMOzZ2VuYXMgbm8gdGVtcG8gJHQraCQgZSBvIHZhbG9yIHByZXZpc3RvIHBlbG8gVkFSLiBPIGxhZG8gZGlyZWl0byDDqSBhIHJlcHJlc2VudGHDp8OjbyAqKlZNQSgkXGluZnR5JCkqKiBkb3MgZXJyb3MgZGUgcHJldmlzw6NvLiBPYnNlcnZlIHF1ZSBvIGVycm8gZGUgcHJldmlzw6NvIGNvcnJlbnRlIGRlcGVuZGUgZG9zIHRlcm1vcyBkZSBlcnJvcyBwYXNzYWRvcy4gQSBhbsOhbGlzZSBwcmVjaXNhIHNlciBmZWl0YSBjb20gb3MgZXJyb3Mgb3J0b2dvbmFpcy4KCkEgZGVjb21wb3Npw6fDo28gZGEgdmFyacOibmNpYSBkbyBlcnJvIGRlIHByZXZpc8OjbyDDqSwgbm9ybWFsbWVudGUsIGFwcmVzZW50YWRhIGVtIGZvcm1hIGRlIHRhYmVsYSBxdWUgaW5kaWNhIGEgcGVyY2VudGFnZW0gZG8gZXJybyBkZSBwcmV2aXPDo28gZGUgdW1hIHZhcmnDoXZlbCBxdWUgcG9kZSBzZXIgYXRyaWJ1w61kYSBhIGVsYSBlIGEgY2FkYSB1bWEgZGFzIG91dHJhcyBkbyBzaXN0ZW1hICRoJCBwZXLDrW9kb3Mgw6AgZnJlbnRlIGRlcG9pcyBkbyBjaG9xdWUuIFVtYSB2YXJpw6F2ZWwgdGlwaWNhbWVudGUgZXjDs2dlbmEgdGVyw6EgYWx0YSBwZXJjZW50YWdlbSBleHBsaWNhZGEgcG9yIGVsYSBwcsOzcHJpYSBwb3IgdW0gbG9uZ28gcGVyw61vZG8uIFNlIHVtYSB2YXJpw6F2ZWwgw6kgaW1wb3J0YW50ZSBwYXJhIGEgZGluw6JtaWNhIHRlbXBvcmFsIGRlIG91dHJhIHZhcmnDoXZlbCwgdW0gZXJybyBkZSBwcmV2aXPDo28gbmEgcHJpbWVpcmEgdmFyacOhdmVsIHRlcsOhIGVmZWl0byBzb2JyZSBvIGVycm8gZGUgcHJldmlzw6NvIG5hIHNlZ3VuZGEuCgpCYXNpY2FtZW50ZSwgYSBhbsOhbGlzZSBjb25jZW50cmEgbm8gcGVyY2VudHVhbCBkYSB2YXJpw6JuY2lhIGRvIGVycm8gZGUgcHJldmlzw6NvIGRlIHVtYSB2YXJpw6F2ZWwgcXVlIGRlY29ycmUgZGVsYSBlIGRlIGNhZGEgdW1hIGRhcyBvdXRyYXMsIHNlIG8gcGVyY2VudHVhbCB2YXJpYSBhbyBsb25nbyBkbyBob3Jpem9udGUgZSBwb3IgcXVhbnRvcyBwZXLDrW9kb3MgdW1hIHZhcmnDoXZlbCBwZXJtYW5lY2UgaW1wb3J0YW50ZSBwYXJhIGV4cGxpY2FyIGEgb3V0cmEuIAoKIyMjIyMgKipNT0RFTE8gVkVUT1JJQUwgQVVUT1JSRUdSRVNTSVZPIEVTVFJVVFVSQUwgKFNWQVIpKioKCk5lc3RhIHBhcnRlIHZhbW9zIGFwcmVzZW50YXIgbyBtb2RlbG8gVkFSIGVzdHJ1dHVyYWwgKFNWQVIpIGNvbW8gdW1hIGV4dGVuc8OjbyBkbyBtb2RlbG8gVkFSIG1vc3RyYWRvIGFudGVyaW9ybWVudGUuIEFwZXNhciBkbyBtb2RlbG8gVkFSIGNvbnNlZ3VpciBjYXB0YXIgYXMgY2FyYWN0ZXLDrXN0aWNhcyBkaW7Dom1pY2FzIGRlIHPDqXJpZXMgdGVtcG9yYWlzIG11bHRpdmFyaWFkYXMsIGlkZW50aWZpY2Ftb3MgYSBuZWNlc3NpZGFkZSBkZSB0cmFuc2Zvcm1hciBhIG1hdHJpeiBkZSB2YXJpw6JuY2lhIGUgY292YXJpw6JuY2lhcyBkb3MgZXJyb3MgcGFyYSBzZSB0ZXIgY2hvcXVlcyBvcnRvZ29uYWlzLCBpc3RvIMOpLCBuw6NvIGNvcnJlbGFjaW9uYWRvcywgcGFyYSBhIGFuw6FsaXNlIGNvcnJldGEgZGFzIGZ1bsOnw7VlcyBkZSBpbXB1bHNvLXJlc3Bvc3RhIGUgZGVjb21wb3Npw6fDo28gZG8gZXJybyBkZSBwcmV2aXPDo28uIAoKQ29udHVkbywgbWVzbW8gdGVuZG8gZXJyb3Mgb3J0b2dvbmFpcyBzdXJnZSBhIGRpZmljdWxkYWRlIGRlIGNvbW8gaW50ZXJwcmV0YXIgYXMgZnVuw6fDtWVzIGltcHVsc28tcmVzcG9zdGEgc2VtIHJlZmVyw6puY2lhIMOgIHRlb3JpYSBlY29uw7RtaWNhLiBBIGluY29ycG9yYcOnw6NvIGRhIHRlb3JpYSBwYXJhIGRlZmluaXIgYXMgcmVsYcOnw7VlcyBjb250ZW1wb3LDom5lYXMgZW50cmUgYXMgdmFyacOhdmVpcyBjb25kdXogYW8gVkFSIG5hIGZvcm1hIGVzdHJ1dHVyYWwgKFNWQVIpLgoKKiAqKkRPIFZBUiBQQVJBIE8gU1ZBUioqCgpVbWEgc8OpcmllIHRlbXBvcmFsIG11bHRpdmFyaWFkYSAkXGJvbGRzeW1ib2x7cl97dH19PShyX3sxdH0scl97MnR9LC4uLixyX3trdH0pXnsnfSQgY29tcG9zdGEgcG9yICRrJCBjb21wb25lbnRlcyBubyB0ZW1wbyAkdCQgw6kgdW0gcHJvY2Vzc28gVkFSIGRlIG9yZGVtICRwJCwgb3UgJFZBUihwKSQsIHNlIHBhcmEgJHA+MCQgc2VndWUgbyBtb2RlbG86CgoKJCQKXGJvbGRzeW1ib2x7cl97dH19ID0gXGJvbGRzeW1ib2x7XHBoaX1fezB9ICsgXGJvbGRzeW1ib2x7XFBoaX1fezF9XGJvbGRzeW1ib2x7cl97dC0xfX0gKy4uLitcYm9sZHN5bWJvbHtcUGhpfV97cH1cYm9sZHN5bWJvbHtyfV97dC1wfSArICBcYm9sZHN5bWJvbHthX3t0fX0KJCQKb25kZSAkXGJvbGRzeW1ib2x7XHBoaX1fezB9JCDDqSB1bSB2ZXRvciBkZSBkaW1lbnPDo28gJGskLCAkXGJvbGRzeW1ib2x7XFBoaX1fe2p9JCBzw6NvIG1hdHJpemVzICRrIFx0aW1lcyBrJCBwYXJhICRqPTEsLi4uLHAkIGUgJFxib2xkc3ltYm9se2Ffe3R9fSQgw6kgdW0gcnXDrWRvIGJyYW5jbyBmb3JtYWRvIHBvciB1bWEgc2VxdcOqbmNpYSBkZSB2ZXRvcmVzIGFsZWF0w7NyaW9zIGluZGVwZW5kZW50ZXMgZSBpZGVudGljYW1lbnRlIGRpc3RyaWJ1w61kb3MgY29tIG3DqWRpYSAkMCQgZSBtYXRyaXogZGUgY292YXJpw6JuY2lhICRcYm9sZHN5bWJvbHtcc3VtX3thfX0kLgoKQXNzdW1pbmRvICRcYm9sZHN5bWJvbHtccGhpfV97MH09MCQgcGFyYSBzaW1wbGlmaWNhciBhIG5vdGHDp8OjbyBlIGFzc3VtaW5kbyBhIHJlcHJlc2VudGHDp8OjbyBkZSBtw6lkaWFzIG3Ds3ZlaXMsICoqVk1BKCRcaW5mdHkkKSoqLCBkYWRhIHBvcjoKCiQkClxiZWdpbnthbGlnbmVkfQpcYm9sZHN5bWJvbHtyfV97dH09XGJvbGRzeW1ib2x7YV97dH19ICsgXGJvbGRzeW1ib2x7XFBoaX1cYm9sZHN5bWJvbHthfV97dC0xfSArIFxib2xkc3ltYm9se1xQaGl9XnsyfVxib2xkc3ltYm9se2F9X3t0LTJ9ICsgXGJvbGRzeW1ib2x7XFBoaX1eezN9XGJvbGRzeW1ib2x7YX1fe3QtM30rLi4uIApcZW5ke2FsaWduZWR9CiQkCmVtIHF1ZSAkXHdpZGV0aWxkZXtcYm9sZHN5bWJvbHtyfX1fe3R9ID0gXHN1bV97aT0wfV57dC0xfXtcYm9sZHN5bWJvbHtcUGhpfV57aX1cYm9sZHN5bWJvbHthfV97dC1pfX1+flx0ZXh0e3NlbmRvfX5cYm9sZHN5bWJvbHtcUGhpfV57MH09XGJvbGRzeW1ib2x7SX0kLiAKCkNvbW8gdmltb3MsIG9zIGNvZWZpY250ZXMgZGFzIG1hdHJpemVzICRcYm9sZHN5bWJvbHtcUGhpfV57aX0kIGZvcm5lY2VtIGFzIHJlc3Bvc3RhcyBkYXMgdmFyacOhdmVpcyBhIGNob3F1ZXMgbm9zIHNpc3RlbWEsIGNvbnN0aXR1aW5kbyBhcyBmdW7Dp8O1ZXMgaW1wdWxzby1yZXNwb3N0YS4gUG9yw6ltLCBxdWFuZG8gb3MgZXJyb3MgJFxib2xkc3ltYm9se2Ffe3R9fSQgc8OjbyBjb250ZW1wb3JhbmVhbWVudGUgY29ycmVsYWNpb25hZG9zIGVzc2VzIGNvZWZpY2llbnRlcyBuw6NvIHJlZmxldGVtIGRlIGZvcm1hIGFkZXF1YWRhIG9zIGVmZWl0b3MgZG9zIGNob3F1ZXMgbmFzIHZhcmnDoXZlaXMgZG8gc2lzdGVtYS4gQXNzaW0sIG9zIGVycm9zIGRldmVtIHNlciBvcnRvZ29uYWxpemFkb3MgZGUgbW9kbyBhIGFwcmVzZW50YXJlbSBtYXRyaXogZGUgdmFyacOibmNpYXMgZSBjb3ZhcmnDom5jaWFzIGRpYWdvbmFsIChhdXPDqm5jaWEgZGUgY292YXJpw6JuY2lhKS4gQSBvcnRvZ29uYWxpemHDp8OjbyBjb25zaXN0ZSBlbSB1bWEgdHJhbnNmb3JtYcOnw6NvIGRvcyBlcnJvcyBnZXJhbmRvIG91dHJvIHZldG9yIGRlIGVycm9zIGNvbSAgbWF0cml6IGRlIHZhcmnDom5jaWFzIGUgY292YXJpw6JuY2lhcyBkaWFnb25hbC4gTm8gZW50YW50bywgZXN0YSB0cmFuc2Zvcm1hw6fDo28gZW52b2x2ZSBtb2RpZmljYXIgdG9kbyBvIG1vZGVsbyBvIHF1ZSB0cmF6IGNvbnNlcXXDqm5jaWFzIHBhcmEgbyByZWxhY2lvbmFtZW50byBjb250ZW1wb3LDom5lbyBlbnRyZSBhcyB2YXJpw6F2ZWlzLgoKRGFkbyAkXGJvbGRzeW1ib2x7XHN1bV97YX19JCBzaW3DqXRyaWNhIGUgcG9zaXRpdmEgZGVmaW5pZGEsIGV4aXN0ZSB1bWEgbWF0cml6ICRQJCBuw6NvIHNpbmd1bGFyIChkZXRlcm1pbmFudGUgZGlmZXJlbnRlIGRlIHplcm8pIHRhbCBxdWUgJFxib2xkc3ltYm9se1B9XGJvbGRzeW1ib2x7XHN1bV97YX19XGJvbGRzeW1ib2x7UH1eeyd9JCDDqSB1bWEgbWF0cml6IGRpYWdvbmFsLiBNdWx0aXBsaWNhbmRvIG8gbW9kZWxvIHBvciAkXGJvbGRzeW1ib2x7UH0kLCB0ZW0tc2U6CgokJApcYmVnaW57YWxpZ25lZH0KJiYmIFxib2xkc3ltYm9se1B9XGJvbGRzeW1ib2x7cn1fe3R9ID0gXGJvbGRzeW1ib2x7UH0gXGJvbGRzeW1ib2x7XFBoaX1fezF9XGJvbGRzeW1ib2x7cl97dC0xfX0gKy4uLitcYm9sZHN5bWJvbHtQfVxib2xkc3ltYm9se1xQaGl9X3twfVxib2xkc3ltYm9se3J9X3t0LXB9ICsgXGJvbGRzeW1ib2x7UH1cYm9sZHN5bWJvbHthX3t0fX0gXFwKXFwKJiYmIFxib2xkc3ltYm9se1B9XGJvbGRzeW1ib2x7cn1fe3R9ID0gXGJvbGRzeW1ib2x7XFBoaX1fezF9XnsqfVxib2xkc3ltYm9se3Jfe3QtMX19ICsuLi4rXGJvbGRzeW1ib2x7XFBoaX1fe3B9XnsqfVxib2xkc3ltYm9se3J9X3t0LXB9ICsgXGJvbGRzeW1ib2x7dV97dH19IFxcClxlbmR7YWxpZ25lZH0KJCQKcXVlIGNvbnN0aXR1aSB1bSBub3ZvIG1vZGVsbywgY29tIG5vdm8gZXJybyAkXGJvbGRzeW1ib2x7dV97dH19PSBcYm9sZHN5bWJvbHtQfVxib2xkc3ltYm9se2Ffe3R9fSQgZSBjb20gbyB0ZXJtbyAkXGJvbGRzeW1ib2x7UH1cYm9sZHN5bWJvbHtyfV97dH0kIGRvIGxhZG8gZXNxdWVyZG8gcXVlIGluY29ycG9yYSByZWxhw6fDtWVzIGNvbnRlbXBvcsOibmVhcyBlbnRyZSBhcyB2YXJpw6F2ZWlzIGRvIHNpc3RlbWEuIAoKVGFsIG1vZGVsbyDDqSBjb25oZWNpZG8gY29tbyBWQVIgRXN0cnV0dXJhbCBxdWUgcGVybWl0ZSBhIGFuw6FsaXNlIGRlIGZ1bsOnw7VlcyBpbXB1bHNvLXJlc3Bvc3RhIG9ydG9nb25haXMsIGRlY29tcG9zacOnw6NvIGRhIHZhcmnDom5jaWEgZG8gZXJybyBkZSBwcmV2aXPDo28gZSBlc3RpbWF0aXZhcyBkZSBjb2VmaWNpZW50ZXMgZGUgcmVsYcOnw7VlcyBjb250ZW1wb3LDom5lYXMgZW50cmUgYXMgdmFyacOhdmVpcy4gQSBtYXRyaXogZGUgdmFyacOibmNpYXMgZSBjb3ZhcmnDom5jaWFzIGRvcyBlcnJvcyBlc3RydXR1cmFpcyDDqSBkYWRhIHBvcjoKCiQkClZhcihcYm9sZHN5bWJvbHt1X3t0fX0pID0gXGJvbGRzeW1ib2x7XHN1bV97dX19ID0gRVxsZWZ0W1xib2xkc3ltYm9se3VfdH1cYm9sZHN5bWJvbHt1X3t0fV57J319XHJpZ2h0XSA9IEVcbGVmdFtcYm9sZHN5bWJvbHtQfVxib2xkc3ltYm9se2Ffe3R9fVxib2xkc3ltYm9se2Ffe3R9XnsnfX1cYm9sZHN5bWJvbHtQfV57J31ccmlnaHRdID0gXGJvbGRzeW1ib2x7UH1FXGxlZnRbXGJvbGRzeW1ib2x7YV97dH19XGJvbGRzeW1ib2x7YV97dH1eeyd9fVxyaWdodF1cYm9sZHN5bWJvbHtQfV57J30gPSBcYm9sZHN5bWJvbHtQfVxib2xkc3ltYm9se1xzdW1fe2F9fVxib2xkc3ltYm9se1B9XnsnfQokJAoKKiAqKkRPIFNWQVIgUEFSQSBPIFZBUioqCgpEZSBmb3JtYSBhbHRlcm5hdGl2YSwgcG9kZW1vcyBkZWZpbmlyIHVtIFZBUiBhIHBhcnRpciBkZSB1bSBTVkFSLiBDb25zaWRlcmUgbyBzZWd1aW50ZSBtb2RlbG8gU1ZBUjoKCiQkClxiZWdpbnthbGlnbmVkfQpcYm9sZHN5bWJvbHtBfVxib2xkc3ltYm9se3J9X3t0fSA9IFxib2xkc3ltYm9se0F9X3sxfV57Kn1cYm9sZHN5bWJvbHtyX3t0LTF9fSArLi4uK1xib2xkc3ltYm9se0F9X3twfV57Kn1cYm9sZHN5bWJvbHtyfV97dC1wfSArIFxib2xkc3ltYm9se0J9XGJvbGRzeW1ib2x7dV97dH19IFxcClxlbmR7YWxpZ25lZH0KJCQKClByw6ktbXVsdGlwbGljYW5kbyBwb3IgJFxib2xkc3ltYm9se0F9XnstMX0kLCB0ZW1vczoKCiQkClxiZWdpbnthbGlnbmVkfQomJiYgXGJvbGRzeW1ib2x7QX1eey0xfVxib2xkc3ltYm9se0F9XGJvbGRzeW1ib2x7cn1fe3R9ID0gXGJvbGRzeW1ib2x7QX1eey0xfVxib2xkc3ltYm9se0F9X3sxfV57Kn1cYm9sZHN5bWJvbHtyX3t0LTF9fSArLi4uK1xib2xkc3ltYm9se0F9XnstMX1cYm9sZHN5bWJvbHtBfV97cH1eeyp9XGJvbGRzeW1ib2x7cn1fe3QtcH0gKyBcYm9sZHN5bWJvbHtBfV57LTF9XGJvbGRzeW1ib2x7Qn1cYm9sZHN5bWJvbHt1X3t0fX0gXFwKXFwKJiYmIFxib2xkc3ltYm9se3J9X3t0fSA9ICBcYm9sZHN5bWJvbHtcUGhpfV97MX1cYm9sZHN5bWJvbHtyX3t0LTF9fSArLi4uK1xib2xkc3ltYm9se1xQaGl9X3twfVxib2xkc3ltYm9se3J9X3t0LXB9ICsgXGJvbGRzeW1ib2x7YV97dH19IApcZW5ke2FsaWduZWR9CiQkCgpxdWUgw6kgdW0gVkFSIHBhZHLDo28gZSAkXGJvbGRzeW1ib2x7YV97dH19PVxib2xkc3ltYm9se0F9XnstMX1cYm9sZHN5bWJvbHtCfVxib2xkc3ltYm9se3Vfe3R9fSQsIG91ICwgJFxib2xkc3ltYm9se0F9XGJvbGRzeW1ib2x7YV97dH19ID0gXGJvbGRzeW1ib2x7Qn1cYm9sZHN5bWJvbHt1X3t0fX0kLiAKCk9ic2VydmUgcXVlICRcYm9sZHN5bWJvbHthX3t0fX0kIHPDo28gb3MgZXJyb3MgZG8gbW9kZWxvIFZBUiBuYSBzdWEgZm9ybWEgcmVkdXppZGEgKGNvcnJlbGFjaW9uYWRvcykgZW5xdWFudG8gcXVlICRcYm9sZHN5bWJvbHt1X3t0fX0kIHPDo28gb3MgZXJyb3MgZGEgZm9ybWEgZXN0cnV0dXJhbCAobsOjbyBjb3JyZWxhY2lvbmFkb3MpLgoKKiAqKklERU5USUZJQ0HDh8ODTyoqCgpDb21vIMOpIHBvc3PDrXZlbCBvYnNlcnZhciwgbyBtb2RlbG8gZXN0cnV0dXJhbCBuw6NvIMOpIG9ic2VydsOhdmVsLCBtYXMgYSBmb3JtYSByZWR1emlkYSBwb2RlIHNlciBlc3RpbWFkYS4gQSBlc3RyYXTDqWdpYSDDqSBlc3BlY2lmaWNhciBlIGVzdGltYXIgbyBWQVIgZSBkZXBvaXMgZXN0aW1hciBvIFNWQVIgZSBjb25jZW50cmFyIG5hIGFuw6FsaXNlIGRlIGZ1bsOnw7VlcyBpbXB1bHNvLXJlc3Bvc3RhLCBkZWNvbXBvc2nDp8OjbyBkZSB2YXJpw6JuY2lhIGUgcmVsYcOnw7VlcyBjb250ZW1wb3LDom5lYXMgZW50cmUgYXMgdmFyacOhdmVpcy4gCgpQYXJhIGVzdGltYXIgbyBTVkFSIHRlbW9zIHF1ZSByZXNvbHZlciBwcmltZWlybyBvIHByb2JsZW1hIGRlICoqaWRlbnRpZmljYcOnw6NvKiouIFNlcsOhIHF1ZSBhIHBhcnRpciBkYSBlc3RpbWF0aXZhIGRlICRcYm9sZHN5bWJvbHtcc3VtX3thfX0kIMOpIHBvc3PDrXZlbCBvYnRlciBlc3RpbWF0aXZhcyBkb3MgY29lZmljaWVudGVzIGRlICRcYm9sZHN5bWJvbHtBfSQgZSAkXGJvbGRzeW1ib2x7Qn0kIGRvIG1vZGVsbyBlc3RydXR1cmFsPwoKUGFyYSBpc3NvLCDDqSBwcmVjaXNvIGltcG9yIHJlc3RyacOnw7VlcyBuYXMgbWF0cml6ZXMgJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQuIE8gbsO6bWVybyBkZSByZXN0cmnDp8O1ZXMgbmVjZXNzw6FyaW8gcGFyYSBhbGNhbsOnYXIgaWRlbnRpZmljYcOnw6NvIGRlcGVuZGUgZGEgcmVsYcOnw6NvIGVudHJlIG8gbsO6bWVybyBkZSBjb2VmaWNpZW50ZXMgZXN0aW1hZG9zIG5hIGZvcm1hIHJlZHV6aWRhIGUgbyBuw7ptZXJvIGRlIGNvZWZpY2llbnRlcyBhIHNlcmVtIG9idGlkb3MgbmEgZm9ybWEgZXN0cnV0dXJhbC4gw4kgdW0gcHJvYmxlbWEgZGUgbsO6bWVybyBkZSBpbmPDs2duaXRhcyBlIGRlIG7Dum1lcm8gZGUgZXF1YcOnw7VlcyAocmVsYcOnw7Vlcykgc2VtZWxoYW50ZSDDoCBjb25kacOnw6NvIGRlIG9yZGVtIGVtIGVxdWHDp8O1ZXMgc2ltdWx0w6JuZWFzLiAKCk8gbsO6bWVybyBkZSBwYXLDom1ldHJvcyBkbyBWQVIgcXVlIHNlcnZlbSBwYXJhIGlkZW50aWZpY2FyIG9zIGVsZW1lbnRvcyBkYXMgbWF0cml6ZXMgJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQgw6kgbyBuw7ptZXJvIGRlIGNvZWZpY2llbnRlcyBuw6NvIHJlZHVuZGFudGVzIGRhIG1hdHJpeiBkZSB2YXJpw6JuY2lhcyBlIGNvdmFyacOibmNpYXMgJFxib2xkc3ltYm9se1xzdW1fe2F9fSQuIE9zIGNvZWZpY2llbnRlcyBkYXMgdmFyacOhdmVpcyBkZWZhc2FkYXMgbsOjbyBjb250YW0uIENvbW8gJFxib2xkc3ltYm9se1xzdW1fe2F9fSQgw6kgc2ltw6l0cmljYSwgdGVtb3MgJFxmcmFje2tcbGVmdChrKzFccmlnaHQpfXsyfT1cZnJhY3trXjIra317Mn0kIGNvZWZpY2llbnRlcyBxdWUgw6kgbyBuw7ptZXJvIG3DoXhpbW8gZGUgZWxlbWVudG9zIGlkZW50aWZpY8OhdmVpcyBlbSAkXGJvbGRzeW1ib2x7QX0kIGUgJFxib2xkc3ltYm9se0J9JC4gU2Ugbm9zc28gbW9kZWxvIHRlbSAkMyQgdmFyacOhdmVpcywgdGVyZW1vcyAkXGZyYWN7M1xsZWZ0KDMrMVxyaWdodCl9ezJ9PTYkIGVsZW1lbnRvcyBlbSAkXGJvbGRzeW1ib2x7XHN1bV97YX19JCBlIHPDsyBwb2RlbW9zIGlkZW50aWZpY2FyIDYgZWxlbWVudG9zIGVtICRcYm9sZHN5bWJvbHtBfSQgZSAkXGJvbGRzeW1ib2x7Qn0kLiBQb3Igb3V0cm8gbGFkbywgc2Ugbm9zc28gbW9kZWxvIHRlbSAkNCQgdmFyacOhdmVpcywgdGVyZW1vcyAkXGZyYWN7NFxsZWZ0KDQrMVxyaWdodCl9ezJ9PTEwJCBlbGVtZW50b3MgZW0gJFxib2xkc3ltYm9se1xzdW1fe2F9fSQgZSBzw7MgcG9kZW1vcyBpZGVudGlmaWNhciAkMTAkIGVsZW1lbnRvcyBlbSAkXGJvbGRzeW1ib2x7QX0kIGUgJFxib2xkc3ltYm9se0J9JC4KClJlc3VtaW5kbywgdGVtb3MgJGskIGVsZW1lbnRvcyBlbSAkXGJvbGRzeW1ib2x7QX0kIGUgJGskIGVsZW1lbnRvcyBlbSAkXGJvbGRzeW1ib2x7Qn0kIHRvdGFsaXphbmRvICQya14yJCBlbGVtZW50b3MgYSBzZXJlbSBpZGVudGlmaWNhZG9zIGVtICRBJCBlICRCJCAocG9yIGV4ZW1wbG8sIHBhcmEgJGs9MiQgYXMgbWF0cml6ZXMgJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQgc8OjbyAkMiBcdGltZXMgMiQgZSB0ZXJlbW9zICQ0JCBlbGVtZW50b3MgZW0gY2FkYSwgdG90YWxpemFuZG8gJDJrXjI9OCQgZWxlbWVudG9zIGEgc2VyZW0gaWRlbnRpZmljYWRvcykuIFBvcsOpbSwgY29tbyBtb3N0cmFtb3MgYW50ZXJpb3JtZW50ZSwgYXBlbmFzICRcZnJhY3trXGxlZnQoaysxXHJpZ2h0KX17Mn09XGZyYWN7a14yK2t9ezJ9JCBkZXN0ZXMgZWxlbWVudG9zIHPDo28gb2JzZXJ2YWRvcy9lc3RpbWFkb3MgcGVsYSBtYXRyaXogJFxib2xkc3ltYm9se1xzdW1fe2F9fSQuCgpQYXJhIGlkZW50aWZpY2FyICQya14yJCBjb2VmaWNpZW50ZXMgZGVzY29uaGVjaWRvcyBhIHBhcnRpciBkZSAkXGZyYWN7a1xsZWZ0KGsrMVxyaWdodCl9ezJ9JCB2YWxvcmVzIGRlIAokXGJvbGRzeW1ib2x7XHN1bV97YX19JCwgc2Vyw6EgbmVjZXNzw6FyaW8gaW1wb3IgJDJrXjIgLSBcZnJhY3trXGxlZnQoaysxXHJpZ2h0KX17Mn0gPSBrXjIgKyBcZnJhY3trXGxlZnQoay0xXHJpZ2h0KX17Mn0kIHJlc3RyacOnw7VlcyBuYXMgbWF0cml6ZXMgJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQuCgpDb20gYmFzZSBlbSAkXGJvbGRzeW1ib2x7QX1cYm9sZHN5bWJvbHthX3t0fX0gPSBcYm9sZHN5bWJvbHtCfVxib2xkc3ltYm9se3Vfe3R9fSQgZSBkZXBlbmRlbmRvIGRhcyByZXN0cmnDp8O1ZXMgaW1wb3N0YXMsIHRyw6pzIHRpcG9zIGRlIG1vZGVsb3MgU1ZBUiBwb2RlbSBzZXIgZGVmaW5pZG9zOiAKCiogKipNT0RFTE8gQSoqCgpOZXN0ZSBtb2RlbG8gYSBpZMOpaWEgw6kgbW9kZWxhciBhcyByZWxhw6fDtWVzIGNvbnRlbXBvcsOibmVhcyBlbnRyZSBhcyB2YXJpw6F2ZWlzIGRpcmV0YW1lbnRlIHBlbGEgbWF0cml6ICRcYm9sZHN5bWJvbHtBfSQgY29uc2lkZXJhbmRvICRcYm9sZHN5bWJvbHtCfSA9IFxib2xkc3ltYm9se0l9X2skLCBpc3RvIMOpOgoKJCQKXGJvbGRzeW1ib2x7QX1cYm9sZHN5bWJvbHthX3t0fX0gPSBcYm9sZHN5bWJvbHt1X3t0fX0KJCQKbyBxdWUgcmVkdXogbyBuw7ptZXJvIGRlIHZhbG9yZXMgZGVzY29uaGVjaWRvcyBkZSAkMmteMiQgcGFyYSAka14yJCwgcG9pcyBzw7MgdGVtb3MgYSBtYXRyaXogJFxib2xkc3ltYm9se0F9JCBhIHNlciBpZGVudGlmaWNhZGEuIEFzc2ltLCBvIG7Dum1lcm8gbcOtbmltbyBkZSByZXN0cmnDp8O1ZXMgcGFyYSBpZGVudGlmaWNhw6fDo28gc2Vyw6EgJFxmcmFje2tcbGVmdChrLTFccmlnaHQpfXsyfSQuIAoKUG9yIGV4ZW1wbG8sIGVtIHVtIHNpc3RlbWEgZGUgJDQkIHZhcmnDoXZlaXMgdGVtb3MgJDE2JCBlbGVtZW50b3MgYSBzZXJlbSBpZGVudGlmaWNhZG9zLiBPcyBlbGVtZW50b3MgZXN0aW1hZG9zIHPDo28gJDEwJCBkYSBtYXRyaXogJFxib2xkc3ltYm9se1xzdW1fe2F9fSQuIExvZ28sIHRlbW9zIHF1ZSBpbXBvciwgbm8gbcOtbmltbyAkNiQgcmVzdHJpw6fDtWVzLiBBIG1hdHJpeiAkXGJvbGRzeW1ib2x7QX0kIHNlcmlhOgoKJCQKXGJvbGRzeW1ib2x7QX0gPSBcYmVnaW57Ym1hdHJpeH0KYV97MTF9ICYgMCAmIDAgICYgMCBcXCAKYV97MjF9ICYgYV97MjJ9ICYgMCAmIDBcXCAKYV97MzF9ICYgYV97MzJ9ICYgYV97MzN9ICYgMFxcIAphX3s0MX0gJiBhX3s0Mn0gJiBhX3s0M30gJiBhX3s0NH0gClxlbmR7Ym1hdHJpeH0KJCQKCkFzc2ltLCBvIHNpc3RlbWEgw6kgZXhhdGFtZW50ZSBpZGVudGlmaWNhZG8uIFNlIGNvbG9jYXJtb3MgJDEkIG5hIGRpYWdvbmFsIHByaW5jaXBhbCBvIHNpc3RlbWEgZmljYSBzdXBlciBpZGVudGlmaWNhZG8uIFNlIGEgdGVyb2FpIGluZGljYSB1bSByZWxhY2lvbmFtZW50byBjb250ZW1wb3LDom5lbyBuw6NvIHJlY3Vyc2l2bywgb3MgemVyb3MgcG9kZW0gYXBhcmVjZXIgZW0gcG9zacOnw7VlcyBkaWZlcmVudGVzIGZvcmEgZGEgZGlhZ29uYWwgcHJpbmNpcGFsLiAKCgoqICoqTU9ERUxPIEIqKgoKTmVzdGUgbW9kZWxvLCBhbyBpbnbDqXMgZGUgbW9kZWxhciBkaXJldGFtZW50ZSBhcyByZWxhw6fDtWVzIGNvbnRlbXBvcsOibmVhcyBlbnRyZSBhcyB2YXJpw6F2ZWlzLCBlc3BlY2lmaWNhLXNlIGFzIHJlbGHDp8O1ZXMgZW50cmUgb3MgZXJyb3MgaWRlbnRpZmljYW5kby1zZSBvcyBjaG9xdWVzIGVzdHJ1dHVyYWlzIGRpcmV0YW1lbnRlIHBlbG9zIGNob3F1ZXMgZGEgZm9ybWEgcmVkdXppZGEuIEEgbWF0cml6ICRcYm9sZHN5bWJvbHtBfSQgw6kgY29uc2lkZXJhZGEgaWRlbnRpZGFkZSwgaXN0byDDqSwgJFxib2xkc3ltYm9se0F9PVxib2xkc3ltYm9se0l9X2skLiBMb2dvLAoKJCQKXGJvbGRzeW1ib2x7YV97dH19ID0gXGJvbGRzeW1ib2x7Qn1cYm9sZHN5bWJvbHt1X3t0fX0KJCQKT3Ugc2VqYSwgb3MgZXJyb3MgZGEgZm9ybWEgcmVkdXppZGEgc8OjbyBmdW7Dp8O1ZXMgbGluZWFyZXMgZG9zIGVycm9zIGVzdHJ1dHVyYWlzLiBPIG7Dum1lcm8gbcOtbmltbyBkZSByZXN0cmnDp8O1ZXMgcGFyYSBpZGVudGlmaWNhw6fDo28gdGFtYsOpbSDDqSAkXGZyYWN7a1xsZWZ0KGstMVxyaWdodCl9ezJ9JC4gCgoqICoqTU9ERUxPIEFCKioKCsOJIG8gbW9kZWxvIHF1ZSBjb25zaWRlcmEgb3MgZG9pcyB0aXBvcyBkZSByZXN0cmnDp8O1ZXMgc2ltdWx0w6JuZWFtZW50ZSwgb3Ugc2VqYToKCiQkClxib2xkc3ltYm9se0F9XGJvbGRzeW1ib2x7YV97dH19ID0gXGJvbGRzeW1ib2x7Qn1cYm9sZHN5bWJvbHt1X3t0fX0KJCQKCkNvbW8gJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQgdMOqbSAka14yJCBlbGVtZW50b3MgY2FkYSwgdGVtb3MgcXVlIGltcG9yIG5vIG3DrW5pbW8gJGteMiArIFxmcmFje2tcbGVmdChrLTFccmlnaHQpfXsyfSQgcmVzdHJpw6fDtWVzIHBhcmEgaWRlbnRpZmljYcOnw6NvLgoKUGFyYSBvIGV4ZW1wbG8gZG8gbW9kZWxvIFZBUiBkbyBCQUNFTiBhcHJlc2VudGFkbyBlbSBzYWxhIGRlIGF1bGEsIHBvZGVyw61hbW9zIGVzdGltYXIgdW0gU1ZBUiBkbyB0aXBvIEFCIChpZ25vcmFuZG8gYXMgZGVmYXNhZ2VucyBkZSAkXGJvbGRzeW1ib2x7cl97dH19JCBlICRccGhpXzAkKSwgY29tbyBzZWd1ZToKCiQkClxiZWdpbnthbGlnbmVkfQomJiYgXGJvbGRzeW1ib2x7QX1cYm9sZHN5bWJvbHtyX3t0fX0gPSBcYm9sZHN5bWJvbHtCfVxib2xkc3ltYm9se3Vfe3R9fSBcXApcXCAKJiYmIFxiZWdpbntibWF0cml4fQoxICYgMCAmIDAgICYgMCBcXCAKYV97MjF9ICYgMSAmIDAgJiAwXFwgCmFfezMxfSAmIGFfezMyfSAmIDEgJiAwXFwgCmFfezQxfSAmIGFfezQyfSAmIGFfezQzfSAmIDEKXGVuZHtibWF0cml4fVxiZWdpbntibWF0cml4fQpcRGVsdGEganVyb3MgXFwgClxEZWx0YSBjYW1iaW8gXFwgClxEZWx0YSBhZG0gXFwgClxEZWx0YSBsaXZyZXMKXGVuZHtibWF0cml4fSA9IApcYmVnaW57Ym1hdHJpeH0KYl97MTF9ICYgMCAmIDAgICYgMCBcXCAKMCAmIGJfezIyfSAmIDAgJiAwICBcXCAKMCAmIDAgJiBiX3szM30gJiAwICBcXCAKMCAmIDAgJiAwICYgYl97NDR9ClxlbmR7Ym1hdHJpeH0gXGJlZ2lue2JtYXRyaXh9CnVfe2p1cm9zfSBcXCAKdV97Y2FtYmlvfSBcXCAKdV97YWRtfSBcXCAKdV97bGl2cmVzfQpcZW5ke2JtYXRyaXh9ClxcClxlbmR7YWxpZ25lZH0KJCQKCgpDb21vICRrPTQkLCDDqSBuZWNlc3PDoXJpbyB1bSBtw61uaW1vIGRlICQya14yIC0gXGZyYWN7a1xsZWZ0KGsrMVxyaWdodCl9ezJ9ID0ga14yICsgXGZyYWN7a1xsZWZ0KGstMVxyaWdodCl9ezJ9ID0gMjIkIHJlc3RyacOnw7VlcyBlbSAkXGJvbGRzeW1ib2x7QX0kIGUgJFxib2xkc3ltYm9se0J9JCBwYXJhIGlkZW50aWZpY2HDp8OjbyBkbyBtb2RlbG8uIE9ic2VydmUgcXVlIGV4YXRhbWVudGVvICQyMiQgcmVzdHJpw6fDtWVzIGZvcmFtIGltcG9zdGFzIGUgbyBzaXN0ZW1hIMOpICoqZXhhdGFtZW50ZSBpZGVudGlmaWNhZG8qKi4gIAoKU2UgY2hhbWFybW9zICRcYm9sZHN5bWJvbHtyX3t0LTF9fSwuLi4sXGJvbGRzeW1ib2x7cl97dC1wfX0kIGRlICJ0ZXJtb3MgZGVmYXNhZG9zIiwgbyBtb2RlbG8gcG9kZSBzZXIgZXNjcml0byBjb21vOgoKJCQKXGJlZ2lue2FsaWduZWR9CiYmJiBcRGVsdGEganVyb3Nfe3R9ID0gXHBoaV97MTB9ICsgXHRleHR7dGVybW9zIGRlZmFzYWRvc31+ICsgYl97MTF9dV97anVyb3N9IFxcClxcCiYmJiBcRGVsdGEgY2FtYmlvX3t0fSA9IFxwaGlfezIwfSAtYV97MjF9IFxEZWx0YSBqdXJvc197dH1+K1x0ZXh0e3Rlcm1vcyBkZWZhc2Fkb3N9fiArIGJfezIyfXVfe2NhbWJpb30gXFwKXFwKJiYmIFxEZWx0YSBhZG1fe3R9ID0gXHBoaV97MzB9IC1hX3szMX0gXERlbHRhIGp1cm9zX3t0fS1hX3szMn0gXERlbHRhIGNhbWJpb197dH1+K1x0ZXh0e3Rlcm1vcyBkZWZhc2Fkb3N9fiArIGJfezMzfXVfe2FkbX0gXFwKXFwKJiYmIFxEZWx0YSBsaXZyZXNfe3R9ID0gXHBoaV97NDB9IC1hX3s0MX0gXERlbHRhIGp1cm9zX3t0fS1hX3s0Mn0gXERlbHRhIGNhbWJpb197dH0tYV97NDN9IFxEZWx0YSBhZG1fe3R9fitcdGV4dHt0ZXJtb3MgZGVmYXNhZG9zfX4gKyBiX3s0NH11X3tsaXZyZXN9IFxcClxlbmR7YWxpZ25lZH0KJCQKT2JzZXJ2ZSBxdWUgYSBmb3JtYSBjb21vIGVzY3JldmVtb3MgYXMgbWF0cml6ZXMgJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQgZGVmaW5pcmFtIHF1ZSBhIHZhcmnDoXZlbCBtYWlzIGVuZMOzZ2VuYSDDqSAkXERlbHRhIGxpdnJlcyQgZSBhIG1haXMgZXjDs2dlbmEgw6kgJFxEZWx0YSBqdXJvcyQuIElzc28gw6kgZGUgc3VtYSBpbXBvcnTDom5jaWEgcXVhbmRvIHRlbW9zIGVtYmFzYW1lbnRvIHRlw7NyaWNvIGNhcGF6IGRlIHN1c3RlbnRhciBlc3RhIGVzY29saGEuIAoKUGVyY2ViYSBxdWUgYSBmb3JtYSBkZSBlc3BlY2lmaWNhw6fDo28gZGUgJFxib2xkc3ltYm9se0F9JCBhbHRlcmEgYSBjYXJhY3Rlcml6YcOnw6NvIGRhcyB2YXJpw6F2ZWlzIGNvbW8gbWFpcyBlbmTDs2dlbmFzIGUgbWFpcyBleMOzZ2VuYXMuIFBvciBleGVtcGxvLCBjYXNvIG9wdMOhc3NlbW9zIHBvcjoKCiQkClxiZWdpbnthbGlnbmVkfQomJiYgXGJlZ2lue2JtYXRyaXh9CjEgJiAwICYgMCAgJiAwIFxcIAowICYgMSAmIDAgJiAwXFwgCmFfezMxfSAmIDAgJiAxICYgMFxcIAphX3s0MX0gJiAwICYgYV97NDN9ICYgMQpcZW5ke2JtYXRyaXh9XGJlZ2lue2JtYXRyaXh9ClxEZWx0YSBqdXJvcyBcXCAKXERlbHRhIGNhbWJpbyBcXCAKXERlbHRhIGFkbSBcXCAKXERlbHRhIGxpdnJlcwpcZW5ke2JtYXRyaXh9ID0gClxiZWdpbntibWF0cml4fQpiX3sxMX0gJiAwICYgMCAgJiAwIFxcIAowICYgYl97MjJ9ICYgMCAmIDAgIFxcIAowICYgMCAmIGJfezMzfSAmIDAgIFxcIAowICYgMCAmIDAgJiBiX3s0NH0KXGVuZHtibWF0cml4fSBcYmVnaW57Ym1hdHJpeH0KdV97anVyb3N9IFxcIAp1X3tjYW1iaW99IFxcIAp1X3thZG19IFxcIAp1X3tsaXZyZXN9ClxlbmR7Ym1hdHJpeH0KXFwKXGVuZHthbGlnbmVkfQokJAoKQ29tbyAkaz00JCwgw6kgbmVjZXNzw6FyaW8gdW0gbcOtbmltbyBkZSAkMmteMiAtIFxmcmFje2tcbGVmdChrKzFccmlnaHQpfXsyfSA9IGteMiArIFxmcmFje2tcbGVmdChrLTFccmlnaHQpfXsyfSA9IDIyJCByZXN0cmnDp8O1ZXMgZW0gJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQgcGFyYSBpZGVudGlmaWNhw6fDo28gZG8gbW9kZWxvLiBPYnNlcnZlIHF1ZSAkMjUkIHJlc3RyacOnw7VlcyBmb3JhbSBpbXBvc3RhcyBlIG8gc2lzdGVtYSDDqSAqKnN1cGVyIGlkZW50aWZpY2FkbyoqLiAgCgpTZSBjaGFtYXJtb3MgJFxib2xkc3ltYm9se3Jfe3QtMX19LC4uLixcYm9sZHN5bWJvbHtyX3t0LXB9fSQgZGUgInRlcm1vcyBkZWZhc2Fkb3MiLCBvIG1vZGVsbyBwb2RlIHNlciBlc2NyaXRvIGNvbW86CgokJApcYmVnaW57YWxpZ25lZH0KJiYmIFxEZWx0YSBqdXJvc197dH0gPSBccGhpX3sxMH0gKyBcdGV4dHt0ZXJtb3MgZGVmYXNhZG9zfX4gKyBiX3sxMX11X3tqdXJvc30gXFwKXFwKJiYmIFxEZWx0YSBjYW1iaW9fe3R9ID0gXHBoaV97MjB9IH4rXHRleHR7dGVybW9zIGRlZmFzYWRvc31+ICsgYl97MjJ9dV97Y2FtYmlvfSBcXApcXAomJiYgXERlbHRhIGFkbV97dH0gPSBccGhpX3szMH0gLWFfezMxfSBcRGVsdGEganVyb3Nfe3R9fitcdGV4dHt0ZXJtb3MgZGVmYXNhZG9zfX4gKyBiX3szM311X3thZG19IFxcClxcCiYmJiBcRGVsdGEgbGl2cmVzX3t0fSA9IFxwaGlfezQwfSAtYV97NDF9IFxEZWx0YSBqdXJvc197dH0tYV97NDJ9IFxEZWx0YSBjYW1iaW9fe3R9fitcdGV4dHt0ZXJtb3MgZGVmYXNhZG9zfX4gKyBiX3s0NH11X3tsaXZyZXN9IFxcClxlbmR7YWxpZ25lZH0KJCQKQWdvcmEsIHRlbW9zIGR1YXMgdmFyacOhdmVpcyBtYWlzIGV4w7NnZW5hcyBubyBzaXN0ZW1hIHF1ZSBzw6NvICRcRGVsdGEganVyb3MkIGUgJFxEZWx0YSBjYW1iaW8kIGVucXVhbnRvIHF1ZSBhIHZhcmnDoXZlbCBtYWlzIGVuZMOzZ2VuYSBjb250aW51YSBzZW5kbyAkXERlbHRhIGxpdnJlcyQuCgpDb21vIG91dHJvIGV4ZW1wbG8sIHN1cG9uaGEgbyBtb2RlbG8gYXByZXNlbnRhZG8gcG9yIEBsdXRrZXBvaGwyMDA1bmV3IGVudm9sdmVuZG8gYXMgdmFyacOhdmVpcyBwcm9kdXRvICgkcV90JCksIHRheGEgZGUganVyb3MgKCRpX3QkKSBlIG1vZWRhICgkbV90JCkuIE9zIGVycm9zIGRhIGZvcm1hIHJlZHV6aWRhIHPDo28gZGVub3RhZG9zIHBvcjoKCiQkClxib2xkc3ltYm9se2Ffe3R9fSA9IFxsZWZ0KGFfe3R9XntxfSwgYV97dH1ee2l9LCBhX3t0fV57bX0gXHJpZ2h0KV57J30KJCQKZSBvcyBlcnJvcyBlc3RydXR1cmFpcyBwb3I6CgokJApcYm9sZHN5bWJvbHt1X3t0fX0gPSBcbGVmdCh1X3t0fV57SVN9LCB1X3t0fV57TE19LCB1X3t0fV57bX0gXHJpZ2h0KV57J30KJCQKRGUgYWNvcmRvIGNvbSB1bWEgdmlzw6NvIGtleW5lc2lhbmEgYSByZWxhw6fDo28gZW50cmUgb3MgZXJyb3MgZGEgZm9ybWEgcmVkdXppZGEgZSBvcyBlcnJvcyBlc3RydXR1cmFpcyDDqSBkYWRhIHBvcjoKCiQkClxiZWdpbnthbGlnbmVkfQomIGFfe3R9XntxfSA9ICAtYV97MTJ9YV97dH1ee2l9ICsgYl97MTF9dV97dH1ee0lTfX5+XHRleHR7cXVlIHJlcHJlc2VudGEgYSBjdXJ2YSBJU30gXFwKJiBcXAomIGFfe3R9XntpfSA9ICAtYV97MjF9YV97dH1ee3F9IC1hX3syM31hX3t0fV57bX0gKyBiX3syMn11X3t0fV57TE19fn5cdGV4dHtxdWUgcmVwcmVzZW50YSBhIGN1cnZhIExNfSBcXApcXAomIGFfe3R9XnttfSA9ICBiX3szM311X3t0fV57bX1+flx0ZXh0e3F1ZSByZXByZXNlbnRhIGEgcmVncmEgZGUgb2ZlcnRhIGRlIG1vZWRhfSBcXApcZW5ke2FsaWduZWR9CiQkCgpBIHByaW1laXJhIGVxdWHDp8OjbyByZXByZXNlbnRhIHVtYSBjdXJ2YSBJUyBjb20gdW0gcGFyw6JtZXRybyBuZWdhdGl2byBwYXJhIG8gdGVybW8gZGUgZXJybyBkYSB0YXhhIGRlIGp1cm9zIGUgdW0gY2hvcXVlIGVzdHJ1dHVyYWwgbmEgcHLDs3ByaWEgSVMuIEEgc2VndW5kYSBlcXVhw6fDo28gw6kgbWVsaG9yIGVudGVuZGlkYSByZXNvbHZlbmRvIGEgZGVtYW5kYSBwb3IgbW9lZGEgZW0gZnVuw6fDo28gZG8gdGVybW8gZGVycm8gbmEgdGF4YSBkZSBqdXJvcywgb3Ugc2VqYSwgICRhX3t0fV57bX0gPSBcYmV0YV97MX1hX3t0fV57cX0gKyBcYmV0YV97Mn1hX3t0fV57aX0gKyB1X3t0fV57TE19JCBkZSBvbmRlIHNlIHRpcmEgcXVlICRcYmV0YV97MX0kIGRldmUgc2VyIHBvc2l0aXZvIHBvcnF1ZSBtYWlzIG1vZWRhIMOpIG5lY2Vzc8OhcmlvIHBhcmEgdW0gbWFpb3Igdm9sdW1lIGRlIHRyYW5zYcOnw6NvIGUgcXVlICRcYmV0YV97Mn0kIGRldmUgc2VyIG5lZ2F0aXZvIHBvcnF1ZSBxdWFudG8gbWFpcyBhbHRhIGEgdGF4YSBkZSBqdXJvcyBtYWlvciBvIGN1c3RvIGRlIHNlIHJldGVyIG1vZWRhIGUsIGNvbnNlcXVlbnRlbWVudGUsIG1lbm9yIGEgcXVhbnRpZGFkZSBkZSBtb2VkYSBzZXLDoSBkZW1hbmRhZGEuIFBvciBmaW0sIGEgdGVyY2VpcmEgZXF1YcOnw6NvIHBvc3R1bGEgcXVlIG8gdGVybW8gZGUgZXJybyBkYSBiYXNlIG1vbmV0w6FyaWEgw6kgZGV0ZXJtaW5hZG8gcG9yIGNob3F1ZXMgZXjDs2dlbm9zIG5hIG9mZXJ0YSBtb25ldMOhcmlhLiBBcyB0csOqcyBlcXVhw6fDtWVzIGZvcm1hIHVtICoqbW9kZWxvIEFCKiogcXVlIHBvZGUgc2VyIGVzY3JpdG8gbmEgZm9ybWEgJFxib2xkc3ltYm9se0F9XGJvbGRzeW1ib2x7YV97dH19ID0gXGJvbGRzeW1ib2x7Qn1cYm9sZHN5bWJvbHt1X3t0fX0kOgoKJCQKXGJlZ2lue2JtYXRyaXh9CiAxICYgYV97MTJ9ICYgMCBcXCAKIGFfezIxfSAmIDEgJiBhX3syM30gXFwgCiAwICYgMCAgJiAxClxlbmR7Ym1hdHJpeH0gXGJvbGRzeW1ib2x7YV97dH19ID0gClxiZWdpbntibWF0cml4fQogYl97MTF9ICYgMCAmIDAgXFwgCiAwICYgYl97MjJ9ICYgMCAgXFwgCiAwICYgMCAgJiBiX3szM30KXGVuZHtibWF0cml4fVxib2xkc3ltYm9se3Vfe3R9fQokJAoKQ29tbyAkaz0zJCwgw6kgbmVjZXNzw6FyaW8gdW0gbcOtbmltbyBkZSAkMmteMiAtIFxmcmFje2tcbGVmdChrKzFccmlnaHQpfXsyfSA9IGteMiArIFxmcmFje2tcbGVmdChrLTFccmlnaHQpfXsyfSA9IDEyJCByZXN0cmnDp8O1ZXMgZW0gJFxib2xkc3ltYm9se0F9JCBlICRcYm9sZHN5bWJvbHtCfSQgcGFyYSBpZGVudGlmaWNhw6fDo28gZG8gbW9kZWxvLiBDb20gdHLDqnMgJDEkIGUgdHLDqnMgJDAkIGVtICRcYm9sZHN5bWJvbHtBfSQgZSBzZWlzICQwJCBlbSAkXGJvbGRzeW1ib2x7Qn0kIGEgY29uZGnDp8OjbyDDqSBzYXRpc2ZlaXRhIGUgbyBtb2RlbG8gw6kgZXhhdGFtZW50ZSBpZGVudGlmaWNhZG8uIAoKCiMjIyMjICoqUFJPQ0VTU08gREUgRVNUSU1Bw4fDg08qKgoKQWJhaXhvLCBvcyBwYXNzb3MgcGFyYSBlc3RpbWHDp8OjbyBlIGF2YWxpYcOnw6NvIGRvcyBtb2RlbG9zIFZBUiwgU1ZBUiBlIFZFQy4gQXBlc2FyIGRlIGFpbmRhIG7Do28gdGVybW9zIGVzdHVkYWRvIG9zIG1vZGVsb3MgVkVDIChwcsOzeGltYSBldGFwYSBkYSBkaXNjaXBsaW5hKSwgbyBwcm9jZXNzbyBhcXVpIGNvbnNpZGVyYSB0YWwgbW9kZWxvLiBQb3LDqW0sIHBlcmNlYmEgcXVlIGRlcGVuZGVuZG8gZGFzIGRlY2lzw7VlcyBuYXMgZXRhcGFzLCBzZWd1aW1vcyBjb20gYSBlc3RpbWHDp8OjbyBkb3MgbW9kZWxvcyBWQVIgZSBTVkFSLiAKCjEuIFZpc3VhbGl6YXIgb3MgZGFkb3MgZSBpZGVudGlmaWNhciBvYnNlcnZhw6fDtWVzIGZvcmEgZG8gcGFkcsOjbyAob3V0bGllcnMsIHNhem9uYWxpZGFkZSwgdGVuZMOqbmNpYSkKMi4gU2UgbmVjZXNzw6FyaW8sIHRyYW5zZm9ybWFyIG9zIGRhZG9zIHBhcmEgZXN0YWJpbGl6YXIgYSB2YXJpw6JuY2lhIChsb2dhcml0bW8gb3UgcmV0aXJhciBzYXpvbmFsaWRhZGUsIHBvciBleGVtcGxvKQozLiBBdmFsaWFyIGEgZnVuw6fDo28gZGUgY29ycmVsYcOnw6NvIGNydXphZGEgcGFyYSBjb25maXJtYXIgYSBwb3NzaWJpbGlkYWRlIGRlIG1vZGVsYWdlbSBtdWx0aXZhcmlhZGEuCjQuIFRlc3RhciBzZSBvcyBkYWRvcyBzw6NvIGVzdGFjaW9uw6FyaW9zIG91IGNvaW50ZWdyYWRvczoKICAgICogQ2FzbyBuw6NvIHRlbmhhIHJhaXogdW5pdMOhcmlhIChlc3RhY2lvbsOhcmlvcyksIGVzdGltYXIgVkFSIGNvbSBhcyBzw6lyaWVzIGVtIG7DrXZlbAogICAgKiBDYXNvIHRlbmhhIHJhaXogdW5pdMOhcmlhLCBtYXMgc2VtIGNvaW50ZWdyYcOnw6NvIMOpIHByZWNpc28gZGlmZXJlbmNpYXIgb3MgZGFkb3MgYXTDqSBzZSB0b3JuYXJlbSBlc3RhY2lvbsOhcmlvcyBlIGVzdGltYXIgVkFSIGNvbSBhcyBzw6lyaWVzIGRpZmVyZW5jaWFkYXMKICAgICogQ2FzbyB0ZW5oYSByYWl6IHVuaXTDoXJpYSwgbWFzIGNvbSBjb2ludGVncmHDp8OjbyBkZXZlbW9zIGVzdGltYXIgbyBWRUMgY29tIGFzIHPDqXJpZXMgZW0gbsOtdmVsCjUuIERlZmluaXIgYSBvcmRlbSAkcCQgcGFyYSBvcyBkYWRvcyBlbSBhbsOhbGlzZSBwb3IgbWVpbyBkZSBjcml0w6lyaW9zIGRlIGluZm9ybWHDp8OjbyAoZXNjb2xoZXIgbW9kZWxvIGNvbSBtZW5vciBBSUMsIHBvciBleGVtcGxvKQo2LiBFc3RpbWFyIG8gbW9kZWxvIGVzY29saGlkbyBubyBwYXNzbyA0CiAgICAqIFNlIFZBUiAoZm9ybWEgcmVkdXppZGEpOgogICAgICAgIC0gVmVyaWZpY2FyIHNpZ25pZmljw6JuY2lhIGVzdGF0w61zdGljYSBkbyBtb2RlbG8gZXN0aW1hZG8gZSwgY2FzbyBzZWphIG5lY2Vzc8OhcmlvLCBlbGltaW5hciBwYXLDom1ldHJvcyBuw6NvIHNpZ25pZmljYW50ZXMuCiAgICAgICAgLSBBbmFsaXNhciBhIGNhdXNhbGlkYWRlIGRlIEdyYW5nZXIgKHZhcmnDoXZlaXMgcXVlIG7Do28gZ3JhbmdlciBjYXVzYSBhcyBkZW1haXMgcG9kZW0gc2VyIHJldGlyYWRhcyBkbyBtb2RlbG8pCiAgICAqIFNlIFNWQVIgKGZvcm1hIGVzdHJ1dHVyYWwpOgogICAgICAgIC0gRGVmaW5pciBhIGVzdHJ1dHVyYSBwYXJhIGFzIG1hdHJpemVzIEEgZSBCIGUgbyBtb2RlbG8gZGUgaW50ZXJlc3NlIChBLCBCIG91IEFCKQogICAgICAgIC0gVmVyaWZpY2FyIHNpZ25pZmljw6JuY2lhIGVzdGF0w61zdGljYSBkbyBtb2RlbG8gZXN0aW1hZG8gZSwgY2FzbyBzZWphIG5lY2Vzc8OhcmlvLCBlbGltaW5hciBwYXLDom1ldHJvcyBuw6NvIHNpZ25pZmljYW50ZXMuCiAgICAgICAgLSBBbmFsaXNhciBhIGNhdXNhbGlkYWRlIGRlIEdyYW5nZXIgKHZhcmnDoXZlaXMgcXVlIG7Do28gZ3JhbmdlciBjYXVzYSBhcyBkZW1haXMgcG9kZW0gc2VyIHJldGlyYWRhcyBkbyBtb2RlbG8pCiAgICAqIFNlIFZFQyAoTW9kZWxvIFZldG9yaWFsIGRlIENvcnJlw6fDo28gZGUgRXJyb3MpCiAgICAgICAgLSBVc2FyIGEgcXVhbnRpZGFkZSBkZSB2ZXRvcmVzIGRlIGNvaW50ZWdyYcOnw6NvIG9idGlkb3Mgbm8gdGVzdGUgZGUgY29pbnRlZ3Jhw6fDo28gcGFyYSBlc3RpbWFyIG8gbW9kZWxvIFZFQwo4LiBFeGFtaW5hciBzZSBvcyByZXPDrWR1b3Mgc2UgY29tcG9ydGFtIGNvbW8gcnXDrWRvIGJyYW5jbyBlIGNvbmRpw6fDtWVzIGRlIGVzdGFjaW9uYXJpZWRhZGUgZG8gbW9kZWxvLiBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmFyIGFvIHBhc3NvIDMgb3UgNC4KICAgICogVmVyaWZpY2FyIGEgYXV0b2NvcnJlbGHDp8OjbyBzZXJpYWwgcG9yIG1laW8gZGEgRkFDIGUgRkFDUCBkb3MgcmVzw61kdW9zIGRlIGNhZGEgZXF1YcOnw6NvIGRvIG1vZGVsbyBlc3RpbWFkby4gTyBpZGVhbCDDqSBuw6NvIHRlciBkZWZhc2FnZW5zIHNpZ25pZmljYXRpdmFzLgogICAgKiBWZXJpZmljYXIgY29ycmVsYcOnw6NvIGNydXphZGEgcG9yIG1laW8gZGEgRkNDIGRvcyByZXPDrWR1b3MuCiAgICAqIEFuYWxpc2FyIGEgZXN0YWJpbGRpYWRlIGRvIG1vZGVsbyBlc3RpbWFkbyBhdHJhdsOpcyBkb3MgYXV0b3ZhbG9yZXMgYXNzb2NpYWRvcyBhbyBtZXNtby4KICAgICogVmVyaWZpY2FyIGEgZGlzdHJpYnVpw6fDo28gZGUgcHJvYmFiaWxpZGFkZSAoTm9ybWFsKSBwYXJhIG9zIHJlc8OtZHVvcyBkZSBjYWRhIGVxdWHDp8OjbyBkbyBtb2RlbG8uCiAgICAqIEFuYWxpc2FyIGhldGVyb2NlZGFzdGljaWRhZGUgY29uZGljaW9uYWwgKHJlc8OtZHVvcyBkZXZlbSBzZXIgaG9tb2NlZGFzdGljb3MsIG91IHNlamEsIHZhcmnDom5jaWEgY29uZGljaW9uYWwgY29uc3RhbnRlKQo5LiBVbWEgdmV6IHF1ZSBvcyByZXPDrWR1b3Mgc8OjbyBydcOtZG8gYnJhbmNvIGUgbyBtb2RlbG8gw6kgZXN0w6F2ZWw6CiAgICAqIEFuYWxpc2FyIGZ1bsOnw7VlcyBkZSByZXNwb3N0YSBhbyBpbXB1bHNvCiAgICAqIEFuYWxpc2FyIGEgaW1wb3J0w6JuY2lhIGRhcyB2YXJpw6F2ZWlzIHBhcmEgZXhwbGljYXIgYSB2YXJpw6JuY2lhIGRvIGVycm8gZGUgcHJldmlzw6NvIGRlIGNhZGEgdmFyacOhdmVsCiAgICAqIEZhemVyIHByZXZpc8O1ZXMgcGFyYXMgYXMgdmFyacOhdmVpcyBkbyBtb2RlbG8KCgojIyMjIyAqKlJFRkVSw4pOQ0lBUyoqCg==