library(readr)

Attaching package: <U+393C><U+3E31>readr<U+393C><U+3E32>

The following object is masked from <U+393C><U+3E31>package:TSA<U+393C><U+3E32>:

    spec

MODELOS DE REGRESIÓN / ARIMA / VAR / COINTEGRACIÓN.

1. BREVE REFERENCIA DE LA SERIE DE TIEMPO ELEGIDA, ASI COMO FECUENCIA, UNIDAD DE MEDIDA, FUENTE ETC.

 - La base a elegir sera la cantidad de pasajeros que viajan en el metrobus de
   manera mensual por cada año, esto en miles de pasajeros, desde (2008-2018).

 - informacion proporcionada por:http://www.beta.inegi.org.mx/app/tabulados/?nc=100100045

 - la serie fue escogida para analizar el comportamiento de la cantidad de pasajeros que 
   utilizan el metrobus, y ver que cambios ha tenido con el paso del tiempo.

2. graficar la serie de tiempo, analizar patrones y observaciones atipicas. apoye su analisis con una descomposición clasica.

  • Descomposición clasica.

   En las graficas anteriores podemos notar que la serie tiene una tendencia positiva 
   ya que cada año aumentan la cantidad de los pasajeros,En la última grafica (random)                   podemos apreciar que las variables que construyen la serie son independientes                         aleatorias e identicamente distribuidas.

3. si es necesario, utilizar transformacion Box-Cox / logaritmos para estabilizar la varianza, presentar grafica.

  Notamos que al aplicar la diferencia de los logaritmos se estabiliza la variaza y la           media
cor(diff(log(ST))[-1],tasa[-1])
[1] 0.9937032
BoxCox.ar(ST,lambda = seq(-5,1.8,5))
possible convergence problem: optim gave code = 1possible convergence problem: optim gave code = 1possible convergence problem: optim gave code = 1possible convergence problem: optim gave code = 1possible convergence problem: optim gave code = 1possible convergence problem: optim gave code = 1

4. modelar la serie de tiempo elegida como función de una tendencia, tendencia cuadratica y/o medias estacionales. presente el dianostico del modelo elegido.

mes. <- season(ST)
modelo1 <- lm(ST ~ mes. + time(ST) + I(time(ST)^2))
stargazer(modelo1, type = "text")
length of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changedlength of NULL cannot be changed

===============================================
                        Dependent variable:    
                    ---------------------------
                                ST             
-----------------------------------------------
mes.February                 -174.627          
                             (673.551)         
                                               
mes.March                     331.556          
                             (673.585)         
                                               
mes.April                     95.186           
                             (673.641)         
                                               
mes.May                     1,233.312*         
                             (673.718)         
                                               
mes.June                      812.601          
                             (673.819)         
                                               
mes.July                      392.164          
                             (690.831)         
                                               
mes.August                  1,431.934**        
                             (690.863)         
                                               
mes.September                -146.235          
                             (690.906)         
                                               
mes.October                 1,516.936**        
                             (690.961)         
                                               
mes.November                  291.548          
                             (691.026)         
                                               
mes.December                 -877.608          
                             (691.103)         
                                               
time(ST)                    13,535.250         
                           (69,354.810)        
                                               
I(time(ST)2)                  -2.894           
                             (17.225)          
                                               
Constant                  -15,504,975.000      
                         (69,812,714.000)      
                                               
-----------------------------------------------
Observations                    126            
R2                             0.937           
Adjusted R2                    0.930           
Residual Std. Error    1,579.592 (df = 112)    
F Statistic          128.519*** (df = 13; 112) 
===============================================
Note:               *p<0.1; **p<0.05; ***p<0.01
notamos que el intercepto es negativo, y que solo dos meses son estadisticamente                       significativos por lo cual quiza no sea una serie que se esplique con el tiempo.

Y el valor de R cuadrado explica en un 93% la variacion o varianza de la variables                    explicativas de manera conjunta respecto al tiempo.

5. En caso de estacionalidad, aplicar diferencias estacionales.

En este caso como la serie de número de miles de pasajeros en el metrobus de la cdmx, no presenta comportamiento estacional, por lo tanto no se podria aplicar diferencias estacionales.

6. Usar prueba Dickey-Fuller para evaluar el orden de integracion de la serie. Difereniar hasta que la serie sea estacionaria.

summary(ur.df(ST))

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 


Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-7859.0  -602.6    54.7   969.8  4742.0 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
z.lag.1     0.012805   0.008354   1.533    0.128    
z.diff.lag -0.560181   0.076373  -7.335 2.69e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1615 on 122 degrees of freedom
Multiple R-squared:  0.3071,    Adjusted R-squared:  0.2958 
F-statistic: 27.04 on 2 and 122 DF,  p-value: 1.904e-10


Value of test-statistic is: 1.5329 

Critical values for test statistics: 
      1pct  5pct 10pct
tau1 -2.58 -1.95 -1.62
adfTest(diff(log(ST)),lags=0,type=c("c"))
p-value smaller than printed p-value

Title:
 Augmented Dickey-Fuller Test

Test Results:
  PARAMETER:
    Lag Order: 0
  STATISTIC:
    Dickey-Fuller: -18.4442
  P VALUE:
    0.01 

Description:
 Fri Nov 30 12:21:21 2018 by user: dullu

7. usar herramientas ACF,PACF, EACF y/o criterios de akaike/bayes para construir propuestas de modelos.

Se hace un diagnostico de residuos de la serie.

