Elige un país (que no sea USA), y descarga de FRED las siguientes series:

Indice de producción industrial Tipo de interés a largo plazo Tipo de interés a medio plazo Tipo de interés a corto plazo

Apartado 1

Para cada una de las series anteriores construye varios modelo ARIMA (al menos 2). Usa las 3 estrategias de modelización.

Para crear nuestros modelos hemos obtenido las series temporales de México.

Modelos del Indice de producción industrial.

Como vemos en los gráficos anteriores nuestra serie presenta una clara tendencia creciente por lo que es necesario diferenciar la serie al menos una vez.

Modelizador automático

Empezaremos utilizado el modelizador automático para hacernos una mejor idea de como pueden ser nuestros modelos.

Series: X 
ARIMA(0,0,4) with non-zero mean 

Coefficients:
         ma1     ma2     ma3      ma4    mean
      0.3924  0.2704  0.0598  -0.3755  0.0044
s.e.  0.0943  0.1073  0.1037   0.0979  0.0014

sigma^2 estimated as 0.0001277:  log likelihood=354.37
AIC=-696.74   AICc=-695.97   BIC=-680.27

El modelizador automático nos indica un modelo MA(4).

Vemos que todos los retardos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF, salvo alguno retardo muy al final que no tiene importancia.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 36.269, df = 2, p-value = 1.331e-08


    Skewness

data:  resid
statistic = 0.49059, p-value = 0.03173


    Kurtosis

data:  resid
statistic = 5.5703, p-value = 1.84e-08

No se cumple la normalidad de los residuos, posiblemente debido a outliers en nuestra serie.

Modelo ARMA

Crearemos ahora un modelo ARMA yendo de lo específico (ARMA(1,1)) a lo general.

ARMA(1,1)

Series: X 
ARIMA(1,0,1) with zero mean     

Coefficients:
         ar1     ma1
      0.4535  0.0129
s.e.  0.1506  0.1604

sigma^2 estimated as 0.000154:  log likelihood=342.47
AIC=-678.94   AICc=-678.72   BIC=-670.7

En la ACF todos menos el retardo 4 y 17 se encuentran dentro de las bandas de confianza y en la PACF los retardos 4, 11 y 20, por lo que queda alguna estructura residual.

Algunos p-valores rechazan la H0 del estadístico de Ljung-Box para algunos retardos, esto nos indica que existe autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 148.75, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.33629, p-value = 0.141


    Kurtosis

data:  resid
statistic = 8.5309, p-value < 2.2e-16

No se cumple la normalidad de los residuos gracias a la kurtosis, posiblemente debido a outliers en nuestra serie.

Este modelo no cumple la diagnosis y por tanto no nos sirve, probaremos ahora con ARMA(2,1)

ARMA(2,1)

Series: X 
ARIMA(2,0,1) with zero mean     

Coefficients:
         ar1      ar2      ma1
      0.9979  -0.2926  -0.5097
s.e.  0.4053   0.1932   0.4047

sigma^2 estimated as 0.0001547:  log likelihood=342.72
AIC=-677.45   AICc=-677.08   BIC=-666.47

En este modelo el BIC aumenta de -670.7 a -666.47 por lo que es un peor modelo para predecir.

Al igual que en el ARMA(1,1) en la ACF todos menos el retardo 4 y 17 se encuentran dentro de las bandas de confianza, en la PACF los retardos 4, 11 y 20, por lo que queda alguna estructura residual (hay autocorrelaciones).

Ocurre lo mismo que en el ARMA(1,1).

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 135.06, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.38959, p-value = 0.08808


    Kurtosis

data:  resid
statistic = 8.2517, p-value < 2.2e-16

Lo mismo que en el ARMA(1,1) no cumple con la normalidad.

Tampoco nos sirve este modelo, así que probaremos ahora un ARMA(1,2)

ARMA(1,2)

Series: X 
ARIMA(1,0,2) with zero mean     

Coefficients:
         ar1     ma1     ma2
      0.2125  0.2179  0.3189
s.e.  0.1678  0.1435  0.1569

sigma^2 estimated as 0.0001514:  log likelihood=343.88
AIC=-679.76   AICc=-679.4   BIC=-668.78

El BIC sigue siendo peor que en el ARMA(1,1).

Vemos que hay un par de retardos que se salen de las bandas de confianza en los gráficos de la ACF y PACF. Hay menos retados fuera de las bandas de confianza que en el modelo ARMA(1,1) por lo que podría decirse que mejora un poco este modelo.

Ocurre lo mismo con los p-valores del estadístico Ljung-Box que en el modelo ARMA(1,1).

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 67.562, df = 2, p-value = 2.109e-15


    Skewness

data:  resid
statistic = 0.26245, p-value = 0.2505


    Kurtosis

data:  resid
statistic = 6.7181, p-value = 3.989e-16

No se cumple la normalidad de los residuos, sin embargo, el p-valor ha aumentado considerablemente sobretodo para la simetría.

Probaremos ahora un ARMA(1,3)

ARMA(1,3)

Series: X 
ARIMA(1,0,3) with zero mean     

Coefficients:
          ar1     ma1     ma2     ma3
      -0.4688  1.0181  0.7341  0.4931
s.e.   0.1724  0.1429  0.1233  0.1040

sigma^2 estimated as 0.0001394:  log likelihood=348.86
AIC=-687.73   AICc=-687.18   BIC=-674

En este caso el BIC es de -674 que es mucho mejor que en el ARMA(1,1) con -670.

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF, salvo alguno muy al final en la PACF.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 24.982, df = 2, p-value = 3.761e-06


    Skewness

data:  resid
statistic = 0.30505, p-value = 0.1817


    Kurtosis

data:  resid
statistic = 5.2003, p-value = 1.461e-06

No se cumple la normalidad de los residuos, pero de nuevo los valores del estadístico ha mejorado considerablemente. Teniendo en cuenta que es posible que no consigamos normalidad en los residuos este es un modelo válido para nuestra serie. Probaremos un modelo ARMA(2,2).

ARMA(2,2)

Series: X 
ARIMA(2,0,2) with zero mean     

Coefficients:
         ar1      ar2     ma1     ma2
      0.3366  -0.5186  0.0465  0.8232
s.e.  0.1353   0.1088  0.0820  0.1029

sigma^2 estimated as 0.0001402:  log likelihood=348.34
AIC=-686.69   AICc=-686.14   BIC=-672.96

En este caso el BIC es mejor que el ARMA(1,1) pero peor que el ARMA(1,3)

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF, salvo uno muy al final en la PACF.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 24.251, df = 2, p-value = 5.419e-06


    Skewness

data:  resid
statistic = 0.12472, p-value = 0.5851


    Kurtosis

data:  resid
statistic = 5.2358, p-value = 9.872e-07

No se cumple la normalidad de los residuos, sin embargo el p-valor de la simetría es bastante alto.

Este modelo también sería válido, aunque es un poco peor para predecir que el modelo ARMA(1,3).

Por último crearemos un modelo ARMA(2,3)

ARMA(2,3)

Series: X 
ARIMA(2,0,3) with zero mean     

Coefficients:
          ar1      ar2     ma1     ma2     ma3
      -0.1433  -0.5492  0.6468  1.0728  0.5016
s.e.   0.1377   0.0906  0.1662  0.0600  0.1587

sigma^2 estimated as 0.0001279:  log likelihood=351.91
AIC=-691.83   AICc=-691.05   BIC=-675.36

En este caso el BIC es mejor que cualquier modelo ARMA anterior.

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 38.31, df = 2, p-value = 4.798e-09


    Skewness

data:  resid
statistic = 0.28662, p-value = 0.2095


    Kurtosis

data:  resid
statistic = 5.7688, p-value = 1.353e-09

No se cumple la normalidad de los residuos y empeora un poco respecto a modelos anteriores.

Este modelo también es válido pero en este caso estamos sobreparametrizando un poco el modelo, lo cual no es muy deseable.

Podriamos elegir entre un ARMA(2,3) y un ARMA(1,3), el modelo ARMA(2,2) que también es válido tiene un BIC inferior a los dos anteriores. El ajuste del ARMA(1,3) queda así:

Modelo MA

Por último, aprovechando que el modelizador automático nos indico que un ARMA(0,4) puede ser el mejor modelo crearemos un modelo MA yendo de lo general a lo específico.

MA(10)

Series: X 
ARIMA(0,0,10) with zero mean     

Coefficients:
         ma1     ma2     ma3      ma4      ma5     ma6     ma7     ma8     ma9    ma10
      0.4929  0.4373  0.1737  -0.3283  -0.0025  0.1279  0.0686  0.0006  0.0789  0.1678
s.e.  0.0916  0.1176  0.1110   0.1166   0.1160  0.1179  0.1189  0.1169  0.1148  0.0958

sigma^2 estimated as 0.00013:  log likelihood=353.47
AIC=-684.94   AICc=-682.37   BIC=-654.74

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1, aunque hay un par que se encuentran en el límite.


    Jarque Bera Test

data:  resid
X-squared = 39.256, df = 2, p-value = 2.991e-09


    Skewness

data:  resid
statistic = 0.46398, p-value = 0.04222


    Kurtosis

data:  resid
statistic = 5.7076, p-value = 3.085e-09

No se cumple la normalidad de los residuos.

Vemos que este modelo cumple la diagnosis (exceptuando la normalidad) y por tanto comenzaremos a reducir el orden del modelo MA hasta encontrar alguno que no cumpla con la diagnosis.

MA(7)

Series: X 
ARIMA(0,0,7) with zero mean     

Coefficients:
         ma1     ma2     ma3      ma4     ma5     ma6     ma7
      0.4973  0.3819  0.1127  -0.3267  0.0158  0.1485  0.1388
s.e.  0.0922  0.1050  0.1099   0.1088  0.1026  0.1199  0.1019

sigma^2 estimated as 0.0001344:  log likelihood=352.07
AIC=-688.14   AICc=-686.78   BIC=-666.18

El BIC ha mejorado respecto al modelo anterior.

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 26.049, df = 2, p-value = 2.206e-06


    Skewness

data:  resid
statistic = 0.24944, p-value = 0.2748


    Kurtosis

data:  resid
statistic = 5.2776, p-value = 6.177e-07

No se cumple la normalidad de los residuos gracias a la kurtosis, la normalidad ha mejorado bastante respecto al modelo anterior.

Este modelo también es válido así que podemos continuar bajando el orden.

MA(5)

Series: X 
ARIMA(0,0,5) with zero mean     

Coefficients:
         ma1     ma2     ma3      ma4     ma5
      0.5070  0.3983  0.1609  -0.3251  -0.056
s.e.  0.0945  0.1022  0.0946   0.1050   0.097

sigma^2 estimated as 0.0001354:  log likelihood=350.92
AIC=-689.83   AICc=-689.06   BIC=-673.36

De nuevo el BIC aumenta considerablemente.

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF, salvo un par al final de la PACF

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 20.557, df = 2, p-value = 3.437e-05


    Skewness

data:  resid
statistic = 0.34026, p-value = 0.1363


    Kurtosis

data:  resid
statistic = 4.9563, p-value = 1.85e-05

No se cumple la normalidad de los residuos debido a la kurtosis pero mejora respecto al modelo anterior.

Este modelo también es válido así que continuamos con un MA(4) (el recomendado por el modelizador automático).

MA(4)

Series: X 
ARIMA(0,0,4) with zero mean     

Coefficients:
         ma1     ma2     ma3      ma4
      0.4861  0.3866  0.1698  -0.2917
s.e.  0.0899  0.1034  0.0979   0.0900

sigma^2 estimated as 0.0001347:  log likelihood=350.75
AIC=-691.5   AICc=-690.95   BIC=-677.78

De nuevo mejora el BIC respecto al MA(5).

Vemos que todos los residuos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF, salvo en los dos últimos retardos.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 25.01, df = 2, p-value = 3.708e-06


    Skewness

data:  resid
statistic = 0.36238, p-value = 0.1126


    Kurtosis

data:  resid
statistic = 5.1666, p-value = 2.109e-06

No se cumple la normalidad de los residuos y empeora un poco respecto al modelo anterior.

Este modelo es válido así que probamos ahora con MA(3).

MA(3)

Series: X 
ARIMA(0,0,3) with zero mean     

Coefficients:
         ma1     ma2     ma3
      0.5876  0.5021  0.2882
s.e.  0.1209  0.1594  0.1234

sigma^2 estimated as 0.000146:  log likelihood=345.84
AIC=-683.68   AICc=-683.32   BIC=-672.71

En este caso el BIC empeora respecto al anterior modelo.

En este modelo ya vemos algunos retardos distintos que se salen de las bandas de confianza, por ejemplo el 4.

En este caso se rechaza la H0 para el retardo 5, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 31.779, df = 2, p-value = 1.257e-07


    Skewness

data:  resid
statistic = 0.25895, p-value = 0.2569


    Kurtosis

data:  resid
statistic = 5.5227, p-value = 3.349e-08

No se cumple la normalidad de los residuos y empeora un poco respecto al modelo anterior.

Este modelo ya no cumple con la diagnosis tan bien como el MA(4), además el BIC es peor que con el modelo MA(4).

Por tanto el modelo que nos quedaremos al final es el MA(4) que además justamente en este caso coincide con lo obtenido con el modelizador automático.

El gráfico de MA(4):

Modelos de tipo de interés a largo plazo.

Al igual que en el índice de producción industrial vemos en el gráfico de la ACF que nuestra serie presenta una clara tendencia por lo que es necesario diferenciar la serie al menos una vez. Además he visto que hay heterocedasticisdad en la serie por lo que utilizo una transformación logaritmica.

Modelizador automático

De nuevo comenzaremos con el modelizador automático para hacernos una idea de como pueden ser nuestros modelos.

Series: X 
ARIMA(3,0,1) with zero mean     

Coefficients:
          ar1     ar2     ar3     ma1
      -0.3273  0.0259  0.2235  0.3885
s.e.   0.2081  0.0772  0.0751  0.2068

sigma^2 estimated as 0.003084:  log likelihood=269.8
AIC=-529.59   AICc=-529.25   BIC=-513.57

Hemos obtenido un un modelo ARMA(3,1)

Vemos que casi todos los retardos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 92.441, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.019832, p-value = 0.913


    Kurtosis

data:  resid
statistic = 6.4912, p-value < 2.2e-16

No se cumple la normalidad de los residuos gracias a la kurtosis, posiblemente debido a outliers en nuestra serie.

Este modelo ARMA(3,1) puede ser perfectamente un modelo válido.

Modelo AR

Comenzaremos esta vez buscando un modelo AR, yendo de lo específico a lo general.

AR(1)

Series: X 
ARIMA(1,0,0) with zero mean     

Coefficients:
         ar1
      0.0440
s.e.  0.0738

sigma^2 estimated as 0.003209:  log likelihood=264.74
AIC=-525.49   AICc=-525.42   BIC=-519.08

Vemos que el BIC de este modelo es mejor que el del modelizador automático.

Tiene un par de retardos fuera de las bandas de confianza para la ACF y PACF.

Casi todos los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 214.35, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.083429, p-value = 0.6459


    Kurtosis

data:  resid
statistic = 8.3139, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Este modelo no es válido por lo que probaremos un AR(2).

AR(2)

Series: X 
ARIMA(2,0,0) with zero mean     

Coefficients:
         ar1     ar2
      0.0434  0.0147
s.e.  0.0739  0.0749

sigma^2 estimated as 0.003227:  log likelihood=264.76
AIC=-523.53   AICc=-523.39   BIC=-513.92

El BIC ha empeorado un poco respecto al modelo anterior.

Sigue habiando un par de retardos fuera de las bandas de confianza para la ACF y PACF.

Casi todos los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 212.25, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.071387, p-value = 0.6942


    Kurtosis

data:  resid
statistic = 8.2886, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Seguimos sin poder aceptar este modelo por lo que probaremos un AR(3).

AR(3)

Series: X 
ARIMA(3,0,0) with zero mean     

Coefficients:
         ar1     ar2     ar3
      0.0399  0.0102  0.2138
s.e.  0.0722  0.0731  0.0737

sigma^2 estimated as 0.003099:  log likelihood=268.87
AIC=-529.74   AICc=-529.51   BIC=-516.92

En este caso el BIC mejora un poco respecto al AR(2) pero es peor que el AR(1).

Aqui ya solo tiene un retardo fuera de las bandas de confianza para la ACF y PACF, lo cual se puede considerar como válido.

Ningún p-valor rechaza la H0 del estadístico de Ljung-Box para ningún retardo, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 126.22, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.061524, p-value = 0.7347


    Kurtosis

data:  resid
statistic = 7.0779, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis pero ha mejorado respecto al modelo anterior.

Este modelo ya podemos considerarlo como nuestro modelo final.

Modelos de tipo de interés a medio plazo.

Al igual que en los tipos de interes a largo plazo vemos en el gráfico de la ACF que nuestra serie presenta tendencia por lo que es necesario diferenciar la serie al menos una vez. Además he visto que hay heterocedasticisdad en la serie por lo que utilizo una transformación logaritmica.

Modelizador automático

De nuevo comenzaremos con el modelizador automático para hacernos una idea de como pueden ser nuestros modelos.

Series: X 
ARIMA(4,0,2) with zero mean     

Coefficients:
         ar1      ar2     ar3     ar4      ma1     ma2
      0.8257  -1.0267  0.4159  0.0007  -0.5467  0.9148
s.e.  0.0982   0.1112  0.0985  0.0950   0.0651  0.0817

sigma^2 estimated as 0.002047:  log likelihood=307.53
AIC=-601.07   AICc=-600.42   BIC=-578.64

Hemos obtenido un un modelo ARMA(4,2).

Vemos que todos los retardos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Ninguno de los p-valores rechaza la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 265.91, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.76826, p-value = 2.324e-05


    Kurtosis

data:  resid
statistic = 8.7187, p-value < 2.2e-16

No se cumple la normalidad de los residuos, posiblemente debido a outliers en nuestra serie.

Modelo MA

Crearemos un modelo MA yendo de lo específico a lo general, comenzaremos con MA(1).

MA(1)

Series: X 
ARIMA(0,0,1) with zero mean     

Coefficients:
         ma1
      0.3068
s.e.  0.0686

sigma^2 estimated as 0.002221:  log likelihood=298.18
AIC=-592.36   AICc=-592.29   BIC=-585.95

Vemos que con un MA(1) el BIC mejora respecto al modelizador automático.

Vemos que salvo para un retardo todos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 301.57, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.81608, p-value = 6.97e-06


    Kurtosis

data:  resid
statistic = 9.0913, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Este modelo cumple lo necesario para ser válido, por lo tanto no es necesario hacer un MA(2).

Modelo AR

Crearemos también un modelo AR yendo de lo general a lo particular.

AR(10)

Series: X 
ARIMA(10,0,0) with zero mean     

Coefficients:
         ar1     ar2     ar3     ar4      ar5      ar6     ar7     ar8     ar9     ar10
      0.2879  0.0371  0.1260  0.0696  -0.0610  -0.1175  0.0115  0.2341  0.0362  -0.3030
s.e.  0.0712  0.0738  0.0778  0.0770   0.0813   0.0789  0.0831  0.0820  0.0854   0.0801

sigma^2 estimated as 0.002018:  log likelihood=310.64
AIC=-599.28   AICc=-597.73   BIC=-564.04

El BIC del AR(10) es mucho peor que cualquiera de los modelos anteriores.

Vemos que hay un retardo fuera de las bandas de confianza en la ACF y dos en la PACF lo cual no es muy buena señal.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 441.43, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.94722, p-value = 1.82e-07


    Kurtosis

data:  resid
statistic = 10.391, p-value < 2.2e-16

No se cumple la normalidad de los residuos, posiblemente debido a outliers en nuestra serie.

Probaremos ahora con un AR(7).

AR(7)

Series: X 
ARIMA(7,0,0) with zero mean     

Coefficients:
         ar1      ar2     ar3     ar4      ar5      ar6    ar7
      0.2951  -0.0157  0.1506  0.0632  -0.0438  -0.0789  0.043
s.e.  0.0742   0.0772  0.0818  0.0833   0.0846   0.0844  0.083

sigma^2 estimated as 0.00221:  log likelihood=301.65
AIC=-587.3   AICc=-586.46   BIC=-561.66

El BIC empeora respecto al AR(10).

Vemos que solo hay un retardo fuera de las bandas de confianza en la ACF y dos en la PACF lo cual sigue siendo no muy buena señal.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 519.87, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.3054, p-value = 6.511e-13


    Kurtosis

data:  resid
statistic = 10.857, p-value < 2.2e-16

No se cumple la normalidad de los residuos, posiblemente debido a outliers en la serie.

Probaremos ahora con un AR(5).

AR(5)

Series: X 
ARIMA(5,0,0) with zero mean     

Coefficients:
         ar1      ar2     ar3     ar4      ar5
      0.2968  -0.0194  0.1426  0.0636  -0.0568
s.e.  0.0743   0.0774  0.0815  0.0826   0.0811

sigma^2 estimated as 0.002197:  log likelihood=301.18
AIC=-590.35   AICc=-589.87   BIC=-571.13

En este caso el BIC mejora respecto a los dos modelos AR anteriores.

Vemos que sigue habiendo un retardo fuera de las bandas de confianza en la ACF y otro en la PACF, esto es bastante aceptable.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 465.14, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.2067, p-value = 3.007e-11


    Kurtosis

data:  resid
statistic = 10.451, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Probaremos ahora con un AR(4).

AR(4)

Series: X 
ARIMA(4,0,0) with zero mean     

Coefficients:
         ar1      ar2     ar3     ar4
      0.2958  -0.0252  0.1380  0.0478
s.e.  0.0744   0.0770  0.0813  0.0795

sigma^2 estimated as 0.002191:  log likelihood=300.93
AIC=-591.86   AICc=-591.52   BIC=-575.84

El BIC vuelve a mejorar en este caso.

Vemos que sigue habiendo un retardo fuera de las bandas de confianza en la ACF y otro en la PACF.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 434.22, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.15, p-value = 2.394e-10


    Kurtosis

data:  resid
statistic = 10.209, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Probaremos ahora con un AR(3).

AR(3)

Series: X 
ARIMA(3,0,0) with zero mean     

Coefficients:
         ar1      ar2     ar3
      0.3011  -0.0246  0.1539
s.e.  0.0739   0.0772  0.0770

sigma^2 estimated as 0.002183:  log likelihood=300.75
AIC=-593.5   AICc=-593.27   BIC=-580.68

El BIC vuelve a mejorar bastante respecto al modelo AR(4)

Vemos que hay un retardo fuera de las bandas de confianza en la ACF y otro en la PACF lo cual es aceptable.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 425, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.1526, p-value = 2.179e-10


    Kurtosis

data:  resid
statistic = 10.123, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Probaremos ahora con un AR(2).

AR(2)

Series: X 
ARIMA(2,0,0) with zero mean     

Coefficients:
         ar1     ar2
      0.3098  0.0190
s.e.  0.0746  0.0748

sigma^2 estimated as 0.002219:  log likelihood=298.78
AIC=-591.55   AICc=-591.42   BIC=-581.94

El BIC vuelve a mejorar respecto al modelo anterior pero esta vez por poco.

Sigue habiendo solo un retardo fuera de las bandas de confianza en la ACF y PACF.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 303.38, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.8673, p-value = 1.782e-06


    Kurtosis

data:  resid
statistic = 9.0826, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Probaremos ahora con un AR(1).

AR(1)

Series: X 
ARIMA(1,0,0) with zero mean     

Coefficients:
         ar1
      0.3159
s.e.  0.0706

sigma^2 estimated as 0.002208:  log likelihood=298.74
AIC=-593.49   AICc=-593.42   BIC=-587.08

Vemos que el BIC de nuevo es mucho mejor en este modelo.

Sigue habiendo solo un retardo fuera de las bandas de confianza en la ACF y PACF.

Niguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 301.57, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.84047, p-value = 3.675e-06


    Kurtosis

data:  resid
statistic = 9.078, p-value < 2.2e-16

No se cumple la normalidad de los residuos.

Como el modelo AR(1) es válido este es nuestro modelo final, además tiene un BIC mejor que cualquiera de los modelos anteriores y cumple con la diagnosis.

En este caso nuestro modelo AR(1) funciona mucho mejor que el ARMA del modelizador automático.

Modelos de tipo de interés a corto plazo.

Al igual que en los tipos de interes a largo y medio plazo vemos en los gráficos anteriores que nuestra serie presenta tendencia por lo que es necesario diferenciar la serie al menos una vez. Además he visto que hay heterocedasticisdad en la serie por lo que hago una transformación logaritmica.

Modelizador automático

De nuevo comenzaremos con el modelizador automático para hacernos una idea de como pueden ser nuestros modelos.

Series: X 
ARIMA(4,0,2) with zero mean     

Coefficients:
         ar1      ar2     ar3     ar4     ma1     ma2
      0.3527  -0.7903  0.2541  0.1960  0.0659  0.8880
s.e.  0.0874   0.0898  0.0882  0.0843  0.0570  0.0671

sigma^2 estimated as 0.00169:  log likelihood=324.4
AIC=-634.8   AICc=-634.16   BIC=-612.38

Hemos obtenido un un modelo ARMA(4,2), que viene siendo igual que el de la serie a corto plazo.

Vemos que salvo un retardo todos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Vemos que solo en unos pocos retardos los p-valores rechazan la H0 del estadístico de Ljung-Box.

Las inversas de las raices de los polinomios son en norma todas menores que 1, aunque estan muy al límite algunas.


    Jarque Bera Test

data:  resid
X-squared = 1211.8, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.1035, p-value = 1.222e-09


    Kurtosis

data:  resid
statistic = 15.447, p-value < 2.2e-16

No se cumple la normalidad de los residuos, posiblemente debido a outliers en nuestra serie.

Este modelo no cumple muy bien la diagnosis.

Modelo AR

AR(1)

Series: X 
ARIMA(1,0,0) with zero mean     

Coefficients:
         ar1
      0.4037
s.e.  0.0685

sigma^2 estimated as 0.001869:  log likelihood=313.86
AIC=-623.73   AICc=-623.66   BIC=-617.32

Vemos que el BIC de este modelo es mejor que el del modelizador automático.

Vemos que hay un par de retardos fuera de las bandas de confianza en la ACF y PACF, lo cual nos puede indicar autocorrelación en los residuos.

A partir del retardo 10 los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 688.92, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.2176, p-value = 1.996e-11


    Kurtosis

data:  resid
statistic = 12.215, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Probaremos ahora con un AR(2)

AR(2)

Series: X 
ARIMA(2,0,0) with zero mean     

Coefficients:
         ar1      ar2
      0.4109  -0.0174
s.e.  0.0751   0.0752

sigma^2 estimated as 0.001879:  log likelihood=313.89
AIC=-621.78   AICc=-621.65   BIC=-612.17

Vemos que el BIC empeora respecto al AR(1).

Vemos que hay un par de retardos fuera de las bandas de confianza en la ACF y PACF.

A partir del retardo 10 los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 665.54, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.1979, p-value = 4.176e-11


    Kurtosis

data:  resid
statistic = 12.057, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

He ido probado varios modelos con el mismo diagnostico hasta que para AR(10) se corrige la autocorrelación en los resiudos.

AR(10)

Series: X 
ARIMA(10,0,0) with zero mean     

Coefficients:
         ar1     ar2      ar3     ar4     ar5      ar6      ar7     ar8     ar9     ar10
      0.4050  0.0532  -0.0171  0.0706  0.0784  -0.1271  -0.1108  0.3031  0.0723  -0.3515
s.e.  0.0701  0.0757   0.0795  0.0764  0.0798   0.0770   0.0809  0.0796  0.0839   0.0755

sigma^2 estimated as 0.001597:  log likelihood=331.5
AIC=-641   AICc=-639.45   BIC=-605.76