8. como parte del diagnostico del modelo, analizar los residuos y aplicar prueba Ljung-box y ## 9. Usar la funcion auto.arima() y compare sus resultados con el inciso anterior.

Autoarima
Series: st 
ARIMA(0,1,1) with drift 

Coefficients:
          ma1   drift
      -0.6085  0.0117
s.e.   0.0758  0.0031

sigma^2 estimated as 0.00782:  log likelihood=126.6
AIC=-247.21   AICc=-247.01   BIC=-238.72
checkresiduals(Autoarima)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,1) with drift
Q* = 13.787, df = 22, p-value = 0.9089

Model df: 2.   Total lags used: 24

El autoarima nos arroja un modelo en el que solamente sobresale un rezago, ahora se propondran mas modelos par saber si aun podemos corregir ms nuestra serie, de acuerdo al criterio de AIC.

PROPUESTAS DE MODELO

Se propone:

m1

Call:
arima(x = st, order = c(0, 1, 3), seasonal = c(1, 0, 1))

Coefficients:
          ma1     ma2      ma3    sar1     sma1
      -0.5538  0.0410  -0.0269  0.9990  -0.9747
s.e.   0.0898  0.1001   0.0947  0.0065   0.0836

sigma^2 estimated as 0.006439:  log likelihood = 130.24,  aic = -248.49
checkresiduals(m1)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,3)(1,0,1)[12]
Q* = 10.728, df = 19, p-value = 0.9326

Model df: 5.   Total lags used: 24

m2

Call:
arima(x = st, order = c(0, 1, 2), seasonal = c(1, 0, 1))

Coefficients:
          ma1     ma2    sar1     sma1
      -0.5530  0.0250  0.9987  -0.9709
s.e.   0.0887  0.0857  0.0085   0.0942

sigma^2 estimated as 0.006472:  log likelihood = 130.2,  aic = -250.4
checkresiduals(m2)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,2)(1,0,1)[12]
Q* = 10.409, df = 20, p-value = 0.9601

Model df: 4.   Total lags used: 24

Para escoger el modelo adecuado para nuestra serie nos basamos en el criterio de AIC:Para autoarima nos presenta: AIC=2196.47, para el modelo 1 nos presenta: aic = -248.49, para el segundo modelo nos presenta: aic = -250.4.

Segun el criterio de AIC el mejor modelo es el más pequeño y positivo por lo que el modelo elegido es el autoarima.

10. Presente la ecuacion final y describa.

\[ Y_t = -0.5530 \phi_{et-1}0.250\phi_{et-3}0.9987\theta_{et-2}-0.9709\theta\Theta_{et-12} \]

       esta es la ecuacion que nos representa el modelo.
       
       
       

11. realizar el pronostico arima para dos años.

pronostico
$`mean`
          Jan      Feb      Mar      Apr      May      Jun      Jul      Aug      Sep
2018                                                       10.23730 10.24905 10.26080
2019 10.30778 10.31953 10.33128 10.34302 10.35477 10.36651 10.37826 10.39001 10.40175
2020 10.44874 10.46049 10.47223 10.48398 10.49572 10.50747                           
          Oct      Nov      Dec
2018 10.27254 10.28429 10.29604
2019 10.41350 10.42525 10.43699
2020                           

$lower
              80%      95%
Jul 2018 10.12397 10.06398
Aug 2018 10.12734 10.06291
Sep 2018 10.13125 10.06267
Oct 2018 10.13561 10.06312
Nov 2018 10.14034 10.06414
Dec 2018 10.14541 10.06567
Jan 2019 10.15075 10.06763
Feb 2019 10.15635 10.06997
Mar 2019 10.16217 10.07265
Apr 2019 10.16819 10.07564
May 2019 10.17439 10.07891
Jun 2019 10.18076 10.08243
Jul 2019 10.18728 10.08618
Aug 2019 10.19394 10.09015
Sep 2019 10.20073 10.09431
Oct 2019 10.20764 10.09866
Nov 2019 10.21465 10.10317
Dec 2019 10.22178 10.10785
Jan 2020 10.22899 10.11267
Feb 2020 10.23631 10.11763
Mar 2020 10.24370 10.12273
Apr 2020 10.25118 10.12794
May 2020 10.25874 10.13328
Jun 2020 10.26636 10.13873

$upper
              80%      95%
Jul 2018 10.35063 10.41063
Aug 2018 10.37076 10.43519
Sep 2018 10.39034 10.45892
Oct 2018 10.40948 10.48197
Nov 2018 10.42823 10.50443
Dec 2018 10.44667 10.52640
Jan 2019 10.46481 10.54794
Feb 2019 10.48271 10.56909
Mar 2019 10.50038 10.58990
Apr 2019 10.51785 10.61040
May 2019 10.53514 10.63063
Jun 2019 10.55227 10.65060
Jul 2019 10.56924 10.67034
Aug 2019 10.58607 10.68987
Sep 2019 10.60278 10.70920
Oct 2019 10.61936 10.72834
Nov 2019 10.63584 10.74732
Dec 2019 10.65221 10.76614
Jan 2020 10.66848 10.78481
Feb 2020 10.68467 10.80334
Mar 2020 10.70076 10.82174
Apr 2020 10.71678 10.84001
May 2020 10.73271 10.85817
Jun 2020 10.74858 10.87621
      con este pronostico notamos que que la serie mantendrá un comportamiento constante    por lo que es probable (95%) que en los proximos 2 años el número de pasajeros del    metrobus no aumente exponencialmente.
 
       
      