Vemos que en este caso el BIC es un poco peor que el AR(1)

Todos los retardos excepto uno se encuentran dentro de las bandas de confianza en la ACF y PACF.

Ninguno de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual no nos indica que haya autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 809.67, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.1124, p-value = 8.988e-10


    Kurtosis

data:  resid
statistic = 13.091, p-value < 2.2e-16

No se cumple la normalidad de los residuos debido a la kurtosis.

Este modelo si bien cumple mejor la diagnosis esta muy sobreparametrizado y es preferible utilizar un AR(1) que tiene mejor capacidad de predicción y no esta sobreparametrizado.

Modelo ARMA

ARMA(4,2)

Hemos visto que el modelo ARMA(4,2) es válido en el apartado del modelizador automático, por ello partiremos de aqui y veremos si se puede reducir.

ARMA(4,1)

Series: X 
ARIMA(4,0,1) with zero mean     

Coefficients:
         ar1      ar2     ar3     ar4      ma1
      0.4582  -0.0756  0.0664  0.0740  -0.0543
s.e.  0.5170   0.2244  0.0919  0.0953   0.5138

sigma^2 estimated as 0.001884:  log likelihood=315.15
AIC=-618.29   AICc=-617.81   BIC=-599.07

Vemos que en este caso el BIC empeora respecto al ARMA(4,2)

Hay dos retardos que se encuentran fuera de las bandas de confianza en la ACF y PACF.

A partir del retardo 10 algunos de los p-valores rechazan la H0 del estadístico de Ljung-Box, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 954.6, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.4191, p-value = 5.465e-15


    Kurtosis

data:  resid
statistic = 13.855, p-value < 2.2e-16

No se cumple la normalidad de los residuos.

ARMA(3,2)

Series: X 
ARIMA(3,0,2) with zero mean     

Coefficients:
         ar1      ar2     ar3      ma1     ma2
      0.7848  -1.0971  0.5233  -0.3829  0.9210
s.e.  0.1190   0.0494  0.0667   0.1370  0.0671

sigma^2 estimated as 0.001694:  log likelihood=323.64
AIC=-635.29   AICc=-634.81   BIC=-616.06

Vemos que en este caso el BIC mejora respecto al ARMA(4,2)

Hay dos retardos que se encuentran fuera de las bandas de confianza en la ACF y PACF.

Ninguno de los p-valores rechazan la H0 del estadístico de Ljung-Box para ningun retardo, lo cual no nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 631.81, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.2813, p-value = 1.705e-12


    Kurtosis

data:  resid
statistic = 11.761, p-value < 2.2e-16

No se cumple la normalidad de los residuos.

Este modelo cumple la diagnosis, mejora el BIC y encima tiene un parámetro menos por lo que es preferible al modelo ARMA(4,2) del modelizador automático.

Probaremos por último un modelo ARMA(2,2)

ARMA(2,2)

Series: X 
ARIMA(2,0,2) with zero mean     

Coefficients:
         ar1     ar2      ma1      ma2
      0.6437  0.0779  -0.2382  -0.2176
s.e.  0.5169  0.3056   0.5079   0.1711

sigma^2 estimated as 0.001882:  log likelihood=314.73
AIC=-619.46   AICc=-619.12   BIC=-603.44

Vemos que ahora el BIC empeora bastante.

Hay dos retardos que se encuentran fuera de las bandas de confianza en la ACF y PACF.

A partir del retardo 10 hay varios p-valores que rechazan la H0 del estadístico de Ljung-Box, lo cual nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 918.24, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 1.4254, p-value = 4.138e-15


    Kurtosis

data:  resid
statistic = 13.628, p-value < 2.2e-16

No se cumple la normalidad de los residuos.

Este modelo no cumple la diagnosis y por tanto nos quedamos con el modelo ARMA(3,2).

Apartado 2

Construye las series de los diferenciales de tipos de interés (tipos a medio y largo plazo menos tipos de interés a corto plazo) y construye modelos ARIMA igual que en el apartado anterior.

Modelos del diferencial de tipo de interés a largo plazo

De nuevo vemos que nuestra serie presenta tendencia por lo que es necesario diferenciar la serie al menos una vez. También aplicaremos una transformación logaritmica ya que hay heterocedasticidad.

Modelizador automático

De nuevo comenzaremos con el modelizador automático para hacernos una idea de como pueden ser nuestros modelos.

Series: X 
ARIMA(2,0,0) with zero mean     

Coefficients:
          ar1      ar2
      -0.1150  -0.1539
s.e.   0.0735   0.0744

sigma^2 estimated as 0.02025:  log likelihood=97.61
AIC=-189.23   AICc=-189.09   BIC=-179.62

Hemos obtenido un un modelo AR(2).

Vemos que salvo un retardo todos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF.

Vemos que hay varios retardos donde sus p-valores rechazan la H0 del estadístico de Ljung-Box. Esto nos indica que hay autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 75.276, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.36081, p-value = 0.0469


    Kurtosis

data:  resid
statistic = 6.0669, p-value < 2.2e-16

No se cumple la normalidad de los residuos, posiblemente debido a outliers en nuestra serie.

Modelo ARMA

Crearemos ahora un modelo ARMA yendo de lo específico a lo general.

ARMA(1,1)

Series: X 
ARIMA(1,0,1) with zero mean     

Coefficients:
         ar1      ma1
      0.6763  -0.8248
s.e.  0.1308   0.0980

sigma^2 estimated as 0.02012:  log likelihood=98.16
AIC=-190.32   AICc=-190.18   BIC=-180.7

El BIC mejora ligeramente respecto al modelizador automático.

Hay un par de retardos que se encuentran fuera de las bandas de confianza tanto en la ACF como en la PACF.

Vemos que salvo para el retardo 8 los p-valores no rechazan la H0 del estadístico de Ljung-Box, podría considerarse que no existe autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 97.332, df = 2, p-value < 2.2e-16


    Skewness

data:  resid
statistic = 0.46475, p-value = 0.01048


    Kurtosis

data:  resid
statistic = 6.4599, p-value < 2.2e-16

No se cumple la normalidad de los residuos, posiblemente debido a outliers en nuestra serie.

Este modelo cumple la diagnosis y por tanto nos quedamos con este modelo final.

Modelo AR

Crearemos ahora un modelo AR, aprovechando que ya sabemos que AR(2) no cumple la diagnosis, empezaremos por un AR(3).

AR(3)

Series: X 
ARIMA(3,0,0) with zero mean     

Coefficients:
          ar1      ar2     ar3
      -0.1001  -0.1416  0.1017
s.e.   0.0739   0.0746  0.0747

sigma^2 estimated as 0.02015:  log likelihood=98.54
AIC=-189.07   AICc=-188.84   BIC=-176.25

El BIC en este caso es peor que el del AR(2).

Hay un retardo que se encuentra fuera de las bandas de confianza tanto en la ACF como en la PACF.

Vemos que salvo para el retardo 8 que no esta muy claro, los p-valores no rechazan la H0 del estadístico de Ljung-Box, podría considerarse que no existe autocorrelación en los residuos.

Las inversas de las raices de los polinomios son en norma todas menores que 1.


    Jarque Bera Test

data:  resid
X-squared = 55.557, df = 2, p-value = 8.631e-13


    Skewness

data:  resid
statistic = 0.30966, p-value = 0.0881


    Kurtosis

data:  resid
statistic = 5.6349, p-value = 3.99e-13

No se cumple la normalidad de los residuos debido a la kurtosis, posiblemente debido a outliers en nuestra serie.

Este modelo cumple la diagnosis y por tanto nos quedamos con este modelo, el modelo AR(2) también podría utilizarse ya que hace mejores predicciones y tiene menos parámetros pero no cumple muy bien con la no autocorrelación residual.

Modelos del diferencial de tipo de interés a medio plazo

De nuevo vemos que nuestra serie presenta tendencia por lo que es necesario diferenciar la serie al menos una vez. También aplicaremos una transformación logaritmica ya que hay heterocedasticidad.

Como podemos ver en los gráficos de la ACF y PACF anteriores solo hay un retardo que se sale de las bandas de confianza, lo cual puede significar que los residuos despues de diferenciar ya se comporten como ruido blanco.

Modelizador automático

De nuevo comenzaremos con el modelizador automático para hacernos una idea de como pueden ser nuestros modelos.

Series: X 
ARIMA(0,0,0) with non-zero mean 

Coefficients:
         mean
      -0.0001
s.e.   0.0062

sigma^2 estimated as 0.007015:  log likelihood=193.59
AIC=-383.18   AICc=-383.12   BIC=-376.78

No nos identifica ningún modelo.

Vemos que salvo un retardo todos se encuentran dentro de las bandas de confianza en los gráficos de la ACF y PACF, ya que son los mismos gráficos de antes.

Vemos que para ningun retardo los p-valores rechazan la H0 del estadístico de Ljung-Box, esto no nos indica que haya autocorrelación en los residuos.

Puesto que la serie diferenciada se comporta como un ruido blanco no hace falta estimar ningún modelo ARMA.

El modelo final es un ARIMA(0,1,0).

LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgZGUgbW9kZWxvcyBBUklNQSINCmF1dGhvcjogIkFydGllbCBQYWxvbWFyIENvbGwiDQpkYXRlOiAiMTIvMDUvMjAxNyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogDQogICAgdG9jOiB5ZXMNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0KICANCi0tLQ0KDQo8SFI+DQpFbGlnZSB1biBwYcOtcyAocXVlIG5vIHNlYSBVU0EpLCB5IGRlc2NhcmdhIGRlIEZSRUQgbGFzIHNpZ3VpZW50ZXMgc2VyaWVzOg0KDQpJbmRpY2UgZGUgcHJvZHVjY2nDs24gaW5kdXN0cmlhbA0KVGlwbyBkZSBpbnRlcsOpcyBhIGxhcmdvIHBsYXpvDQpUaXBvIGRlIGludGVyw6lzIGEgbWVkaW8gcGxhem8NClRpcG8gZGUgaW50ZXLDqXMgYSBjb3J0byBwbGF6bw0KDQojQXBhcnRhZG8gMQ0KDQpQYXJhIGNhZGEgdW5hIGRlIGxhcyBzZXJpZXMgYW50ZXJpb3JlcyBjb25zdHJ1eWUgdmFyaW9zIG1vZGVsbyBBUklNQSAoYWwgbWVub3MgMikuIFVzYSBsYXMgMyBlc3RyYXRlZ2lhcyBkZSBtb2RlbGl6YWNpw7NuLg0KDQpgYGB7ciBsZWN0dXJhIGRlIHNlcmllcywgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocXVhbnRtb2QpDQpsaWJyYXJ5KGZvcmVjYXN0KQ0KbGlicmFyeShkeWdyYXBocykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkodHNvdXRsaWVycykNCmxpYnJhcnkoem9vKQ0KDQpnZXRTeW1ib2xzKCJQUklOVE8wMk1YUTY2MVMiLCBzcmM9IkZSRUQiKQ0KZ2V0U3ltYm9scygiSVJMVFNUMDFNWE0xNTZOIiwgc3JjPSJGUkVEIikNCmdldFN5bWJvbHMoIklSM1RJQjAxTVhNMTU2TiIsIHNyYz0iRlJFRCIpDQpnZXRTeW1ib2xzKCJJUlNUQ0kwMU1YTTE1Nk4iLCBzcmM9IkZSRUQiKQ0KDQpteCA8LSBQUklOVE8wMk1YUTY2MVNbJzE5ODgtMDEtMDEvJ10gI0luZHVzdHJpYWwgUHJvZHVjdGlvbiBJbmRleCBNZXhpY28NCmx0IDwtIElSTFRTVDAxTVhNMTU2TlsnMjAwMi0wMS0wMS8nXSAjTG9uZyB0ZXJtIA0KbXQgPC0gSVIzVElCMDFNWE0xNTZOWycyMDAyLTAxLTAxLyddICNNZWRpdW0gdGVybQ0Kc3QgPC0gSVJTVENJMDFNWE0xNTZOWycyMDAyLTAxLTAxLyddICNTaG9ydCB0ZXJtDQpkbHQgPC0gbHQtc3QNCmRtdCA8LSBtdC1zdA0KYGBgDQoNClBhcmEgY3JlYXIgbnVlc3Ryb3MgbW9kZWxvcyBoZW1vcyBvYnRlbmlkbyBsYXMgc2VyaWVzIHRlbXBvcmFsZXMgZGUgTcOpeGljby4NCg0KI01vZGVsb3MgZGVsIEluZGljZSBkZSBwcm9kdWNjacOzbiBpbmR1c3RyaWFsLg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KZHlncmFwaChteCwgbWFpbj0iSVBJIE3DqXhpY28gKGJhc2UgMjAxMD0xKSIpDQoNCnAgPC0gQWNmKG14LCA0MCwgcGxvdD1GKQ0KYXV0b3Bsb3QocCkgKyBnZ3RpdGxlKCJJUEkgTWV4aWNvIikNCmdnUGFjZihteCwgNDApICsgZ2d0aXRsZSgiSVBJIE1leGljbyIpDQpgYGANCg0KQ29tbyB2ZW1vcyBlbiBsb3MgZ3LDoWZpY29zIGFudGVyaW9yZXMgbnVlc3RyYSBzZXJpZSBwcmVzZW50YSB1bmEgY2xhcmEgdGVuZGVuY2lhIGNyZWNpZW50ZSBwb3IgbG8gcXVlIGVzIG5lY2VzYXJpbyBkaWZlcmVuY2lhciBsYSBzZXJpZSBhbCBtZW5vcyB1bmEgdmV6Lg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NClggPC0gZGlmZihteCkNClggPC0gWFstMV0NCmR5Z3JhcGgoWCkNCg0KcCA8LSBBY2YoWCwgNDAsIHBsb3Q9RikNCmF1dG9wbG90KHApICsgZ2d0aXRsZSgiSVBJIE1leGljbyAoZGlmZikiKQ0KZ2dQYWNmKFgsIDQwKSArIGdndGl0bGUoIklQSSBNZXhpY28gKGRpZmYpIikNCmBgYA0KDQojI01vZGVsaXphZG9yIGF1dG9tw6F0aWNvDQoNCkVtcGV6YXJlbW9zIHV0aWxpemFkbyBlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljbyBwYXJhIGhhY2Vybm9zIHVuYSBtZWpvciBpZGVhIGRlIGNvbW8gcHVlZGVuIHNlciBudWVzdHJvcyBtb2RlbG9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIGF1dG8uYXJpbWEoWCwgZD0wLCBtYXgucD0xMCwgbWF4LnE9MTAsIHNlYXNvbmFsPUYpDQptMQ0KYGBgDQoNCkVsIG1vZGVsaXphZG9yIGF1dG9tw6F0aWNvIG5vcyBpbmRpY2EgdW4gbW9kZWxvIE1BKDQpLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgdG9kb3MgbG9zIHJldGFyZG9zIHNlIGVuY3VlbnRyYW4gZGVudHJvIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRiwgc2Fsdm8gYWxndW5vIHJldGFyZG8gbXV5IGFsIGZpbmFsIHF1ZSBubyB0aWVuZSBpbXBvcnRhbmNpYS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KTmluZ8O6biBwLXZhbG9yIHJlY2hhemEgbGEgSDxzdWI+MDwvc3ViPiBkZWwgZXN0YWTDrXN0aWNvIGRlIExqdW5nLUJveCBwYXJhIG5pbmfDum4gcmV0YXJkbywgbG8gY3VhbCBubyBub3MgaW5kaWNhIHF1ZSBoYXlhIGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcywgcG9zaWJsZW1lbnRlIGRlYmlkbyBhIG91dGxpZXJzIGVuIG51ZXN0cmEgc2VyaWUuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49IkFSTUEoMCw0KSIpDQpgYGANCg0KIyNNb2RlbG8gQVJNQQ0KDQpDcmVhcmVtb3MgYWhvcmEgdW4gbW9kZWxvIEFSTUEgeWVuZG8gZGUgbG8gZXNwZWPDrWZpY28gKEFSTUEoMSwxKSkgYSBsbyBnZW5lcmFsLg0KDQojIyNBUk1BKDEsMSkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDEsMCwxKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNCkVuIGxhIEFDRiB0b2RvcyBtZW5vcyBlbCByZXRhcmRvIDQgeSAxNyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSB5IGVuIGxhIFBBQ0YgbG9zIHJldGFyZG9zIDQsIDExIHkgMjAsIHBvciBsbyBxdWUgcXVlZGEgYWxndW5hIGVzdHJ1Y3R1cmEgcmVzaWR1YWwuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xKQ0KYGBgDQoNCkFsZ3Vub3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3ggcGFyYSBhbGd1bm9zIHJldGFyZG9zLCBlc3RvIG5vcyBpbmRpY2EgcXVlIGV4aXN0ZSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgZ3JhY2lhcyBhIGxhIGt1cnRvc2lzLCBwb3NpYmxlbWVudGUgZGViaWRvIGEgb3V0bGllcnMgZW4gbnVlc3RyYSBzZXJpZS4NCg0KRXN0ZSBtb2RlbG8gbm8gY3VtcGxlIGxhIGRpYWdub3NpcyB5IHBvciB0YW50byBubyBub3Mgc2lydmUsIHByb2JhcmVtb3MgYWhvcmEgY29uIEFSTUEoMiwxKQ0KDQojIyNBUk1BKDIsMSkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDIsMCwxKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVuIGVzdGUgbW9kZWxvIGVsIEJJQyBhdW1lbnRhIGRlIC02NzAuNyBhIC02NjYuNDcgcG9yIGxvIHF1ZSBlcyB1biBwZW9yIG1vZGVsbyBwYXJhIHByZWRlY2lyLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpBbCBpZ3VhbCBxdWUgZW4gZWwgQVJNQSgxLDEpIGVuIGxhIEFDRiB0b2RvcyBtZW5vcyBlbCByZXRhcmRvIDQgeSAxNyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSwgZW4gbGEgUEFDRiBsb3MgcmV0YXJkb3MgNCwgMTEgeSAyMCwgcG9yIGxvIHF1ZSBxdWVkYSBhbGd1bmEgZXN0cnVjdHVyYSByZXNpZHVhbCAoaGF5IGF1dG9jb3JyZWxhY2lvbmVzKS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KT2N1cnJlIGxvIG1pc21vIHF1ZSBlbiBlbCBBUk1BKDEsMSkuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTG8gbWlzbW8gcXVlIGVuIGVsIEFSTUEoMSwxKSBubyBjdW1wbGUgY29uIGxhIG5vcm1hbGlkYWQuDQoNClRhbXBvY28gbm9zIHNpcnZlIGVzdGUgbW9kZWxvLCBhc8OtIHF1ZSBwcm9iYXJlbW9zIGFob3JhIHVuIEFSTUEoMSwyKQ0KDQojIyNBUk1BKDEsMikNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDEsMCwyKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVsIEJJQyBzaWd1ZSBzaWVuZG8gcGVvciBxdWUgZW4gZWwgQVJNQSgxLDEpLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgaGF5IHVuIHBhciBkZSByZXRhcmRvcyBxdWUgc2Ugc2FsZW4gZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbG9zIGdyw6FmaWNvcyBkZSBsYSBBQ0YgeSBQQUNGLg0KSGF5IG1lbm9zIHJldGFkb3MgZnVlcmEgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgcXVlIGVuIGVsIG1vZGVsbyBBUk1BKDEsMSkgcG9yIGxvIHF1ZSBwb2Ryw61hIGRlY2lyc2UgcXVlIG1lam9yYSB1biBwb2NvIGVzdGUgbW9kZWxvLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSkNCmBgYA0KDQpPY3VycmUgbG8gbWlzbW8gY29uIGxvcyBwLXZhbG9yZXMgZGVsIGVzdGFkw61zdGljbyBManVuZy1Cb3ggcXVlIGVuIGVsIG1vZGVsbyBBUk1BKDEsMSkuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zLCBzaW4gZW1iYXJnbywgZWwgcC12YWxvciBoYSBhdW1lbnRhZG8gY29uc2lkZXJhYmxlbWVudGUgc29icmV0b2RvIHBhcmEgbGEgc2ltZXRyw61hLg0KDQpQcm9iYXJlbW9zIGFob3JhIHVuIEFSTUEoMSwzKQ0KDQojIyNBUk1BKDEsMykNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDEsMCwzKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVuIGVzdGUgY2FzbyBlbCBCSUMgZXMgZGUgLTY3NCBxdWUgZXMgbXVjaG8gbWVqb3IgcXVlIGVuIGVsIEFSTUEoMSwxKSBjb24gLTY3MC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIHRvZG9zIGxvcyByZXNpZHVvcyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsb3MgZ3LDoWZpY29zIGRlIGxhIEFDRiB5IFBBQ0YsIHNhbHZvIGFsZ3VubyBtdXkgYWwgZmluYWwgZW4gbGEgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KTmluZ8O6biBwLXZhbG9yIHJlY2hhemEgbGEgSDxzdWI+MDwvc3ViPiBkZWwgZXN0YWTDrXN0aWNvIGRlIExqdW5nLUJveCBwYXJhIG5pbmfDum4gcmV0YXJkbywgbG8gY3VhbCBubyBub3MgaW5kaWNhIHF1ZSBoYXlhIGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcywgcGVybyBkZSBudWV2byBsb3MgdmFsb3JlcyBkZWwgZXN0YWTDrXN0aWNvIGhhIG1lam9yYWRvIGNvbnNpZGVyYWJsZW1lbnRlLg0KVGVuaWVuZG8gZW4gY3VlbnRhIHF1ZSBlcyBwb3NpYmxlIHF1ZSBubyBjb25zaWdhbW9zIG5vcm1hbGlkYWQgZW4gbG9zIHJlc2lkdW9zIGVzdGUgZXMgdW4gbW9kZWxvIHbDoWxpZG8gcGFyYSBudWVzdHJhIHNlcmllLg0KUHJvYmFyZW1vcyB1biBtb2RlbG8gQVJNQSgyLDIpLg0KDQojIyNBUk1BKDIsMikNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDIsMCwyKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVuIGVzdGUgY2FzbyBlbCBCSUMgZXMgbWVqb3IgcXVlIGVsIEFSTUEoMSwxKSBwZXJvIHBlb3IgcXVlIGVsIEFSTUEoMSwzKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgdG9kb3MgbG9zIHJlc2lkdW9zIHNlIGVuY3VlbnRyYW4gZGVudHJvIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRiwgc2Fsdm8gdW5vIG11eSBhbCBmaW5hbCBlbiBsYSBQQUNGLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSkNCmBgYA0KDQpOaW5nw7puIHAtdmFsb3IgcmVjaGF6YSBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94IHBhcmEgbmluZ8O6biByZXRhcmRvLCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheWEgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zLCBzaW4gZW1iYXJnbyBlbCBwLXZhbG9yIGRlIGxhIHNpbWV0csOtYSBlcyBiYXN0YW50ZSBhbHRvLg0KDQpFc3RlIG1vZGVsbyB0YW1iacOpbiBzZXLDrWEgdsOhbGlkbywgYXVucXVlIGVzIHVuIHBvY28gcGVvciBwYXJhIHByZWRlY2lyIHF1ZSBlbCBtb2RlbG8gQVJNQSgxLDMpLg0KDQpQb3Igw7psdGltbyBjcmVhcmVtb3MgdW4gbW9kZWxvIEFSTUEoMiwzKQ0KDQojIyNBUk1BKDIsMykNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDIsMCwzKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVuIGVzdGUgY2FzbyBlbCBCSUMgZXMgbWVqb3IgcXVlIGN1YWxxdWllciBtb2RlbG8gQVJNQSBhbnRlcmlvci4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIHRvZG9zIGxvcyByZXNpZHVvcyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsb3MgZ3LDoWZpY29zIGRlIGxhIEFDRiB5IFBBQ0YuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xKQ0KYGBgDQoNCk5pbmfDum4gcC12YWxvciByZWNoYXphIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3ggcGFyYSBuaW5nw7puIHJldGFyZG8sIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5YSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgeSBlbXBlb3JhIHVuIHBvY28gcmVzcGVjdG8gYSBtb2RlbG9zIGFudGVyaW9yZXMuDQoNCkVzdGUgbW9kZWxvIHRhbWJpw6luIGVzIHbDoWxpZG8gcGVybyBlbiBlc3RlIGNhc28gZXN0YW1vcyBzb2JyZXBhcmFtZXRyaXphbmRvIHVuIHBvY28gZWwgbW9kZWxvLCBsbyBjdWFsIG5vIGVzIG11eSBkZXNlYWJsZS4NCg0KUG9kcmlhbW9zIGVsZWdpciBlbnRyZSB1biBBUk1BKDIsMykgeSB1biBBUk1BKDEsMyksIGVsIG1vZGVsbyBBUk1BKDIsMikgcXVlIHRhbWJpw6luIGVzIHbDoWxpZG8gdGllbmUgdW4gQklDIGluZmVyaW9yIGEgbG9zIGRvcyBhbnRlcmlvcmVzLiBFbCBhanVzdGUgZGVsIEFSTUEoMSwzKSBxdWVkYSBhc8OtOg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMSwwLDMpLCBpbmNsdWRlLm1lYW49RikNCm0xLmZpdCA8LSBmaXR0ZWQuQXJpbWEobTEpDQptMS5maXQgPC0geHRzKG0xLmZpdCwgaW5kZXgoWCkpDQptMS5kYXRhIDwtIG1lcmdlKFgsIG0xLmZpdCkNCm5hbWVzKG0xLmRhdGEpIDwtIGMoIkFjdHVhbCIsICJGaXQiKQ0KZHlncmFwaChtMS5kYXRhLCBtYWluPSJBUk1BKDEsMykiKQ0KYGBgDQoNCiMjTW9kZWxvIE1BDQoNClBvciDDumx0aW1vLCBhcHJvdmVjaGFuZG8gcXVlIGVsIG1vZGVsaXphZG9yIGF1dG9tw6F0aWNvIG5vcyBpbmRpY28gcXVlIHVuIEFSTUEoMCw0KSBwdWVkZSBzZXIgZWwgbWVqb3IgbW9kZWxvIGNyZWFyZW1vcyB1biBtb2RlbG8gTUEgeWVuZG8gZGUgbG8gZ2VuZXJhbCBhIGxvIGVzcGVjw61maWNvLg0KDQojIyNNQSgxMCkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDAsMCwxMCksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgdG9kb3MgbG9zIHJlc2lkdW9zIHNlIGVuY3VlbnRyYW4gZGVudHJvIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KTmluZ8O6biBwLXZhbG9yIHJlY2hhemEgbGEgSDxzdWI+MDwvc3ViPiBkZWwgZXN0YWTDrXN0aWNvIGRlIExqdW5nLUJveCBwYXJhIG5pbmfDum4gcmV0YXJkbywgbG8gY3VhbCBubyBub3MgaW5kaWNhIHF1ZSBoYXlhIGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEsIGF1bnF1ZSBoYXkgdW4gcGFyIHF1ZSBzZSBlbmN1ZW50cmFuIGVuIGVsIGzDrW1pdGUuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcy4NCg0KVmVtb3MgcXVlIGVzdGUgbW9kZWxvIGN1bXBsZSBsYSBkaWFnbm9zaXMgKGV4Y2VwdHVhbmRvIGxhIG5vcm1hbGlkYWQpIHkgcG9yIHRhbnRvIGNvbWVuemFyZW1vcyBhIHJlZHVjaXIgZWwgb3JkZW4gZGVsIG1vZGVsbyBNQSBoYXN0YSBlbmNvbnRyYXIgYWxndW5vIHF1ZSBubyBjdW1wbGEgY29uIGxhIGRpYWdub3Npcy4NCg0KIyMjTUEoNykNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDAsMCw3KSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVsIEJJQyBoYSBtZWpvcmFkbyByZXNwZWN0byBhbCBtb2RlbG8gYW50ZXJpb3IuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClZlbW9zIHF1ZSB0b2RvcyBsb3MgcmVzaWR1b3Mgc2UgZW5jdWVudHJhbiBkZW50cm8gZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbG9zIGdyw6FmaWNvcyBkZSBsYSBBQ0YgeSBQQUNGLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSkNCmBgYA0KDQpOaW5nw7puIHAtdmFsb3IgcmVjaGF6YSBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94IHBhcmEgbmluZ8O6biByZXRhcmRvLCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheWEgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zIGdyYWNpYXMgYSBsYSBrdXJ0b3NpcywgbGEgbm9ybWFsaWRhZCBoYSBtZWpvcmFkbyBiYXN0YW50ZSByZXNwZWN0byBhbCBtb2RlbG8gYW50ZXJpb3IuDQoNCkVzdGUgbW9kZWxvIHRhbWJpw6luIGVzIHbDoWxpZG8gYXPDrSBxdWUgcG9kZW1vcyBjb250aW51YXIgYmFqYW5kbyBlbCBvcmRlbi4NCg0KIyMjTUEoNSkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDAsMCw1KSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkRlIG51ZXZvIGVsIEJJQyBhdW1lbnRhIGNvbnNpZGVyYWJsZW1lbnRlLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgdG9kb3MgbG9zIHJlc2lkdW9zIHNlIGVuY3VlbnRyYW4gZGVudHJvIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRiwgc2Fsdm8gdW4gcGFyIGFsIGZpbmFsIGRlIGxhIFBBQ0YNCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KTmluZ8O6biBwLXZhbG9yIHJlY2hhemEgbGEgSDxzdWI+MDwvc3ViPiBkZWwgZXN0YWTDrXN0aWNvIGRlIExqdW5nLUJveCBwYXJhIG5pbmfDum4gcmV0YXJkbywgbG8gY3VhbCBubyBub3MgaW5kaWNhIHF1ZSBoYXlhIGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyBkZWJpZG8gYSBsYSBrdXJ0b3NpcyBwZXJvIG1lam9yYSByZXNwZWN0byBhbCBtb2RlbG8gYW50ZXJpb3IuDQoNCkVzdGUgbW9kZWxvIHRhbWJpw6luIGVzIHbDoWxpZG8gYXPDrSBxdWUgY29udGludWFtb3MgY29uIHVuIE1BKDQpIChlbCByZWNvbWVuZGFkbyBwb3IgZWwgbW9kZWxpemFkb3IgYXV0b23DoXRpY28pLg0KDQojIyNNQSg0KQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMCwwLDQpLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANCg0KRGUgbnVldm8gbWVqb3JhIGVsIEJJQyByZXNwZWN0byBhbCBNQSg1KS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIHRvZG9zIGxvcyByZXNpZHVvcyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsb3MgZ3LDoWZpY29zIGRlIGxhIEFDRiB5IFBBQ0YsIHNhbHZvIGVuIGxvcyBkb3Mgw7psdGltb3MgcmV0YXJkb3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xKQ0KYGBgDQoNCk5pbmfDum4gcC12YWxvciByZWNoYXphIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3ggcGFyYSBuaW5nw7puIHJldGFyZG8sIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5YSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgeSBlbXBlb3JhIHVuIHBvY28gcmVzcGVjdG8gYWwgbW9kZWxvIGFudGVyaW9yLg0KDQpFc3RlIG1vZGVsbyBlcyB2w6FsaWRvIGFzw60gcXVlIHByb2JhbW9zIGFob3JhIGNvbiBNQSgzKS4NCg0KIyMjTUEoMykNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDAsMCwzKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVuIGVzdGUgY2FzbyBlbCBCSUMgZW1wZW9yYSByZXNwZWN0byBhbCBhbnRlcmlvciBtb2RlbG8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNCkVuIGVzdGUgbW9kZWxvIHlhIHZlbW9zIGFsZ3Vub3MgcmV0YXJkb3MgZGlzdGludG9zIHF1ZSBzZSBzYWxlbiBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSwgcG9yIGVqZW1wbG8gZWwgNC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KRW4gZXN0ZSBjYXNvIHNlIHJlY2hhemEgbGEgSDxzdWI+MDwvc3ViPiBwYXJhIGVsIHJldGFyZG8gNSwgbG8gY3VhbCBub3MgaW5kaWNhIHF1ZSBoYXkgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zIHkgZW1wZW9yYSB1biBwb2NvIHJlc3BlY3RvIGFsIG1vZGVsbyBhbnRlcmlvci4NCg0KRXN0ZSBtb2RlbG8geWEgbm8gY3VtcGxlIGNvbiBsYSBkaWFnbm9zaXMgdGFuIGJpZW4gY29tbyBlbCBNQSg0KSwgYWRlbcOhcyBlbCBCSUMgZXMgcGVvciBxdWUgY29uIGVsIG1vZGVsbyBNQSg0KS4NCg0KUG9yIHRhbnRvIGVsIG1vZGVsbyBxdWUgbm9zIHF1ZWRhcmVtb3MgYWwgZmluYWwgZXMgZWwgTUEoNCkgcXVlIGFkZW3DoXMganVzdGFtZW50ZSBlbiBlc3RlIGNhc28gY29pbmNpZGUgY29uIGxvIG9idGVuaWRvIGNvbiBlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljby4NCg0KRWwgZ3LDoWZpY28gZGUgTUEoNCk6DQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYygwLDAsNCksIGluY2x1ZGUubWVhbj1GKQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49Ik1BKDQpIikNCmBgYA0KDQoNCiNNb2RlbG9zIGRlIHRpcG8gZGUgaW50ZXLDqXMgYSBsYXJnbyBwbGF6by4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpkeWdyYXBoKGx0LCBtYWluPSJMb25nIFRlcm0gSW50ZXJlc3QgUmF0ZSBNZXhpY28iKQ0KDQpwIDwtIEFjZihsdCwgNDAsIHBsb3Q9RikNCmF1dG9wbG90KHApICsgZ2d0aXRsZSgiTG9uZyBUZXJtIEludGVyZXN0IFJhdGUgTWV4aWNvIChkaWZmKSIpDQpnZ1BhY2YobHQsIDQwKSArIGdndGl0bGUoIkxvbmcgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KYGBgDQoNCkFsIGlndWFsIHF1ZSBlbiBlbCDDrW5kaWNlIGRlIHByb2R1Y2Npw7NuIGluZHVzdHJpYWwgdmVtb3MgZW4gZWwgZ3LDoWZpY28gZGUgbGEgQUNGIHF1ZSBudWVzdHJhIHNlcmllIHByZXNlbnRhIHVuYSBjbGFyYSB0ZW5kZW5jaWEgcG9yIGxvIHF1ZSBlcyBuZWNlc2FyaW8gZGlmZXJlbmNpYXIgbGEgc2VyaWUgYWwgbWVub3MgdW5hIHZlei4gQWRlbcOhcyBoZSB2aXN0byBxdWUgaGF5IGhldGVyb2NlZGFzdGljaXNkYWQgZW4gbGEgc2VyaWUgcG9yIGxvIHF1ZSB1dGlsaXpvIHVuYSB0cmFuc2Zvcm1hY2nDs24gbG9nYXJpdG1pY2EuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KWCA8LSBkaWZmKGxvZyhsdCkpDQpYIDwtIFhbLTFdDQpkeWdyYXBoKFgpDQoNCnAgPC0gQWNmKFgsIDQwLCBwbG90PUYpDQphdXRvcGxvdChwKSArIGdndGl0bGUoIkxvbmcgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KZ2dQYWNmKFgsIDQwKSArIGdndGl0bGUoIkxvbmcgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KYGBgDQoNCiMjTW9kZWxpemFkb3IgYXV0b23DoXRpY28NCg0KRGUgbnVldm8gY29tZW56YXJlbW9zIGNvbiBlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljbyBwYXJhIGhhY2Vybm9zIHVuYSBpZGVhIGRlIGNvbW8gcHVlZGVuIHNlciBudWVzdHJvcyBtb2RlbG9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIGF1dG8uYXJpbWEoWCwgZD0wLCBtYXgucD0xMCwgbWF4LnE9MTAsIHNlYXNvbmFsPUYpDQptMQ0KYGBgDQoNCkhlbW9zIG9idGVuaWRvIHVuIHVuIG1vZGVsbyBBUk1BKDMsMSkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIGNhc2kgdG9kb3MgbG9zIHJldGFyZG9zIHNlIGVuY3VlbnRyYW4gZGVudHJvIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRi4NCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSkNCmBgYA0KDQpOaW5nw7puIHAtdmFsb3IgcmVjaGF6YSBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94IHBhcmEgbmluZ8O6biByZXRhcmRvLCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheWEgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zIGdyYWNpYXMgYSBsYSBrdXJ0b3NpcywgcG9zaWJsZW1lbnRlIGRlYmlkbyBhIG91dGxpZXJzIGVuIG51ZXN0cmEgc2VyaWUuDQoNCkVzdGUgbW9kZWxvIEFSTUEoMywxKSBwdWVkZSBzZXIgcGVyZmVjdGFtZW50ZSB1biBtb2RlbG8gdsOhbGlkby4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMS5maXQgPC0gZml0dGVkLkFyaW1hKG0xKQ0KbTEuZml0IDwtIHh0cyhtMS5maXQsIGluZGV4KFgpKQ0KbTEuZGF0YSA8LSBtZXJnZShYLCBtMS5maXQpDQpuYW1lcyhtMS5kYXRhKSA8LSBjKCJBY3R1YWwiLCAiRml0IikNCmR5Z3JhcGgobTEuZGF0YSwgbWFpbj0iQVJNQSgzLDEpIikNCmBgYA0KDQojI01vZGVsbyBBUg0KDQpDb21lbnphcmVtb3MgZXN0YSB2ZXogYnVzY2FuZG8gdW4gbW9kZWxvIEFSLCB5ZW5kbyBkZSBsbyBlc3BlY8OtZmljbyBhIGxvIGdlbmVyYWwuDQoNCiMjI0FSKDEpDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYygxLDAsMCksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpWZW1vcyBxdWUgZWwgQklDIGRlIGVzdGUgbW9kZWxvIGVzIG1lam9yIHF1ZSBlbCBkZWwgbW9kZWxpemFkb3IgYXV0b23DoXRpY28uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClRpZW5lIHVuIHBhciBkZSByZXRhcmRvcyBmdWVyYSBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBwYXJhIGxhIEFDRiB5IFBBQ0YuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xKQ0KYGBgDQoNCkNhc2kgdG9kb3MgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBsbyBjdWFsIG5vcyBpbmRpY2EgcXVlIGhheSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgZGViaWRvIGEgbGEga3VydG9zaXMuDQoNCkVzdGUgbW9kZWxvIG5vIGVzIHbDoWxpZG8gcG9yIGxvIHF1ZSBwcm9iYXJlbW9zIHVuIEFSKDIpLg0KDQojIyNBUigyKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMiwwLDApLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANCg0KRWwgQklDIGhhIGVtcGVvcmFkbyB1biBwb2NvIHJlc3BlY3RvIGFsIG1vZGVsbyBhbnRlcmlvci4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KU2lndWUgaGFiaWFuZG8gdW4gcGFyIGRlIHJldGFyZG9zIGZ1ZXJhIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIHBhcmEgbGEgQUNGIHkgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEpDQpgYGANCg0KQ2FzaSB0b2RvcyBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyBkZWJpZG8gYSBsYSBrdXJ0b3Npcy4NCg0KU2VndWltb3Mgc2luIHBvZGVyIGFjZXB0YXIgZXN0ZSBtb2RlbG8gcG9yIGxvIHF1ZSBwcm9iYXJlbW9zIHVuIEFSKDMpLg0KDQojIyNBUigzKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMywwLDApLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANCg0KRW4gZXN0ZSBjYXNvIGVsIEJJQyBtZWpvcmEgdW4gcG9jbyByZXNwZWN0byBhbCBBUigyKSBwZXJvIGVzIHBlb3IgcXVlIGVsIEFSKDEpLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpBcXVpIHlhIHNvbG8gdGllbmUgdW4gcmV0YXJkbyBmdWVyYSBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBwYXJhIGxhIEFDRiB5IFBBQ0YsIGxvIGN1YWwgc2UgcHVlZGUgY29uc2lkZXJhciBjb21vIHbDoWxpZG8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xKQ0KYGBgDQoNCk5pbmfDum4gcC12YWxvciByZWNoYXphIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3ggcGFyYSBuaW5nw7puIHJldGFyZG8sIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5YSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgZGViaWRvIGEgbGEga3VydG9zaXMgcGVybyBoYSBtZWpvcmFkbyByZXNwZWN0byBhbCBtb2RlbG8gYW50ZXJpb3IuDQoNCkVzdGUgbW9kZWxvIHlhIHBvZGVtb3MgY29uc2lkZXJhcmxvIGNvbW8gbnVlc3RybyBtb2RlbG8gZmluYWwuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49IkFSKDMpIikNCmBgYA0KDQojTW9kZWxvcyBkZSB0aXBvIGRlIGludGVyw6lzIGEgbWVkaW8gcGxhem8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KZHlncmFwaChtdCwgbWFpbj0iTWVkaXVtIFRlcm0gSW50ZXJlc3QgUmF0ZSBNZXhpY28iKQ0KDQpwIDwtIEFjZihtdCwgNDAsIHBsb3Q9RikNCmF1dG9wbG90KHApICsgZ2d0aXRsZSgiTWVkaXVtIFRlcm0gSW50ZXJlc3QgUmF0ZSBNZXhpY28iKQ0KZ2dQYWNmKG10LCA0MCkgKyBnZ3RpdGxlKCJNZWRpdW0gVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyIpDQpgYGANCg0KQWwgaWd1YWwgcXVlIGVuIGxvcyB0aXBvcyBkZSBpbnRlcmVzIGEgbGFyZ28gcGxhem8gdmVtb3MgZW4gZWwgZ3LDoWZpY28gZGUgbGEgQUNGIHF1ZSBudWVzdHJhIHNlcmllIHByZXNlbnRhIHRlbmRlbmNpYSBwb3IgbG8gcXVlIGVzIG5lY2VzYXJpbyBkaWZlcmVuY2lhciBsYSBzZXJpZSBhbCBtZW5vcyB1bmEgdmV6LiBBZGVtw6FzIGhlIHZpc3RvIHF1ZSBoYXkgaGV0ZXJvY2VkYXN0aWNpc2RhZCBlbiBsYSBzZXJpZSBwb3IgbG8gcXVlIHV0aWxpem8gdW5hIHRyYW5zZm9ybWFjacOzbiBsb2dhcml0bWljYS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpYIDwtIGRpZmYobG9nKG10KSkNClggPC0gWFstMV0NCmR5Z3JhcGgoWCkNCg0KcCA8LSBBY2YoWCwgNDAsIHBsb3Q9RikNCmF1dG9wbG90KHApICsgZ2d0aXRsZSgiTWVkaXVtIFRlcm0gSW50ZXJlc3QgUmF0ZSBNZXhpY28gKGRpZmYpIikNCmdnUGFjZihYLCA0MCkgKyBnZ3RpdGxlKCJNZWRpdW0gVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KYGBgDQoNCiMjTW9kZWxpemFkb3IgYXV0b23DoXRpY28NCg0KRGUgbnVldm8gY29tZW56YXJlbW9zIGNvbiBlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljbyBwYXJhIGhhY2Vybm9zIHVuYSBpZGVhIGRlIGNvbW8gcHVlZGVuIHNlciBudWVzdHJvcyBtb2RlbG9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIGF1dG8uYXJpbWEoWCwgZD0wLCBtYXgucD0xMCwgbWF4LnE9MTAsIHNlYXNvbmFsPUYpDQptMQ0KYGBgDQoNCkhlbW9zIG9idGVuaWRvIHVuIHVuIG1vZGVsbyBBUk1BKDQsMikuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClZlbW9zIHF1ZSB0b2RvcyBsb3MgcmV0YXJkb3Mgc2UgZW5jdWVudHJhbiBkZW50cm8gZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbG9zIGdyw6FmaWNvcyBkZSBsYSBBQ0YgeSBQQUNGLg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xKQ0KYGBgDQoNCk5pbmd1bm8gZGUgbG9zIHAtdmFsb3JlcyByZWNoYXphIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcywgcG9zaWJsZW1lbnRlIGRlYmlkbyBhIG91dGxpZXJzIGVuIG51ZXN0cmEgc2VyaWUuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49IkFSTUEoNCwyKSIpDQpgYGANCg0KIyNNb2RlbG8gTUENCg0KQ3JlYXJlbW9zIHVuIG1vZGVsbyBNQSB5ZW5kbyBkZSBsbyBlc3BlY8OtZmljbyBhIGxvIGdlbmVyYWwsIGNvbWVuemFyZW1vcyBjb24gTUEoMSkuDQoNCiMjI01BKDEpDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYygwLDAsMSksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpWZW1vcyBxdWUgY29uIHVuIE1BKDEpIGVsIEJJQyBtZWpvcmEgcmVzcGVjdG8gYWwgbW9kZWxpemFkb3IgYXV0b23DoXRpY28uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClZlbW9zIHF1ZSBzYWx2byBwYXJhIHVuIHJldGFyZG8gdG9kb3Mgc2UgZW5jdWVudHJhbiBkZW50cm8gZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbG9zIGdyw6FmaWNvcyBkZSBsYSBBQ0YgeSBQQUNGLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSwgZ29mLmxhZyA9IDIwKQ0KYGBgDQoNCk5pZ3VubyBkZSBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyBkZWJpZG8gYSBsYSBrdXJ0b3Npcy4NCg0KRXN0ZSBtb2RlbG8gY3VtcGxlIGxvIG5lY2VzYXJpbyBwYXJhIHNlciB2w6FsaWRvLCBwb3IgbG8gdGFudG8gbm8gZXMgbmVjZXNhcmlvIGhhY2VyIHVuIE1BKDIpLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xLmZpdCA8LSBmaXR0ZWQuQXJpbWEobTEpDQptMS5maXQgPC0geHRzKG0xLmZpdCwgaW5kZXgoWCkpDQptMS5kYXRhIDwtIG1lcmdlKFgsIG0xLmZpdCkNCm5hbWVzKG0xLmRhdGEpIDwtIGMoIkFjdHVhbCIsICJGaXQiKQ0KZHlncmFwaChtMS5kYXRhLCBtYWluPSJNQSgxKSIpDQpgYGANCiMjTW9kZWxvIEFSDQoNCkNyZWFyZW1vcyB0YW1iacOpbiB1biBtb2RlbG8gQVIgeWVuZG8gZGUgbG8gZ2VuZXJhbCBhIGxvIHBhcnRpY3VsYXIuDQoNCiMjI0FSKDEwKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMTAsMCwwKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVsIEJJQyBkZWwgQVIoMTApIGVzIG11Y2hvIHBlb3IgcXVlIGN1YWxxdWllcmEgZGUgbG9zIG1vZGVsb3MgYW50ZXJpb3Jlcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIGhheSB1biByZXRhcmRvIGZ1ZXJhIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxhIEFDRiB5IGRvcyBlbiBsYSBQQUNGIGxvIGN1YWwgbm8gZXMgbXV5IGJ1ZW5hIHNlw7FhbC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpOaWd1bm8gZGUgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MsIHBvc2libGVtZW50ZSBkZWJpZG8gYSBvdXRsaWVycyBlbiBudWVzdHJhIHNlcmllLg0KDQpQcm9iYXJlbW9zIGFob3JhIGNvbiB1biBBUig3KS4NCg0KIyMjQVIoNykNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDcsMCwwKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVsIEJJQyBlbXBlb3JhIHJlc3BlY3RvIGFsIEFSKDEwKS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIHNvbG8gaGF5IHVuIHJldGFyZG8gZnVlcmEgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbGEgQUNGIHkgZG9zIGVuIGxhIFBBQ0YgbG8gY3VhbCBzaWd1ZSBzaWVuZG8gbm8gbXV5IGJ1ZW5hIHNlw7FhbC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpOaWd1bm8gZGUgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MsIHBvc2libGVtZW50ZSBkZWJpZG8gYSBvdXRsaWVycyBlbiBsYSBzZXJpZS4NCg0KUHJvYmFyZW1vcyBhaG9yYSBjb24gdW4gQVIoNSkuDQoNCiMjI0FSKDUpDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYyg1LDAsMCksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpFbiBlc3RlIGNhc28gZWwgQklDIG1lam9yYSByZXNwZWN0byBhIGxvcyBkb3MgbW9kZWxvcyBBUiBhbnRlcmlvcmVzLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgc2lndWUgaGFiaWVuZG8gdW4gcmV0YXJkbyBmdWVyYSBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsYSBBQ0YgeSBvdHJvIGVuIGxhIFBBQ0YsIGVzdG8gZXMgYmFzdGFudGUgYWNlcHRhYmxlLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSwgZ29mLmxhZyA9IDIwKQ0KYGBgDQoNCk5pZ3VubyBkZSBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyBkZWJpZG8gYSBsYSBrdXJ0b3Npcy4NCg0KUHJvYmFyZW1vcyBhaG9yYSBjb24gdW4gQVIoNCkuDQoNCiMjI0FSKDQpDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYyg0LDAsMCksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpFbCBCSUMgdnVlbHZlIGEgbWVqb3JhciBlbiBlc3RlIGNhc28uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClZlbW9zIHF1ZSBzaWd1ZSBoYWJpZW5kbyB1biByZXRhcmRvIGZ1ZXJhIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxhIEFDRiB5IG90cm8gZW4gbGEgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpOaWd1bm8gZGUgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgZGViaWRvIGEgbGEga3VydG9zaXMuDQoNClByb2JhcmVtb3MgYWhvcmEgY29uIHVuIEFSKDMpLg0KDQojIyNBUigzKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMywwLDApLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANCg0KRWwgQklDIHZ1ZWx2ZSBhIG1lam9yYXIgYmFzdGFudGUgcmVzcGVjdG8gYWwgbW9kZWxvIEFSKDQpDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClZlbW9zIHF1ZSBoYXkgdW4gcmV0YXJkbyBmdWVyYSBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsYSBBQ0YgeSBvdHJvIGVuIGxhIFBBQ0YgbG8gY3VhbCBlcyBhY2VwdGFibGUuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xLCBnb2YubGFnID0gMjApDQpgYGANCg0KTmlndW5vIGRlIGxvcyBwLXZhbG9yZXMgcmVjaGF6YW4gbGEgSDxzdWI+MDwvc3ViPiBkZWwgZXN0YWTDrXN0aWNvIGRlIExqdW5nLUJveCwgbG8gY3VhbCBubyBub3MgaW5kaWNhIHF1ZSBoYXkgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zIGRlYmlkbyBhIGxhIGt1cnRvc2lzLg0KDQpQcm9iYXJlbW9zIGFob3JhIGNvbiB1biBBUigyKS4NCg0KIyMjQVIoMikNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDIsMCwwKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVsIEJJQyB2dWVsdmUgYSBtZWpvcmFyIHJlc3BlY3RvIGFsIG1vZGVsbyBhbnRlcmlvciBwZXJvIGVzdGEgdmV6IHBvciBwb2NvLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpTaWd1ZSBoYWJpZW5kbyBzb2xvIHVuIHJldGFyZG8gZnVlcmEgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbGEgQUNGIHkgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpOaWd1bm8gZGUgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheSBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgZGViaWRvIGEgbGEga3VydG9zaXMuDQoNClByb2JhcmVtb3MgYWhvcmEgY29uIHVuIEFSKDEpLg0KDQojIyNBUigxKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMSwwLDApLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANClZlbW9zIHF1ZSBlbCBCSUMgZGUgbnVldm8gZXMgbXVjaG8gbWVqb3IgZW4gZXN0ZSBtb2RlbG8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClNpZ3VlIGhhYmllbmRvIHNvbG8gdW4gcmV0YXJkbyBmdWVyYSBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsYSBBQ0YgeSBQQUNGLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSwgZ29mLmxhZyA9IDIwKQ0KYGBgDQoNCk5pZ3VubyBkZSBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm8gbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcy4NCg0KQ29tbyBlbCBtb2RlbG8gQVIoMSkgZXMgdsOhbGlkbyBlc3RlIGVzIG51ZXN0cm8gbW9kZWxvIGZpbmFsLCBhZGVtw6FzIHRpZW5lIHVuIEJJQyBtZWpvciBxdWUgY3VhbHF1aWVyYSBkZSBsb3MgbW9kZWxvcyBhbnRlcmlvcmVzIHkgY3VtcGxlIGNvbiBsYSBkaWFnbm9zaXMuDQoNCkVuIGVzdGUgY2FzbyBudWVzdHJvIG1vZGVsbyBBUigxKSBmdW5jaW9uYSBtdWNobyBtZWpvciBxdWUgZWwgQVJNQSBkZWwgbW9kZWxpemFkb3IgYXV0b23DoXRpY28uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49IkFSKDEpIikNCmBgYA0KDQojTW9kZWxvcyBkZSB0aXBvIGRlIGludGVyw6lzIGEgY29ydG8gcGxhem8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KZHlncmFwaChzdCwgbWFpbj0iU2hvcnQgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyIpDQoNCnAgPC0gQWNmKHN0LCA0MCwgcGxvdD1GKQ0KYXV0b3Bsb3QocCkgKyBnZ3RpdGxlKCJTaG9ydCBUZXJtIEludGVyZXN0IFJhdGUgTWV4aWNvIikNCmdnUGFjZihzdCwgNDApICsgZ2d0aXRsZSgiU2hvcnQgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyIpDQpgYGANCg0KQWwgaWd1YWwgcXVlIGVuIGxvcyB0aXBvcyBkZSBpbnRlcmVzIGEgbGFyZ28geSBtZWRpbyBwbGF6byB2ZW1vcyBlbiBsb3MgZ3LDoWZpY29zIGFudGVyaW9yZXMgcXVlIG51ZXN0cmEgc2VyaWUgcHJlc2VudGEgdGVuZGVuY2lhIHBvciBsbyBxdWUgZXMgbmVjZXNhcmlvIGRpZmVyZW5jaWFyIGxhIHNlcmllIGFsIG1lbm9zIHVuYSB2ZXouIEFkZW3DoXMgaGUgdmlzdG8gcXVlIGhheSBoZXRlcm9jZWRhc3RpY2lzZGFkIGVuIGxhIHNlcmllIHBvciBsbyBxdWUgaGFnbyB1bmEgdHJhbnNmb3JtYWNpw7NuIGxvZ2FyaXRtaWNhLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NClggPC0gZGlmZihsb2coc3QpKQ0KWCA8LSBYWy0xXQ0KZHlncmFwaChYKQ0KDQpwIDwtIEFjZihYLCA0MCwgcGxvdD1GKQ0KYXV0b3Bsb3QocCkgKyBnZ3RpdGxlKCJTaG9ydCBUZXJtIEludGVyZXN0IFJhdGUgTWV4aWNvIChkaWZmKSIpDQpnZ1BhY2YoWCwgNDApICsgZ2d0aXRsZSgiU2hvcnQgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KYGBgDQoNCiMjTW9kZWxpemFkb3IgYXV0b23DoXRpY28NCg0KRGUgbnVldm8gY29tZW56YXJlbW9zIGNvbiBlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljbyBwYXJhIGhhY2Vybm9zIHVuYSBpZGVhIGRlIGNvbW8gcHVlZGVuIHNlciBudWVzdHJvcyBtb2RlbG9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIGF1dG8uYXJpbWEoWCwgZD0wLCBtYXgucD0xMCwgbWF4LnE9MTAsIHNlYXNvbmFsPUYpDQptMQ0KYGBgDQoNCkhlbW9zIG9idGVuaWRvIHVuIHVuIG1vZGVsbyBBUk1BKDQsMiksIHF1ZSB2aWVuZSBzaWVuZG8gaWd1YWwgcXVlIGVsIGRlIGxhIHNlcmllIGEgY29ydG8gcGxhem8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClZlbW9zIHF1ZSBzYWx2byB1biByZXRhcmRvIHRvZG9zIHNlIGVuY3VlbnRyYW4gZGVudHJvIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRi4NCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSwgZ29mLmxhZyA9IDIwKQ0KYGBgDQoNClZlbW9zIHF1ZSBzb2xvIGVuIHVub3MgcG9jb3MgcmV0YXJkb3MgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94Lg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEsIGF1bnF1ZSBlc3RhbiBtdXkgYWwgbMOtbWl0ZSBhbGd1bmFzLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MsIHBvc2libGVtZW50ZSBkZWJpZG8gYSBvdXRsaWVycyBlbiBudWVzdHJhIHNlcmllLg0KDQpFc3RlIG1vZGVsbyBubyBjdW1wbGUgbXV5IGJpZW4gbGEgZGlhZ25vc2lzLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xLmZpdCA8LSBmaXR0ZWQuQXJpbWEobTEpDQptMS5maXQgPC0geHRzKG0xLmZpdCwgaW5kZXgoWCkpDQptMS5kYXRhIDwtIG1lcmdlKFgsIG0xLmZpdCkNCm5hbWVzKG0xLmRhdGEpIDwtIGMoIkFjdHVhbCIsICJGaXQiKQ0KZHlncmFwaChtMS5kYXRhLCBtYWluPSJBUk1BKDQsMikiKQ0KYGBgDQojI01vZGVsbyBBUg0KIyMjQVIoMSkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDEsMCwwKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNClZlbW9zIHF1ZSBlbCBCSUMgZGUgZXN0ZSBtb2RlbG8gZXMgbWVqb3IgcXVlIGVsIGRlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljby4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIGhheSB1biBwYXIgZGUgcmV0YXJkb3MgZnVlcmEgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbGEgQUNGIHkgUEFDRiwgbG8gY3VhbCBub3MgcHVlZGUgaW5kaWNhciBhdXRvY29ycmVsYWNpw7NuIGVuIGxvcyByZXNpZHVvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpBIHBhcnRpciBkZWwgcmV0YXJkbyAxMCBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyBkZWJpZG8gYSBsYSBrdXJ0b3Npcy4NCg0KUHJvYmFyZW1vcyBhaG9yYSBjb24gdW4gQVIoMikNCg0KIyMjQVIoMikNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDIsMCwwKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNClZlbW9zIHF1ZSBlbCBCSUMgZW1wZW9yYSByZXNwZWN0byBhbCBBUigxKS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIGhheSB1biBwYXIgZGUgcmV0YXJkb3MgZnVlcmEgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbGEgQUNGIHkgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpBIHBhcnRpciBkZWwgcmV0YXJkbyAxMCBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcyBkZWJpZG8gYSBsYSBrdXJ0b3Npcy4NCg0KSGUgaWRvIHByb2JhZG8gdmFyaW9zIG1vZGVsb3MgY29uIGVsIG1pc21vIGRpYWdub3N0aWNvIGhhc3RhIHF1ZSBwYXJhIEFSKDEwKSBzZSBjb3JyaWdlIGxhIGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2l1ZG9zLg0KDQojIyNBUigxMCkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDEwLDAsMCksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpWZW1vcyBxdWUgZW4gZXN0ZSBjYXNvIGVsIEJJQyBlcyB1biBwb2NvIHBlb3IgcXVlIGVsIEFSKDEpDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNClRvZG9zIGxvcyByZXRhcmRvcyBleGNlcHRvIHVubyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsYSBBQ0YgeSBQQUNGLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSwgZ29mLmxhZyA9IDIwKQ0KYGBgDQoNCk5pbmd1bm8gZGUgbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBsbyBjdWFsIG5vIG5vcyBpbmRpY2EgcXVlIGhheWEgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zIGRlYmlkbyBhIGxhIGt1cnRvc2lzLg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49IkFSKDEwKSIpDQpgYGANCg0KRXN0ZSBtb2RlbG8gc2kgYmllbiBjdW1wbGUgbWVqb3IgbGEgZGlhZ25vc2lzIGVzdGEgbXV5IHNvYnJlcGFyYW1ldHJpemFkbyB5IGVzIHByZWZlcmlibGUgdXRpbGl6YXIgdW4gQVIoMSkgcXVlIHRpZW5lIG1lam9yIGNhcGFjaWRhZCBkZSBwcmVkaWNjacOzbiB5IG5vIGVzdGEgc29icmVwYXJhbWV0cml6YWRvLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMSwwLDApLCBpbmNsdWRlLm1lYW49RikNCm0xLmZpdCA8LSBmaXR0ZWQuQXJpbWEobTEpDQptMS5maXQgPC0geHRzKG0xLmZpdCwgaW5kZXgoWCkpDQptMS5kYXRhIDwtIG1lcmdlKFgsIG0xLmZpdCkNCm5hbWVzKG0xLmRhdGEpIDwtIGMoIkFjdHVhbCIsICJGaXQiKQ0KZHlncmFwaChtMS5kYXRhLCBtYWluPSJBUigxKSIpDQpgYGANCg0KIyNNb2RlbG8gQVJNQQ0KDQoNCiMjI0FSTUEoNCwyKQ0KDQpIZW1vcyB2aXN0byBxdWUgZWwgbW9kZWxvIEFSTUEoNCwyKSBlcyB2w6FsaWRvIGVuIGVsIGFwYXJ0YWRvIGRlbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljbywgcG9yIGVsbG8gcGFydGlyZW1vcyBkZSBhcXVpIHkgdmVyZW1vcyBzaSBzZSBwdWVkZSByZWR1Y2lyLg0KDQojIyNBUk1BKDQsMSkNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYyg0LDAsMSksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpWZW1vcyBxdWUgZW4gZXN0ZSBjYXNvIGVsIEJJQyBlbXBlb3JhIHJlc3BlY3RvIGFsIEFSTUEoNCwyKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpIYXkgZG9zIHJldGFyZG9zIHF1ZSBzZSBlbmN1ZW50cmFuIGZ1ZXJhIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxhIEFDRiB5IFBBQ0YuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xLCBnb2YubGFnID0gMjApDQpgYGANCg0KQSBwYXJ0aXIgZGVsIHJldGFyZG8gMTAgYWxndW5vcyBkZSBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIGxvIGN1YWwgbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcy4NCg0KIyMjQVJNQSgzLDIpDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMywwLDIpLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANCg0KVmVtb3MgcXVlIGVuIGVzdGUgY2FzbyBlbCBCSUMgbWVqb3JhIHJlc3BlY3RvIGFsIEFSTUEoNCwyKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpIYXkgZG9zIHJldGFyZG9zIHF1ZSBzZSBlbmN1ZW50cmFuIGZ1ZXJhIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIGVuIGxhIEFDRiB5IFBBQ0YuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xLCBnb2YubGFnID0gMjApDQpgYGANCg0KTmluZ3VubyBkZSBsb3MgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3ggcGFyYSBuaW5ndW4gcmV0YXJkbywgbG8gY3VhbCBubyBub3MgaW5kaWNhIHF1ZSBoYXkgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zLg0KDQpFc3RlIG1vZGVsbyBjdW1wbGUgbGEgZGlhZ25vc2lzLCBtZWpvcmEgZWwgQklDIHkgZW5jaW1hIHRpZW5lIHVuIHBhcsOhbWV0cm8gbWVub3MgcG9yIGxvIHF1ZSBlcyBwcmVmZXJpYmxlIGFsIG1vZGVsbyBBUk1BKDQsMikgZGVsIG1vZGVsaXphZG9yIGF1dG9tw6F0aWNvLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMywwLDApLCBpbmNsdWRlLm1lYW49RikNCm0xLmZpdCA8LSBmaXR0ZWQuQXJpbWEobTEpDQptMS5maXQgPC0geHRzKG0xLmZpdCwgaW5kZXgoWCkpDQptMS5kYXRhIDwtIG1lcmdlKFgsIG0xLmZpdCkNCm5hbWVzKG0xLmRhdGEpIDwtIGMoIkFjdHVhbCIsICJGaXQiKQ0KZHlncmFwaChtMS5kYXRhLCBtYWluPSJBUk1BKDMsMikiKQ0KYGBgDQoNClByb2JhcmVtb3MgcG9yIMO6bHRpbW8gdW4gbW9kZWxvIEFSTUEoMiwyKQ0KDQojIyNBUk1BKDIsMikNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gQXJpbWEoWCwgYygyLDAsMiksIGluY2x1ZGUubWVhbj1GKQ0KbTENCmBgYA0KDQpWZW1vcyBxdWUgYWhvcmEgZWwgQklDIGVtcGVvcmEgYmFzdGFudGUuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaXNwbGF5KG0xJHJlc2lkKQ0KYGBgDQoNCkhheSBkb3MgcmV0YXJkb3MgcXVlIHNlIGVuY3VlbnRyYW4gZnVlcmEgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbGEgQUNGIHkgUEFDRi4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpBIHBhcnRpciBkZWwgcmV0YXJkbyAxMCBoYXkgdmFyaW9zIHAtdmFsb3JlcyBxdWUgcmVjaGF6YW4gbGEgSDxzdWI+MDwvc3ViPiBkZWwgZXN0YWTDrXN0aWNvIGRlIExqdW5nLUJveCwgbG8gY3VhbCBub3MgaW5kaWNhIHF1ZSBoYXkgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChtMSkNCmBgYA0KDQpMYXMgaW52ZXJzYXMgZGUgbGFzIHJhaWNlcyBkZSBsb3MgcG9saW5vbWlvcyBzb24gZW4gbm9ybWEgdG9kYXMgbWVub3JlcyBxdWUgMS4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpKYXJxdWVCZXJhLnRlc3QobTEpDQpgYGANCg0KTm8gc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQgZGUgbG9zIHJlc2lkdW9zLg0KDQpFc3RlIG1vZGVsbyBubyBjdW1wbGUgbGEgZGlhZ25vc2lzIHkgcG9yIHRhbnRvIG5vcyBxdWVkYW1vcyBjb24gZWwgbW9kZWxvIEFSTUEoMywyKS4NCg0KDQojQXBhcnRhZG8gMg0KDQpDb25zdHJ1eWUgbGFzIHNlcmllcyBkZSBsb3MgZGlmZXJlbmNpYWxlcyBkZSB0aXBvcyBkZSBpbnRlcsOpcyAodGlwb3MgYSBtZWRpbyB5IGxhcmdvIHBsYXpvIG1lbm9zIHRpcG9zIGRlIGludGVyw6lzIGEgY29ydG8gcGxhem8pIHkgY29uc3RydXllIG1vZGVsb3MgQVJJTUEgaWd1YWwgcXVlIGVuIGVsIGFwYXJ0YWRvIGFudGVyaW9yLg0KDQojTW9kZWxvcyBkZWwgZGlmZXJlbmNpYWwgZGUgdGlwbyBkZSBpbnRlcsOpcyBhIGxhcmdvIHBsYXpvDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KZHlncmFwaChkbHQsIG1haW49IkRpZmVyZW5jaWFsIGRlIHRpcG8gZGUgaW50ZXLDqXMgYSBsYXJnbyBwbGF6byBNZXhpY28iKQ0KDQpwIDwtIEFjZihkbHQsIDQwLCBwbG90PUYpDQphdXRvcGxvdChwKSArIGdndGl0bGUoIkRpZmVyZW5jaWFsIGRlIHRpcG8gZGUgaW50ZXLDqXMgYSBsYXJnbyBwbGF6byBNZXhpY28gKGRpZmYpIikNCmdnUGFjZihkbHQsIDQwKSArIGdndGl0bGUoIkRpZmVyZW5jaWFsIGRlIHRpcG8gZGUgaW50ZXLDqXMgYSBsYXJnbyBwbGF6byBNZXhpY28gKGRpZmYpIikNCmBgYA0KDQpEZSBudWV2byB2ZW1vcyBxdWUgbnVlc3RyYSBzZXJpZSBwcmVzZW50YSB0ZW5kZW5jaWEgcG9yIGxvIHF1ZSBlcyBuZWNlc2FyaW8gZGlmZXJlbmNpYXIgbGEgc2VyaWUgYWwgbWVub3MgdW5hIHZlei4NClRhbWJpw6luIGFwbGljYXJlbW9zIHVuYSB0cmFuc2Zvcm1hY2nDs24gbG9nYXJpdG1pY2EgeWEgcXVlIGhheSBoZXRlcm9jZWRhc3RpY2lkYWQuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KWCA8LSBkaWZmKGxvZyhkbHQpKQ0KWCA8LSBYWy0xXQ0KZHlncmFwaChYKQ0KDQpwIDwtIEFjZihYLCA0MCwgcGxvdD1GKQ0KYXV0b3Bsb3QocCkgKyBnZ3RpdGxlKCJEaWZlcmVuY2lhbCBkZSB0aXBvIGRlIGludGVyZXMgYSBsYXJnbyBwbGF6byAoZGlmZikiKQ0KZ2dQYWNmKFgsIDQwKSArIGdndGl0bGUoIkRpZmVyZW5jaWFsIGRlIHRpcG8gZGUgaW50ZXJlcyBhIGxhcmdvIHBsYXpvIChkaWZmKSIpDQpgYGANCg0KIyNNb2RlbGl6YWRvciBhdXRvbcOhdGljbw0KDQpEZSBudWV2byBjb21lbnphcmVtb3MgY29uIGVsIG1vZGVsaXphZG9yIGF1dG9tw6F0aWNvIHBhcmEgaGFjZXJub3MgdW5hIGlkZWEgZGUgY29tbyBwdWVkZW4gc2VyIG51ZXN0cm9zIG1vZGVsb3MuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEgPC0gYXV0by5hcmltYShYLCBkPTAsIG1heC5wPTEwLCBtYXgucT0xMCwgc2Vhc29uYWw9RikNCm0xDQpgYGANCg0KSGVtb3Mgb2J0ZW5pZG8gdW4gdW4gbW9kZWxvIEFSKDIpLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpWZW1vcyBxdWUgc2Fsdm8gdW4gcmV0YXJkbyB0b2RvcyBzZSBlbmN1ZW50cmFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSBlbiBsb3MgZ3LDoWZpY29zIGRlIGxhIEFDRiB5IFBBQ0YuDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2RpYWcobTEsIGdvZi5sYWcgPSAyMCkNCmBgYA0KDQpWZW1vcyBxdWUgaGF5IHZhcmlvcyByZXRhcmRvcyBkb25kZSBzdXMgcC12YWxvcmVzIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3guIEVzdG8gbm9zIGluZGljYSBxdWUgaGF5IGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcywgcG9zaWJsZW1lbnRlIGRlYmlkbyBhIG91dGxpZXJzIGVuIG51ZXN0cmEgc2VyaWUuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KbTEuZml0IDwtIGZpdHRlZC5BcmltYShtMSkNCm0xLmZpdCA8LSB4dHMobTEuZml0LCBpbmRleChYKSkNCm0xLmRhdGEgPC0gbWVyZ2UoWCwgbTEuZml0KQ0KbmFtZXMobTEuZGF0YSkgPC0gYygiQWN0dWFsIiwgIkZpdCIpDQpkeWdyYXBoKG0xLmRhdGEsIG1haW49IkFSKDIpIikNCmBgYA0KDQojI01vZGVsbyBBUk1BDQoNCkNyZWFyZW1vcyBhaG9yYSB1biBtb2RlbG8gQVJNQSB5ZW5kbyBkZSBsbyBlc3BlY8OtZmljbyBhIGxvIGdlbmVyYWwuDQoNCiMjI0FSTUEoMSwxKQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xIDwtIEFyaW1hKFgsIGMoMSwwLDEpLCBpbmNsdWRlLm1lYW49RikNCm0xDQpgYGANCg0KRWwgQklDIG1lam9yYSBsaWdlcmFtZW50ZSByZXNwZWN0byBhbCBtb2RlbGl6YWRvciBhdXRvbcOhdGljby4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KSGF5IHVuIHBhciBkZSByZXRhcmRvcyBxdWUgc2UgZW5jdWVudHJhbiBmdWVyYSBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSB0YW50byBlbiBsYSBBQ0YgY29tbyBlbiBsYSBQQUNGLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlhZyhtMSwgZ29mLmxhZyA9IDIwKQ0KYGBgDQoNClZlbW9zIHF1ZSBzYWx2byBwYXJhIGVsIHJldGFyZG8gOCBsb3MgcC12YWxvcmVzIG5vIHJlY2hhemFuIGxhIEg8c3ViPjA8L3N1Yj4gZGVsIGVzdGFkw61zdGljbyBkZSBManVuZy1Cb3gsIHBvZHLDrWEgY29uc2lkZXJhcnNlIHF1ZSBubyBleGlzdGUgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnBsb3QobTEpDQpgYGANCg0KTGFzIGludmVyc2FzIGRlIGxhcyByYWljZXMgZGUgbG9zIHBvbGlub21pb3Mgc29uIGVuIG5vcm1hIHRvZGFzIG1lbm9yZXMgcXVlIDEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KSmFycXVlQmVyYS50ZXN0KG0xKQ0KYGBgDQoNCk5vIHNlIGN1bXBsZSBsYSBub3JtYWxpZGFkIGRlIGxvcyByZXNpZHVvcywgcG9zaWJsZW1lbnRlIGRlYmlkbyBhIG91dGxpZXJzIGVuIG51ZXN0cmEgc2VyaWUuDQoNCkVzdGUgbW9kZWxvIGN1bXBsZSBsYSBkaWFnbm9zaXMgeSBwb3IgdGFudG8gbm9zIHF1ZWRhbW9zIGNvbiBlc3RlIG1vZGVsbyBmaW5hbC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMS5maXQgPC0gZml0dGVkLkFyaW1hKG0xKQ0KbTEuZml0IDwtIHh0cyhtMS5maXQsIGluZGV4KFgpKQ0KbTEuZGF0YSA8LSBtZXJnZShYLCBtMS5maXQpDQpuYW1lcyhtMS5kYXRhKSA8LSBjKCJBY3R1YWwiLCAiRml0IikNCmR5Z3JhcGgobTEuZGF0YSwgbWFpbj0iQVJNQSgxLDEpIikNCmBgYA0KDQojI01vZGVsbyBBUg0KDQpDcmVhcmVtb3MgYWhvcmEgdW4gbW9kZWxvIEFSLCBhcHJvdmVjaGFuZG8gcXVlIHlhIHNhYmVtb3MgcXVlIEFSKDIpIG5vIGN1bXBsZSBsYSBkaWFnbm9zaXMsIGVtcGV6YXJlbW9zIHBvciB1biBBUigzKS4NCg0KIyMjQVIoMykNCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBBcmltYShYLCBjKDMsMCwwKSwgaW5jbHVkZS5tZWFuPUYpDQptMQ0KYGBgDQoNCkVsIEJJQyBlbiBlc3RlIGNhc28gZXMgcGVvciBxdWUgZWwgZGVsIEFSKDIpLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnRzZGlzcGxheShtMSRyZXNpZCkNCmBgYA0KDQpIYXkgdW4gcmV0YXJkbyBxdWUgc2UgZW5jdWVudHJhIGZ1ZXJhIGRlIGxhcyBiYW5kYXMgZGUgY29uZmlhbnphIHRhbnRvIGVuIGxhIEFDRiBjb21vIGVuIGxhIFBBQ0YuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xLCBnb2YubGFnID0gMjApDQpgYGANCg0KVmVtb3MgcXVlIHNhbHZvIHBhcmEgZWwgcmV0YXJkbyA4IHF1ZSBubyBlc3RhIG11eSBjbGFybywgbG9zIHAtdmFsb3JlcyBubyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBwb2Ryw61hIGNvbnNpZGVyYXJzZSBxdWUgbm8gZXhpc3RlIGF1dG9jb3JyZWxhY2nDs24gZW4gbG9zIHJlc2lkdW9zLg0KDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpwbG90KG0xKQ0KYGBgDQoNCkxhcyBpbnZlcnNhcyBkZSBsYXMgcmFpY2VzIGRlIGxvcyBwb2xpbm9taW9zIHNvbiBlbiBub3JtYSB0b2RhcyBtZW5vcmVzIHF1ZSAxLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCkphcnF1ZUJlcmEudGVzdChtMSkNCmBgYA0KDQpObyBzZSBjdW1wbGUgbGEgbm9ybWFsaWRhZCBkZSBsb3MgcmVzaWR1b3MgZGViaWRvIGEgbGEga3VydG9zaXMsIHBvc2libGVtZW50ZSBkZWJpZG8gYSBvdXRsaWVycyBlbiBudWVzdHJhIHNlcmllLg0KDQpFc3RlIG1vZGVsbyBjdW1wbGUgbGEgZGlhZ25vc2lzIHkgcG9yIHRhbnRvIG5vcyBxdWVkYW1vcyBjb24gZXN0ZSBtb2RlbG8sIGVsIG1vZGVsbyBBUigyKSB0YW1iacOpbiBwb2Ryw61hIHV0aWxpemFyc2UgeWEgcXVlIGhhY2UgbWVqb3JlcyBwcmVkaWNjaW9uZXMgeSB0aWVuZSBtZW5vcyBwYXLDoW1ldHJvcyBwZXJvIG5vIGN1bXBsZSBtdXkgYmllbiBjb24gbGEgbm8gYXV0b2NvcnJlbGFjacOzbiByZXNpZHVhbC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMS5maXQgPC0gZml0dGVkLkFyaW1hKG0xKQ0KbTEuZml0IDwtIHh0cyhtMS5maXQsIGluZGV4KFgpKQ0KbTEuZGF0YSA8LSBtZXJnZShYLCBtMS5maXQpDQpuYW1lcyhtMS5kYXRhKSA8LSBjKCJBY3R1YWwiLCAiRml0IikNCmR5Z3JhcGgobTEuZGF0YSwgbWFpbj0iQVIoMykiKQ0KYGBgDQoNCiNNb2RlbG9zIGRlbCBkaWZlcmVuY2lhbCBkZSB0aXBvIGRlIGludGVyw6lzIGEgbWVkaW8gcGxhem8NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpkeWdyYXBoKGRtdCwgbWFpbj0iU2hvcnQgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyIpDQoNCnAgPC0gQWNmKGRtdCwgNDAsIHBsb3Q9RikNCmF1dG9wbG90KHApICsgZ2d0aXRsZSgiU2hvcnQgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KZ2dQYWNmKGRtdCwgNDApICsgZ2d0aXRsZSgiU2hvcnQgVGVybSBJbnRlcmVzdCBSYXRlIE1leGljbyAoZGlmZikiKQ0KYGBgDQoNCkRlIG51ZXZvIHZlbW9zIHF1ZSBudWVzdHJhIHNlcmllIHByZXNlbnRhIHRlbmRlbmNpYSBwb3IgbG8gcXVlIGVzIG5lY2VzYXJpbyBkaWZlcmVuY2lhciBsYSBzZXJpZSBhbCBtZW5vcyB1bmEgdmV6Lg0KVGFtYmnDqW4gYXBsaWNhcmVtb3MgdW5hIHRyYW5zZm9ybWFjacOzbiBsb2dhcml0bWljYSB5YSBxdWUgaGF5IGhldGVyb2NlZGFzdGljaWRhZC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQpYIDwtIGRpZmYobG9nKGRtdCkpDQpYIDwtIFhbLTFdDQpkeWdyYXBoKFgpDQoNCnAgPC0gQWNmKFgsIDQwLCBwbG90PUYpDQphdXRvcGxvdChwKSArIGdndGl0bGUoIkRpZmVyZW5jaWFsIGRlIHRpcG8gZGUgaW50ZXJlcyBhIGxhcmdvIHBsYXpvIChkaWZmKSIpDQpnZ1BhY2YoWCwgNDApICsgZ2d0aXRsZSgiRGlmZXJlbmNpYWwgZGUgdGlwbyBkZSBpbnRlcmVzIGEgbGFyZ28gcGxhem8gKGRpZmYpIikNCmBgYA0KDQpDb21vIHBvZGVtb3MgdmVyIGVuIGxvcyBncsOhZmljb3MgZGUgbGEgQUNGIHkgUEFDRiBhbnRlcmlvcmVzIHNvbG8gaGF5IHVuIHJldGFyZG8gcXVlIHNlIHNhbGUgZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEsIGxvIGN1YWwgcHVlZGUgc2lnbmlmaWNhciBxdWUgbG9zIHJlc2lkdW9zIGRlc3B1ZXMgZGUgZGlmZXJlbmNpYXIgeWEgc2UgY29tcG9ydGVuIGNvbW8gcnVpZG8gYmxhbmNvLg0KDQojI01vZGVsaXphZG9yIGF1dG9tw6F0aWNvDQoNCkRlIG51ZXZvIGNvbWVuemFyZW1vcyBjb24gZWwgbW9kZWxpemFkb3IgYXV0b23DoXRpY28gcGFyYSBoYWNlcm5vcyB1bmEgaWRlYSBkZSBjb21vIHB1ZWRlbiBzZXIgbnVlc3Ryb3MgbW9kZWxvcy4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQptMSA8LSBhdXRvLmFyaW1hKFgsIGQ9MCwgbWF4LnA9MTAsIG1heC5xPTEwLCBzZWFzb25hbD1GKQ0KbTENCmBgYA0KDQpObyBub3MgaWRlbnRpZmljYSBuaW5nw7puIG1vZGVsby4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQp0c2Rpc3BsYXkobTEkcmVzaWQpDQpgYGANCg0KVmVtb3MgcXVlIHNhbHZvIHVuIHJldGFyZG8gdG9kb3Mgc2UgZW5jdWVudHJhbiBkZW50cm8gZGUgbGFzIGJhbmRhcyBkZSBjb25maWFuemEgZW4gbG9zIGdyw6FmaWNvcyBkZSBsYSBBQ0YgeSBQQUNGLCB5YSBxdWUgc29uIGxvcyBtaXNtb3MgZ3LDoWZpY29zIGRlIGFudGVzLg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KdHNkaWFnKG0xLCBnb2YubGFnID0gMjApDQpgYGANCg0KVmVtb3MgcXVlIHBhcmEgbmluZ3VuIHJldGFyZG8gbG9zIHAtdmFsb3JlcyByZWNoYXphbiBsYSBIPHN1Yj4wPC9zdWI+IGRlbCBlc3RhZMOtc3RpY28gZGUgTGp1bmctQm94LCBlc3RvIG5vIG5vcyBpbmRpY2EgcXVlIGhheWEgYXV0b2NvcnJlbGFjacOzbiBlbiBsb3MgcmVzaWR1b3MuDQoNClB1ZXN0byBxdWUgbGEgc2VyaWUgZGlmZXJlbmNpYWRhIHNlIGNvbXBvcnRhIGNvbW8gdW4gcnVpZG8gYmxhbmNvIG5vIGhhY2UgZmFsdGEgZXN0aW1hciBuaW5nw7puIG1vZGVsbyBBUk1BLg0KDQpFbCBtb2RlbG8gZmluYWwgZXMgdW4gQVJJTUEoMCwxLDApLg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCm0xLmZpdCA8LSBmaXR0ZWQuQXJpbWEobTEpDQptMS5maXQgPC0geHRzKG0xLmZpdCwgaW5kZXgoWCkpDQptMS5kYXRhIDwtIG1lcmdlKFgsIG0xLmZpdCkNCm5hbWVzKG0xLmRhdGEpIDwtIGMoIkFjdHVhbCIsICJGaXQiKQ0KZHlncmFwaChtMS5kYXRhLCBtYWluPSJBUk1BKDAsMCkiKQ0KYGBg