12. utilizando los metodos de pronosticos simples y/o suavizamientoexponencial, generar un pronostico para dos años. elegir el metodo que presenta la raiz de error medio al cuadrado más pequeño

   aqui se esta creando la ventana en la cual generaremos nuetros pronosticos
   

pronosticos.

ST3 <- window(ST, start=2008)
  accuracy (STfit1,ST3)#mean
                        ME     RMSE      MAE       MPE     MAPE     MASE       ACF1
Training set -3.524095e-13 4160.820 3716.157 -11.93560 32.82269 1.737421  0.9300643
Test set      6.099221e+03 6304.002 6099.221  30.33576 30.33576 2.851578 -0.3683302
             Theil's U
Training set        NA
Test set      2.290417
accuracy (STfit2,ST3)#naive
                   ME     RMSE       MAE       MPE     MAPE      MASE       ACF1
Training set 144.0601 1222.182  966.5532 0.8917718 6.912104 0.4518941 -0.4096249
Test set     871.9492 1816.658 1567.5052 3.7528064 7.835335 0.7328580 -0.3683302
             Theil's U
Training set        NA
Test set     0.6850087
accuracy (STfit3,ST3)#seasonal naive
                    ME     RMSE      MAE      MPE      MAPE      MASE       ACF1
Training set 1844.7206 2573.506 2138.893 13.24892 15.177397 1.0000000  0.6727412
Test set      843.2108 1573.798 1322.181  3.91727  6.686061 0.6181611 -0.4843001
             Theil's U
Training set        NA
Test set     0.6205445
  Notamos que el pronostico que nos da la raíz del promedio de los errores al cuadrado     (RMSE) de menor valor= 1573.798 fue la de Seasonal Naive, por lo que es el pronóstico que    más se adapta a nuestro modelo
  
  

Analisis VAR

library(vars)
Error in library(vars) : there is no package called ‘vars’
stf<- read.csv(file.choose())
Error in file.choose() : file choice cancelled

Una vez declaradas ambas variables como serie de tiempo se grafican.Esta funcionnos permite visualizar el comportamiento de nuestras variables.

A continuacion se graficara usando la funcion ggseasonplot para corroborar si la variable presenta estacionalidad.

Ahora con la segunda variable kilometros recorridos.

Con esa grafica corroboramos que la segunda variable no tiene estacionalidad.
summary(reg.w)

Call:
lm(formula = km ~ time(km) + mes.)

Residuals:
    Min      1Q  Median      3Q     Max 
-472.04 -110.91  -16.47   92.66  413.90 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)   -5.646e+05  1.026e+04 -55.031   <2e-16 ***
time(km)       2.816e+02  5.097e+00  55.246   <2e-16 ***
mes.February  -1.380e+02  7.386e+01  -1.868   0.0643 .  
mes.March      3.434e+01  7.386e+01   0.465   0.6429    
mes.April      1.729e+01  7.387e+01   0.234   0.8154    
mes.May        1.243e+02  7.388e+01   1.682   0.0953 .  
mes.June       1.090e+02  7.389e+01   1.475   0.1430    
mes.July       1.345e+02  7.568e+01   1.777   0.0782 .  
mes.August     9.111e+01  7.568e+01   1.204   0.2312    
mes.September -7.247e+00  7.569e+01  -0.096   0.9239    
mes.October    9.110e+01  7.569e+01   1.204   0.2313    
mes.November  -3.428e+01  7.570e+01  -0.453   0.6515    
mes.December  -4.612e+01  7.571e+01  -0.609   0.5436    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 173.2 on 113 degrees of freedom
Multiple R-squared:  0.9647,    Adjusted R-squared:  0.9609 
F-statistic: 257.3 on 12 and 113 DF,  p-value: < 2.2e-16
La tabla nos muestra que los meses de febrero, mayo y julio existe un 10% de significancia.      
summary(reg.p)

Call:
lm(formula = pass ~ time(pass) + mes.)

Residuals:
    Min      1Q  Median      3Q     Max 
-6273.4  -726.4  -147.7  1036.6  3479.2 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)   -3.777e+06  9.316e+04 -40.542   <2e-16 ***
time(pass)     1.884e+03  4.628e+01  40.711   <2e-16 ***
mes.February  -1.746e+02  6.706e+02  -0.260   0.7951    
mes.March      3.317e+02  6.707e+02   0.495   0.6219    
mes.April      9.531e+01  6.707e+02   0.142   0.8873    
mes.May        1.233e+03  6.708e+02   1.839   0.0686 .  
mes.June       8.126e+02  6.709e+02   1.211   0.2284    
mes.July       3.972e+02  6.872e+02   0.578   0.5644    
mes.August     1.437e+03  6.872e+02   2.091   0.0388 *  
mes.September -1.411e+02  6.872e+02  -0.205   0.8378    
mes.October    1.522e+03  6.873e+02   2.215   0.0288 *  
mes.November   2.967e+02  6.874e+02   0.432   0.6668    
mes.December  -8.725e+02  6.875e+02  -1.269   0.2070    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1573 on 113 degrees of freedom
Multiple R-squared:  0.9372,    Adjusted R-squared:  0.9305 
F-statistic: 140.4 on 12 and 113 DF,  p-value: < 2.2e-16
La grafica nos dice que la variable pasajeros es significativa al 5% en los meses de agosto y octubre respecto a enero.      

El modelo indicado para modelar esta variable es el que nos marco el autoarima en el punto pasado y es: AR(0,1,1).

Ahora haremos lo mismo con la variable kilometros recorridos.

Usaremos la funcion autoarima para buscar el modelo indicado para corregir esta variable.

Autoarima2<- auto.arima(stf, d=1,stepwise=FALSE, approximation=FALSE)
Autoarima
checkresiduals()
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQphdXRob3I6IFJB2kwgTFVOQSBM01BFWg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgIHRvYzogdHJ1ZQ0KLS0tDQpgYGB7cn0NCnJlYWQuY3N2KGZpbGUuY2hvb3NlKCkpDQpsaWJyYXJ5KGZvcmVjYXN0KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ2ZvcnRpZnkpDQpsaWJyYXJ5KHRzZXJpZXMpDQpsaWJyYXJ5KGZVbml0Um9vdHMpDQpsaWJyYXJ5KHVyY2EpDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGZwcDIpDQpgYGANCg0KDQojIE1PREVMT1MgREUgUkVHUkVTSdNOIC8gQVJJTUEgLyBWQVIgLyBDT0lOVEVHUkFDSdNOLg0KDQojIyAxLiBCUkVWRSBSRUZFUkVOQ0lBIERFIExBIFNFUklFIERFIFRJRU1QTyBFTEVHSURBLCBBU0kgQ09NTyBGRUNVRU5DSUEsIFVOSURBRCBERSBNRURJREEsICAgICAgICAgIEZVRU5URSBFVEMuDQoNCg0KDQogICAgIC0gTGEgYmFzZSBhIGVsZWdpciBzZXJhIGxhIGNhbnRpZGFkIGRlIHBhc2FqZXJvcyBxdWUgdmlhamFuIGVuIGVsIG1ldHJvYnVzIGRlDQogICAgICAgbWFuZXJhIG1lbnN1YWwgcG9yIGNhZGEgYfFvLCBlc3RvIGVuIG1pbGVzIGRlIHBhc2FqZXJvcywgZGVzZGUgKDIwMDgtMjAxOCkuDQoNCiAgICAgLSBpbmZvcm1hY2lvbiBwcm9wb3JjaW9uYWRhIHBvcjpodHRwOi8vd3d3LmJldGEuaW5lZ2kub3JnLm14L2FwcC90YWJ1bGFkb3MvP25jPTEwMDEwMDA0NQ0KICAgIA0KICAgICAtIGxhIHNlcmllIGZ1ZSBlc2NvZ2lkYSBwYXJhIGFuYWxpemFyIGVsIGNvbXBvcnRhbWllbnRvIGRlIGxhIGNhbnRpZGFkIGRlIHBhc2FqZXJvcyBxdWUgDQogICAgICAgdXRpbGl6YW4gZWwgbWV0cm9idXMsIHkgdmVyIHF1ZSBjYW1iaW9zIGhhIHRlbmlkbyBjb24gZWwgcGFzbyBkZWwgdGllbXBvLg0KDQojIyAyLiBncmFmaWNhciBsYSBzZXJpZSBkZSB0aWVtcG8sIGFuYWxpemFyIHBhdHJvbmVzIHkgb2JzZXJ2YWNpb25lcyBhdGlwaWNhcy4gYXBveWUgc3UgICAgICAgICAgICAgYW5hbGlzaXMgY29uIHVuYSBkZXNjb21wb3NpY2nzbiBjbGFzaWNhLg0KDQoNCg0KYGBge3J9DQpTVD10cyhiYXNlJHBhc2FqZXJvcyxmcmVxdWVuY3kgPSAxMixzdGFydCA9IGMoMjAwOCwxKSkNCmF1dG9wbG90KFNULCAgInB1cnBsZSIseWxhYj0icGFzYWplcm9zIix4bGFiPSJwZXJpb2RvIixtYWluID0gInRvdGFsIGRlIHVzdWFyaW9zKCBtaWxlcyBkZSBwZXJzb25hcykiKQ0KDQpgYGANCi0gRGVzY29tcG9zaWNp824gY2xhc2ljYS4NCg0KDQpgYGB7cn0NCmZpdDwtZGVjb21wb3NlKFNUKQ0KcGxvdChmaXQsY29sPSJtYWdlbnRhNCIseWxhYj0iZWplIHkiLHhsYWI9IkHxb3MiLGx3ZD0uNSx0eXBlPSJsIixwY2g9OSkNCmBgYA0KDQoNCg0KICAgICAgIEVuIGxhcyBncmFmaWNhcyBhbnRlcmlvcmVzIHBvZGVtb3Mgbm90YXIgcXVlIGxhIHNlcmllIHRpZW5lIHVuYSB0ZW5kZW5jaWEgcG9zaXRpdmEgDQogICAgICAgeWEgcXVlIGNhZGEgYfFvIGF1bWVudGFuIGxhIGNhbnRpZGFkIGRlIGxvcyBwYXNhamVyb3MsRW4gbGEg+mx0aW1hIGdyYWZpY2EgKHJhbmRvbSkgICAgICAgICAgICAgICAgICAgcG9kZW1vcyBhcHJlY2lhciBxdWUgbGFzIHZhcmlhYmxlcyBxdWUgY29uc3RydXllbiBsYSBzZXJpZSBzb24gaW5kZXBlbmRpZW50ZXMgICAgICAgICAgICAgICAgICAgICAgICAgYWxlYXRvcmlhcyBlIGlkZW50aWNhbWVudGUgZGlzdHJpYnVpZGFzLg0KDQoNCg0KDQojIyAzLiBzaSBlcyBuZWNlc2FyaW8sIHV0aWxpemFyIHRyYW5zZm9ybWFjaW9uIEJveC1Db3ggLyBsb2dhcml0bW9zIHBhcmEgZXN0YWJpbGl6YXIgbGEgICAgICAgICAgICAgdmFyaWFuemEsIHByZXNlbnRhciBncmFmaWNhLg0KDQoNCg0KYGBge3J9DQogIHAwMTwtYXV0b3Bsb3QoU1QpDQogIHAwMjwtYXV0b3Bsb3QobG9nKFNUKSkNCiAgZ3JpZC5hcnJhbmdlKHAwMSxwMDIpDQpgYGANCg0KDQoNCg0KYGBge3J9DQp0YXNhPC1uYS5vbWl0KChTVC16bGFnKFNUKSkvemxhZyhTVCkpDQpwbG90KGRpZmYoU1QpLCB0eXBlID0gImwiKQ0KYGBgDQoNCiAgICAgIE5vdGFtb3MgcXVlIGFsIGFwbGljYXIgbGEgZGlmZXJlbmNpYSBkZSBsb3MgbG9nYXJpdG1vcyBzZSBlc3RhYmlsaXphIGxhIHZhcmlhemEgeSBsYSAgICAgICAgICAgbWVkaWENCg0KYGBge3J9DQpjb3IoZGlmZihsb2coU1QpKVstMV0sdGFzYVstMV0pDQpgYGANCg0KDQoNCmBgYHtyfQ0KZGF0YShTVCkNCkJveENveC5hcihTVCkNCkJveENveC5hcihTVCxsYW1iZGEgPSBzZXEoLTUsMS44LDUpKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQojIyA0LiBtb2RlbGFyIGxhIHNlcmllIGRlIHRpZW1wbyBlbGVnaWRhIGNvbW8gZnVuY2nzbiBkZSB1bmEgdGVuZGVuY2lhLCB0ZW5kZW5jaWEgY3VhZHJhdGljYSAgICAgICB5L28gbWVkaWFzIGVzdGFjaW9uYWxlcy4gcHJlc2VudGUgZWwgZGlhbm9zdGljbyBkZWwgbW9kZWxvIGVsZWdpZG8uDQoNCmBgYHtyfQ0KbWVzLiA8LSBzZWFzb24oU1QpDQptb2RlbG8xIDwtIGxtKFNUIH4gbWVzLiArIHRpbWUoU1QpICsgSSh0aW1lKFNUKV4yKSkNCnN0YXJnYXplcihtb2RlbG8xLCB0eXBlID0gInRleHQiKQ0KYGBgDQoNCiAgICBub3RhbW9zIHF1ZSBlbCBpbnRlcmNlcHRvIGVzIG5lZ2F0aXZvLCB5IHF1ZSBzb2xvIGRvcyBtZXNlcyBzb24gZXN0YWRpc3RpY2FtZW50ZSAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhdGl2b3MgcG9yIGxvIGN1YWwgcXVpemEgbm8gc2VhIHVuYSBzZXJpZSBxdWUgc2UgZXNwbGlxdWUgY29uIGVsIHRpZW1wby4NCg0KICAgIFkgZWwgdmFsb3IgZGUgUiBjdWFkcmFkbyBleHBsaWNhIGVuIHVuIDkzJSBsYSB2YXJpYWNpb24gbyB2YXJpYW56YSBkZSBsYSB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgIGV4cGxpY2F0aXZhcyBkZSBtYW5lcmEgY29uanVudGEgcmVzcGVjdG8gYWwgdGllbXBvLg0KDQoNCg0KIyMgNS4gRW4gY2FzbyBkZSBlc3RhY2lvbmFsaWRhZCwgYXBsaWNhciBkaWZlcmVuY2lhcyBlc3RhY2lvbmFsZXMuDQoNCg0KRW4gZXN0ZSBjYXNvIGNvbW8gbGEgc2VyaWUgZGUgbvptZXJvIGRlIG1pbGVzIGRlIHBhc2FqZXJvcyBlbiBlbCBtZXRyb2J1cyBkZSBsYSBjZG14LCBubyBwcmVzZW50YSBjb21wb3J0YW1pZW50byBlc3RhY2lvbmFsLCBwb3IgbG8gdGFudG8gbm8gc2UgcG9kcmlhIGFwbGljYXIgZGlmZXJlbmNpYXMgZXN0YWNpb25hbGVzLg0KDQojIyA2LiBVc2FyIHBydWViYSBEaWNrZXktRnVsbGVyIHBhcmEgZXZhbHVhciBlbCBvcmRlbiBkZSBpbnRlZ3JhY2lvbiBkZSBsYSBzZXJpZS4gRGlmZXJlbmlhciAgICAgICBoYXN0YSBxdWUgbGEgc2VyaWUgc2VhIGVzdGFjaW9uYXJpYS4NCg0KDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHVyLmRmKFNUKSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmFkZlRlc3QoZGlmZihsb2coU1QpKSxsYWdzPTAsdHlwZT1jKCJjIikpDQpgYGANCg0KIyMgNy4gdXNhciBoZXJyYW1pZW50YXMgQUNGLFBBQ0YsIEVBQ0YgeS9vIGNyaXRlcmlvcyBkZSBha2Fpa2UvYmF5ZXMgcGFyYSBjb25zdHJ1aXIgICAgICAgICAgICAgICAgcHJvcHVlc3RhcyBkZSBtb2RlbG9zLg0KDQoNCg0KYGBge3J9DQpzdD1sb2coU1QpDQpnZ3RzZGlzcGxheShkaWZmKHN0LDEyKSkNCmBgYA0KDQoNClNlIGhhY2UgdW4gZGlhZ25vc3RpY28gZGUgcmVzaWR1b3MgZGUgbGEgc2VyaWUuDQoNCg0KDQojIyA4LiBjb21vIHBhcnRlIGRlbCBkaWFnbm9zdGljbyBkZWwgbW9kZWxvLCBhbmFsaXphciBsb3MgcmVzaWR1b3MgeSBhcGxpY2FyIHBydWViYSBManVuZy1ib3ggeSAjIyA5LiBVc2FyICBsYSAgZnVuY2lvbiBhdXRvLmFyaW1hKCkgeSAgY29tcGFyZSAgc3VzICByZXN1bHRhZG9zICBjb24gIGVsICBpbmNpc28gIGFudGVyaW9yLg0KDQpgYGB7cn0NCkF1dG9hcmltYTwtIGF1dG8uYXJpbWEoc3QsIGQ9MSxzdGVwd2lzZT1GQUxTRSwgYXBwcm94aW1hdGlvbj1GQUxTRSkNCkF1dG9hcmltYQ0KYGBgDQoNCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMoQXV0b2FyaW1hKQ0KYGBgDQoNCkVsIGF1dG9hcmltYSBub3MgYXJyb2phIHVuIG1vZGVsbyBlbiBlbCBxdWUgc29sYW1lbnRlIHNvYnJlc2FsZSB1biByZXphZ28sIGFob3JhIHNlIHByb3BvbmRyYW4gbWFzIG1vZGVsb3MgcGFyIHNhYmVyIHNpIGF1biBwb2RlbW9zIGNvcnJlZ2lyIG1zIG51ZXN0cmEgc2VyaWUsIGRlIGFjdWVyZG8gYWwgY3JpdGVyaW8gZGUgQUlDLg0KDQoNCiMjIyBQUk9QVUVTVEFTIERFIE1PREVMTw0KDQpTZSBwcm9wb25lOg0KDQpgYGB7cn0NCm0xIDwtIGFyaW1hKHN0LCBvcmRlcj1jKDAsMSwzKSxzZWFzb25hbD1jKDEsMCwxKSkNCm0xDQpgYGANCg0KDQpgYGB7cn0NCmNoZWNrcmVzaWR1YWxzKG0xKQ0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KbTIgPC0gYXJpbWEoc3QsIG9yZGVyPWMoMCwxLDIpLHNlYXNvbmFsPWMoMSwwLDEpKQ0KbTINCmBgYA0KDQoNCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMobTIpDQpgYGANCg0KUGFyYSBlc2NvZ2VyIGVsIG1vZGVsbyBhZGVjdWFkbyBwYXJhIG51ZXN0cmEgc2VyaWUgbm9zIGJhc2Ftb3MgZW4gZWwgY3JpdGVyaW8gZGUgQUlDOlBhcmEgYXV0b2FyaW1hIG5vcyBwcmVzZW50YTogQUlDPTIxOTYuNDcsIHBhcmEgZWwgbW9kZWxvIDEgbm9zIHByZXNlbnRhOiBhaWMgPSAtMjQ4LjQ5LCBwYXJhIGVsIHNlZ3VuZG8gbW9kZWxvIG5vcyBwcmVzZW50YTogYWljID0gLTI1MC40Lg0KDQpTZWd1biBlbCBjcml0ZXJpbyBkZSBBSUMgZWwgbWVqb3IgbW9kZWxvIGVzIGVsIG3hcyBwZXF1ZfFvIHkgcG9zaXRpdm8gcG9yIGxvIHF1ZSBlbCBtb2RlbG8gZWxlZ2lkbyBlcyBlbCBhdXRvYXJpbWEuDQoNCg0KIyMgMTAuIFByZXNlbnRlICBsYSAgZWN1YWNpb24gIGZpbmFsICB5ICBkZXNjcmliYS4NCg0KICAkJA0KICBZX3QgPSAtMC41NTMwIFxwaGlfe2V0LTF9MC4yNTBccGhpX3tldC0zfTAuOTk4N1x0aGV0YV97ZXQtMn0tMC45NzA5XHRoZXRhXFRoZXRhX3tldC0xMn0NCiAgJCQNCg0KICAgICAgICAgICANCiAgICAgICAgICAgZXN0YSBlcyBsYSBlY3VhY2lvbiBxdWUgbm9zIHJlcHJlc2VudGEgZWwgbW9kZWxvLg0KICAgICAgICAgICANCiAgICAgICAgICAgDQogICAgICAgICAgIA0KIyMgMTEuIHJlYWxpemFyIGVsIHByb25vc3RpY28gYXJpbWEgcGFyYSBkb3MgYfFvcy4NCg0KDQpgYGB7cn0NCnByb25vc3RpY28gPC0gcGxvdChmb3JlY2FzdChBdXRvYXJpbWEsaD0yNCkpDQpgYGANCg0KYGBge3J9DQpwcm9ub3N0aWNvDQpgYGANCiAgICAgICAgICAgDQogICAgICAgICAgY29uIGVzdGUgcHJvbm9zdGljbyBub3RhbW9zIHF1ZSBxdWUgbGEgc2VyaWUgbWFudGVuZHLhIHVuIGNvbXBvcnRhbWllbnRvIGNvbnN0YW50ZSAgICBwb3IgbG8gcXVlIGVzIHByb2JhYmxlICg5NSUpIHF1ZSBlbiBsb3MgcHJveGltb3MgMiBh8W9zIGVsIG76bWVybyBkZSBwYXNhamVyb3MgZGVsICAgIG1ldHJvYnVzIG5vIGF1bWVudGUgZXhwb25lbmNpYWxtZW50ZS4NCiAgICAgDQogICAgICAgICAgIA0KICAgICAgICAgIA0KIyMgMTIuIHV0aWxpemFuZG8gbG9zIG1ldG9kb3MgZGUgcHJvbm9zdGljb3Mgc2ltcGxlcyB5L28gc3Vhdml6YW1pZW50b2V4cG9uZW5jaWFsLCBnZW5lcmFyIHVuICAgICAgICBwcm9ub3N0aWNvIHBhcmEgZG9zIGHxb3MuIGVsZWdpciBlbCBtZXRvZG8gcXVlIHByZXNlbnRhIGxhIHJhaXogZGUgZXJyb3IgbWVkaW8gYWwgICAgICAgICAgICBjdWFkcmFkbyBt4XMgcGVxdWXxbw0KICAgICAgICAgICANCiAgICAgICAgICAgDQogICAgICAgICAgIA0KYGBge3J9DQpTVDI9ICB3aW5kb3coU1Qsc3RhcnQ9MjAwOCxlbmQ9YygyMDE1LDYpKQ0KYGBgDQogICAgICAgDQogICAgICAgYXF1aSBzZSBlc3RhIGNyZWFuZG8gbGEgdmVudGFuYSBlbiBsYSBjdWFsIGdlbmVyYXJlbW9zIG51ZXRyb3MgcHJvbm9zdGljb3MNCiAgICAgICANCg0KYGBge3J9DQphdXRvcGxvdChTVDIpICsNCmZvcmVjYXN0OjphdXRvbGF5ZXIobWVhbmYoU1QyLCBoPTExKSwgUEk9RkFMU0UsIHNlcmllcz0iTWVhbiIpICsNCmZvcmVjYXN0OjphdXRvbGF5ZXIobmFpdmUoU1QyLCBoPTExKSwgUEk9RkFMU0UsIHNlcmllcz0iTmHvdmUiKSArDQpmb3JlY2FzdDo6YXV0b2xheWVyKHNuYWl2ZShTVDIsIGg9MTEpLCBQST1GQUxTRSwgc2VyaWVzPSJTZWFzb25hbCBuYe92ZSIpICsNCmdndGl0bGUoIlBhc2FqZXJvcyB0cmFzbnNwb3J0YWRvcyBlbiBtZXRyb2J1cyBkZSBsYSBDRE1YIikgKw0KeGxhYigiQfFvcyIpICsgeWxhYigiUGFzYWVyb3MiKSArDQpndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0iRm9yZWNhc3QiKSkNCmBgYA0KDQoNCg0KIyMjIHByb25vc3RpY29zLg0KDQoNCmBgYHtyfQ0KU1RmaXQxIDwtIG1lYW5mKFNUMixoPTEwKQ0KU1RmaXQyIDwtIHJ3ZihTVDIsaD0xMCkNClNUZml0MyA8LSBzbmFpdmUoU1QyLGg9MTApDQphdXRvcGxvdCh3aW5kb3coU1QyLCBzdGFydD0yMDA4KSkgKyBmb3JlY2FzdDo6YXV0b2xheWVyKFNUZml0MSwgc2VyaWVzPSJNZWFuIiwgUEk9RkFMU0UpICsgZm9yZWNhc3Q6OmF1dG9sYXllcihTVGZpdDIsIHNlcmllcz0iTmHvdmUiLCBQST1GQUxTRSkgKyBmb3JlY2FzdDo6YXV0b2xheWVyKFNUZml0Mywgc2VyaWVzPSJTZWFzb25hbCBuYe92ZSIsIFBJPUZBTFNFKSArIHhsYWIoIkHxbyIpICsgeWxhYigiUGFzYWplcm9zIikgKyBndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0iRm9yZWNhc3QiKSkNCg0KYGBgDQoNCmBgYHtyfQ0KICBTVDMgPC0gd2luZG93KFNULCBzdGFydD0yMDA4KQ0KICBhY2N1cmFjeSAoU1RmaXQxLFNUMykjbWVhbg0KYGBgDQoNCg0KDQpgYGB7cn0NCmFjY3VyYWN5IChTVGZpdDIsU1QzKSNuYWl2ZQ0KYGBgDQoNCmBgYHtyfQ0KYWNjdXJhY3kgKFNUZml0MyxTVDMpI3NlYXNvbmFsIG5haXZlDQpgYGANCg0KICAgICAgTm90YW1vcyBxdWUgZWwgcHJvbm9zdGljbyBxdWUgbm9zIGRhIGxhIHJh7XogZGVsIHByb21lZGlvIGRlIGxvcyBlcnJvcmVzIGFsIGN1YWRyYWRvICAgICAoUk1TRSkgZGUgbWVub3IgdmFsb3I9IDE1NzMuNzk4IGZ1ZSBsYSBkZSBTZWFzb25hbCBOYWl2ZSwgcG9yIGxvIHF1ZSBlcyBlbCBwcm9u83N0aWNvIHF1ZSAgICBt4XMgc2UgYWRhcHRhIGEgbnVlc3RybyBtb2RlbG8NCiAgICAgIA0KICAgICAgDQojIyMgQW5hbGlzaXMgVkFSDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHZhcnMpDQpsaWJyYXJ5KHpvbykNCmxpYnJhcnkoZnBwMikNCmxpYnJhcnkodXJjYSkNCmxpYnJhcnkoVFNBKQ0KYGBgDQogICAgICANCiAgICAgIA0KYGBge3J9DQpzdGY8LSByZWFkLmNzdihmaWxlLmNob29zZSgpKQ0KcGFzczwtIHRzKHN0ZiRwYXNhamVyb3MsIHN0YXJ0ID0gYygyMDA4LDAxKSwgZnJlcXVlbmN5ID0gMTIpDQprbSA8LSB0cyhzdGYka20sIHN0YXJ0ID0gYygyMDA4LDAxKSwgZnJlcXVlbmN5ID0gMTIpDQpgYGANCiAgICAgIA0KICAgICAgDQpVbmEgdmV6IGRlY2xhcmFkYXMgYW1iYXMgdmFyaWFibGVzIGNvbW8gc2VyaWUgZGUgdGllbXBvIHNlIGdyYWZpY2FuLkVzdGEgZnVuY2lvbm5vcyBwZXJtaXRlIHZpc3VhbGl6YXIgZWwgY29tcG9ydGFtaWVudG8gZGUgbnVlc3RyYXMgdmFyaWFibGVzLg0KDQpgYGB7cn0NCmF1dG9wbG90KHBhc3MpDQpgYGANCg0KYGBge3J9DQphdXRvcGxvdChrbSkNCmBgYA0KICAgICAgDQogICAgQSBjb250aW51YWNpb24gc2UgZ3JhZmljYXJhIHVzYW5kbyBsYSBmdW5jaW9uIGdnc2Vhc29ucGxvdCBwYXJhIGNvcnJvYm9yYXIgc2kgbGEgdmFyaWFibGUgcHJlc2VudGEgZXN0YWNpb25hbGlkYWQuDQogICAgDQogICAgDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChwYXNzKQ0KYGBgDQoNCiBBaG9yYSBjb24gbGEgc2VndW5kYSB2YXJpYWJsZSBraWxvbWV0cm9zIHJlY29ycmlkb3MuDQogDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChrbSkNCmBgYA0KIA0KICAgICAgDQogICAgQ29uIGVzYSBncmFmaWNhIGNvcnJvYm9yYW1vcyBxdWUgbGEgc2VndW5kYSB2YXJpYWJsZSBubyB0aWVuZSBlc3RhY2lvbmFsaWRhZC4NCiAgICANCiAgICANCmBgYHtyfQ0KbWVzLiA8LSBzZWFzb24oa20pDQpyZWcudyA8LSBsbShrbSB+IHRpbWUoa20pICsgbWVzLikNCnN1bW1hcnkocmVnLncpDQpgYGANCg0KICAgIExhIHRhYmxhIG5vcyBtdWVzdHJhIHF1ZSBsb3MgbWVzZXMgZGUgZmVicmVybywgbWF5byB5IGp1bGlvIGV4aXN0ZSB1biAxMCUgZGUgc2lnbmlmaWNhbmNpYS4gICAgICANCiAgICANCmBgYHtyfQ0KbWVzLiA8LSBzZWFzb24ocGFzcykNCnJlZy5wIDwtIGxtKHBhc3MgfiB0aW1lKHBhc3MpICsgbWVzLikNCnN1bW1hcnkocmVnLnApDQpgYGANCg0KICAgIExhIGdyYWZpY2Egbm9zIGRpY2UgcXVlIGxhIHZhcmlhYmxlIHBhc2FqZXJvcyBlcyBzaWduaWZpY2F0aXZhIGFsIDUlIGVuIGxvcyBtZXNlcyBkZSBhZ29zdG8geSBvY3R1YnJlIHJlc3BlY3RvIGEgZW5lcm8uICAgICAgDQogICAgDQogICAgDQogICAgDQpgYGB7cn0NCmdndHNkaXNwbGF5KHBhc3MpDQpgYGANCg0KICAgIA0KICAgIEVsIG1vZGVsbyBpbmRpY2FkbyBwYXJhIG1vZGVsYXIgZXN0YSB2YXJpYWJsZSBlcyBlbCBxdWUgbm9zIG1hcmNvIGVsIGF1dG9hcmltYSBlbiBlbCBwdW50byBwYXNhZG8geSBlczogQVIoMCwxLDEpLg0KICAgIA0KICAgIA0KQWhvcmEgaGFyZW1vcyBsbyBtaXNtbyBjb24gbGEgdmFyaWFibGUga2lsb21ldHJvcyByZWNvcnJpZG9zLg0KDQpgYGB7cn0NCmdndHNkaXNwbGF5KGttKQ0KYGBgDQoNClVzYXJlbW9zIGxhIGZ1bmNpb24gYXV0b2FyaW1hIHBhcmEgYnVzY2FyIGVsIG1vZGVsbyBpbmRpY2FkbyBwYXJhIGNvcnJlZ2lyIGVzdGEgdmFyaWFibGUuICAgIA0KICAgIA0KYGBge3J9DQpBdXRvYXJpbWEyPC0gYXV0by5hcmltYShzdGYsIGQ9MSxzdGVwd2lzZT1GQUxTRSwgYXBwcm94aW1hdGlvbj1GQUxTRSkNCkF1dG9hcmltYQ0KYGBgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMoKQ0KYGBgDQogICAgICANCiAgICAgIA0KICAgICAgDQogICAgICANCiAgICAgIA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=