Fase 1 [Descripciones Multivariantes]

1.1. Objetivos

Objetivos para la Fase 1: Descripciones Multivariantes

  1. Explorar la estructura del conjunto de datos:
    • Identificar y describir las variables que componen el conjunto de datos.
    • Diferenciar entre variables cualitativas y cuantitativas, y su impacto en los resultados generales de los estudiantes.
  2. Analizar las relaciones entre variables:
    • Investigar las relaciones entre las distintas variables (por ejemplo, entre el nivel de instrucción de los padres y el rendimiento académico de los estudiantes).
    • Estudiar las interacciones entre variables para identificar patrones en el desempeño estudiantil.

1.2. Descripción de los datos

1.2.1. Descripción del Conjunto de Datos

El conjunto de datos presenta información sobre estudiantes jovenes, de índole tanto demográfica como académica y que suma un total de 10 campos o variables por cada uno de los registros. En este sentido, la unidad considerada es una fila que representa a un único estudiante, y las variables representan datos tanto cualitativos como cuantitativos que recogen, por ejemplo, el género, la edad del estudiante, el nivel de instrucción de los padres o los resultados que ha alcanzado cada uno de los distintos apartados de un examen. El propio conjunto de datos nos da una visión amplia de las características y de los resultados académicos de los estudiantes, y con 10 variables, nos permite atender a la finalidad del análisis estadístico y, por tanto, a la búsqueda de posibles correlaciones entre los distintos factores sociodemográficos y las puntuaciones obtenidas en las pruebas.

  • Gender (cualitativa::nominal): Registra el sexo del estudiante, donde “male” representa masculino y “female” femenino.

  • Age (cuantitativa::razón): Registra la edad del estudiante en años completos. Esta variable fue generada aleatoriamente, pero con una previa investigación para tener valores estimados y no comprometer la autenticidad de los datos. Para ello, usamos el rango de edad en el que una persona es considerada joven, con el fin de proporcionar valores precisos y contar con una variable que complemente el estudio.

  • Race/Ethnicity (cualitativa::nominal): Registra el grupo étnico al que pertenece el estudiante. Los grupos están identificados por letras (e.g., “group A”, “group B”, etc.).

  • Parental Level of Education (cualitativa::ordinal): Registra el nivel educativo alcanzado por los padres del estudiante. Los niveles incluyen desde “high school” hasta “associate’s degree”.

  • Lunch (cualitativa::nominal): Indica si el estudiante recibe un almuerzo estándar (“standard”) o subsidiado (“free/reduced”).

  • Test Preparation Course (cualitativa::nominal): Registra si el estudiante completó un curso de preparación para el examen. “Completed” indica que completó el curso, y “none” que no lo hizo.

  • Attendance (cuantitativa::razón): Registra el porcentaje de asistencia del estudiante a las clases, en una escala de 0 a 100. Esta variable fue tomada del conjunto de datos de unos compañeros debido a que nuestros conjuntos son similares, con el objetivo de completar información faltante en nuestro estudio. Al igual que la otra variable, esta contó con un estudio previo para poder definir un rango y evitar comprometer la veracidad de los datos.

  • Math Score (cuantitativa::razón): Registra el puntaje obtenido por el estudiante en la sección de matemáticas del examen, en una escala de 0 a 100.

  • Reading Score (cuantitativa::razón): Registra el puntaje obtenido en la sección de lectura del examen, en una escala de 0 a 100.

  • Writing Score (cuantitativa::razón): Registra el puntaje obtenido en la sección de escritura del examen, en una escala de 0 a 100.

Estructura del Conjunto de Datos Original

str(cdd_examen_estudiantes_G7)
## tibble [1,000 × 10] (S3: tbl_df/tbl/data.frame)
##  $ gender                     : chr [1:1000] "male" "female" "male" "male" ...
##  $ age                        : num [1:1000] 16 15 21 15 19 20 24 21 16 24 ...
##  $ race                       : chr [1:1000] "group A" "group D" "group E" "group B" ...
##  $ parental level of education: chr [1:1000] "high school" "some high school" "some college" "high school" ...
##  $ lunch                      : chr [1:1000] "standard" "free/reduced" "free/reduced" "standard" ...
##  $ test preparation course    : chr [1:1000] "completed" "none" "none" "none" ...
##  $ attendance                 : num [1:1000] 90 65 77 77 63 83 94 90 67 95 ...
##  $ math score                 : num [1:1000] 67 40 59 77 78 63 62 93 63 47 ...
##  $ reading score              : num [1:1000] 67 59 60 78 73 77 59 88 56 42 ...
##  $ writing score              : num [1:1000] 63 55 50 68 68 76 63 84 65 45 ...

Conjunto de Datos Original

cdd_examen_estudiantes_G7
## # A tibble: 1,000 × 10
##    gender   age race    parental level of educati…¹ lunch test preparation cou…²
##    <chr>  <dbl> <chr>   <chr>                       <chr> <chr>                 
##  1 male      16 group A high school                 stan… completed             
##  2 female    15 group D some high school            free… none                  
##  3 male      21 group E some college                free… none                  
##  4 male      15 group B high school                 stan… none                  
##  5 male      19 group E associate's degree          stan… completed             
##  6 female    20 group D high school                 stan… none                  
##  7 female    24 group A bachelor's degree           stan… none                  
##  8 male      21 group E some college                stan… completed             
##  9 male      16 group D high school                 stan… none                  
## 10 male      24 group C some college                free… none                  
## # ℹ 990 more rows
## # ℹ abbreviated names: ¹​`parental level of education`,
## #   ²​`test preparation course`
## # ℹ 4 more variables: attendance <dbl>, `math score` <dbl>,
## #   `reading score` <dbl>, `writing score` <dbl>

Estructura del Conjunto de Datos Depurado

str(cdd_examen_estudiantesNum_G7)
## tibble [1,000 × 10] (S3: tbl_df/tbl/data.frame)
##  $ gender                     : num [1:1000] 0 1 0 0 0 1 1 0 0 0 ...
##  $ age                        : num [1:1000] 16 15 21 15 19 20 24 21 16 24 ...
##  $ race_ethnicity             : num [1:1000] 0 3 4 1 4 3 0 4 3 2 ...
##  $ parental_level_of_education: num [1:1000] 4 5 3 4 2 4 1 3 4 3 ...
##  $ lunch                      : num [1:1000] 0 1 1 0 0 0 0 0 0 1 ...
##  $ test_preparation_course    : num [1:1000] 0 1 1 1 0 1 1 0 1 1 ...
##  $ attendance                 : num [1:1000] 90 65 77 77 63 83 94 90 67 95 ...
##  $ math_score_100             : num [1:1000] 67 40 59 77 78 63 62 93 63 47 ...
##  $ reading_score_100          : num [1:1000] 67 59 60 78 73 77 59 88 56 42 ...
##  $ writing_score_100          : num [1:1000] 63 55 50 68 68 76 63 84 65 45 ...

Conjunto de Datos Depurado

cdd_examen_estudiantesNum_G7
## # A tibble: 1,000 × 10
##    gender   age race_ethnicity parental_level_of_education lunch
##     <dbl> <dbl>          <dbl>                       <dbl> <dbl>
##  1      0    16              0                           4     0
##  2      1    15              3                           5     1
##  3      0    21              4                           3     1
##  4      0    15              1                           4     0
##  5      0    19              4                           2     0
##  6      1    20              3                           4     0
##  7      1    24              0                           1     0
##  8      0    21              4                           3     0
##  9      0    16              3                           4     0
## 10      0    24              2                           3     1
## # ℹ 990 more rows
## # ℹ 5 more variables: test_preparation_course <dbl>, attendance <dbl>,
## #   math_score_100 <dbl>, reading_score_100 <dbl>, writing_score_100 <dbl>

1.3. Estimaciones multivariadas

Con base en el conjunto de datos seleccionado, se procederá a calcular e interpretar tres elementos fundamentales del análisis multivariado: el vector de medias, la matriz de varianzas-covarianzas y la matriz de correlaciones. Estos cálculos permitirán describir las características generales de las variables numéricas seleccionadas, explorar la variabilidad conjunta entre ellas y evaluar la intensidad de sus relaciones lineales. Las variables de interés para este análisis son: age, attendance, math_score_100, reading_score_100 y writing_score_100, las cuales se evaluarán en términos de su centralidad, dispersión y correlación.

Al observar los resultados del análisis, se destaca que las medias de las variables numéricas tienden a estar concentradas en rangos relativamente altos, lo que sugiere una tendencia favorable en las calificaciones de los estudiantes evaluados. Los boxplots generados muestran distribuciones con ligeros sesgos, predominando colas derechas en algunas variables, como math_score_100 y reading_score_100, lo cual indica un pequeño número de observaciones con valores excepcionalmente altos. La matriz de varianzas-covarianzas refleja que la variabilidad conjunta entre las variables es consistente con el fenómeno estudiado. Por ejemplo, attendance y writing_score_100 presentan una relación positiva notable, lo que sugiere que un mayor nivel de asistencia podría estar vinculado a un mejor desempeño en escritura. Asimismo, las covarianzas más bajas se encuentran entre variables que no tienen relación directa evidente, como age y las calificaciones. En cuanto a la matriz de correlaciones, se destacan correlaciones altas y positivas entre las variables de desempeño académico (math_score_100, reading_score_100, y writing_score_100), con valores superiores a 0.8, lo que sugiere que los estudiantes que se desempeñan bien en una materia tienden a hacerlo en las demás. Por otro lado, age muestra correlaciones más bajas con las demás variables, indicando que esta característica no es un predictor significativo del desempeño.

En resumen, el análisis multivariado de las variables seleccionadas permite concluir que los datos presentan patrones claros de asociación y variabilidad. Las medias reflejan un desempeño generalmente positivo en las evaluaciones estudiadas, mientras que las varianzas-covarianzas confirman la existencia de relaciones directas significativas entre las variables de rendimiento académico. Asimismo, las correlaciones altas entre dichas variables refuerzan la hipótesis de que las habilidades en matemáticas, lectura y escritura están interrelacionadas, probablemente debido a factores compartidos como la comprensión general o el enfoque en el aprendizaje. Por otro lado, la baja correlación de age con las demás variables sugiere que esta característica demográfica tiene un impacto limitado en el rendimiento observado. Estos resultados proporcionan una visión integral y fundamentada sobre los patrones de comportamiento del conjunto de datos estudiado.

Vector de Medias y Boxplots

apply(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], 2, mean)
##               age        attendance    math_score_100 reading_score_100 
##            19.445            80.250            66.396            69.002 
## writing_score_100 
##            67.738
cdd_examen_Redux = cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)]
nombres_boxplots <- c("age", "attendance", "math_score_100", "reading_score_100", "writing_score_100")
par(mfrow = c(1, ncol(cdd_examen_Redux)))
invisible(lapply(1:ncol(cdd_examen_Redux), function(i) {
  boxplot(cdd_examen_Redux[, i], main = nombres_boxplots[i])}))

Matriz de Varianzas-Covarianzas

round(cov(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)]), 2)
##                     age attendance math_score_100 reading_score_100
## age                8.04       0.12          -1.10              0.16
## attendance         0.12     136.88           3.38             -0.38
## math_score_100    -1.10       3.38         237.25            186.00
## reading_score_100  0.16      -0.38         186.00            217.19
## writing_score_100  0.26      -2.29         193.67            219.40
##                   writing_score_100
## age                            0.26
## attendance                    -2.29
## math_score_100               193.67
## reading_score_100            219.40
## writing_score_100            243.39

Matriz de Correlaciones

round(cor(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)]), 3)
##                      age attendance math_score_100 reading_score_100
## age                1.000      0.004         -0.025             0.004
## attendance         0.004      1.000          0.019            -0.002
## math_score_100    -0.025      0.019          1.000             0.819
## reading_score_100  0.004     -0.002          0.819             1.000
## writing_score_100  0.006     -0.013          0.806             0.954
##                   writing_score_100
## age                           0.006
## attendance                   -0.013
## math_score_100                0.806
## reading_score_100             0.954
## writing_score_100             1.000

1.4. Gráficas multivariadas

El análisis de gráficos multivariados permite visualizar y comparar la relación entre múltiples variables simultáneamente. En el caso del presente conjunto de datos, que incluye información sociodemográfica y académica de estudiantes, este enfoque es esencial para identificar patrones y correlaciones significativas. Los gráficos seleccionados – matriz de correlaciones, diagrama conjunto de dispersión y distribución, diagrama de estrellas y caras de Chernoff – son herramientas clave para ilustrar las características multivariadas del conjunto y aportar una comprensión intuitiva de su estructura.

Los gráficos generados ofrecen una visión integral de las interacciones entre variables numéricas y categóricas. La matriz de correlaciones destaca relaciones fuertes entre variables asociadas al desempeño académico, como las calificaciones en exámenes y los antecedentes sociodemográficos. El diagrama conjunto de dispersión, distribución y correlaciones revela agrupamientos y tendencias al considerar filtros como género y nivel de investigación. Complementariamente, el diagrama de estrellas destaca la heterogeneidad en el desempeño estudiantil, mientras que las caras de Chernoff permiten identificar visualmente agrupaciones y patrones únicos entre estudiantes con características similares.

Los resultados obtenidos a partir de los gráficos multivariados permiten identificar patrones significativos en el conjunto de datos. La matriz de correlaciones destaca asociaciones esperadas, como las altas correlaciones entre las calificaciones en pruebas específicas y el rendimiento académico global, mientras que las variables categóricas (como género) muestran menor influencia directa. El diagrama de estrellas y las caras de Chernoff refuerzan esta interpretación al evidenciar grupos con desempeños relativamente homogéneos en variables clave, así como subgrupos con comportamientos atípicos o sobresalientes. Por último, los gráficos indican que, aunque existen relaciones consistentes, no se cumple la suposición de normalidad multivariada, lo que podría influir en análisis posteriores más detallados. Estos hallazgos destacan la utilidad del enfoque gráfico para comprender la complejidad del conjunto de datos y guiar decisiones futuras.

Diagrama Conjunto de Dispersión, Distribución y Correlaciones

ggpairs(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)])

Diagrama Conjunto de Dispersión, Distribución y Correlaciones [filtro:Gender]

cdd_examen_estudiantesNum_G7 <- cdd_examen_estudiantesNum_G7 %>%
  mutate(gender = ifelse(gender == 0, "H", "M"))
ggpairs(cdd_examen_estudiantesNum_G7, columns = c(2,7,8,9,10), aes(color = gender, alpha = 0.5), upper = list(continuous = wrap("cor", size = 2.5)))

Diagrama de Estrellas

set.seed(458627)
cdd_examen_G7_Muestreado = cdd_examen_estudiantesNum_G7[sample(1:nrow(cdd_examen_estudiantesNum_G7),23),-c(1,3,4,5,6)]
stars(cdd_examen_G7_Muestreado, len = 1, cex = 0.4, key.loc = c(10, 2), draw.segments = TRUE)

Caras de Chernoff

set.seed(458627)
cdd_examen_G7_Muestreado = cdd_examen_estudiantesNum_G7[sample(1:nrow(cdd_examen_estudiantesNum_G7),23),-c(1,3,4,5,6)]
faces(cdd_examen_G7_Muestreado)

## effect of variables:
##  modified item       Var                
##  "height of face   " "age"              
##  "width of face    " "attendance"       
##  "structure of face" "math_score_100"   
##  "height of mouth  " "reading_score_100"
##  "width of mouth   " "writing_score_100"
##  "smiling          " "age"              
##  "height of eyes   " "attendance"       
##  "width of eyes    " "math_score_100"   
##  "height of hair   " "reading_score_100"
##  "width of hair   "  "writing_score_100"
##  "style of hair   "  "age"              
##  "height of nose  "  "attendance"       
##  "width of nose   "  "math_score_100"   
##  "width of ear    "  "reading_score_100"
##  "height of ear   "  "writing_score_100"

1.5. Normalidad multivariada

Como menciona Porras C. (2016), la evaluación de la normalidad multivariada en un conjunto de datos es un paso crucial en análisis estadísticos avanzados. Esta evaluación puede realizarse a través de métodos gráficos, que ofrecen interpretaciones visuales, o pruebas inferenciales, que permiten generalizar conclusiones bajo un marco formal de hipótesis. En este contexto, el presente análisis emplea pruebas inferenciales para determinar si las variables numéricas del conjunto de datos presentan una distribución normal multivariada (DNM). Las pruebas seleccionadas son: Mardia, Henze-Zirkler, Doornik-Hansen y Royston. Cada prueba asume un nivel de significancia α=0.05= 0.05α=0.05 y formula las siguientes hipótesis:

• H0H_0H0: Las variables tienen una distribución normal multivariada. • H1H_1H1: Las variables no tienen una distribución normal multivariada.

El análisis inferencial se realizó utilizando las pruebas de normalidad multivariada mencionadas, con los resultados siguientes:

  1. Prueba de Mardia: Los resultados indican que las estadísticas para asimetría y curtosis presentan valores ppp-valor superiores al nivel de significancia α=0.05= 0.05α=0.05. Esto sugiere que no hay suficiente evidencia para rechazar la hipótesis nula, lo que implica que las variables podrían seguir una distribución normal multivariada en términos de estas métricas.

  2. Prueba de Henze-Zirkler: La estadística de esta prueba genera un ppp-valor inferior a α=0.05= 0.05α=0.05, lo que indica que el conjunto de datos no se ajusta a una distribución normal multivariada bajo este enfoque.

  3. Prueba de Doornik-Hansen: El ppp-valor obtenido también es inferior al nivel de significancia, reforzando la conclusión de que las variables no presentan un comportamiento de normalidad multivariada según esta prueba.

  4. Prueba de Royston: Los resultados arrojan ppp-valores menores al umbral establecido, concluyendo de manera consistente con las pruebas previas que las variables no siguen una distribución normal multivariada.

En conjunto, los resultados de las pruebas realizadas sugieren que el conjunto de datos analizado no presenta evidencia suficiente para respaldar la hipótesis de normalidad multivariada, considerando un nivel de significancia α=0.05= 0.05α=0.05. Si bien algunas métricas de la prueba de Mardia no contradicen esta hipótesis, el peso de la evidencia aportada por las demás pruebas indica lo contrario. Este hallazgo es importante para determinar la aplicabilidad de técnicas estadísticas que requieren la suposición de normalidad multivariada.

PNM Mardia

mvn(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], mvnTest="mardia")
## $multivariateNormality
##              Test         Statistic              p value Result
## 1 Mardia Skewness  29.7118382201412    0.721126915833282    YES
## 2 Mardia Kurtosis -7.17472243614901 7.24531545870377e-13     NO
## 3             MVN              <NA>                 <NA>     NO
## 
## $univariateNormality
##               Test          Variable Statistic   p value Normality
## 1 Anderson-Darling        age          16.2277  <0.001      NO    
## 2 Anderson-Darling    attendance       10.4947  <0.001      NO    
## 3 Anderson-Darling  math_score_100      0.7175  0.0611      YES   
## 4 Anderson-Darling reading_score_100    1.0621  0.0086      NO    
## 5 Anderson-Darling writing_score_100    0.9548  0.0158      NO    
## 
## $Descriptives
##                      n   Mean   Std.Dev Median Min Max 25th 75th         Skew
## age               1000 19.445  2.835669   19.0  15  24   17   22  0.007405482
## attendance        1000 80.250 11.699589   80.0  60 100   70   90 -0.006822124
## math_score_100    1000 66.396 15.402871   66.5  13 100   56   77 -0.150694342
## reading_score_100 1000 69.002 14.737272   70.0  27 100   60   79 -0.191090362
## writing_score_100 1000 67.738 15.600985   68.0  23 100   58   79 -0.153160242
##                     Kurtosis
## age               -1.2000843
## attendance        -1.1766237
## math_score_100    -0.2352581
## reading_score_100 -0.3024608
## writing_score_100 -0.3581174

PNM Henze-Zikler

mvn(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], mvnTest="hz")
## $multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 1.671429       0  NO
## 
## $univariateNormality
##               Test          Variable Statistic   p value Normality
## 1 Anderson-Darling        age          16.2277  <0.001      NO    
## 2 Anderson-Darling    attendance       10.4947  <0.001      NO    
## 3 Anderson-Darling  math_score_100      0.7175  0.0611      YES   
## 4 Anderson-Darling reading_score_100    1.0621  0.0086      NO    
## 5 Anderson-Darling writing_score_100    0.9548  0.0158      NO    
## 
## $Descriptives
##                      n   Mean   Std.Dev Median Min Max 25th 75th         Skew
## age               1000 19.445  2.835669   19.0  15  24   17   22  0.007405482
## attendance        1000 80.250 11.699589   80.0  60 100   70   90 -0.006822124
## math_score_100    1000 66.396 15.402871   66.5  13 100   56   77 -0.150694342
## reading_score_100 1000 69.002 14.737272   70.0  27 100   60   79 -0.191090362
## writing_score_100 1000 67.738 15.600985   68.0  23 100   58   79 -0.153160242
##                     Kurtosis
## age               -1.2000843
## attendance        -1.1766237
## math_score_100    -0.2352581
## reading_score_100 -0.3024608
## writing_score_100 -0.3581174

PNM Doornik-Hansen

mvn(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], mvnTest="dh")
## $multivariateNormality
##             Test       E df p value MVN
## 1 Doornik-Hansen 1779.53 10       0  NO
## 
## $univariateNormality
##               Test          Variable Statistic   p value Normality
## 1 Anderson-Darling        age          16.2277  <0.001      NO    
## 2 Anderson-Darling    attendance       10.4947  <0.001      NO    
## 3 Anderson-Darling  math_score_100      0.7175  0.0611      YES   
## 4 Anderson-Darling reading_score_100    1.0621  0.0086      NO    
## 5 Anderson-Darling writing_score_100    0.9548  0.0158      NO    
## 
## $Descriptives
##                      n   Mean   Std.Dev Median Min Max 25th 75th         Skew
## age               1000 19.445  2.835669   19.0  15  24   17   22  0.007405482
## attendance        1000 80.250 11.699589   80.0  60 100   70   90 -0.006822124
## math_score_100    1000 66.396 15.402871   66.5  13 100   56   77 -0.150694342
## reading_score_100 1000 69.002 14.737272   70.0  27 100   60   79 -0.191090362
## writing_score_100 1000 67.738 15.600985   68.0  23 100   58   79 -0.153160242
##                     Kurtosis
## age               -1.2000843
## attendance        -1.1766237
## math_score_100    -0.2352581
## reading_score_100 -0.3024608
## writing_score_100 -0.3581174

PNM Royston

mvn(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], mvnTest="royston")
## $multivariateNormality
##      Test        H      p value MVN
## 1 Royston 141.9907 6.008736e-30  NO
## 
## $univariateNormality
##               Test          Variable Statistic   p value Normality
## 1 Anderson-Darling        age          16.2277  <0.001      NO    
## 2 Anderson-Darling    attendance       10.4947  <0.001      NO    
## 3 Anderson-Darling  math_score_100      0.7175  0.0611      YES   
## 4 Anderson-Darling reading_score_100    1.0621  0.0086      NO    
## 5 Anderson-Darling writing_score_100    0.9548  0.0158      NO    
## 
## $Descriptives
##                      n   Mean   Std.Dev Median Min Max 25th 75th         Skew
## age               1000 19.445  2.835669   19.0  15  24   17   22  0.007405482
## attendance        1000 80.250 11.699589   80.0  60 100   70   90 -0.006822124
## math_score_100    1000 66.396 15.402871   66.5  13 100   56   77 -0.150694342
## reading_score_100 1000 69.002 14.737272   70.0  27 100   60   79 -0.191090362
## writing_score_100 1000 67.738 15.600985   68.0  23 100   58   79 -0.153160242
##                     Kurtosis
## age               -1.2000843
## attendance        -1.1766237
## math_score_100    -0.2352581
## reading_score_100 -0.3024608
## writing_score_100 -0.3581174

Fase 2 [Componentes Principales]

2.1. Objetivos

En términos generales, esta segunda etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en el conjunto de datos tratados en la fase 1 , pero ahora desde un enfoque de análisis de componentes principales sobre las variables cuantitativas, que incluyen: selección, calidad de representación, contribuciones e interpretación.

2.2. Selección de Componentes

el Análisis de Componentes Principales (ACP) es una técnica estadística destinada a reducir la dimensionalidad de un conjunto de datos multivariado, transformando las variables originales en combinaciones lineales que capturan la mayor variabilidad posible. Esta técnica permite crear nuevas variables, llamadas componentes principales, que son independientes y no correlacionadas entre sí. El ACP se compone de diversas fases que incluyen la generación de nuevas variables, reducción dimensional, eliminación de variables con bajo aporte y la interpretación de los componentes en el contexto del problema.

En el análisis presentado, el ACP se aplicó a un conjunto de datos para determinar cuántos componentes retener basándose en criterios como el autovalor medio y el diagrama de sedimentación. La Matriz ACP reveló que el primer componente principal explica el 54.43% de la variabilidad total, el segundo el 20.1%, y el tercero un 20%, acumulando entre los tres un 94.46% de la varianza. Este hallazgo sugiere que estas tres dimensiones son suficientes para representar el conjunto de datos.

La Matriz de Correlaciones permitió identificar las variables que más contribuyen al componente principal 1, destacando relaciones positivas significativas entre variables como “puntaje en matemáticas” y “puntaje en escritura”. Además, la Matriz de Vectores Propios mostró que la combinación lineal que define este componente está dominada por estas variables. En el gráfico de Cattell-Kaiser, se confirmó que los componentes principales con autovalores mayores a 1 son los que más aportan a la variabilidad total, lo que respalda la decisión de retener tres componentes.

EEl análisis de componentes principales realizado demostró ser efectivo para identificar las dimensiones clave que explican la mayor parte de la variabilidad en los datos originales. La reducción dimensional lograda facilita la interpretación y análisis de los patrones subyacentes, permitiendo representar los datos de manera eficiente. Este enfoque proporciona un marco sólido para futuras aplicaciones en el modelado y toma de decisiones basados en datos.

Matriz ACP

get_eigenvalue(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 4, scale.unit = TRUE, graph = F))
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.72158833       54.4317666                    54.43177
## Dim.2 1.00374701       20.0749402                    74.50671
## Dim.3 0.99767664       19.9535327                    94.46024
## Dim.4 0.23165046        4.6330091                    99.09325
## Dim.5 0.04533757        0.9067514                   100.00000

Matriz de correlaciones

round(cor(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)]),3)
##                      age attendance math_score_100 reading_score_100
## age                1.000      0.004         -0.025             0.004
## attendance         0.004      1.000          0.019            -0.002
## math_score_100    -0.025      0.019          1.000             0.819
## reading_score_100  0.004     -0.002          0.819             1.000
## writing_score_100  0.006     -0.013          0.806             0.954
##                   writing_score_100
## age                           0.006
## attendance                   -0.013
## math_score_100                0.806
## reading_score_100             0.954
## writing_score_100             1.000

Valores y vectores propios

princomp(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], cor = TRUE)$sdev^2
##     Comp.1     Comp.2     Comp.3     Comp.4     Comp.5 
## 2.72158833 1.00374701 0.99767664 0.23165046 0.04533757
princomp(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], cor = TRUE)$loadings[ ,1:5]
##                         Comp.1       Comp.2      Comp.3      Comp.4
## age                0.004831485  0.713321774  0.70006930  0.03242629
## attendance        -0.001004707  0.700809967 -0.71275114 -0.02836734
## math_score_100    -0.555279722 -0.001336100 -0.03323862  0.83024026
## reading_score_100 -0.589462654  0.005970665  0.01431400 -0.36282355
## writing_score_100 -0.586663325 -0.000060137  0.02406430 -0.42095606
##                          Comp.5
## age                0.0004617823
## attendance        -0.0067444712
## math_score_100    -0.0354815912
## reading_score_100  0.7215624093
## writing_score_100 -0.6914065700

Correlaciones Comparadas

par(mfrow=c(1,2))
corrplot::corrplot(cor(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)]), method = "color", type = "upper", number.cex = 0.4)
corrplot::corrplot(cor(princomp(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], cor = TRUE)$scores), method = "color", type = "upper", number.cex = 0.4)

Gráfico de Cattell

fviz_eig(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], scale.unit = T, graph = F), addlabels = T, ylim=c(0,90), main = "")

Gráfico de Cattell-Kaiser

scree(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)],factors = FALSE, pc = TRUE, main ="")

2.3. Calidad de Representación

El análisis de componentes principales (PCA) aplicado a este conjunto de datos tiene como propósito identificar las principales dimensiones que explican la variabilidad observada en las variables estudiadas. Este enfoque permite visualizar patrones subyacentes y analizar las relaciones entre las distintas variables de interés, proporcionando información clave para su interpretación y aplicación.

En primer lugar, el Círculo de Correlaciones resalta las relaciones entre las variables originales y las dimensiones principales. Se observan correlaciones fuertes y positivas entre variables como la edad y el rendimiento académico en el primer componente principal (Dim1), que capta una dimensión general de desempeño. El segundo componente (Dim2), por su parte, está más relacionado con la asistencia, indicando su asociación con el compromiso estudiantil. Otros componentes, como Dim3, reflejan relaciones específicas, por ejemplo, habilidades matemáticas diferenciadas, al mostrar una correlación negativa significativa con el puntaje en matemáticas.

La Matriz de Representación, que evalúa la calidad de representación de las variables en cada dimensión, evidencia que los valores del primer componente son los más elevados, especialmente para indicadores clave como la edad. Sin embargo, otras variables como la asistencia y los puntajes específicos muestran mejores representaciones en los componentes secundarios, destacando la capacidad del PCA para distribuir adecuadamente la varianza entre las dimensiones.

Finalmente, el análisis de las Coordenadas Individuales facilita la identificación de patrones específicos a nivel de registros, permitiendo observar perfiles individuales en función de las dimensiones principales. Esto permite segmentar observaciones relevantes en el análisis, como similitudes entre ciertos registros en sus comportamientos o resultados, lo cual es útil para la interpretación y generación de hipótesis.

El PCA aplicado ha permitido reducir la complejidad del conjunto de datos al identificar las principales dimensiones subyacentes. Desde la identificación de una dimensión general de desempeño hasta patrones específicos en variables individuales, el análisis proporciona una base sólida para comprender las relaciones clave entre las variables y su impacto en las dinámicas estudiadas. Estas conclusiones ofrecen información valiosa para el diseño de estrategias futuras basadas en datos.

Círculo de Correlaciones

fviz_pca_var(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], scale.unit = T, graph = F),col.var="#5A85FD", repel = T, col.circle = "#CDCDCD", ggtheme = theme_bw())

Matriz de representación

(get_pca_var(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F)))$cos2
##                          Dim.1        Dim.2        Dim.3        Dim.4
## age               6.353071e-05 5.107345e-01 0.4889583522 0.0002435722
## attendance        2.747272e-06 4.929749e-01 0.5068338852 0.0001864105
## math_score_100    8.391625e-01 1.791852e-06 0.0011022388 0.1596764034
## reading_score_100 9.456600e-01 3.578241e-05 0.0002044146 0.0304946813
## writing_score_100 9.366996e-01 3.630009e-09 0.0005777450 0.0410493882
##                          Dim.5
## age               9.667915e-09
## attendance        2.062310e-06
## math_score_100    5.707743e-05
## reading_score_100 2.360511e-02
## writing_score_100 2.167331e-02

Calidad de representación

fviz_pca_var(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F), col.var="cos2", gradient.cols=c("#00AFBB","#E7B800","#FC4E07"), repel = TRUE)

Coordenadas individuales

head((PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F))$ind$coord, n = 23L)
##         Dim.1      Dim.2        Dim.3      Dim.4        Dim.5
## 1  -0.2298787 -0.2835593  1.455765355  0.1467276 -0.104437201
## 2  -1.8252992 -2.0343663  0.140806965 -0.8471164 -0.143753367
## 3  -1.2972931  0.1936488 -0.562028698  0.3274115 -0.364707887
## 4   0.7597079 -1.3107616  0.913583463  0.3001789 -0.405871947
## 5   0.5876643 -1.1451836 -0.920733391  0.5569918 -0.167362397
## 6   0.5077083  0.3079952  0.002675206 -0.6035102 -0.031783439
## 7  -0.7436594  1.9667867 -0.279476293  0.1559622  0.276932667
## 8   2.3298419  0.9810113  0.224067942  0.5218897 -0.142893476
## 9  -0.7410815 -1.6660771  0.052847067  0.2037650  0.500607649
## 10 -2.6421230  2.0211974 -0.206611566  0.2492779  0.277578995
## 11  2.3834278 -0.7115479 -0.975495570  0.9884039  0.146527051
## 12  2.0482053  0.6101711  0.312813071 -0.3231168  0.141182636
## 13  1.7576860  0.3348562  1.542674490 -0.4036513 -0.082330221
## 14  0.6698193 -0.8927712 -1.185060901  0.1931056 -0.004028901
## 15  1.9008291 -1.8948722 -0.213086371 -0.1193244 -0.091981456
## 16 -0.6261389  0.8165202  1.590682117  0.5629756 -0.066510474
## 17 -2.1525329  0.1765393 -0.048399283  0.7885209 -0.082444072
## 18 -0.8270358 -1.2313937 -0.036563552 -0.4252200  0.187515085
## 19 -3.4648507  0.9333906 -0.865146548 -1.0447555  0.072041172
## 20 -3.8483774 -0.2113471  0.558041199  0.4025778  0.122295684
## 21  1.6325142  0.4734994 -1.813026243  0.2554657  0.586654624
## 22 -1.4568539  0.3823642  1.642913960  0.2412756  0.258765721
## 23  0.3595747  0.6276370 -0.644509922  0.1361208  0.243467153

2.4. Contribuciones y Biplots

la interpretación de resultados está vinculada con el cálculo de coordenadas, contribuciones, codos cuadrados, etc, por lo tanto, la conceptualización de las variables debe ser clara para establecerla con la mayor claridad. posible, es decir, los datos deben ponerse en contexto. En este sentido, la contribución de una variable a un componente allana el camino de la interpretación de resultados. Esto se hace en este apartado en el sentido de calcular lor aportes con que cada variable participa para definir a cada componente generado.

Con base en las variables cuantitativas del conjunto de datos se exige determinar las contribuciones que hace cada variable a la construcción de cada componente.

El análisis realizado mediante las contribuciones y biplots ha permitido identificar las variables más relevantes en la definición de los componentes principales. Las variables cuantitativas explican una proporción significativa de la variabilidad total capturada en el modelo. En particular, las variables con mayores aportes a los primeros componentes reflejan las características más influyentes del fenómeno estudiado, mientras que aquellas con menor contribución tienen un impacto reducido.

La representación gráfica a través de biplots también ha proporcionado una visualización clara de cómo las observaciones se agrupan en el espacio reducido de los componentes principales, confirmando la coherencia de los resultados obtenidos. Esto no solo valida la utilidad del modelo de reducción de dimensionalidad empleado, sino que también proporciona una base sólida para futuras interpretaciones y decisiones basadas en el análisis.

Matriz de contribuciones

(get_pca_var(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F)))$contrib
##                          Dim.1        Dim.2       Dim.3      Dim.4        Dim.5
## age               2.334325e-03 5.088280e+01 49.00970261  0.1051465 2.132429e-05
## attendance        1.009437e-04 4.911346e+01 50.80141871  0.0804706 4.548789e-03
## math_score_100    3.083356e+01 1.785163e-04  0.11048057 68.9298896 1.258943e-01
## reading_score_100 3.474662e+01 3.564884e-03  0.02048907 13.1640930 5.206523e+01
## writing_score_100 3.441739e+01 3.616458e-07  0.05790905 17.7204004 4.780430e+01

Contribuciones a D1

fviz_contrib(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 1, top = 10)

Contribuciones a D2

fviz_contrib(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 2, top = 10)

Contribuciones a D3

fviz_contrib(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 3, top = 10)

Contribuciones a D4

fviz_contrib(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 4, top = 10)

Contribuciones a D5

fviz_contrib(PCA(cdd_examen_estudiantesNum_G7[,-c(1,3,4,5,6)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 5, top = 10)

Biplot de Variables y Registros[Total G]

set.seed(458627)
cdd_examen_muestreado_G7 = cdd_examen_estudiantes_G7[sample(1:nrow(cdd_examen_estudiantes_G7),200),-c(3,4,5,6)]

fviz_pca_biplot(PCA(cdd_examen_muestreado_G7, ncp = 4, scale.unit = TRUE, graph = F, quali.sup = "gender"), axes = c(1, 2), repel = TRUE, habillage = "gender")

Fase 3 [Correspondencias]

3.1. Objetivos

En términos generales, esta tercera etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en el conjunto de datos tratados en la fase 1 y 2 , pero ahora desde un enfoque de análisis de correspondencias simples y múltiples sobre las variables cuanlitativas, que incluyen: construcción de tablas de contingencias y disyuntivas completas, calidades de representación, contribuciones e interpretaciones.

3.2. Correspondencias Simples

se sabe que el análisis de correspondencias simples (ACS) busca representar en un espacio multidimensional reducido la relación que existe entre las categorías de un par de variables categóricas. En este sentido, el ACS muestra las distancia entre los niveles de dos variables categóricas y, en consecuencia, ayuda a visualizar tablas de contingencia. Además, se establece que el número máximo de dimensiones que explican la asociación entre variables fila y columna es igual a uno menos el menor número de categorías de alguna de las variables involucradas. En consecuencia, el análisis de correspondencias permite describir la proximidad existente entre los perfiles de los objetos observados. Además, el ACS, que basa sus cálculos en tablas de contingencia, puede extenderse a más de dos variables categóricas, conociéndose como análisis de correspondencias Múltiples (ACM), con base en un objeto llamado tabla disyuntiva completa.

Con base en las variables cualitativas del conjunto de datos se exige desarrollar el análisis de correspondencias, en principio simple, apoyado en tablas de contingencia y de frecuencias relativas y gráficos de perfiles y de puntos superpuestos en el primer plano factorial.

  1. Distribución por Género y Grupos
  • Participantes: Hay una proporción ligeramente mayor de hombres (51.7%) que de mujeres (48.3%). -Recuento por grupos:
  • El grupo C tiene la mayor cantidad de participantes femeninos.
  • El grupo D cuenta con el mayor número de participantes masculinos.
  1. Tasas de Finalización y Abandono
  • En general:
  • Solo el 33.13% de las mujeres y el 33.85% de los hombres completaron las actividades.
  • La mayoría (66.87% mujeres, 66.15% hombres) no completó las actividades.
  • Por grupos:
  • Los porcentajes de finalización más altos se registraron en el grupo A (40.51%), mientras que el grupo C mostró la menor tasa de completados (31.58%).
  • Esto sugiere variaciones significativas en la participación entre los grupos.
  1. Análisis Estadístico
  • Pruebas de Chi-Cuadrado:
  • Ninguna de las asociaciones analizadas resultó estadísticamente significativa (p-valor > 0.05). Esto implica que no hay evidencia concluyente de una relación entre género, grupos, y tasas de completados.
  • Análisis de Correspondencia:
  • Los residuos estandarizados sugieren diferencias notables en el grupo E, donde los residuos fueron los más altos en términos absolutos.
  1. Contribuciones al Análisis de Correspondencia
  • Contribuciones relativas:
  • El grupo E tuvo una alta contribución (23.92%) a la definición del perfil femenino.
  • Las mujeres aportaron un 0.42% al perfil del grupo A, mostrando un peso bajo en este grupo.
  • Perfiles de columna y fila:
  • Revelan una composición desigual en la distribución de géneros por grupo y viceversa.
  1. Dimensión Principal en el Análisis Unidimensional
  • Única Dimensión Significativa:
  • Se identificó una sola dimensión que explica el 100% de la varianza de los datos.
  • Los grupos tienen diferentes posiciones en esta dimensión:
  • El grupo E tiene un valor de 0.172, mientras que el grupo B está en el extremo opuesto con -0.146.

Conclusión General El análisis refleja diferencias notables en la distribución de género y en los niveles de participación (completados y no completados) entre los grupos, aunque estas diferencias no son estadísticamente significativas. La dimensión unidimensional obtenida resalta que los grupos tienen comportamientos distintos dentro de este contexto, con el grupo E destacándose en varias métricas.

AC por parejas

Contingencias
addmargins(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))
##         
##          group A group B group C group D group E  Sum
##   female      37     114     154     126      52  483
##   male        42      91     169     136      79  517
##   Sum         79     205     323     262     131 1000
addmargins(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course))
##         
##          completed none  Sum
##   female       160  323  483
##   male         175  342  517
##   Sum          335  665 1000
addmargins(table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course))
##          
##           completed none  Sum
##   group A        32   47   79
##   group B        72  133  205
##   group C       102  221  323
##   group D        84  178  262
##   group E        45   86  131
##   Sum           335  665 1000
Probabilidades
addmargins(prop.table(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))*100)
##         
##          group A group B group C group D group E   Sum
##   female     3.7    11.4    15.4    12.6     5.2  48.3
##   male       4.2     9.1    16.9    13.6     7.9  51.7
##   Sum        7.9    20.5    32.3    26.2    13.1 100.0
addmargins(prop.table(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course))*100)
##         
##          completed  none   Sum
##   female      16.0  32.3  48.3
##   male        17.5  34.2  51.7
##   Sum         33.5  66.5 100.0
addmargins(prop.table(table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course))*100)
##          
##           completed  none   Sum
##   group A       3.2   4.7   7.9
##   group B       7.2  13.3  20.5
##   group C      10.2  22.1  32.3
##   group D       8.4  17.8  26.2
##   group E       4.5   8.6  13.1
##   Sum          33.5  66.5 100.0
Frecuencias [CPF y CPC]
round(addmargins(prop.table(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity), 1)*100, 2), 2)
##         
##          group A group B group C group D group E    Sum
##   female    7.66   23.60   31.88   26.09   10.77 100.00
##   male      8.12   17.60   32.69   26.31   15.28 100.00
round(addmargins(prop.table(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course), 1)*100, 2), 2)
##         
##          completed   none    Sum
##   female     33.13  66.87 100.00
##   male       33.85  66.15 100.00
round(addmargins(prop.table(table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course), 1)*100, 2), 2)
##          
##           completed   none    Sum
##   group A     40.51  59.49 100.00
##   group B     35.12  64.88 100.00
##   group C     31.58  68.42 100.00
##   group D     32.06  67.94 100.00
##   group E     34.35  65.65 100.00
Perfiles [CPF y CPC]
plotct(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity),"row")

plotct(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity),"col")

plotct(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course),"row")

plotct(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course),"col")

plotct(table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course),"row")

plotct(table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course),"col")

Pruebas de Hipótesis
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))
## 
##  Pearson's Chi-squared test
## 
## data:  table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity)
## X-squared = 8.3938, df = 4, p-value = 0.07817
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$test_preparation_course)
## X-squared = 0.030614, df = 1, p-value = 0.8611
chisq.test(table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course))
## 
##  Pearson's Chi-squared test
## 
## data:  table(cdd_examen_estudiantesDep_G7$race_ethnicity, cdd_examen_estudiantesDep_G7$test_preparation_course)
## X-squared = 2.804, df = 4, p-value = 0.5911

AC pareja unica

Contingencias y Residuales
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))$observed
##         
##          group A group B group C group D group E
##   female      37     114     154     126      52
##   male        42      91     169     136      79
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))$expected
##         
##          group A group B group C group D group E
##   female  38.157  99.015 156.009 126.546  63.273
##   male    40.843 105.985 166.991 135.454  67.727
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))$residuals
##         
##              group A     group B     group C     group D     group E
##   female -0.18730365  1.50593508 -0.16084409 -0.04853650 -1.41719723
##   male    0.18104000 -1.45557486  0.15546528  0.04691338  1.36980450
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))$stdres
##         
##              group A     group B     group C     group D     group E
##   female -0.27143832  2.34896970 -0.27187264 -0.07857692 -2.11434150
##   male    0.27143832 -2.34896970  0.27187264  0.07857692  2.11434150
Contribuciones
chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))$residuals^2/chisq.test(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity))$statistic*100
##         
##              group A     group B     group C     group D     group E
##   female  0.41795889 27.01802334  0.30821324  0.02806583 23.92773870
##   male    0.39047223 25.24120943  0.28794390  0.02622011 22.35415434
Correspondencia simple unidimensional
CA(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity), graph = FALSE)$eig
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.008393806                    100                               100
CA(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity), graph = FALSE)$col
## $coord
##                [,1]
## group A  0.02930808
## group B -0.14627970
## group C  0.01244682
## group D  0.00417035
## group E  0.17220643
## 
## $contrib
##                [,1]
## group A  0.80843112
## group B 52.25923277
## group C  0.59615714
## group D  0.05428594
## group E 46.28189303
## 
## $cos2
##         [,1]
## group A    1
## group B    1
## group C    1
## group D    1
## group E    1
## 
## $inertia
## [1] 6.785814e-05 4.386539e-03 5.004027e-05 4.556657e-06 3.884812e-03
CA(table(cdd_examen_estudiantesDep_G7$gender, cdd_examen_estudiantesDep_G7$race_ethnicity), graph = FALSE)$row
## $coord
##      female        male 
## -0.09478752  0.08855391 
## 
## $contrib
## female   male 
##   51.7   48.3 
## 
## $cos2
## female   male 
##      1      1 
## 
## $inertia
## [1] 0.004339598 0.004054208

3.3. Correspondencias Múltiples

Se dice que el ACS se puede extender desde tablas de contingencia hacia tablas disyuntivas completas. En estas las filas son los objetos a los cuales se les registran características de interés a través de las columnas que compilan las modalidades de las variables categóricas estudiadas de ellos. Así, el análisis de correspondencias múltiples (ACM) es el AC aplicado a una tabla disyuntiva completa. Por lo tanto, en el ACM una variable categórica asigna a cada objeto de una población una modalidad a través de la cual los particiona exclusiva y exhaustivamente.

Esta sección es desarrollada como alternativa de completitud del análisis de correspondencias simples que en la sección anterior fue inapreciable debido a la unidimensionalidad de la representación de los datos a nivel de proyección de las variables categóricas que cumplieron la hipótesis de dependencia. Por lo tanto, del tratamiento conjunto de todas las variables categóricas se espera obtener una representación en el primer plano factorial

Con base en las variables cualitativas del conjunto de datos se exige desarrollar el análisis de correspondencias Múltiples para lograr una representación gráfica en el primer plano factorial, debido a la imposibilidad de lograrlo en el análisis de correspondencias simple.

  1. Análisis de Componentes Principales (ACP): o Los primeros cuatro componentes principales explican el 43.50% de la varianza, y las primeras 12 dimensiones alcanzan el 100%. o Esto sugiere que los datos pueden representarse de manera eficiente en un espacio reducido, facilitando su análisis e interpretación.

  2. Análisis de Correspondencias Múltiples (ACM): o El biplot revela asociaciones entre variables categóricas como género y nivel educativo (e.g., “mujer” asociada a “título de asociado”, y “hombre” a “título universitario”). o La Dimensión 1 (Dim1) se centra en la diferenciación educativa, mientras que la Dimensión 2 (Dim2) distingue principalmente entre géneros. o Variables como “mujer” y “grupo C” tienen altas contribuciones a la varianza explicada en Dim1.

  3. Visualización y calidad de representación: o Los gráficos permiten identificar patrones importantes, como las relaciones entre categorías y su representación en el plano factorial. o Variables relacionadas con género y educación son clave para explicar las estructuras subyacentes de los datos.

ACM

round(MCA(cdd_examen_estudiantesDep_G7[1:200, -c(2,7,8,9,10)], graph = FALSE)$eig,2)
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1        0.28                  11.59                             11.59
## dim 2        0.27                  11.17                             22.76
## dim 3        0.25                  10.48                             33.24
## dim 4        0.25                  10.26                             43.50
## dim 5        0.22                   9.10                             52.60
## dim 6        0.21                   8.57                             61.17
## dim 7        0.19                   8.02                             69.19
## dim 8        0.18                   7.58                             76.77
## dim 9        0.17                   7.13                             83.90
## dim 10       0.16                   6.63                             90.53
## dim 11       0.12                   4.94                             95.47
## dim 12       0.11                   4.53                            100.00

Diagrama de bitplot ACM

fviz_mca_biplot(MCA(cdd_examen_estudiantesDep_G7[1:200, -c(2,7,8,9,10)], graph = FALSE), repel = TRUE)

Calidad de representación

fviz_mca_var(MCA(cdd_examen_estudiantesDep_G7[1:200, -c(2,7,8,9,10)], graph = FALSE), col.var ="cos2", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

Contribuciones

fviz_contrib(MCA(cdd_examen_estudiantesDep_G7[1:200, -c(2,7,8,9,10)], graph = FALSE), choice = "var", axes = 1, top = 15)

Biplot con contribuciones

fviz_mca_var(MCA(cdd_examen_estudiantesDep_G7[1:200, -c(2,7,8,9,10)], graph = FALSE), col.var ="contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

Fase 4 [Conglomerados]

4.1. Objetivos

En términos generales, la cuarta etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en el conjunto de datos tratados en las fases 1 , 2 y 3 , pero ahora desde un enfoque de análisis de conglomerados en versión jerárquica (dendogramas) y no- jerárquica ( K -medias).

4.2. Agrupación Jerárquica

Los conglomerados pueden concebirse como regiones continuas de un espacio que contienen una relativamente alta densidad de puntos, que a su vez están separadas por regiones. (¿continuas?) que contienen una densidad de puntos relativamente baja. Para conformar tales regiones de puntos se han propuesto, por ejemplo, métodos jerárquicos. Estos inician con el cálculo de la matriz de distancias entre los objetos tratados, con los cuales se conforman grupos por aglomeración a través de etapas que empiezan por conglomerados unitarios (el caso trivial inicial, como también el caso trivial final: un conglomerado total). Entre las opciones restantes se presentan fusiones y divisiones de grupos que especifican jerarquías por similitudes que permiten una representación gráfica conocida como dendograma.

Con base en las variables cuantitativas del conjunto de datos se exige desarrollar el análisis de conglomerados con base agrupaciones jerárquicas que se representan con dendogramas, esto implica clasificar a los objetos de trabajo con métodos aglomerativos del vecino más cercano, más lejano. y de la unión mediante el promedio, soportados en la distancia euclidiana.

el análisis realizado sobre las características de los estudiantes revela patrones importantes relacionados con su raza/etnicidad, edad, asistencia y rendimiento académico. A través del examen de los valores numéricos y la creación de dendrogramas, se observó que las diferencias entre los grupos étnicos son notables, especialmente en términos de asistencia y puntajes académicos. El grupo B, en particular, mostró un desempeño superior en varias métricas. Además, los resultados de las optimizaciones y análisis jerárquicos sugieren que, para este conjunto de datos, la estrategia óptima es tratar a todos los estudiantes como un solo grupo, lo que implica que las diferencias individuales no justifican una segmentación más detallada. Esta información es esencial para comprender las dinámicas dentro del grupo de estudiantes y para tomar decisiones informadas sobre políticas educativas y estrategias de intervención.

Campo clasificador

head(as.data.frame(cdd_examen_estudiantes_race_ethnicity_promedio))
##   race_ethnicity   age_S01 attendance_S01 math_score_100_S01
## 1        group A 0.4824191      0.5107595          0.6153063
## 2        group B 0.4845528      0.5396341          0.6253995
## 3        group C 0.5032680      0.5206656          0.6056368
## 4        group D 0.4995759      0.4678435          0.6147670
## 5        group E 0.4809160      0.4925573          0.6125296
##   reading_score_100_S01 writing_score_100_S01
## 1             0.5552280             0.5630446
## 2             0.5813565             0.5848590
## 3             0.5704652             0.5779020
## 4             0.5841786             0.5888272
## 5             0.5726237             0.5778725

Disimilaridad

data_ = as.data.frame(cdd_examen_estudiantes_race_ethnicity_promedio)[, -c(1)]
rownames(data_) = unclass(cdd_examen_estudiantes_race_ethnicity_promedio$race_ethnicity)
fviz_dist(get_dist(data_, stand = T, method = "euclidean"), gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

Optimizacion de Mojena

Unión Simple
hc_single = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "single")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_single)

Unión Completa
hc_complete = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "complete")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_complete)

Unión Promedio
hc_average = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "average")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_average)

Dendogramas optimizados

Enlace Simple
suppressWarnings(fviz_dend(hc_single, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T))

Enlace Completo
fviz_dend(hc_complete, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T)

Enlace Promedio
fviz_dend(hc_average, k = 4, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T)

4.3. Agrupación No-Jerárquica

Esta fase no fue posible de procesar debido a la naturaleza de los datos. Como consecuencia de esta naturaleza, el programa no logra procesarlos y generaba un error (Error: el número de centros de clúster debe estar entre 1 y nrow(x)). Esto significa que los datos no poseen una relación apreciable, por lo cual se genera un centro de clúster para cada uno de los datos, dando como resultado un clúster para cada registro. Esto hace que sea computacionalmente impracticable debido al exceso de recursos que requiere. Además, analíticamente tampoco aporta mucho, salvo evidenciar la poca relación mencionada previamente.

Fase 5 [Análisis de Regresión]

5.1. Objetivos

En términos generales, este estudio establecerá la relación entre dos o más variables a través de la obtención de información sobre una de ellas con base en el conocimiento de los valores de las demás. La relación que se establecerá entre ellas es de naturaleza no-determinística; es decir, se formularán relaciones probabilísticas y procedimientos para hacer inferencias sobre los modelos usados en este estudio, a la vez que se obtienen medidas cuantitativas del grado en el que las variables están relacionadas. Los modelos estudiados pueden verse como casos especialies del modelo lineal generalizado: Regresión Lineal Simple, Regresión Lineal Múltiple y Regresión Logística. En cada apartado se describirá teóricamente a cada uno y se usará como objeto de estudio un conjunto de datos.

5.2. Regresión Lineal Simple

El diagrama de caja y bigotes muestra que la distribución de ambos puntajes es similar, con una mediana ligeramente más alta en Math Score que en Reading Score. Esto sugiere que, en general, los estudiantes tienen un mejor desempeño en matemáticas que en lectura.

El gráfico de dispersión RS vs MS confirma la existencia de una relación lineal positiva entre estas dos variables. A medida que aumenta el puntaje de matemáticas, también tiende a incrementarse el puntaje de lectura. La forma y orientación de la nube de puntos indica que esta asociación es moderadamente fuerte.

Los gráficos de dispersión totales revelan una distribución relativamente simétrica y uniforme de los datos, sin presencia de valores atípicos o agrupamientos inusuales. Esto corrobora que los puntajes de lectura y matemáticas siguen patrones de distribución similares en la población estudiada.

En resumen, el análisis integral de estos elementos gráficos sugiere que existe una relación lineal positiva entre los puntajes de lectura y matemáticas de los estudiantes. Si bien no es una asociación perfecta, los estudiantes con mejores resultados en matemáticas tienden a obtener también mejores puntajes en lectura. Estos hallazgos pueden ser útiles para identificar áreas de oportunidad y diseñar estrategias de enseñanza que favorezcan el desarrollo integral de las habilidades académicas de los estudiantes.

Resumen math score

summary(cdd_examen_estudiantesDep_G7$math_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    56.0    66.5    66.4    77.0   100.0
boxplot(cdd_examen_estudiantesDep_G7$math_score_100, main = "Diagrama de Caja de Math Score", col = c("orange"))

Resumen reading score

summary(cdd_examen_estudiantesDep_G7$reading_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      27      60      70      69      79     100
boxplot(cdd_examen_estudiantesDep_G7$reading_score_100, main = "Diagrama de Caja de reading Score", col = c("gold"))

Diagrama de dispersión RS vs. MS

plot(cdd_examen_estudiantesDep_G7$reading_score_100, cdd_examen_estudiantesDep_G7$math_score_100, main = "Diagrama de Dispersión RS Score vs. MS")

Diagramas Totales de Dispersión

pairs(~age + attendance + math_score_100 + reading_score_100 + writing_score_100, data = cdd_examen_estudiantesDep_G7)

5.2.1. Formulación del modelo de RLS entre las variables de estudio.

La navegación a través de las pestañas muestra los coeficientes del modelo de regresión lineal simple, su resumen estadístico y su tabla ANOVA. Se menciona de nuevo que las variables de interés son: reading Score(variable independiente) y Math Score(variable dependiente).

Los coeficientes del modelo de regresión lineal entre el puntaje de lectura (Reading Score) y el puntaje de matemáticas (Math Score) indican que existe una relación positiva entre estas dos variables. El coeficiente de Math Score es estadísticamente significativo, lo que significa que a medida que aumenta el puntaje de matemáticas, también tiende a aumentar el puntaje de lectura, manteniendo todo lo demás constante.

El resumen estadístico del modelo revela que el modelo de regresión lineal simple explica aproximadamente el 35% de la variabilidad observada en los puntajes de lectura (R-cuadrado = 0.35). Este es un valor moderado, lo que sugiere que si bien Math Score es una variable predictora importante, existen otros factores que también influyen en los puntajes de lectura de los estudiantes.

Finalmente, el análisis de varianza (ANOVA) confirma que el modelo de regresión en su conjunto es estadísticamente significativo, es decir, el puntaje de matemáticas es una variable relevante para explicar los puntajes de lectura.

Coeficientes del Modelo RLS

modelo_RL_Simple = lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$reading_score_100)
coef(modelo_RL_Simple)
##                                    (Intercept) 
##                                      7.3023363 
## cdd_examen_estudiantesDep_G7$reading_score_100 
##                                      0.8564051

Resumen Estadístico del Modelo RLS

summary(modelo_RL_Simple)
## 
## Call:
## lm(formula = cdd_examen_estudiantesDep_G7$math_score_100 ~ cdd_examen_estudiantesDep_G7$reading_score_100)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -25.1329  -6.2905   0.0313   6.1672  25.0313 
## 
## Coefficients:
##                                                Estimate Std. Error t value
## (Intercept)                                     7.30234    1.33808   5.457
## cdd_examen_estudiantesDep_G7$reading_score_100  0.85641    0.01896  45.158
##                                                Pr(>|t|)    
## (Intercept)                                     6.1e-08 ***
## cdd_examen_estudiantesDep_G7$reading_score_100  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.834 on 998 degrees of freedom
## Multiple R-squared:  0.6714, Adjusted R-squared:  0.6711 
## F-statistic:  2039 on 1 and 998 DF,  p-value: < 2.2e-16

Tabla ANOVA para el Modelo RLS

anova(modelo_RL_Simple)
## Analysis of Variance Table
## 
## Response: cdd_examen_estudiantesDep_G7$math_score_100
##                                                 Df Sum Sq Mean Sq F value
## cdd_examen_estudiantesDep_G7$reading_score_100   1 159132  159132  2039.2
## Residuals                                      998  77879      78        
##                                                   Pr(>F)    
## cdd_examen_estudiantesDep_G7$reading_score_100 < 2.2e-16 ***
## Residuals                                                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5.2.2. Análisis del modelo RLS.

Este apartado muestra el intervalo de confianza para el coeficiente B1, que representa la pendiente de la recta de regresión. El intervalo de confianza proporciona un rango de valores plausibles para el verdadero valor del coeficiente B1, con un nivel de confianza determinado (por ejemplo, 95%). Esto permite evaluar la significancia estadística del coeficiente: si el intervalo de confianza no incluye el valor cero, se puede concluir que B1 es significativamente diferente de cero, lo que implica que existe una relación lineal significativa entre las variables. Predicciones y sus intervalos de predicción:

Esta tabla presenta predicciones puntuales para determinados valores de la variable independiente (Math Score), junto con sus correspondientes intervalos de predicción. Los intervalos de predicción indican el rango en el que se espera que caiga el valor real de la variable dependiente (Reading Score) para un valor dado de la variable independiente, con un nivel de confianza establecido. Estos intervalos son más amplios que los intervalos de confianza, ya que tienen en cuenta la variabilidad individual de los datos, no solo la incertidumbre en la estimación del coeficiente.

Predicciones y sus intervalos de confianza: Esta segunda tabla muestra predicciones puntuales para valores de Math Score, pero en lugar de intervalos de predicción, presenta intervalos de confianza para esas predicciones. Los intervalos de confianza indican el rango en el que se espera que caiga el valor promedio de Reading Score para un valor dado de Math Score, con un nivel de confianza determinado. Estos intervalos son más estrechos que los intervalos de predicción, ya que no consideran la variabilidad individual, sino solo la incertidumbre en la estimación del valor promedio. En general, este conjunto de elementos permite evaluar la solidez y precisión de las predicciones realizadas a partir del modelo de regresión lineal simple entre Math Score y Reading Score. Los intervalos de confianza y predicción brindan información sobre la incertidumbre asociada a las estimaciones y pronósticos, lo cual es fundamental para valorar la aplicabilidad y limitaciones del modelo.

Intervalo de Confianza para B1

confint(modelo_RL_Simple, level = 0.95)
##                                                    2.5 %    97.5 %
## (Intercept)                                    4.6765570 9.9281156
## cdd_examen_estudiantesDep_G7$reading_score_100 0.8191899 0.8936203

Predicciones y sus Intervalos de Predicción

predict(modelo_RL_Simple, data.frame(seq(1,1000)), interval='prediction', level = 0.95)
##           fit      lwr       upr
## 1    64.68148 47.33781  82.02514
## 2    57.83024 40.48274  75.17774
## 3    58.68664 41.33990  76.03338
## 4    74.10193 56.75519  91.44867
## 5    69.81991 52.47576  87.16405
## 6    73.24553 55.89947  90.59159
## 7    57.83024 40.48274  75.17774
## 8    82.66598 65.30807 100.02390
## 9    55.26102 37.91077  72.61128
## 10   43.27135 25.89876  60.64394
## 11   78.38396 61.03263  95.73529
## 12   81.80958 64.45314  99.16601
## 13   81.80958 64.45314  99.16601
## 14   70.67631 53.33181  88.02082
## 15   81.80958 64.45314  99.16601
## 16   59.54305 42.19698  76.88911
## 17   47.55338 30.19055  64.91620
## 18   60.39945 43.05399  77.74492
## 19   44.98416 27.61571  62.35261
## 20   34.70730 17.30921  52.10539
## 21   72.38912 55.04366  89.73459
## 22   51.83540 34.48036  69.19045
## 23   66.39429 49.05078  83.73779
## 24   54.40462 37.05328  71.75595
## 25   39.84573 22.46389  57.22757
## 26   45.84057 28.47407  63.20706
## 27   58.68664 41.33990  76.03338
## 28   65.53788 48.19433  82.88143
## 29   83.52239 66.16292 100.88186
## 30   53.54821 36.19572  70.90070
## 31   74.95834 57.61084  92.30584
## 32   70.67631 53.33181  88.02082
## 33   42.41494 25.04016  59.78973
## 34   62.96867 45.62452  80.31281
## 35   82.66598 65.30807 100.02390
## 36   70.67631 53.33181  88.02082
## 37   73.24553 55.89947  90.59159
## 38   62.96867 45.62452  80.31281
## 39   65.53788 48.19433  82.88143
## 40   76.67115 59.32189  94.02040
## 41   71.53272 54.18777  88.87766
## 42   64.68148 47.33781  82.02514
## 43   74.95834 57.61084  92.30584
## 44   67.25069 49.90715  84.59424
## 45   82.66598 65.30807 100.02390
## 46   46.69697 29.33235  64.06159
## 47   61.25586 43.91091  78.60080
## 48   72.38912 55.04366  89.73459
## 49   68.96350 51.61964  86.30737
## 50   61.25586 43.91091  78.60080
## 51   65.53788 48.19433  82.88143
## 52   56.97383 39.62549  74.32217
## 53   76.67115 59.32189  94.02040
## 54   52.69181 35.33808  70.04553
## 55   56.11743 38.76817  73.46668
## 56   58.68664 41.33990  76.03338
## 57   75.81474 58.46641  93.16308
## 58   81.80958 64.45314  99.16601
## 59   59.54305 42.19698  76.88911
## 60   50.97900 33.62255  68.33544
## 61   63.82507 46.48120  81.16894
## 62   61.25586 43.91091  78.60080
## 63   64.68148 47.33781  82.02514
## 64   77.52755 60.17730  94.87780
## 65   86.94801 69.58152 104.31450
## 66   70.67631 53.33181  88.02082
## 67   58.68664 41.33990  76.03338
## 68   46.69697 29.33235  64.06159
## 69   62.11226 44.76776  79.45677
## 70   62.11226 44.76776  79.45677
## 71   65.53788 48.19433  82.88143
## 72   51.83540 34.48036  69.19045
## 73   67.25069 49.90715  84.59424
## 74   72.38912 55.04366  89.73459
## 75   72.38912 55.04366  89.73459
## 76   73.24553 55.89947  90.59159
## 77   61.25586 43.91091  78.60080
## 78   85.23520 67.87238 102.59802
## 79   69.81991 52.47576  87.16405
## 80   44.12775 26.75727  61.49824
## 81   57.83024 40.48274  75.17774
## 82   39.84573 22.46389  57.22757
## 83   57.83024 40.48274  75.17774
## 84   72.38912 55.04366  89.73459
## 85   42.41494 25.04016  59.78973
## 86   68.10710 50.76343  85.45076
## 87   72.38912 55.04366  89.73459
## 88   86.94801 69.58152 104.31450
## 89   51.83540 34.48036  69.19045
## 90   72.38912 55.04366  89.73459
## 91   47.55338 30.19055  64.91620
## 92   68.10710 50.76343  85.45076
## 93   76.67115 59.32189  94.02040
## 94   81.80958 64.45314  99.16601
## 95   69.81991 52.47576  87.16405
## 96   61.25586 43.91091  78.60080
## 97   92.94284 75.56101 110.32468
## 98   51.83540 34.48036  69.19045
## 99   50.12259 32.76467  67.48051
## 100  53.54821 36.19572  70.90070
## 101  59.54305 42.19698  76.88911
## 102  74.10193 56.75519  91.44867
## 103  74.10193 56.75519  91.44867
## 104  64.68148 47.33781  82.02514
## 105  56.97383 39.62549  74.32217
## 106  74.10193 56.75519  91.44867
## 107  70.67631 53.33181  88.02082
## 108  39.84573 22.46389  57.22757
## 109  74.10193 56.75519  91.44867
## 110  35.56370 18.16852  52.95889
## 111  82.66598 65.30807 100.02390
## 112  51.83540 34.48036  69.19045
## 113  77.52755 60.17730  94.87780
## 114  36.42011 19.02775  53.81246
## 115  72.38912 55.04366  89.73459
## 116  74.95834 57.61084  92.30584
## 117  59.54305 42.19698  76.88911
## 118  56.11743 38.76817  73.46668
## 119  67.25069 49.90715  84.59424
## 120  84.37879 67.01769 101.73990
## 121  68.10710 50.76343  85.45076
## 122  81.80958 64.45314  99.16601
## 123  52.69181 35.33808  70.04553
## 124  44.12775 26.75727  61.49824
## 125  74.10193 56.75519  91.44867
## 126  53.54821 36.19572  70.90070
## 127  68.10710 50.76343  85.45076
## 128  51.83540 34.48036  69.19045
## 129  79.24036 61.88788  96.59285
## 130  88.66082 71.29035 106.03129
## 131  71.53272 54.18777  88.87766
## 132  67.25069 49.90715  84.59424
## 133  61.25586 43.91091  78.60080
## 134  54.40462 37.05328  71.75595
## 135  53.54821 36.19572  70.90070
## 136  74.10193 56.75519  91.44867
## 137  76.67115 59.32189  94.02040
## 138  63.82507 46.48120  81.16894
## 139  44.98416 27.61571  62.35261
## 140  68.96350 51.61964  86.30737
## 141  61.25586 43.91091  78.60080
## 142  73.24553 55.89947  90.59159
## 143  78.38396 61.03263  95.73529
## 144  60.39945 43.05399  77.74492
## 145  68.10710 50.76343  85.45076
## 146  56.11743 38.76817  73.46668
## 147  59.54305 42.19698  76.88911
## 148  54.40462 37.05328  71.75595
## 149  92.94284 75.56101 110.32468
## 150  44.98416 27.61571  62.35261
## 151  74.10193 56.75519  91.44867
## 152  64.68148 47.33781  82.02514
## 153  74.95834 57.61084  92.30584
## 154  63.82507 46.48120  81.16894
## 155  61.25586 43.91091  78.60080
## 156  44.98416 27.61571  62.35261
## 157  62.11226 44.76776  79.45677
## 158  81.80958 64.45314  99.16601
## 159  88.66082 71.29035 106.03129
## 160  74.10193 56.75519  91.44867
## 161  91.23003 73.85299 108.60708
## 162  61.25586 43.91091  78.60080
## 163  86.09160 68.72699 103.45622
## 164  71.53272 54.18777  88.87766
## 165  68.96350 51.61964  86.30737
## 166  81.80958 64.45314  99.16601
## 167  62.11226 44.76776  79.45677
## 168  62.11226 44.76776  79.45677
## 169  84.37879 67.01769 101.73990
## 170  80.09677 62.74305  97.45049
## 171  58.68664 41.33990  76.03338
## 172  68.10710 50.76343  85.45076
## 173  63.82507 46.48120  81.16894
## 174  62.11226 44.76776  79.45677
## 175  70.67631 53.33181  88.02082
## 176  55.26102 37.91077  72.61128
## 177  55.26102 37.91077  72.61128
## 178  52.69181 35.33808  70.04553
## 179  86.94801 69.58152 104.31450
## 180  81.80958 64.45314  99.16601
## 181  60.39945 43.05399  77.74492
## 182  51.83540 34.48036  69.19045
## 183  88.66082 71.29035 106.03129
## 184  78.38396 61.03263  95.73529
## 185  80.09677 62.74305  97.45049
## 186  92.94284 75.56101 110.32468
## 187  73.24553 55.89947  90.59159
## 188  59.54305 42.19698  76.88911
## 189  62.96867 45.62452  80.31281
## 190  61.25586 43.91091  78.60080
## 191  56.11743 38.76817  73.46668
## 192  50.97900 33.62255  68.33544
## 193  60.39945 43.05399  77.74492
## 194  85.23520 67.87238 102.59802
## 195  62.11226 44.76776  79.45677
## 196  49.26619 31.90671  66.62566
## 197  46.69697 29.33235  64.06159
## 198  56.11743 38.76817  73.46668
## 199  60.39945 43.05399  77.74492
## 200  61.25586 43.91091  78.60080
## 201  61.25586 43.91091  78.60080
## 202  53.54821 36.19572  70.90070
## 203  62.11226 44.76776  79.45677
## 204  62.11226 44.76776  79.45677
## 205  78.38396 61.03263  95.73529
## 206  70.67631 53.33181  88.02082
## 207  74.10193 56.75519  91.44867
## 208  74.10193 56.75519  91.44867
## 209  80.95317 63.59813  98.30821
## 210  60.39945 43.05399  77.74492
## 211  66.39429 49.05078  83.73779
## 212  82.66598 65.30807 100.02390
## 213  71.53272 54.18777  88.87766
## 214  63.82507 46.48120  81.16894
## 215  75.81474 58.46641  93.16308
## 216  56.11743 38.76817  73.46668
## 217  68.96350 51.61964  86.30737
## 218  76.67115 59.32189  94.02040
## 219  57.83024 40.48274  75.17774
## 220  59.54305 42.19698  76.88911
## 221  84.37879 67.01769 101.73990
## 222  66.39429 49.05078  83.73779
## 223  48.40978 31.04867  65.77089
## 224  73.24553 55.89947  90.59159
## 225  87.80441 70.43597 105.17285
## 226  66.39429 49.05078  83.73779
## 227  38.13292 20.74598  55.51986
## 228  68.10710 50.76343  85.45076
## 229  75.81474 58.46641  93.16308
## 230  78.38396 61.03263  95.73529
## 231  84.37879 67.01769 101.73990
## 232  71.53272 54.18777  88.87766
## 233  44.98416 27.61571  62.35261
## 234  70.67631 53.33181  88.02082
## 235  74.95834 57.61084  92.30584
## 236  85.23520 67.87238 102.59802
## 237  65.53788 48.19433  82.88143
## 238  88.66082 71.29035 106.03129
## 239  60.39945 43.05399  77.74492
## 240  71.53272 54.18777  88.87766
## 241  79.24036 61.88788  96.59285
## 242  72.38912 55.04366  89.73459
## 243  62.11226 44.76776  79.45677
## 244  62.96867 45.62452  80.31281
## 245  36.42011 19.02775  53.81246
## 246  70.67631 53.33181  88.02082
## 247  51.83540 34.48036  69.19045
## 248  68.10710 50.76343  85.45076
## 249  53.54821 36.19572  70.90070
## 250  78.38396 61.03263  95.73529
## 251  67.25069 49.90715  84.59424
## 252  62.96867 45.62452  80.31281
## 253  61.25586 43.91091  78.60080
## 254  72.38912 55.04366  89.73459
## 255  59.54305 42.19698  76.88911
## 256  63.82507 46.48120  81.16894
## 257  74.10193 56.75519  91.44867
## 258  68.10710 50.76343  85.45076
## 259  74.95834 57.61084  92.30584
## 260  81.80958 64.45314  99.16601
## 261  68.96350 51.61964  86.30737
## 262  46.69697 29.33235  64.06159
## 263  55.26102 37.91077  72.61128
## 264  63.82507 46.48120  81.16894
## 265  77.52755 60.17730  94.87780
## 266  68.10710 50.76343  85.45076
## 267  69.81991 52.47576  87.16405
## 268  72.38912 55.04366  89.73459
## 269  56.97383 39.62549  74.32217
## 270  69.81991 52.47576  87.16405
## 271  68.96350 51.61964  86.30737
## 272  66.39429 49.05078  83.73779
## 273  68.10710 50.76343  85.45076
## 274  92.94284 75.56101 110.32468
## 275  86.94801 69.58152 104.31450
## 276  78.38396 61.03263  95.73529
## 277  68.96350 51.61964  86.30737
## 278  73.24553 55.89947  90.59159
## 279  49.26619 31.90671  66.62566
## 280  69.81991 52.47576  87.16405
## 281  76.67115 59.32189  94.02040
## 282  92.94284 75.56101 110.32468
## 283  62.96867 45.62452  80.31281
## 284  43.27135 25.89876  60.64394
## 285  49.26619 31.90671  66.62566
## 286  75.81474 58.46641  93.16308
## 287  83.52239 66.16292 100.88186
## 288  48.40978 31.04867  65.77089
## 289  68.10710 50.76343  85.45076
## 290  61.25586 43.91091  78.60080
## 291  70.67631 53.33181  88.02082
## 292  73.24553 55.89947  90.59159
## 293  68.10710 50.76343  85.45076
## 294  71.53272 54.18777  88.87766
## 295  58.68664 41.33990  76.03338
## 296  78.38396 61.03263  95.73529
## 297  47.55338 30.19055  64.91620
## 298  56.97383 39.62549  74.32217
## 299  56.97383 39.62549  74.32217
## 300  44.12775 26.75727  61.49824
## 301  31.28168 13.87118  48.69218
## 302  40.70213 23.32273  58.08154
## 303  60.39945 43.05399  77.74492
## 304  65.53788 48.19433  82.88143
## 305  61.25586 43.91091  78.60080
## 306  56.11743 38.76817  73.46668
## 307  59.54305 42.19698  76.88911
## 308  61.25586 43.91091  78.60080
## 309  76.67115 59.32189  94.02040
## 310  75.81474 58.46641  93.16308
## 311  66.39429 49.05078  83.73779
## 312  56.11743 38.76817  73.46668
## 313  48.40978 31.04867  65.77089
## 314  74.10193 56.75519  91.44867
## 315  65.53788 48.19433  82.88143
## 316  81.80958 64.45314  99.16601
## 317  64.68148 47.33781  82.02514
## 318  78.38396 61.03263  95.73529
## 319  80.95317 63.59813  98.30821
## 320  80.09677 62.74305  97.45049
## 321  55.26102 37.91077  72.61128
## 322  78.38396 61.03263  95.73529
## 323  56.97383 39.62549  74.32217
## 324  78.38396 61.03263  95.73529
## 325  79.24036 61.88788  96.59285
## 326  62.96867 45.62452  80.31281
## 327  75.81474 58.46641  93.16308
## 328  66.39429 49.05078  83.73779
## 329  58.68664 41.33990  76.03338
## 330  61.25586 43.91091  78.60080
## 331  66.39429 49.05078  83.73779
## 332  84.37879 67.01769 101.73990
## 333  53.54821 36.19572  70.90070
## 334  78.38396 61.03263  95.73529
## 335  44.12775 26.75727  61.49824
## 336  72.38912 55.04366  89.73459
## 337  65.53788 48.19433  82.88143
## 338  46.69697 29.33235  64.06159
## 339  65.53788 48.19433  82.88143
## 340  69.81991 52.47576  87.16405
## 341  59.54305 42.19698  76.88911
## 342  52.69181 35.33808  70.04553
## 343  60.39945 43.05399  77.74492
## 344  67.25069 49.90715  84.59424
## 345  75.81474 58.46641  93.16308
## 346  58.68664 41.33990  76.03338
## 347  74.95834 57.61084  92.30584
## 348  74.10193 56.75519  91.44867
## 349  56.97383 39.62549  74.32217
## 350  82.66598 65.30807 100.02390
## 351  62.11226 44.76776  79.45677
## 352  50.12259 32.76467  67.48051
## 353  74.10193 56.75519  91.44867
## 354  68.10710 50.76343  85.45076
## 355  71.53272 54.18777  88.87766
## 356  53.54821 36.19572  70.90070
## 357  68.10710 50.76343  85.45076
## 358  58.68664 41.33990  76.03338
## 359  70.67631 53.33181  88.02082
## 360  51.83540 34.48036  69.19045
## 361  84.37879 67.01769 101.73990
## 362  52.69181 35.33808  70.04553
## 363  61.25586 43.91091  78.60080
## 364  78.38396 61.03263  95.73529
## 365  68.10710 50.76343  85.45076
## 366  62.11226 44.76776  79.45677
## 367  59.54305 42.19698  76.88911
## 368  64.68148 47.33781  82.02514
## 369  62.11226 44.76776  79.45677
## 370  71.53272 54.18777  88.87766
## 371  68.96350 51.61964  86.30737
## 372  68.10710 50.76343  85.45076
## 373  62.96867 45.62452  80.31281
## 374  52.69181 35.33808  70.04553
## 375  83.52239 66.16292 100.88186
## 376  71.53272 54.18777  88.87766
## 377  85.23520 67.87238 102.59802
## 378  53.54821 36.19572  70.90070
## 379  81.80958 64.45314  99.16601
## 380  84.37879 67.01769 101.73990
## 381  50.97900 33.62255  68.33544
## 382  78.38396 61.03263  95.73529
## 383  74.10193 56.75519  91.44867
## 384  79.24036 61.88788  96.59285
## 385  80.95317 63.59813  98.30821
## 386  80.95317 63.59813  98.30821
## 387  56.11743 38.76817  73.46668
## 388  59.54305 42.19698  76.88911
## 389  77.52755 60.17730  94.87780
## 390  75.81474 58.46641  93.16308
## 391  60.39945 43.05399  77.74492
## 392  55.26102 37.91077  72.61128
## 393  32.13808 14.73080  49.54536
## 394  56.97383 39.62549  74.32217
## 395  57.83024 40.48274  75.17774
## 396  74.10193 56.75519  91.44867
## 397  92.94284 75.56101 110.32468
## 398  75.81474 58.46641  93.16308
## 399  69.81991 52.47576  87.16405
## 400  67.25069 49.90715  84.59424
## 401  69.81991 52.47576  87.16405
## 402  68.10710 50.76343  85.45076
## 403  70.67631 53.33181  88.02082
## 404  61.25586 43.91091  78.60080
## 405  73.24553 55.89947  90.59159
## 406  59.54305 42.19698  76.88911
## 407  86.09160 68.72699 103.45622
## 408  62.11226 44.76776  79.45677
## 409  49.26619 31.90671  66.62566
## 410  71.53272 54.18777  88.87766
## 411  68.96350 51.61964  86.30737
## 412  71.53272 54.18777  88.87766
## 413  58.68664 41.33990  76.03338
## 414  59.54305 42.19698  76.88911
## 415  60.39945 43.05399  77.74492
## 416  67.25069 49.90715  84.59424
## 417  62.96867 45.62452  80.31281
## 418  67.25069 49.90715  84.59424
## 419  62.96867 45.62452  80.31281
## 420  46.69697 29.33235  64.06159
## 421  68.10710 50.76343  85.45076
## 422  68.10710 50.76343  85.45076
## 423  45.84057 28.47407  63.20706
## 424  69.81991 52.47576  87.16405
## 425  40.70213 23.32273  58.08154
## 426  78.38396 61.03263  95.73529
## 427  62.96867 45.62452  80.31281
## 428  67.25069 49.90715  84.59424
## 429  51.83540 34.48036  69.19045
## 430  74.10193 56.75519  91.44867
## 431  78.38396 61.03263  95.73529
## 432  68.10710 50.76343  85.45076
## 433  70.67631 53.33181  88.02082
## 434  80.09677 62.74305  97.45049
## 435  61.25586 43.91091  78.60080
## 436  81.80958 64.45314  99.16601
## 437  70.67631 53.33181  88.02082
## 438  51.83540 34.48036  69.19045
## 439  82.66598 65.30807 100.02390
## 440  63.82507 46.48120  81.16894
## 441  62.11226 44.76776  79.45677
## 442  92.94284 75.56101 110.32468
## 443  67.25069 49.90715  84.59424
## 444  39.84573 22.46389  57.22757
## 445  80.95317 63.59813  98.30821
## 446  68.10710 50.76343  85.45076
## 447  72.38912 55.04366  89.73459
## 448  68.96350 51.61964  86.30737
## 449  51.83540 34.48036  69.19045
## 450  71.53272 54.18777  88.87766
## 451  60.39945 43.05399  77.74492
## 452  55.26102 37.91077  72.61128
## 453  80.09677 62.74305  97.45049
## 454  47.55338 30.19055  64.91620
## 455  69.81991 52.47576  87.16405
## 456  57.83024 40.48274  75.17774
## 457  81.80958 64.45314  99.16601
## 458  77.52755 60.17730  94.87780
## 459  66.39429 49.05078  83.73779
## 460  54.40462 37.05328  71.75595
## 461  64.68148 47.33781  82.02514
## 462  44.98416 27.61571  62.35261
## 463  44.98416 27.61571  62.35261
## 464  69.81991 52.47576  87.16405
## 465  60.39945 43.05399  77.74492
## 466  60.39945 43.05399  77.74492
## 467  80.09677 62.74305  97.45049
## 468  64.68148 47.33781  82.02514
## 469  61.25586 43.91091  78.60080
## 470  50.97900 33.62255  68.33544
## 471  87.80441 70.43597 105.17285
## 472  81.80958 64.45314  99.16601
## 473  69.81991 52.47576  87.16405
## 474  48.40978 31.04867  65.77089
## 475  68.10710 50.76343  85.45076
## 476  71.53272 54.18777  88.87766
## 477  80.09677 62.74305  97.45049
## 478  65.53788 48.19433  82.88143
## 479  69.81991 52.47576  87.16405
## 480  44.12775 26.75727  61.49824
## 481  82.66598 65.30807 100.02390
## 482  74.95834 57.61084  92.30584
## 483  76.67115 59.32189  94.02040
## 484  74.10193 56.75519  91.44867
## 485  85.23520 67.87238 102.59802
## 486  89.51722 72.14464 106.88981
## 487  62.11226 44.76776  79.45677
## 488  55.26102 37.91077  72.61128
## 489  74.95834 57.61084  92.30584
## 490  68.10710 50.76343  85.45076
## 491  66.39429 49.05078  83.73779
## 492  65.53788 48.19433  82.88143
## 493  49.26619 31.90671  66.62566
## 494  72.38912 55.04366  89.73459
## 495  61.25586 43.91091  78.60080
## 496  62.96867 45.62452  80.31281
## 497  36.42011 19.02775  53.81246
## 498  62.11226 44.76776  79.45677
## 499  86.09160 68.72699 103.45622
## 500  79.24036 61.88788  96.59285
## 501  62.11226 44.76776  79.45677
## 502  81.80958 64.45314  99.16601
## 503  56.11743 38.76817  73.46668
## 504  75.81474 58.46641  93.16308
## 505  48.40978 31.04867  65.77089
## 506  85.23520 67.87238 102.59802
## 507  72.38912 55.04366  89.73459
## 508  55.26102 37.91077  72.61128
## 509  55.26102 37.91077  72.61128
## 510  67.25069 49.90715  84.59424
## 511  74.95834 57.61084  92.30584
## 512  82.66598 65.30807 100.02390
## 513  68.96350 51.61964  86.30737
## 514  74.95834 57.61084  92.30584
## 515  75.81474 58.46641  93.16308
## 516  58.68664 41.33990  76.03338
## 517  51.83540 34.48036  69.19045
## 518  38.13292 20.74598  55.51986
## 519  77.52755 60.17730  94.87780
## 520  83.52239 66.16292 100.88186
## 521  73.24553 55.89947  90.59159
## 522  78.38396 61.03263  95.73529
## 523  70.67631 53.33181  88.02082
## 524  80.09677 62.74305  97.45049
## 525  47.55338 30.19055  64.91620
## 526  62.11226 44.76776  79.45677
## 527  72.38912 55.04366  89.73459
## 528  86.09160 68.72699 103.45622
## 529  59.54305 42.19698  76.88911
## 530  64.68148 47.33781  82.02514
## 531  92.94284 75.56101 110.32468
## 532  69.81991 52.47576  87.16405
## 533  57.83024 40.48274  75.17774
## 534  74.10193 56.75519  91.44867
## 535  75.81474 58.46641  93.16308
## 536  81.80958 64.45314  99.16601
## 537  61.25586 43.91091  78.60080
## 538  68.96350 51.61964  86.30737
## 539  69.81991 52.47576  87.16405
## 540  63.82507 46.48120  81.16894
## 541  70.67631 53.33181  88.02082
## 542  68.96350 51.61964  86.30737
## 543  82.66598 65.30807 100.02390
## 544  57.83024 40.48274  75.17774
## 545  80.09677 62.74305  97.45049
## 546  68.10710 50.76343  85.45076
## 547  58.68664 41.33990  76.03338
## 548  56.97383 39.62549  74.32217
## 549  46.69697 29.33235  64.06159
## 550  55.26102 37.91077  72.61128
## 551  92.94284 75.56101 110.32468
## 552  65.53788 48.19433  82.88143
## 553  92.94284 75.56101 110.32468
## 554  60.39945 43.05399  77.74492
## 555  72.38912 55.04366  89.73459
## 556  52.69181 35.33808  70.04553
## 557  44.12775 26.75727  61.49824
## 558  65.53788 48.19433  82.88143
## 559  69.81991 52.47576  87.16405
## 560  48.40978 31.04867  65.77089
## 561  46.69697 29.33235  64.06159
## 562  60.39945 43.05399  77.74492
## 563  63.82507 46.48120  81.16894
## 564  60.39945 43.05399  77.74492
## 565  88.66082 71.29035 106.03129
## 566  73.24553 55.89947  90.59159
## 567  56.11743 38.76817  73.46668
## 568  74.95834 57.61084  92.30584
## 569  39.84573 22.46389  57.22757
## 570  69.81991 52.47576  87.16405
## 571  62.11226 44.76776  79.45677
## 572  85.23520 67.87238 102.59802
## 573  50.12259 32.76467  67.48051
## 574  74.95834 57.61084  92.30584
## 575  53.54821 36.19572  70.90070
## 576  81.80958 64.45314  99.16601
## 577  51.83540 34.48036  69.19045
## 578  58.68664 41.33990  76.03338
## 579  68.10710 50.76343  85.45076
## 580  49.26619 31.90671  66.62566
## 581  73.24553 55.89947  90.59159
## 582  68.96350 51.61964  86.30737
## 583  66.39429 49.05078  83.73779
## 584  74.95834 57.61084  92.30584
## 585  79.24036 61.88788  96.59285
## 586  57.83024 40.48274  75.17774
## 587  69.81991 52.47576  87.16405
## 588  89.51722 72.14464 106.88981
## 589  81.80958 64.45314  99.16601
## 590  68.96350 51.61964  86.30737
## 591  74.10193 56.75519  91.44867
## 592  88.66082 71.29035 106.03129
## 593  69.81991 52.47576  87.16405
## 594  90.37363 72.99885 107.74841
## 595  61.25586 43.91091  78.60080
## 596  53.54821 36.19572  70.90070
## 597  80.09677 62.74305  97.45049
## 598  50.97900 33.62255  68.33544
## 599  41.55854 24.18148  58.93560
## 600  80.95317 63.59813  98.30821
## 601  61.25586 43.91091  78.60080
## 602  68.10710 50.76343  85.45076
## 603  50.12259 32.76467  67.48051
## 604  71.53272 54.18777  88.87766
## 605  86.94801 69.58152 104.31450
## 606  36.42011 19.02775  53.81246
## 607  78.38396 61.03263  95.73529
## 608  68.96350 51.61964  86.30737
## 609  52.69181 35.33808  70.04553
## 610  69.81991 52.47576  87.16405
## 611  52.69181 35.33808  70.04553
## 612  76.67115 59.32189  94.02040
## 613  63.82507 46.48120  81.16894
## 614  74.10193 56.75519  91.44867
## 615  70.67631 53.33181  88.02082
## 616  47.55338 30.19055  64.91620
## 617  86.94801 69.58152 104.31450
## 618  63.82507 46.48120  81.16894
## 619  58.68664 41.33990  76.03338
## 620  63.82507 46.48120  81.16894
## 621  62.11226 44.76776  79.45677
## 622  47.55338 30.19055  64.91620
## 623  80.09677 62.74305  97.45049
## 624  79.24036 61.88788  96.59285
## 625  77.52755 60.17730  94.87780
## 626  57.83024 40.48274  75.17774
## 627  91.23003 73.85299 108.60708
## 628  80.95317 63.59813  98.30821
## 629  73.24553 55.89947  90.59159
## 630  57.83024 40.48274  75.17774
## 631  74.10193 56.75519  91.44867
## 632  64.68148 47.33781  82.02514
## 633  62.11226 44.76776  79.45677
## 634  56.11743 38.76817  73.46668
## 635  92.94284 75.56101 110.32468
## 636  79.24036 61.88788  96.59285
## 637  55.26102 37.91077  72.61128
## 638  64.68148 47.33781  82.02514
## 639  77.52755 60.17730  94.87780
## 640  62.96867 45.62452  80.31281
## 641  81.80958 64.45314  99.16601
## 642  68.96350 51.61964  86.30737
## 643  63.82507 46.48120  81.16894
## 644  62.11226 44.76776  79.45677
## 645  48.40978 31.04867  65.77089
## 646  65.53788 48.19433  82.88143
## 647  73.24553 55.89947  90.59159
## 648  67.25069 49.90715  84.59424
## 649  80.09677 62.74305  97.45049
## 650  44.12775 26.75727  61.49824
## 651  73.24553 55.89947  90.59159
## 652  68.10710 50.76343  85.45076
## 653  92.94284 75.56101 110.32468
## 654  48.40978 31.04867  65.77089
## 655  58.68664 41.33990  76.03338
## 656  78.38396 61.03263  95.73529
## 657  65.53788 48.19433  82.88143
## 658  68.96350 51.61964  86.30737
## 659  73.24553 55.89947  90.59159
## 660  45.84057 28.47407  63.20706
## 661  83.52239 66.16292 100.88186
## 662  62.96867 45.62452  80.31281
## 663  88.66082 71.29035 106.03129
## 664  74.10193 56.75519  91.44867
## 665  73.24553 55.89947  90.59159
## 666  67.25069 49.90715  84.59424
## 667  76.67115 59.32189  94.02040
## 668  61.25586 43.91091  78.60080
## 669  52.69181 35.33808  70.04553
## 670  49.26619 31.90671  66.62566
## 671  44.12775 26.75727  61.49824
## 672  79.24036 61.88788  96.59285
## 673  47.55338 30.19055  64.91620
## 674  67.25069 49.90715  84.59424
## 675  55.26102 37.91077  72.61128
## 676  66.39429 49.05078  83.73779
## 677  59.54305 42.19698  76.88911
## 678  68.96350 51.61964  86.30737
## 679  69.81991 52.47576  87.16405
## 680  59.54305 42.19698  76.88911
## 681  49.26619 31.90671  66.62566
## 682  51.83540 34.48036  69.19045
## 683  75.81474 58.46641  93.16308
## 684  68.10710 50.76343  85.45076
## 685  73.24553 55.89947  90.59159
## 686  55.26102 37.91077  72.61128
## 687  66.39429 49.05078  83.73779
## 688  66.39429 49.05078  83.73779
## 689  59.54305 42.19698  76.88911
## 690  30.42527 13.01147  47.83908
## 691  86.09160 68.72699 103.45622
## 692  79.24036 61.88788  96.59285
## 693  82.66598 65.30807 100.02390
## 694  56.11743 38.76817  73.46668
## 695  88.66082 71.29035 106.03129
## 696  61.25586 43.91091  78.60080
## 697  62.11226 44.76776  79.45677
## 698  72.38912 55.04366  89.73459
## 699  77.52755 60.17730  94.87780
## 700  66.39429 49.05078  83.73779
## 701  40.70213 23.32273  58.08154
## 702  38.98932 21.60497  56.37367
## 703  67.25069 49.90715  84.59424
## 704  68.96350 51.61964  86.30737
## 705  67.25069 49.90715  84.59424
## 706  60.39945 43.05399  77.74492
## 707  92.94284 75.56101 110.32468
## 708  80.95317 63.59813  98.30821
## 709  74.95834 57.61084  92.30584
## 710  67.25069 49.90715  84.59424
## 711  62.11226 44.76776  79.45677
## 712  80.95317 63.59813  98.30821
## 713  38.98932 21.60497  56.37367
## 714  56.11743 38.76817  73.46668
## 715  70.67631 53.33181  88.02082
## 716  63.82507 46.48120  81.16894
## 717  80.95317 63.59813  98.30821
## 718  44.12775 26.75727  61.49824
## 719  62.11226 44.76776  79.45677
## 720  46.69697 29.33235  64.06159
## 721  50.12259 32.76467  67.48051
## 722  86.09160 68.72699 103.45622
## 723  56.11743 38.76817  73.46668
## 724  62.11226 44.76776  79.45677
## 725  60.39945 43.05399  77.74492
## 726  47.55338 30.19055  64.91620
## 727  79.24036 61.88788  96.59285
## 728  65.53788 48.19433  82.88143
## 729  65.53788 48.19433  82.88143
## 730  38.13292 20.74598  55.51986
## 731  81.80958 64.45314  99.16601
## 732  67.25069 49.90715  84.59424
## 733  85.23520 67.87238 102.59802
## 734  65.53788 48.19433  82.88143
## 735  56.97383 39.62549  74.32217
## 736  80.95317 63.59813  98.30821
## 737  83.52239 66.16292 100.88186
## 738  77.52755 60.17730  94.87780
## 739  69.81991 52.47576  87.16405
## 740  66.39429 49.05078  83.73779
## 741  52.69181 35.33808  70.04553
## 742  62.96867 45.62452  80.31281
## 743  84.37879 67.01769 101.73990
## 744  89.51722 72.14464 106.88981
## 745  80.09677 62.74305  97.45049
## 746  68.96350 51.61964  86.30737
## 747  44.12775 26.75727  61.49824
## 748  85.23520 67.87238 102.59802
## 749  92.08644 74.70704 109.46584
## 750  65.53788 48.19433  82.88143
## 751  72.38912 55.04366  89.73459
## 752  86.94801 69.58152 104.31450
## 753  60.39945 43.05399  77.74492
## 754  57.83024 40.48274  75.17774
## 755  92.94284 75.56101 110.32468
## 756  79.24036 61.88788  96.59285
## 757  82.66598 65.30807 100.02390
## 758  61.25586 43.91091  78.60080
## 759  62.96867 45.62452  80.31281
## 760  82.66598 65.30807 100.02390
## 761  66.39429 49.05078  83.73779
## 762  74.95834 57.61084  92.30584
## 763  57.83024 40.48274  75.17774
## 764  83.52239 66.16292 100.88186
## 765  72.38912 55.04366  89.73459
## 766  52.69181 35.33808  70.04553
## 767  63.82507 46.48120  81.16894
## 768  78.38396 61.03263  95.73529
## 769  48.40978 31.04867  65.77089
## 770  58.68664 41.33990  76.03338
## 771  69.81991 52.47576  87.16405
## 772  80.95317 63.59813  98.30821
## 773  72.38912 55.04366  89.73459
## 774  80.09677 62.74305  97.45049
## 775  65.53788 48.19433  82.88143
## 776  39.84573 22.46389  57.22757
## 777  43.27135 25.89876  60.64394
## 778  68.96350 51.61964  86.30737
## 779  51.83540 34.48036  69.19045
## 780  50.97900 33.62255  68.33544
## 781  92.94284 75.56101 110.32468
## 782  76.67115 59.32189  94.02040
## 783  81.80958 64.45314  99.16601
## 784  58.68664 41.33990  76.03338
## 785  74.10193 56.75519  91.44867
## 786  51.83540 34.48036  69.19045
## 787  68.96350 51.61964  86.30737
## 788  79.24036 61.88788  96.59285
## 789  60.39945 43.05399  77.74492
## 790  57.83024 40.48274  75.17774
## 791  74.10193 56.75519  91.44867
## 792  62.96867 45.62452  80.31281
## 793  71.53272 54.18777  88.87766
## 794  65.53788 48.19433  82.88143
## 795  82.66598 65.30807 100.02390
## 796  50.12259 32.76467  67.48051
## 797  84.37879 67.01769 101.73990
## 798  59.54305 42.19698  76.88911
## 799  54.40462 37.05328  71.75595
## 800  51.83540 34.48036  69.19045
## 801  79.24036 61.88788  96.59285
## 802  62.96867 45.62452  80.31281
## 803  87.80441 70.43597 105.17285
## 804  48.40978 31.04867  65.77089
## 805  66.39429 49.05078  83.73779
## 806  54.40462 37.05328  71.75595
## 807  68.10710 50.76343  85.45076
## 808  68.96350 51.61964  86.30737
## 809  82.66598 65.30807 100.02390
## 810  58.68664 41.33990  76.03338
## 811  50.97900 33.62255  68.33544
## 812  62.96867 45.62452  80.31281
## 813  60.39945 43.05399  77.74492
## 814  62.11226 44.76776  79.45677
## 815  88.66082 71.29035 106.03129
## 816  55.26102 37.91077  72.61128
## 817  92.08644 74.70704 109.46584
## 818  72.38912 55.04366  89.73459
## 819  74.10193 56.75519  91.44867
## 820  71.53272 54.18777  88.87766
## 821  77.52755 60.17730  94.87780
## 822  61.25586 43.91091  78.60080
## 823  71.53272 54.18777  88.87766
## 824  63.82507 46.48120  81.16894
## 825  74.95834 57.61084  92.30584
## 826  92.94284 75.56101 110.32468
## 827  89.51722 72.14464 106.88981
## 828  79.24036 61.88788  96.59285
## 829  75.81474 58.46641  93.16308
## 830  34.70730 17.30921  52.10539
## 831  41.55854 24.18148  58.93560
## 832  50.97900 33.62255  68.33544
## 833  38.13292 20.74598  55.51986
## 834  78.38396 61.03263  95.73529
## 835  74.95834 57.61084  92.30584
## 836  76.67115 59.32189  94.02040
## 837  67.25069 49.90715  84.59424
## 838  67.25069 49.90715  84.59424
## 839  67.25069 49.90715  84.59424
## 840  79.24036 61.88788  96.59285
## 841  48.40978 31.04867  65.77089
## 842  69.81991 52.47576  87.16405
## 843  90.37363 72.99885 107.74841
## 844  76.67115 59.32189  94.02040
## 845  71.53272 54.18777  88.87766
## 846  63.82507 46.48120  81.16894
## 847  55.26102 37.91077  72.61128
## 848  66.39429 49.05078  83.73779
## 849  83.52239 66.16292 100.88186
## 850  67.25069 49.90715  84.59424
## 851  78.38396 61.03263  95.73529
## 852  69.81991 52.47576  87.16405
## 853  58.68664 41.33990  76.03338
## 854  68.96350 51.61964  86.30737
## 855  87.80441 70.43597 105.17285
## 856  90.37363 72.99885 107.74841
## 857  56.11743 38.76817  73.46668
## 858  92.94284 75.56101 110.32468
## 859  80.09677 62.74305  97.45049
## 860  79.24036 61.88788  96.59285
## 861  86.09160 68.72699 103.45622
## 862  79.24036 61.88788  96.59285
## 863  76.67115 59.32189  94.02040
## 864  68.10710 50.76343  85.45076
## 865  74.10193 56.75519  91.44867
## 866  70.67631 53.33181  88.02082
## 867  56.11743 38.76817  73.46668
## 868  80.09677 62.74305  97.45049
## 869  60.39945 43.05399  77.74492
## 870  58.68664 41.33990  76.03338
## 871  53.54821 36.19572  70.90070
## 872  44.98416 27.61571  62.35261
## 873  79.24036 61.88788  96.59285
## 874  56.11743 38.76817  73.46668
## 875  66.39429 49.05078  83.73779
## 876  57.83024 40.48274  75.17774
## 877  54.40462 37.05328  71.75595
## 878  62.96867 45.62452  80.31281
## 879  62.11226 44.76776  79.45677
## 880  48.40978 31.04867  65.77089
## 881  72.38912 55.04366  89.73459
## 882  76.67115 59.32189  94.02040
## 883  60.39945 43.05399  77.74492
## 884  74.10193 56.75519  91.44867
## 885  72.38912 55.04366  89.73459
## 886  31.28168 13.87118  48.69218
## 887  69.81991 52.47576  87.16405
## 888  70.67631 53.33181  88.02082
## 889  56.97383 39.62549  74.32217
## 890  74.95834 57.61084  92.30584
## 891  56.11743 38.76817  73.46668
## 892  68.10710 50.76343  85.45076
## 893  43.27135 25.89876  60.64394
## 894  40.70213 23.32273  58.08154
## 895  73.24553 55.89947  90.59159
## 896  82.66598 65.30807 100.02390
## 897  61.25586 43.91091  78.60080
## 898  64.68148 47.33781  82.02514
## 899  72.38912 55.04366  89.73459
## 900  33.85089 16.44982  51.25197
## 901  53.54821 36.19572  70.90070
## 902  66.39429 49.05078  83.73779
## 903  66.39429 49.05078  83.73779
## 904  59.54305 42.19698  76.88911
## 905  67.25069 49.90715  84.59424
## 906  77.52755 60.17730  94.87780
## 907  76.67115 59.32189  94.02040
## 908  64.68148 47.33781  82.02514
## 909  44.98416 27.61571  62.35261
## 910  63.82507 46.48120  81.16894
## 911  60.39945 43.05399  77.74492
## 912  62.11226 44.76776  79.45677
## 913  62.11226 44.76776  79.45677
## 914  65.53788 48.19433  82.88143
## 915  60.39945 43.05399  77.74492
## 916  67.25069 49.90715  84.59424
## 917  68.96350 51.61964  86.30737
## 918  69.81991 52.47576  87.16405
## 919  65.53788 48.19433  82.88143
## 920  74.10193 56.75519  91.44867
## 921  56.97383 39.62549  74.32217
## 922  69.81991 52.47576  87.16405
## 923  54.40462 37.05328  71.75595
## 924  61.25586 43.91091  78.60080
## 925  64.68148 47.33781  82.02514
## 926  60.39945 43.05399  77.74492
## 927  68.96350 51.61964  86.30737
## 928  68.10710 50.76343  85.45076
## 929  54.40462 37.05328  71.75595
## 930  70.67631 53.33181  88.02082
## 931  78.38396 61.03263  95.73529
## 932  49.26619 31.90671  66.62566
## 933  75.81474 58.46641  93.16308
## 934  63.82507 46.48120  81.16894
## 935  62.11226 44.76776  79.45677
## 936  73.24553 55.89947  90.59159
## 937  44.98416 27.61571  62.35261
## 938  50.12259 32.76467  67.48051
## 939  35.56370 18.16852  52.95889
## 940  59.54305 42.19698  76.88911
## 941  74.95834 57.61084  92.30584
## 942  71.53272 54.18777  88.87766
## 943  74.95834 57.61084  92.30584
## 944  68.10710 50.76343  85.45076
## 945  68.96350 51.61964  86.30737
## 946  59.54305 42.19698  76.88911
## 947  60.39945 43.05399  77.74492
## 948  62.96867 45.62452  80.31281
## 949  50.12259 32.76467  67.48051
## 950  58.68664 41.33990  76.03338
## 951  81.80958 64.45314  99.16601
## 952  67.25069 49.90715  84.59424
## 953  61.25586 43.91091  78.60080
## 954  57.83024 40.48274  75.17774
## 955  61.25586 43.91091  78.60080
## 956  72.38912 55.04366  89.73459
## 957  71.53272 54.18777  88.87766
## 958  51.83540 34.48036  69.19045
## 959  57.83024 40.48274  75.17774
## 960  79.24036 61.88788  96.59285
## 961  56.97383 39.62549  74.32217
## 962  80.95317 63.59813  98.30821
## 963  46.69697 29.33235  64.06159
## 964  59.54305 42.19698  76.88911
## 965  78.38396 61.03263  95.73529
## 966  81.80958 64.45314  99.16601
## 967  69.81991 52.47576  87.16405
## 968  92.94284 75.56101 110.32468
## 969  50.97900 33.62255  68.33544
## 970  56.11743 38.76817  73.46668
## 971  92.94284 75.56101 110.32468
## 972  50.97900 33.62255  68.33544
## 973  73.24553 55.89947  90.59159
## 974  68.10710 50.76343  85.45076
## 975  57.83024 40.48274  75.17774
## 976  72.38912 55.04366  89.73459
## 977  32.13808 14.73080  49.54536
## 978  54.40462 37.05328  71.75595
## 979  50.97900 33.62255  68.33544
## 980  62.96867 45.62452  80.31281
## 981  50.12259 32.76467  67.48051
## 982  48.40978 31.04867  65.77089
## 983  74.95834 57.61084  92.30584
## 984  50.12259 32.76467  67.48051
## 985  68.10710 50.76343  85.45076
## 986  69.81991 52.47576  87.16405
## 987  79.24036 61.88788  96.59285
## 988  74.10193 56.75519  91.44867
## 989  72.38912 55.04366  89.73459
## 990  58.68664 41.33990  76.03338
## 991  54.40462 37.05328  71.75595
## 992  86.94801 69.58152 104.31450
## 993  61.25586 43.91091  78.60080
## 994  53.54821 36.19572  70.90070
## 995  77.52755 60.17730  94.87780
## 996  67.25069 49.90715  84.59424
## 997  85.23520 67.87238 102.59802
## 998  37.27651 19.88691  54.66612
## 999  70.67631 53.33181  88.02082
## 1000 58.68664 41.33990  76.03338

Predicciones y sus Intervalos de Confianza

predict(modelo_RL_Simple, data.frame(seq(1,1000)), interval='confidence', level = 0.95)
##           fit      lwr      upr
## 1    64.68148 64.12826 65.23469
## 2    57.83024 57.16763 58.49284
## 3    58.68664 58.04420 59.32908
## 4    74.10193 73.45957 74.74430
## 5    69.81991 69.25190 70.38792
## 6    73.24553 72.62176 73.86930
## 7    57.83024 57.16763 58.49284
## 8    82.66598 81.77135 83.56062
## 9    55.26102 54.52984 55.99220
## 10   43.27135 42.12667 44.41603
## 11   78.38396 77.62774 79.14018
## 12   81.80958 80.94406 82.67510
## 13   81.80958 80.94406 82.67510
## 14   70.67631 70.09744 71.25519
## 15   81.80958 80.94406 82.67510
## 16   59.54305 58.91920 60.16689
## 17   47.55338 46.56801 48.53874
## 18   60.39945 59.79249 61.00641
## 19   44.98416 43.90423 46.06409
## 20   34.70730 33.22516 36.18943
## 21   72.38912 71.78223 72.99602
## 22   51.83540 50.99823 52.67257
## 23   66.39429 65.84611 66.94246
## 24   54.40462 53.64829 55.16094
## 25   39.84573 38.56838 41.12308
## 26   45.84057 44.79253 46.88860
## 27   58.68664 58.04420 59.32908
## 28   65.53788 64.98844 66.08732
## 29   83.52239 82.59807 84.44671
## 30   53.54821 52.76578 54.33064
## 31   74.95834 74.29581 75.62086
## 32   70.67631 70.09744 71.25519
## 33   42.41494 41.23746 43.59243
## 34   62.96867 62.40062 63.53671
## 35   82.66598 81.77135 83.56062
## 36   70.67631 70.09744 71.25519
## 37   73.24553 72.62176 73.86930
## 38   62.96867 62.40062 63.53671
## 39   65.53788 64.98844 66.08732
## 40   76.67115 75.96414 77.37816
## 41   71.53272 70.94084 72.12460
## 42   64.68148 64.12826 65.23469
## 43   74.95834 74.29581 75.62086
## 44   67.25069 66.70126 67.80012
## 45   82.66598 81.77135 83.56062
## 46   46.69697 45.68047 47.71347
## 47   61.25586 60.66392 61.84779
## 48   72.38912 71.78223 72.99602
## 49   68.96350 68.40409 69.52292
## 50   61.25586 60.66392 61.84779
## 51   65.53788 64.98844 66.08732
## 52   56.97383 56.28962 57.65804
## 53   76.67115 75.96414 77.37816
## 54   52.69181 51.88240 53.50121
## 55   56.11743 55.41032 56.82453
## 56   58.68664 58.04420 59.32908
## 57   75.81474 75.13063 76.49886
## 58   81.80958 80.94406 82.67510
## 59   59.54305 58.91920 60.16689
## 60   50.97900 50.11336 51.84463
## 61   63.82507 63.26563 64.38452
## 62   61.25586 60.66392 61.84779
## 63   64.68148 64.12826 65.23469
## 64   77.52755 76.79647 78.25864
## 65   86.94801 85.90010 87.99591
## 66   70.67631 70.09744 71.25519
## 67   58.68664 58.04420 59.32908
## 68   46.69697 45.68047 47.71347
## 69   62.11226 61.53334 62.69118
## 70   62.11226 61.53334 62.69118
## 71   65.53788 64.98844 66.08732
## 72   51.83540 50.99823 52.67257
## 73   67.25069 66.70126 67.80012
## 74   72.38912 71.78223 72.99602
## 75   72.38912 71.78223 72.99602
## 76   73.24553 72.62176 73.86930
## 77   61.25586 60.66392 61.84779
## 78   85.23520 84.24996 86.22044
## 79   69.81991 69.25190 70.38792
## 80   44.12775 43.01560 45.23991
## 81   57.83024 57.16763 58.49284
## 82   39.84573 38.56838 41.12308
## 83   57.83024 57.16763 58.49284
## 84   72.38912 71.78223 72.99602
## 85   42.41494 41.23746 43.59243
## 86   68.10710 67.55390 68.66029
## 87   72.38912 71.78223 72.99602
## 88   86.94801 85.90010 87.99591
## 89   51.83540 50.99823 52.67257
## 90   72.38912 71.78223 72.99602
## 91   47.55338 46.56801 48.53874
## 92   68.10710 67.55390 68.66029
## 93   76.67115 75.96414 77.37816
## 94   81.80958 80.94406 82.67510
## 95   69.81991 69.25190 70.38792
## 96   61.25586 60.66392 61.84779
## 97   92.94284 91.66563 94.22006
## 98   51.83540 50.99823 52.67257
## 99   50.12259 49.22784 51.01734
## 100  53.54821 52.76578 54.33064
## 101  59.54305 58.91920 60.16689
## 102  74.10193 73.45957 74.74430
## 103  74.10193 73.45957 74.74430
## 104  64.68148 64.12826 65.23469
## 105  56.97383 56.28962 57.65804
## 106  74.10193 73.45957 74.74430
## 107  70.67631 70.09744 71.25519
## 108  39.84573 38.56838 41.12308
## 109  74.10193 73.45957 74.74430
## 110  35.56370 34.11608 37.01133
## 111  82.66598 81.77135 83.56062
## 112  51.83540 50.99823 52.67257
## 113  77.52755 76.79647 78.25864
## 114  36.42011 35.00686 37.83336
## 115  72.38912 71.78223 72.99602
## 116  74.95834 74.29581 75.62086
## 117  59.54305 58.91920 60.16689
## 118  56.11743 55.41032 56.82453
## 119  67.25069 66.70126 67.80012
## 120  84.37879 83.42425 85.33334
## 121  68.10710 67.55390 68.66029
## 122  81.80958 80.94406 82.67510
## 123  52.69181 51.88240 53.50121
## 124  44.12775 43.01560 45.23991
## 125  74.10193 73.45957 74.74430
## 126  53.54821 52.76578 54.33064
## 127  68.10710 67.55390 68.66029
## 128  51.83540 50.99823 52.67257
## 129  79.24036 78.45804 80.02269
## 130  88.66082 87.54880 89.77284
## 131  71.53272 70.94084 72.12460
## 132  67.25069 66.70126 67.80012
## 133  61.25586 60.66392 61.84779
## 134  54.40462 53.64829 55.16094
## 135  53.54821 52.76578 54.33064
## 136  74.10193 73.45957 74.74430
## 137  76.67115 75.96414 77.37816
## 138  63.82507 63.26563 64.38452
## 139  44.98416 43.90423 46.06409
## 140  68.96350 68.40409 69.52292
## 141  61.25586 60.66392 61.84779
## 142  73.24553 72.62176 73.86930
## 143  78.38396 77.62774 79.14018
## 144  60.39945 59.79249 61.00641
## 145  68.10710 67.55390 68.66029
## 146  56.11743 55.41032 56.82453
## 147  59.54305 58.91920 60.16689
## 148  54.40462 53.64829 55.16094
## 149  92.94284 91.66563 94.22006
## 150  44.98416 43.90423 46.06409
## 151  74.10193 73.45957 74.74430
## 152  64.68148 64.12826 65.23469
## 153  74.95834 74.29581 75.62086
## 154  63.82507 63.26563 64.38452
## 155  61.25586 60.66392 61.84779
## 156  44.98416 43.90423 46.06409
## 157  62.11226 61.53334 62.69118
## 158  81.80958 80.94406 82.67510
## 159  88.66082 87.54880 89.77284
## 160  74.10193 73.45957 74.74430
## 161  91.23003 90.01962 92.44045
## 162  61.25586 60.66392 61.84779
## 163  86.09160 85.07523 87.10798
## 164  71.53272 70.94084 72.12460
## 165  68.96350 68.40409 69.52292
## 166  81.80958 80.94406 82.67510
## 167  62.11226 61.53334 62.69118
## 168  62.11226 61.53334 62.69118
## 169  84.37879 83.42425 85.33334
## 170  80.09677 79.28747 80.90606
## 171  58.68664 58.04420 59.32908
## 172  68.10710 67.55390 68.66029
## 173  63.82507 63.26563 64.38452
## 174  62.11226 61.53334 62.69118
## 175  70.67631 70.09744 71.25519
## 176  55.26102 54.52984 55.99220
## 177  55.26102 54.52984 55.99220
## 178  52.69181 51.88240 53.50121
## 179  86.94801 85.90010 87.99591
## 180  81.80958 80.94406 82.67510
## 181  60.39945 59.79249 61.00641
## 182  51.83540 50.99823 52.67257
## 183  88.66082 87.54880 89.77284
## 184  78.38396 77.62774 79.14018
## 185  80.09677 79.28747 80.90606
## 186  92.94284 91.66563 94.22006
## 187  73.24553 72.62176 73.86930
## 188  59.54305 58.91920 60.16689
## 189  62.96867 62.40062 63.53671
## 190  61.25586 60.66392 61.84779
## 191  56.11743 55.41032 56.82453
## 192  50.97900 50.11336 51.84463
## 193  60.39945 59.79249 61.00641
## 194  85.23520 84.24996 86.22044
## 195  62.11226 61.53334 62.69118
## 196  49.26619 48.34174 50.19063
## 197  46.69697 45.68047 47.71347
## 198  56.11743 55.41032 56.82453
## 199  60.39945 59.79249 61.00641
## 200  61.25586 60.66392 61.84779
## 201  61.25586 60.66392 61.84779
## 202  53.54821 52.76578 54.33064
## 203  62.11226 61.53334 62.69118
## 204  62.11226 61.53334 62.69118
## 205  78.38396 77.62774 79.14018
## 206  70.67631 70.09744 71.25519
## 207  74.10193 73.45957 74.74430
## 208  74.10193 73.45957 74.74430
## 209  80.95317 80.11612 81.79023
## 210  60.39945 59.79249 61.00641
## 211  66.39429 65.84611 66.94246
## 212  82.66598 81.77135 83.56062
## 213  71.53272 70.94084 72.12460
## 214  63.82507 63.26563 64.38452
## 215  75.81474 75.13063 76.49886
## 216  56.11743 55.41032 56.82453
## 217  68.96350 68.40409 69.52292
## 218  76.67115 75.96414 77.37816
## 219  57.83024 57.16763 58.49284
## 220  59.54305 58.91920 60.16689
## 221  84.37879 83.42425 85.33334
## 222  66.39429 65.84611 66.94246
## 223  48.40978 47.45512 49.36444
## 224  73.24553 72.62176 73.86930
## 225  87.80441 86.72462 88.88421
## 226  66.39429 65.84611 66.94246
## 227  38.13292 36.78796 39.47788
## 228  68.10710 67.55390 68.66029
## 229  75.81474 75.13063 76.49886
## 230  78.38396 77.62774 79.14018
## 231  84.37879 83.42425 85.33334
## 232  71.53272 70.94084 72.12460
## 233  44.98416 43.90423 46.06409
## 234  70.67631 70.09744 71.25519
## 235  74.95834 74.29581 75.62086
## 236  85.23520 84.24996 86.22044
## 237  65.53788 64.98844 66.08732
## 238  88.66082 87.54880 89.77284
## 239  60.39945 59.79249 61.00641
## 240  71.53272 70.94084 72.12460
## 241  79.24036 78.45804 80.02269
## 242  72.38912 71.78223 72.99602
## 243  62.11226 61.53334 62.69118
## 244  62.96867 62.40062 63.53671
## 245  36.42011 35.00686 37.83336
## 246  70.67631 70.09744 71.25519
## 247  51.83540 50.99823 52.67257
## 248  68.10710 67.55390 68.66029
## 249  53.54821 52.76578 54.33064
## 250  78.38396 77.62774 79.14018
## 251  67.25069 66.70126 67.80012
## 252  62.96867 62.40062 63.53671
## 253  61.25586 60.66392 61.84779
## 254  72.38912 71.78223 72.99602
## 255  59.54305 58.91920 60.16689
## 256  63.82507 63.26563 64.38452
## 257  74.10193 73.45957 74.74430
## 258  68.10710 67.55390 68.66029
## 259  74.95834 74.29581 75.62086
## 260  81.80958 80.94406 82.67510
## 261  68.96350 68.40409 69.52292
## 262  46.69697 45.68047 47.71347
## 263  55.26102 54.52984 55.99220
## 264  63.82507 63.26563 64.38452
## 265  77.52755 76.79647 78.25864
## 266  68.10710 67.55390 68.66029
## 267  69.81991 69.25190 70.38792
## 268  72.38912 71.78223 72.99602
## 269  56.97383 56.28962 57.65804
## 270  69.81991 69.25190 70.38792
## 271  68.96350 68.40409 69.52292
## 272  66.39429 65.84611 66.94246
## 273  68.10710 67.55390 68.66029
## 274  92.94284 91.66563 94.22006
## 275  86.94801 85.90010 87.99591
## 276  78.38396 77.62774 79.14018
## 277  68.96350 68.40409 69.52292
## 278  73.24553 72.62176 73.86930
## 279  49.26619 48.34174 50.19063
## 280  69.81991 69.25190 70.38792
## 281  76.67115 75.96414 77.37816
## 282  92.94284 91.66563 94.22006
## 283  62.96867 62.40062 63.53671
## 284  43.27135 42.12667 44.41603
## 285  49.26619 48.34174 50.19063
## 286  75.81474 75.13063 76.49886
## 287  83.52239 82.59807 84.44671
## 288  48.40978 47.45512 49.36444
## 289  68.10710 67.55390 68.66029
## 290  61.25586 60.66392 61.84779
## 291  70.67631 70.09744 71.25519
## 292  73.24553 72.62176 73.86930
## 293  68.10710 67.55390 68.66029
## 294  71.53272 70.94084 72.12460
## 295  58.68664 58.04420 59.32908
## 296  78.38396 77.62774 79.14018
## 297  47.55338 46.56801 48.53874
## 298  56.97383 56.28962 57.65804
## 299  56.97383 56.28962 57.65804
## 300  44.12775 43.01560 45.23991
## 301  31.28168 29.66030 32.90305
## 302  40.70213 39.45830 41.94597
## 303  60.39945 59.79249 61.00641
## 304  65.53788 64.98844 66.08732
## 305  61.25586 60.66392 61.84779
## 306  56.11743 55.41032 56.82453
## 307  59.54305 58.91920 60.16689
## 308  61.25586 60.66392 61.84779
## 309  76.67115 75.96414 77.37816
## 310  75.81474 75.13063 76.49886
## 311  66.39429 65.84611 66.94246
## 312  56.11743 55.41032 56.82453
## 313  48.40978 47.45512 49.36444
## 314  74.10193 73.45957 74.74430
## 315  65.53788 64.98844 66.08732
## 316  81.80958 80.94406 82.67510
## 317  64.68148 64.12826 65.23469
## 318  78.38396 77.62774 79.14018
## 319  80.95317 80.11612 81.79023
## 320  80.09677 79.28747 80.90606
## 321  55.26102 54.52984 55.99220
## 322  78.38396 77.62774 79.14018
## 323  56.97383 56.28962 57.65804
## 324  78.38396 77.62774 79.14018
## 325  79.24036 78.45804 80.02269
## 326  62.96867 62.40062 63.53671
## 327  75.81474 75.13063 76.49886
## 328  66.39429 65.84611 66.94246
## 329  58.68664 58.04420 59.32908
## 330  61.25586 60.66392 61.84779
## 331  66.39429 65.84611 66.94246
## 332  84.37879 83.42425 85.33334
## 333  53.54821 52.76578 54.33064
## 334  78.38396 77.62774 79.14018
## 335  44.12775 43.01560 45.23991
## 336  72.38912 71.78223 72.99602
## 337  65.53788 64.98844 66.08732
## 338  46.69697 45.68047 47.71347
## 339  65.53788 64.98844 66.08732
## 340  69.81991 69.25190 70.38792
## 341  59.54305 58.91920 60.16689
## 342  52.69181 51.88240 53.50121
## 343  60.39945 59.79249 61.00641
## 344  67.25069 66.70126 67.80012
## 345  75.81474 75.13063 76.49886
## 346  58.68664 58.04420 59.32908
## 347  74.95834 74.29581 75.62086
## 348  74.10193 73.45957 74.74430
## 349  56.97383 56.28962 57.65804
## 350  82.66598 81.77135 83.56062
## 351  62.11226 61.53334 62.69118
## 352  50.12259 49.22784 51.01734
## 353  74.10193 73.45957 74.74430
## 354  68.10710 67.55390 68.66029
## 355  71.53272 70.94084 72.12460
## 356  53.54821 52.76578 54.33064
## 357  68.10710 67.55390 68.66029
## 358  58.68664 58.04420 59.32908
## 359  70.67631 70.09744 71.25519
## 360  51.83540 50.99823 52.67257
## 361  84.37879 83.42425 85.33334
## 362  52.69181 51.88240 53.50121
## 363  61.25586 60.66392 61.84779
## 364  78.38396 77.62774 79.14018
## 365  68.10710 67.55390 68.66029
## 366  62.11226 61.53334 62.69118
## 367  59.54305 58.91920 60.16689
## 368  64.68148 64.12826 65.23469
## 369  62.11226 61.53334 62.69118
## 370  71.53272 70.94084 72.12460
## 371  68.96350 68.40409 69.52292
## 372  68.10710 67.55390 68.66029
## 373  62.96867 62.40062 63.53671
## 374  52.69181 51.88240 53.50121
## 375  83.52239 82.59807 84.44671
## 376  71.53272 70.94084 72.12460
## 377  85.23520 84.24996 86.22044
## 378  53.54821 52.76578 54.33064
## 379  81.80958 80.94406 82.67510
## 380  84.37879 83.42425 85.33334
## 381  50.97900 50.11336 51.84463
## 382  78.38396 77.62774 79.14018
## 383  74.10193 73.45957 74.74430
## 384  79.24036 78.45804 80.02269
## 385  80.95317 80.11612 81.79023
## 386  80.95317 80.11612 81.79023
## 387  56.11743 55.41032 56.82453
## 388  59.54305 58.91920 60.16689
## 389  77.52755 76.79647 78.25864
## 390  75.81474 75.13063 76.49886
## 391  60.39945 59.79249 61.00641
## 392  55.26102 54.52984 55.99220
## 393  32.13808 30.55168 33.72449
## 394  56.97383 56.28962 57.65804
## 395  57.83024 57.16763 58.49284
## 396  74.10193 73.45957 74.74430
## 397  92.94284 91.66563 94.22006
## 398  75.81474 75.13063 76.49886
## 399  69.81991 69.25190 70.38792
## 400  67.25069 66.70126 67.80012
## 401  69.81991 69.25190 70.38792
## 402  68.10710 67.55390 68.66029
## 403  70.67631 70.09744 71.25519
## 404  61.25586 60.66392 61.84779
## 405  73.24553 72.62176 73.86930
## 406  59.54305 58.91920 60.16689
## 407  86.09160 85.07523 87.10798
## 408  62.11226 61.53334 62.69118
## 409  49.26619 48.34174 50.19063
## 410  71.53272 70.94084 72.12460
## 411  68.96350 68.40409 69.52292
## 412  71.53272 70.94084 72.12460
## 413  58.68664 58.04420 59.32908
## 414  59.54305 58.91920 60.16689
## 415  60.39945 59.79249 61.00641
## 416  67.25069 66.70126 67.80012
## 417  62.96867 62.40062 63.53671
## 418  67.25069 66.70126 67.80012
## 419  62.96867 62.40062 63.53671
## 420  46.69697 45.68047 47.71347
## 421  68.10710 67.55390 68.66029
## 422  68.10710 67.55390 68.66029
## 423  45.84057 44.79253 46.88860
## 424  69.81991 69.25190 70.38792
## 425  40.70213 39.45830 41.94597
## 426  78.38396 77.62774 79.14018
## 427  62.96867 62.40062 63.53671
## 428  67.25069 66.70126 67.80012
## 429  51.83540 50.99823 52.67257
## 430  74.10193 73.45957 74.74430
## 431  78.38396 77.62774 79.14018
## 432  68.10710 67.55390 68.66029
## 433  70.67631 70.09744 71.25519
## 434  80.09677 79.28747 80.90606
## 435  61.25586 60.66392 61.84779
## 436  81.80958 80.94406 82.67510
## 437  70.67631 70.09744 71.25519
## 438  51.83540 50.99823 52.67257
## 439  82.66598 81.77135 83.56062
## 440  63.82507 63.26563 64.38452
## 441  62.11226 61.53334 62.69118
## 442  92.94284 91.66563 94.22006
## 443  67.25069 66.70126 67.80012
## 444  39.84573 38.56838 41.12308
## 445  80.95317 80.11612 81.79023
## 446  68.10710 67.55390 68.66029
## 447  72.38912 71.78223 72.99602
## 448  68.96350 68.40409 69.52292
## 449  51.83540 50.99823 52.67257
## 450  71.53272 70.94084 72.12460
## 451  60.39945 59.79249 61.00641
## 452  55.26102 54.52984 55.99220
## 453  80.09677 79.28747 80.90606
## 454  47.55338 46.56801 48.53874
## 455  69.81991 69.25190 70.38792
## 456  57.83024 57.16763 58.49284
## 457  81.80958 80.94406 82.67510
## 458  77.52755 76.79647 78.25864
## 459  66.39429 65.84611 66.94246
## 460  54.40462 53.64829 55.16094
## 461  64.68148 64.12826 65.23469
## 462  44.98416 43.90423 46.06409
## 463  44.98416 43.90423 46.06409
## 464  69.81991 69.25190 70.38792
## 465  60.39945 59.79249 61.00641
## 466  60.39945 59.79249 61.00641
## 467  80.09677 79.28747 80.90606
## 468  64.68148 64.12826 65.23469
## 469  61.25586 60.66392 61.84779
## 470  50.97900 50.11336 51.84463
## 471  87.80441 86.72462 88.88421
## 472  81.80958 80.94406 82.67510
## 473  69.81991 69.25190 70.38792
## 474  48.40978 47.45512 49.36444
## 475  68.10710 67.55390 68.66029
## 476  71.53272 70.94084 72.12460
## 477  80.09677 79.28747 80.90606
## 478  65.53788 64.98844 66.08732
## 479  69.81991 69.25190 70.38792
## 480  44.12775 43.01560 45.23991
## 481  82.66598 81.77135 83.56062
## 482  74.95834 74.29581 75.62086
## 483  76.67115 75.96414 77.37816
## 484  74.10193 73.45957 74.74430
## 485  85.23520 84.24996 86.22044
## 486  89.51722 88.37268 90.66177
## 487  62.11226 61.53334 62.69118
## 488  55.26102 54.52984 55.99220
## 489  74.95834 74.29581 75.62086
## 490  68.10710 67.55390 68.66029
## 491  66.39429 65.84611 66.94246
## 492  65.53788 64.98844 66.08732
## 493  49.26619 48.34174 50.19063
## 494  72.38912 71.78223 72.99602
## 495  61.25586 60.66392 61.84779
## 496  62.96867 62.40062 63.53671
## 497  36.42011 35.00686 37.83336
## 498  62.11226 61.53334 62.69118
## 499  86.09160 85.07523 87.10798
## 500  79.24036 78.45804 80.02269
## 501  62.11226 61.53334 62.69118
## 502  81.80958 80.94406 82.67510
## 503  56.11743 55.41032 56.82453
## 504  75.81474 75.13063 76.49886
## 505  48.40978 47.45512 49.36444
## 506  85.23520 84.24996 86.22044
## 507  72.38912 71.78223 72.99602
## 508  55.26102 54.52984 55.99220
## 509  55.26102 54.52984 55.99220
## 510  67.25069 66.70126 67.80012
## 511  74.95834 74.29581 75.62086
## 512  82.66598 81.77135 83.56062
## 513  68.96350 68.40409 69.52292
## 514  74.95834 74.29581 75.62086
## 515  75.81474 75.13063 76.49886
## 516  58.68664 58.04420 59.32908
## 517  51.83540 50.99823 52.67257
## 518  38.13292 36.78796 39.47788
## 519  77.52755 76.79647 78.25864
## 520  83.52239 82.59807 84.44671
## 521  73.24553 72.62176 73.86930
## 522  78.38396 77.62774 79.14018
## 523  70.67631 70.09744 71.25519
## 524  80.09677 79.28747 80.90606
## 525  47.55338 46.56801 48.53874
## 526  62.11226 61.53334 62.69118
## 527  72.38912 71.78223 72.99602
## 528  86.09160 85.07523 87.10798
## 529  59.54305 58.91920 60.16689
## 530  64.68148 64.12826 65.23469
## 531  92.94284 91.66563 94.22006
## 532  69.81991 69.25190 70.38792
## 533  57.83024 57.16763 58.49284
## 534  74.10193 73.45957 74.74430
## 535  75.81474 75.13063 76.49886
## 536  81.80958 80.94406 82.67510
## 537  61.25586 60.66392 61.84779
## 538  68.96350 68.40409 69.52292
## 539  69.81991 69.25190 70.38792
## 540  63.82507 63.26563 64.38452
## 541  70.67631 70.09744 71.25519
## 542  68.96350 68.40409 69.52292
## 543  82.66598 81.77135 83.56062
## 544  57.83024 57.16763 58.49284
## 545  80.09677 79.28747 80.90606
## 546  68.10710 67.55390 68.66029
## 547  58.68664 58.04420 59.32908
## 548  56.97383 56.28962 57.65804
## 549  46.69697 45.68047 47.71347
## 550  55.26102 54.52984 55.99220
## 551  92.94284 91.66563 94.22006
## 552  65.53788 64.98844 66.08732
## 553  92.94284 91.66563 94.22006
## 554  60.39945 59.79249 61.00641
## 555  72.38912 71.78223 72.99602
## 556  52.69181 51.88240 53.50121
## 557  44.12775 43.01560 45.23991
## 558  65.53788 64.98844 66.08732
## 559  69.81991 69.25190 70.38792
## 560  48.40978 47.45512 49.36444
## 561  46.69697 45.68047 47.71347
## 562  60.39945 59.79249 61.00641
## 563  63.82507 63.26563 64.38452
## 564  60.39945 59.79249 61.00641
## 565  88.66082 87.54880 89.77284
## 566  73.24553 72.62176 73.86930
## 567  56.11743 55.41032 56.82453
## 568  74.95834 74.29581 75.62086
## 569  39.84573 38.56838 41.12308
## 570  69.81991 69.25190 70.38792
## 571  62.11226 61.53334 62.69118
## 572  85.23520 84.24996 86.22044
## 573  50.12259 49.22784 51.01734
## 574  74.95834 74.29581 75.62086
## 575  53.54821 52.76578 54.33064
## 576  81.80958 80.94406 82.67510
## 577  51.83540 50.99823 52.67257
## 578  58.68664 58.04420 59.32908
## 579  68.10710 67.55390 68.66029
## 580  49.26619 48.34174 50.19063
## 581  73.24553 72.62176 73.86930
## 582  68.96350 68.40409 69.52292
## 583  66.39429 65.84611 66.94246
## 584  74.95834 74.29581 75.62086
## 585  79.24036 78.45804 80.02269
## 586  57.83024 57.16763 58.49284
## 587  69.81991 69.25190 70.38792
## 588  89.51722 88.37268 90.66177
## 589  81.80958 80.94406 82.67510
## 590  68.96350 68.40409 69.52292
## 591  74.10193 73.45957 74.74430
## 592  88.66082 87.54880 89.77284
## 593  69.81991 69.25190 70.38792
## 594  90.37363 89.19628 91.55098
## 595  61.25586 60.66392 61.84779
## 596  53.54821 52.76578 54.33064
## 597  80.09677 79.28747 80.90606
## 598  50.97900 50.11336 51.84463
## 599  41.55854 40.34800 42.76908
## 600  80.95317 80.11612 81.79023
## 601  61.25586 60.66392 61.84779
## 602  68.10710 67.55390 68.66029
## 603  50.12259 49.22784 51.01734
## 604  71.53272 70.94084 72.12460
## 605  86.94801 85.90010 87.99591
## 606  36.42011 35.00686 37.83336
## 607  78.38396 77.62774 79.14018
## 608  68.96350 68.40409 69.52292
## 609  52.69181 51.88240 53.50121
## 610  69.81991 69.25190 70.38792
## 611  52.69181 51.88240 53.50121
## 612  76.67115 75.96414 77.37816
## 613  63.82507 63.26563 64.38452
## 614  74.10193 73.45957 74.74430
## 615  70.67631 70.09744 71.25519
## 616  47.55338 46.56801 48.53874
## 617  86.94801 85.90010 87.99591
## 618  63.82507 63.26563 64.38452
## 619  58.68664 58.04420 59.32908
## 620  63.82507 63.26563 64.38452
## 621  62.11226 61.53334 62.69118
## 622  47.55338 46.56801 48.53874
## 623  80.09677 79.28747 80.90606
## 624  79.24036 78.45804 80.02269
## 625  77.52755 76.79647 78.25864
## 626  57.83024 57.16763 58.49284
## 627  91.23003 90.01962 92.44045
## 628  80.95317 80.11612 81.79023
## 629  73.24553 72.62176 73.86930
## 630  57.83024 57.16763 58.49284
## 631  74.10193 73.45957 74.74430
## 632  64.68148 64.12826 65.23469
## 633  62.11226 61.53334 62.69118
## 634  56.11743 55.41032 56.82453
## 635  92.94284 91.66563 94.22006
## 636  79.24036 78.45804 80.02269
## 637  55.26102 54.52984 55.99220
## 638  64.68148 64.12826 65.23469
## 639  77.52755 76.79647 78.25864
## 640  62.96867 62.40062 63.53671
## 641  81.80958 80.94406 82.67510
## 642  68.96350 68.40409 69.52292
## 643  63.82507 63.26563 64.38452
## 644  62.11226 61.53334 62.69118
## 645  48.40978 47.45512 49.36444
## 646  65.53788 64.98844 66.08732
## 647  73.24553 72.62176 73.86930
## 648  67.25069 66.70126 67.80012
## 649  80.09677 79.28747 80.90606
## 650  44.12775 43.01560 45.23991
## 651  73.24553 72.62176 73.86930
## 652  68.10710 67.55390 68.66029
## 653  92.94284 91.66563 94.22006
## 654  48.40978 47.45512 49.36444
## 655  58.68664 58.04420 59.32908
## 656  78.38396 77.62774 79.14018
## 657  65.53788 64.98844 66.08732
## 658  68.96350 68.40409 69.52292
## 659  73.24553 72.62176 73.86930
## 660  45.84057 44.79253 46.88860
## 661  83.52239 82.59807 84.44671
## 662  62.96867 62.40062 63.53671
## 663  88.66082 87.54880 89.77284
## 664  74.10193 73.45957 74.74430
## 665  73.24553 72.62176 73.86930
## 666  67.25069 66.70126 67.80012
## 667  76.67115 75.96414 77.37816
## 668  61.25586 60.66392 61.84779
## 669  52.69181 51.88240 53.50121
## 670  49.26619 48.34174 50.19063
## 671  44.12775 43.01560 45.23991
## 672  79.24036 78.45804 80.02269
## 673  47.55338 46.56801 48.53874
## 674  67.25069 66.70126 67.80012
## 675  55.26102 54.52984 55.99220
## 676  66.39429 65.84611 66.94246
## 677  59.54305 58.91920 60.16689
## 678  68.96350 68.40409 69.52292
## 679  69.81991 69.25190 70.38792
## 680  59.54305 58.91920 60.16689
## 681  49.26619 48.34174 50.19063
## 682  51.83540 50.99823 52.67257
## 683  75.81474 75.13063 76.49886
## 684  68.10710 67.55390 68.66029
## 685  73.24553 72.62176 73.86930
## 686  55.26102 54.52984 55.99220
## 687  66.39429 65.84611 66.94246
## 688  66.39429 65.84611 66.94246
## 689  59.54305 58.91920 60.16689
## 690  30.42527 28.76883 32.08172
## 691  86.09160 85.07523 87.10798
## 692  79.24036 78.45804 80.02269
## 693  82.66598 81.77135 83.56062
## 694  56.11743 55.41032 56.82453
## 695  88.66082 87.54880 89.77284
## 696  61.25586 60.66392 61.84779
## 697  62.11226 61.53334 62.69118
## 698  72.38912 71.78223 72.99602
## 699  77.52755 76.79647 78.25864
## 700  66.39429 65.84611 66.94246
## 701  40.70213 39.45830 41.94597
## 702  38.98932 37.67826 40.30039
## 703  67.25069 66.70126 67.80012
## 704  68.96350 68.40409 69.52292
## 705  67.25069 66.70126 67.80012
## 706  60.39945 59.79249 61.00641
## 707  92.94284 91.66563 94.22006
## 708  80.95317 80.11612 81.79023
## 709  74.95834 74.29581 75.62086
## 710  67.25069 66.70126 67.80012
## 711  62.11226 61.53334 62.69118
## 712  80.95317 80.11612 81.79023
## 713  38.98932 37.67826 40.30039
## 714  56.11743 55.41032 56.82453
## 715  70.67631 70.09744 71.25519
## 716  63.82507 63.26563 64.38452
## 717  80.95317 80.11612 81.79023
## 718  44.12775 43.01560 45.23991
## 719  62.11226 61.53334 62.69118
## 720  46.69697 45.68047 47.71347
## 721  50.12259 49.22784 51.01734
## 722  86.09160 85.07523 87.10798
## 723  56.11743 55.41032 56.82453
## 724  62.11226 61.53334 62.69118
## 725  60.39945 59.79249 61.00641
## 726  47.55338 46.56801 48.53874
## 727  79.24036 78.45804 80.02269
## 728  65.53788 64.98844 66.08732
## 729  65.53788 64.98844 66.08732
## 730  38.13292 36.78796 39.47788
## 731  81.80958 80.94406 82.67510
## 732  67.25069 66.70126 67.80012
## 733  85.23520 84.24996 86.22044
## 734  65.53788 64.98844 66.08732
## 735  56.97383 56.28962 57.65804
## 736  80.95317 80.11612 81.79023
## 737  83.52239 82.59807 84.44671
## 738  77.52755 76.79647 78.25864
## 739  69.81991 69.25190 70.38792
## 740  66.39429 65.84611 66.94246
## 741  52.69181 51.88240 53.50121
## 742  62.96867 62.40062 63.53671
## 743  84.37879 83.42425 85.33334
## 744  89.51722 88.37268 90.66177
## 745  80.09677 79.28747 80.90606
## 746  68.96350 68.40409 69.52292
## 747  44.12775 43.01560 45.23991
## 748  85.23520 84.24996 86.22044
## 749  92.08644 90.84273 93.33015
## 750  65.53788 64.98844 66.08732
## 751  72.38912 71.78223 72.99602
## 752  86.94801 85.90010 87.99591
## 753  60.39945 59.79249 61.00641
## 754  57.83024 57.16763 58.49284
## 755  92.94284 91.66563 94.22006
## 756  79.24036 78.45804 80.02269
## 757  82.66598 81.77135 83.56062
## 758  61.25586 60.66392 61.84779
## 759  62.96867 62.40062 63.53671
## 760  82.66598 81.77135 83.56062
## 761  66.39429 65.84611 66.94246
## 762  74.95834 74.29581 75.62086
## 763  57.83024 57.16763 58.49284
## 764  83.52239 82.59807 84.44671
## 765  72.38912 71.78223 72.99602
## 766  52.69181 51.88240 53.50121
## 767  63.82507 63.26563 64.38452
## 768  78.38396 77.62774 79.14018
## 769  48.40978 47.45512 49.36444
## 770  58.68664 58.04420 59.32908
## 771  69.81991 69.25190 70.38792
## 772  80.95317 80.11612 81.79023
## 773  72.38912 71.78223 72.99602
## 774  80.09677 79.28747 80.90606
## 775  65.53788 64.98844 66.08732
## 776  39.84573 38.56838 41.12308
## 777  43.27135 42.12667 44.41603
## 778  68.96350 68.40409 69.52292
## 779  51.83540 50.99823 52.67257
## 780  50.97900 50.11336 51.84463
## 781  92.94284 91.66563 94.22006
## 782  76.67115 75.96414 77.37816
## 783  81.80958 80.94406 82.67510
## 784  58.68664 58.04420 59.32908
## 785  74.10193 73.45957 74.74430
## 786  51.83540 50.99823 52.67257
## 787  68.96350 68.40409 69.52292
## 788  79.24036 78.45804 80.02269
## 789  60.39945 59.79249 61.00641
## 790  57.83024 57.16763 58.49284
## 791  74.10193 73.45957 74.74430
## 792  62.96867 62.40062 63.53671
## 793  71.53272 70.94084 72.12460
## 794  65.53788 64.98844 66.08732
## 795  82.66598 81.77135 83.56062
## 796  50.12259 49.22784 51.01734
## 797  84.37879 83.42425 85.33334
## 798  59.54305 58.91920 60.16689
## 799  54.40462 53.64829 55.16094
## 800  51.83540 50.99823 52.67257
## 801  79.24036 78.45804 80.02269
## 802  62.96867 62.40062 63.53671
## 803  87.80441 86.72462 88.88421
## 804  48.40978 47.45512 49.36444
## 805  66.39429 65.84611 66.94246
## 806  54.40462 53.64829 55.16094
## 807  68.10710 67.55390 68.66029
## 808  68.96350 68.40409 69.52292
## 809  82.66598 81.77135 83.56062
## 810  58.68664 58.04420 59.32908
## 811  50.97900 50.11336 51.84463
## 812  62.96867 62.40062 63.53671
## 813  60.39945 59.79249 61.00641
## 814  62.11226 61.53334 62.69118
## 815  88.66082 87.54880 89.77284
## 816  55.26102 54.52984 55.99220
## 817  92.08644 90.84273 93.33015
## 818  72.38912 71.78223 72.99602
## 819  74.10193 73.45957 74.74430
## 820  71.53272 70.94084 72.12460
## 821  77.52755 76.79647 78.25864
## 822  61.25586 60.66392 61.84779
## 823  71.53272 70.94084 72.12460
## 824  63.82507 63.26563 64.38452
## 825  74.95834 74.29581 75.62086
## 826  92.94284 91.66563 94.22006
## 827  89.51722 88.37268 90.66177
## 828  79.24036 78.45804 80.02269
## 829  75.81474 75.13063 76.49886
## 830  34.70730 33.22516 36.18943
## 831  41.55854 40.34800 42.76908
## 832  50.97900 50.11336 51.84463
## 833  38.13292 36.78796 39.47788
## 834  78.38396 77.62774 79.14018
## 835  74.95834 74.29581 75.62086
## 836  76.67115 75.96414 77.37816
## 837  67.25069 66.70126 67.80012
## 838  67.25069 66.70126 67.80012
## 839  67.25069 66.70126 67.80012
## 840  79.24036 78.45804 80.02269
## 841  48.40978 47.45512 49.36444
## 842  69.81991 69.25190 70.38792
## 843  90.37363 89.19628 91.55098
## 844  76.67115 75.96414 77.37816
## 845  71.53272 70.94084 72.12460
## 846  63.82507 63.26563 64.38452
## 847  55.26102 54.52984 55.99220
## 848  66.39429 65.84611 66.94246
## 849  83.52239 82.59807 84.44671
## 850  67.25069 66.70126 67.80012
## 851  78.38396 77.62774 79.14018
## 852  69.81991 69.25190 70.38792
## 853  58.68664 58.04420 59.32908
## 854  68.96350 68.40409 69.52292
## 855  87.80441 86.72462 88.88421
## 856  90.37363 89.19628 91.55098
## 857  56.11743 55.41032 56.82453
## 858  92.94284 91.66563 94.22006
## 859  80.09677 79.28747 80.90606
## 860  79.24036 78.45804 80.02269
## 861  86.09160 85.07523 87.10798
## 862  79.24036 78.45804 80.02269
## 863  76.67115 75.96414 77.37816
## 864  68.10710 67.55390 68.66029
## 865  74.10193 73.45957 74.74430
## 866  70.67631 70.09744 71.25519
## 867  56.11743 55.41032 56.82453
## 868  80.09677 79.28747 80.90606
## 869  60.39945 59.79249 61.00641
## 870  58.68664 58.04420 59.32908
## 871  53.54821 52.76578 54.33064
## 872  44.98416 43.90423 46.06409
## 873  79.24036 78.45804 80.02269
## 874  56.11743 55.41032 56.82453
## 875  66.39429 65.84611 66.94246
## 876  57.83024 57.16763 58.49284
## 877  54.40462 53.64829 55.16094
## 878  62.96867 62.40062 63.53671
## 879  62.11226 61.53334 62.69118
## 880  48.40978 47.45512 49.36444
## 881  72.38912 71.78223 72.99602
## 882  76.67115 75.96414 77.37816
## 883  60.39945 59.79249 61.00641
## 884  74.10193 73.45957 74.74430
## 885  72.38912 71.78223 72.99602
## 886  31.28168 29.66030 32.90305
## 887  69.81991 69.25190 70.38792
## 888  70.67631 70.09744 71.25519
## 889  56.97383 56.28962 57.65804
## 890  74.95834 74.29581 75.62086
## 891  56.11743 55.41032 56.82453
## 892  68.10710 67.55390 68.66029
## 893  43.27135 42.12667 44.41603
## 894  40.70213 39.45830 41.94597
## 895  73.24553 72.62176 73.86930
## 896  82.66598 81.77135 83.56062
## 897  61.25586 60.66392 61.84779
## 898  64.68148 64.12826 65.23469
## 899  72.38912 71.78223 72.99602
## 900  33.85089 32.33412 35.36767
## 901  53.54821 52.76578 54.33064
## 902  66.39429 65.84611 66.94246
## 903  66.39429 65.84611 66.94246
## 904  59.54305 58.91920 60.16689
## 905  67.25069 66.70126 67.80012
## 906  77.52755 76.79647 78.25864
## 907  76.67115 75.96414 77.37816
## 908  64.68148 64.12826 65.23469
## 909  44.98416 43.90423 46.06409
## 910  63.82507 63.26563 64.38452
## 911  60.39945 59.79249 61.00641
## 912  62.11226 61.53334 62.69118
## 913  62.11226 61.53334 62.69118
## 914  65.53788 64.98844 66.08732
## 915  60.39945 59.79249 61.00641
## 916  67.25069 66.70126 67.80012
## 917  68.96350 68.40409 69.52292
## 918  69.81991 69.25190 70.38792
## 919  65.53788 64.98844 66.08732
## 920  74.10193 73.45957 74.74430
## 921  56.97383 56.28962 57.65804
## 922  69.81991 69.25190 70.38792
## 923  54.40462 53.64829 55.16094
## 924  61.25586 60.66392 61.84779
## 925  64.68148 64.12826 65.23469
## 926  60.39945 59.79249 61.00641
## 927  68.96350 68.40409 69.52292
## 928  68.10710 67.55390 68.66029
## 929  54.40462 53.64829 55.16094
## 930  70.67631 70.09744 71.25519
## 931  78.38396 77.62774 79.14018
## 932  49.26619 48.34174 50.19063
## 933  75.81474 75.13063 76.49886
## 934  63.82507 63.26563 64.38452
## 935  62.11226 61.53334 62.69118
## 936  73.24553 72.62176 73.86930
## 937  44.98416 43.90423 46.06409
## 938  50.12259 49.22784 51.01734
## 939  35.56370 34.11608 37.01133
## 940  59.54305 58.91920 60.16689
## 941  74.95834 74.29581 75.62086
## 942  71.53272 70.94084 72.12460
## 943  74.95834 74.29581 75.62086
## 944  68.10710 67.55390 68.66029
## 945  68.96350 68.40409 69.52292
## 946  59.54305 58.91920 60.16689
## 947  60.39945 59.79249 61.00641
## 948  62.96867 62.40062 63.53671
## 949  50.12259 49.22784 51.01734
## 950  58.68664 58.04420 59.32908
## 951  81.80958 80.94406 82.67510
## 952  67.25069 66.70126 67.80012
## 953  61.25586 60.66392 61.84779
## 954  57.83024 57.16763 58.49284
## 955  61.25586 60.66392 61.84779
## 956  72.38912 71.78223 72.99602
## 957  71.53272 70.94084 72.12460
## 958  51.83540 50.99823 52.67257
## 959  57.83024 57.16763 58.49284
## 960  79.24036 78.45804 80.02269
## 961  56.97383 56.28962 57.65804
## 962  80.95317 80.11612 81.79023
## 963  46.69697 45.68047 47.71347
## 964  59.54305 58.91920 60.16689
## 965  78.38396 77.62774 79.14018
## 966  81.80958 80.94406 82.67510
## 967  69.81991 69.25190 70.38792
## 968  92.94284 91.66563 94.22006
## 969  50.97900 50.11336 51.84463
## 970  56.11743 55.41032 56.82453
## 971  92.94284 91.66563 94.22006
## 972  50.97900 50.11336 51.84463
## 973  73.24553 72.62176 73.86930
## 974  68.10710 67.55390 68.66029
## 975  57.83024 57.16763 58.49284
## 976  72.38912 71.78223 72.99602
## 977  32.13808 30.55168 33.72449
## 978  54.40462 53.64829 55.16094
## 979  50.97900 50.11336 51.84463
## 980  62.96867 62.40062 63.53671
## 981  50.12259 49.22784 51.01734
## 982  48.40978 47.45512 49.36444
## 983  74.95834 74.29581 75.62086
## 984  50.12259 49.22784 51.01734
## 985  68.10710 67.55390 68.66029
## 986  69.81991 69.25190 70.38792
## 987  79.24036 78.45804 80.02269
## 988  74.10193 73.45957 74.74430
## 989  72.38912 71.78223 72.99602
## 990  58.68664 58.04420 59.32908
## 991  54.40462 53.64829 55.16094
## 992  86.94801 85.90010 87.99591
## 993  61.25586 60.66392 61.84779
## 994  53.54821 52.76578 54.33064
## 995  77.52755 76.79647 78.25864
## 996  67.25069 66.70126 67.80012
## 997  85.23520 84.24996 86.22044
## 998  37.27651 35.89749 38.65554
## 999  70.67631 70.09744 71.25519
## 1000 58.68664 58.04420 59.32908

5.3. Regresión Lineal Múltiple

Con base en el conjunto de datos se formulará un modelo de regresión lineal múltiple para estudiar la relación lineal múltiple supuesta entre las varaibles definidas por los campos: math score(variable dependiente) y los demás como variables independientes: gender, race ethnicity, parental level of education, lunch, test preparation course, attendance, math score 100, reading score 100, writing score 100.

La navegación a través de las pestañas muestra el resumen estadístico de todas las variables del conjunto de datos Sin embargo, para las varaibles de naturaleza cuantitativa::razón el resumen será el tradicional, pero para las variables de naturaleza cualitativa::nominal el resumen estadístico consistirá en conteos, proporciones y diagramas de barras. Se menciona de nuevo que reading Score es la variable dependiente.

Con base en el conjunto de datos descrito en la sección 2 se formulará un modelo de regresión lineal múltiple para estudiar la relación lineal múltiple supuesta entre las variables definidas por los campos: Reading_score, writing_score y attendance (variables dependientes) y los demás como variables independientes: Math_score, age. Tomando el enfoque de las variables académicas debido a que las otras no son muy relevantes

Media (DE): Reading_score: 77.27 (17.26) Writing_score: 78.94 (15.22) Math_score: 81.20 (18.13)

Correlaciones: Reading_score vs Writing_score: 0.76 Reading_score vs Math_score: 0.72
Writing_score vs Math_score: 0.75

Los datos muestran relaciones lineales positivas moderadas a fuertes entre las tres medidas de rendimiento académico. En promedio, los estudiantes obtuvieron las puntuaciones más altas en Matemáticas, seguidas de Escritura y luego Lectura.

Resumen Variables Cuantitativas

summary(cdd_examen_estudiantesDep_G7$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   15.00   17.00   19.00   19.45   22.00   24.00
summary(cdd_examen_estudiantesDep_G7$attendance)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   60.00   70.00   80.00   80.25   90.00  100.00
summary(cdd_examen_estudiantesDep_G7$math_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    56.0    66.5    66.4    77.0   100.0
summary(cdd_examen_estudiantesDep_G7$reading_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      27      60      70      69      79     100
summary(cdd_examen_estudiantesDep_G7$writing_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   23.00   58.00   68.00   67.74   79.00  100.00

Resumen Variables Cualitativas

table(cdd_examen_estudiantesDep_G7$gender)
## 
## female   male 
##    483    517
prop.table(table(cdd_examen_estudiantesDep_G7$gender))
## 
## female   male 
##  0.483  0.517
barplot(table(cdd_examen_estudiantesDep_G7$gender))

table(cdd_examen_estudiantesDep_G7$race_ethnicity)
## 
## group A group B group C group D group E 
##      79     205     323     262     131
prop.table(table(cdd_examen_estudiantesDep_G7$race_ethnicity))
## 
## group A group B group C group D group E 
##   0.079   0.205   0.323   0.262   0.131
barplot(table(cdd_examen_estudiantesDep_G7$race_ethnicity))

table(cdd_examen_estudiantesDep_G7$parental_level_of_education)
## 
## associate's degree  bachelor's degree        high school    master's degree 
##                203                112                202                 70 
##       some college   some high school 
##                222                191
prop.table(table(cdd_examen_estudiantesDep_G7$parental_level_of_education))
## 
## associate's degree  bachelor's degree        high school    master's degree 
##              0.203              0.112              0.202              0.070 
##       some college   some high school 
##              0.222              0.191
barplot(table(cdd_examen_estudiantesDep_G7$parental_level_of_education))

table(cdd_examen_estudiantesDep_G7$lunch)
## 
## free/reduced     standard 
##          348          652
prop.table(table(cdd_examen_estudiantesDep_G7$lunch))
## 
## free/reduced     standard 
##        0.348        0.652
barplot(table(cdd_examen_estudiantesDep_G7$lunch))

table(cdd_examen_estudiantesDep_G7$test_preparation_course)
## 
## completed      none 
##       335       665
prop.table(table(cdd_examen_estudiantesDep_G7$test_preparation_course))
## 
## completed      none 
##     0.335     0.665
barplot(table(cdd_examen_estudiantesDep_G7$test_preparation_course))

Diagramas de Dispersión Variables Cuantitativas

pairs(~age + attendance + math_score_100 + reading_score_100 + writing_score_100, data = cdd_examen_estudiantesDep_G7)

5.3.1. Formulación del modelo de RLM entre las variables de estudio

La navegación a través de las pestañas muestra el resumen y la tabla ANOVA del modelo de regresión lineal múltiple total y los coeficientes tanto del modelo mencionado como el logrado luego de reducirlo. Con base en la exploración de los datos de la sesión 2 y el resumen y la tabla ANOVA del modelo total, se formulan para comparación dos modelos de RLM: uno que incluye a todas las variables del conjunto de datos y otro que se enfoca solo en las variables académicas debido a que las otras no son muy relevantes. En este caso, las variables dependientes son Reading_score, Writing_score y Attendance, y las variables independientes son Math_score y Age. Al considerar los resultados presentados en la pestaña Coeficientes del Modelo RLM Total, se puede establecer que el modelo de regresión lineal múltiple total que relaciona a las variables de interés, resumidas como Reading_score, Writing_score y Math_score. Para este modelo, se obvia la interpretación del intercepto por carecer de sentido dado que las variables dependientes resultarían negativas en caso de que las variables predictoras fuesen nulas a la vez, y ambas situaciones carecen de sentido. Por otro lado, luego de revisar el resumen estadístico y la tabla ANOVA del modelo RLM Total (como se muestra en la pestaña homónima), se pudo establecer, con el apoyo de los resúmenes estadísticos de las variables de estudio, que podían excluirse directamente del modelo las variables con baja significancia. En este caso, todas las variables son significativas, por lo que no se excluyeron variables en el modelo reducido. Resumen estadístico de las variables de estudio: • Media (DE): o Reading_score: 77.27 (17.26) o Writing_score: 78.94 (15.22) o Math_score: 81.20 (18.13) Correlaciones: • Reading_score vs Writing_score: 0.76 • Reading_score vs Math_score: 0.72 • Writing_score vs Math_score: 0.75 Los datos muestran relaciones lineales positivas moderadas a fuertes entre las tres medidas de rendimiento académico. En promedio, los estudiantes obtuvieron las puntuaciones más altas en Matemáticas, seguidas de Escritura y luego Lectura.

Resumen y ANOVA del Modelo RLM Total

summary(lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$age+cdd_examen_estudiantesDep_G7$attendance+cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$gender)+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)+as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)+as.factor(cdd_examen_estudiantesDep_G7$lunch)+as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)))
## 
## Call:
## lm(formula = cdd_examen_estudiantesDep_G7$math_score_100 ~ cdd_examen_estudiantesDep_G7$age + 
##     cdd_examen_estudiantesDep_G7$attendance + cdd_examen_estudiantesDep_G7$reading_score_100 + 
##     cdd_examen_estudiantesDep_G7$writing_score_100 + as.factor(cdd_examen_estudiantesDep_G7$gender) + 
##     as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity) + 
##     as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education) + 
##     as.factor(cdd_examen_estudiantesDep_G7$lunch) + as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -19.9979  -3.6913  -0.0394   4.1493  15.8467 
## 
## Coefficients:
##                                                                                       Estimate
## (Intercept)                                                                          -7.610460
## cdd_examen_estudiantesDep_G7$age                                                     -0.058446
## cdd_examen_estudiantesDep_G7$attendance                                               0.002451
## cdd_examen_estudiantesDep_G7$reading_score_100                                        0.240956
## cdd_examen_estudiantesDep_G7$writing_score_100                                        0.682029
## as.factor(cdd_examen_estudiantesDep_G7$gender)male                                   12.643324
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B                         0.035753
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C                        -0.115926
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D                        -0.808735
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E                         5.262210
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)bachelor's degree -0.474625
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)high school        0.437181
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)master's degree   -0.721163
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some college      -0.343985
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some high school  -0.122392
## as.factor(cdd_examen_estudiantesDep_G7$lunch)standard                                 3.744503
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none                   4.225950
##                                                                                      Std. Error
## (Intercept)                                                                            2.169353
## cdd_examen_estudiantesDep_G7$age                                                       0.062264
## cdd_examen_estudiantesDep_G7$attendance                                                0.015091
## cdd_examen_estudiantesDep_G7$reading_score_100                                         0.043038
## cdd_examen_estudiantesDep_G7$writing_score_100                                         0.044071
## as.factor(cdd_examen_estudiantesDep_G7$gender)male                                     0.382432
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B                          0.739811
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C                          0.702333
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D                          0.728380
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E                          0.802661
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)bachelor's degree   0.660971
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)high school         0.565293
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)master's degree     0.782474
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some college        0.544206
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some high school    0.579037
## as.factor(cdd_examen_estudiantesDep_G7$lunch)standard                                  0.399102
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none                    0.415434
##                                                                                      t value
## (Intercept)                                                                           -3.508
## cdd_examen_estudiantesDep_G7$age                                                      -0.939
## cdd_examen_estudiantesDep_G7$attendance                                                0.162
## cdd_examen_estudiantesDep_G7$reading_score_100                                         5.599
## cdd_examen_estudiantesDep_G7$writing_score_100                                        15.476
## as.factor(cdd_examen_estudiantesDep_G7$gender)male                                    33.060
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B                          0.048
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C                         -0.165
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D                         -1.110
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E                          6.556
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)bachelor's degree  -0.718
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)high school         0.773
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)master's degree    -0.922
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some college       -0.632
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some high school   -0.211
## as.factor(cdd_examen_estudiantesDep_G7$lunch)standard                                  9.382
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none                   10.172
##                                                                                      Pr(>|t|)
## (Intercept)                                                                          0.000472
## cdd_examen_estudiantesDep_G7$age                                                     0.348124
## cdd_examen_estudiantesDep_G7$attendance                                              0.870990
## cdd_examen_estudiantesDep_G7$reading_score_100                                       2.80e-08
## cdd_examen_estudiantesDep_G7$writing_score_100                                        < 2e-16
## as.factor(cdd_examen_estudiantesDep_G7$gender)male                                    < 2e-16
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B                        0.961466
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C                        0.868932
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D                        0.267132
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E                        8.91e-11
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)bachelor's degree 0.472883
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)high school       0.439490
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)master's degree   0.356940
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some college      0.527478
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some high school  0.832641
## as.factor(cdd_examen_estudiantesDep_G7$lunch)standard                                 < 2e-16
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none                   < 2e-16
##                                                                                         
## (Intercept)                                                                          ***
## cdd_examen_estudiantesDep_G7$age                                                        
## cdd_examen_estudiantesDep_G7$attendance                                                 
## cdd_examen_estudiantesDep_G7$reading_score_100                                       ***
## cdd_examen_estudiantesDep_G7$writing_score_100                                       ***
## as.factor(cdd_examen_estudiantesDep_G7$gender)male                                   ***
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B                           
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C                           
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D                           
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E                        ***
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)bachelor's degree    
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)high school          
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)master's degree      
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some college         
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some high school     
## as.factor(cdd_examen_estudiantesDep_G7$lunch)standard                                ***
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none                  ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.563 on 983 degrees of freedom
## Multiple R-squared:  0.8717, Adjusted R-squared:  0.8696 
## F-statistic: 417.3 on 16 and 983 DF,  p-value: < 2.2e-16
anova(lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$age+cdd_examen_estudiantesDep_G7$attendance+cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$gender)+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)+as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)+as.factor(cdd_examen_estudiantesDep_G7$lunch)+as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)))
## Analysis of Variance Table
## 
## Response: cdd_examen_estudiantesDep_G7$math_score_100
##                                                                      Df Sum Sq
## cdd_examen_estudiantesDep_G7$age                                      1    151
## cdd_examen_estudiantesDep_G7$attendance                               1     84
## cdd_examen_estudiantesDep_G7$reading_score_100                        1 159189
## cdd_examen_estudiantesDep_G7$writing_score_100                        1   1567
## as.factor(cdd_examen_estudiantesDep_G7$gender)                        1  35874
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)                4   2829
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)   5    185
## as.factor(cdd_examen_estudiantesDep_G7$lunch)                         1   3513
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)       1   3202
## Residuals                                                           983  30417
##                                                                     Mean Sq
## cdd_examen_estudiantesDep_G7$age                                        151
## cdd_examen_estudiantesDep_G7$attendance                                  84
## cdd_examen_estudiantesDep_G7$reading_score_100                       159189
## cdd_examen_estudiantesDep_G7$writing_score_100                         1567
## as.factor(cdd_examen_estudiantesDep_G7$gender)                        35874
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)                  707
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)      37
## as.factor(cdd_examen_estudiantesDep_G7$lunch)                          3513
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)        3202
## Residuals                                                                31
##                                                                       F value
## cdd_examen_estudiantesDep_G7$age                                       4.8787
## cdd_examen_estudiantesDep_G7$attendance                                2.7256
## cdd_examen_estudiantesDep_G7$reading_score_100                      5144.5274
## cdd_examen_estudiantesDep_G7$writing_score_100                        50.6558
## as.factor(cdd_examen_estudiantesDep_G7$gender)                      1159.3303
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)                22.8557
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)    1.1928
## as.factor(cdd_examen_estudiantesDep_G7$lunch)                        113.5361
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)      103.4770
## Residuals                                                                    
##                                                                        Pr(>F)
## cdd_examen_estudiantesDep_G7$age                                      0.02742
## cdd_examen_estudiantesDep_G7$attendance                               0.09907
## cdd_examen_estudiantesDep_G7$reading_score_100                      < 2.2e-16
## cdd_examen_estudiantesDep_G7$writing_score_100                      2.121e-12
## as.factor(cdd_examen_estudiantesDep_G7$gender)                      < 2.2e-16
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)              < 2.2e-16
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)   0.31062
## as.factor(cdd_examen_estudiantesDep_G7$lunch)                       < 2.2e-16
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)     < 2.2e-16
## Residuals                                                                    
##                                                                        
## cdd_examen_estudiantesDep_G7$age                                    *  
## cdd_examen_estudiantesDep_G7$attendance                             .  
## cdd_examen_estudiantesDep_G7$reading_score_100                      ***
## cdd_examen_estudiantesDep_G7$writing_score_100                      ***
## as.factor(cdd_examen_estudiantesDep_G7$gender)                      ***
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)              ***
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)    
## as.factor(cdd_examen_estudiantesDep_G7$lunch)                       ***
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)     ***
## Residuals                                                              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Coeficientes del Modelo RLM Total

coefficients(lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$age+cdd_examen_estudiantesDep_G7$attendance+cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$gender)+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)+as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)+as.factor(cdd_examen_estudiantesDep_G7$lunch)+as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)))
##                                                                          (Intercept) 
##                                                                         -7.610459553 
##                                                     cdd_examen_estudiantesDep_G7$age 
##                                                                         -0.058446181 
##                                              cdd_examen_estudiantesDep_G7$attendance 
##                                                                          0.002451459 
##                                       cdd_examen_estudiantesDep_G7$reading_score_100 
##                                                                          0.240955552 
##                                       cdd_examen_estudiantesDep_G7$writing_score_100 
##                                                                          0.682028611 
##                                   as.factor(cdd_examen_estudiantesDep_G7$gender)male 
##                                                                         12.643323876 
##                        as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B 
##                                                                          0.035752679 
##                        as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C 
##                                                                         -0.115925589 
##                        as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D 
##                                                                         -0.808735192 
##                        as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E 
##                                                                          5.262209589 
## as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)bachelor's degree 
##                                                                         -0.474625266 
##       as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)high school 
##                                                                          0.437180575 
##   as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)master's degree 
##                                                                         -0.721163071 
##      as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some college 
##                                                                         -0.343984919 
##  as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)some high school 
##                                                                         -0.122391665 
##                                as.factor(cdd_examen_estudiantesDep_G7$lunch)standard 
##                                                                          3.744503019 
##                  as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none 
##                                                                          4.225950057

Coeficientes del Modelo RLM Reducido

coefficients(lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)))
##                                                   (Intercept) 
##                                                     8.3783335 
##                cdd_examen_estudiantesDep_G7$reading_score_100 
##                                                     0.5424943 
##                cdd_examen_estudiantesDep_G7$writing_score_100 
##                                                     0.2933212 
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B 
##                                                    -0.8922273 
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C 
##                                                    -0.1872193 
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D 
##                                                     0.5863726 
## as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E 
##                                                     6.1468051

Resumen del análisis de los modelos:

Proceso: 1. Modelo inicial: o Incluye todas las variables: edad, asistencia, puntajes en lectura y escritura, género, etnicidad, nivel educativo parental, tipo de almuerzo y curso de preparación. 2. Reducción del modelo: o Se eliminan variables insignificantes paso a paso, minimizando el AIC para lograr un modelo más eficiente con menor complejidad. 3. Modelo final: o Conserva solo las variables significativas:  Puntaje en lectura (0.253) y escritura (0.666).  Género masculino (12.63): efecto positivo significativo.  Grupo étnico E (5.39): impacto significativo frente al grupo base.  Almuerzo estándar (3.81) y sin curso de preparación (4.19): efectos positivos.

Resultados de los modelos: 1. Modelo 1 (completo): o Explica el 87.2% de la varianza (R² = 0.872), pero incluye muchas variables no significativas. o Error residual estándar: 5.563. 2. Modelo 2 (simplificado): o Excluye variables irrelevantes, pero reduce la precisión (R² = 0.697). o Error residual estándar: 8.499. 3. Modelo 3 (final): o Optimiza el ajuste (R² = 0.871) y mantiene simplicidad. o Error residual estándar: 5.555, muy similar al Modelo 1.

Mejor Modelo Iterado según AIC

modelo_Iterado_STEP = step(lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$age+cdd_examen_estudiantesDep_G7$attendance+cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$gender)+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)+as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)+as.factor(cdd_examen_estudiantesDep_G7$lunch)+as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)))
## Start:  AIC=3449.01
## cdd_examen_estudiantesDep_G7$math_score_100 ~ cdd_examen_estudiantesDep_G7$age + 
##     cdd_examen_estudiantesDep_G7$attendance + cdd_examen_estudiantesDep_G7$reading_score_100 + 
##     cdd_examen_estudiantesDep_G7$writing_score_100 + as.factor(cdd_examen_estudiantesDep_G7$gender) + 
##     as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity) + 
##     as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education) + 
##     as.factor(cdd_examen_estudiantesDep_G7$lunch) + as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)
## 
##                                                                       Df
## - as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)  5
## - cdd_examen_estudiantesDep_G7$attendance                              1
## - cdd_examen_estudiantesDep_G7$age                                     1
## <none>                                                                  
## - cdd_examen_estudiantesDep_G7$reading_score_100                       1
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                        1
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)      1
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)               4
## - cdd_examen_estudiantesDep_G7$writing_score_100                       1
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                       1
##                                                                       Sum of Sq
## - as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)       109
## - cdd_examen_estudiantesDep_G7$attendance                                     1
## - cdd_examen_estudiantesDep_G7$age                                           27
## <none>                                                                         
## - cdd_examen_estudiantesDep_G7$reading_score_100                            970
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                            2724
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)          3202
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)                   3487
## - cdd_examen_estudiantesDep_G7$writing_score_100                           7411
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                          33821
##                                                                         RSS
## - as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education) 30526
## - cdd_examen_estudiantesDep_G7$attendance                             30418
## - cdd_examen_estudiantesDep_G7$age                                    30445
## <none>                                                                30417
## - cdd_examen_estudiantesDep_G7$reading_score_100                      31387
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                       33141
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)     33619
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)              33904
## - cdd_examen_estudiantesDep_G7$writing_score_100                      37828
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                      64238
##                                                                          AIC
## - as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education) 3442.6
## - cdd_examen_estudiantesDep_G7$attendance                             3447.0
## - cdd_examen_estudiantesDep_G7$age                                    3447.9
## <none>                                                                3449.0
## - cdd_examen_estudiantesDep_G7$reading_score_100                      3478.4
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                       3532.8
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)     3547.1
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)              3549.5
## - cdd_examen_estudiantesDep_G7$writing_score_100                      3665.1
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                      4194.6
## 
## Step:  AIC=3442.58
## cdd_examen_estudiantesDep_G7$math_score_100 ~ cdd_examen_estudiantesDep_G7$age + 
##     cdd_examen_estudiantesDep_G7$attendance + cdd_examen_estudiantesDep_G7$reading_score_100 + 
##     cdd_examen_estudiantesDep_G7$writing_score_100 + as.factor(cdd_examen_estudiantesDep_G7$gender) + 
##     as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity) + 
##     as.factor(cdd_examen_estudiantesDep_G7$lunch) + as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)
## 
##                                                                   Df Sum of Sq
## - cdd_examen_estudiantesDep_G7$attendance                          1         1
## - cdd_examen_estudiantesDep_G7$age                                 1        25
## <none>                                                                        
## - cdd_examen_estudiantesDep_G7$reading_score_100                   1      1110
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                    1      2870
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)  1      3203
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)           4      3527
## - cdd_examen_estudiantesDep_G7$writing_score_100                   1      7646
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                   1     34863
##                                                                     RSS    AIC
## - cdd_examen_estudiantesDep_G7$attendance                         30527 3440.6
## - cdd_examen_estudiantesDep_G7$age                                30551 3441.4
## <none>                                                            30526 3442.6
## - cdd_examen_estudiantesDep_G7$reading_score_100                  31637 3476.3
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                   33397 3530.5
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course) 33729 3540.4
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)          34053 3543.9
## - cdd_examen_estudiantesDep_G7$writing_score_100                  38172 3664.1
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                  65389 4202.3
## 
## Step:  AIC=3440.62
## cdd_examen_estudiantesDep_G7$math_score_100 ~ cdd_examen_estudiantesDep_G7$age + 
##     cdd_examen_estudiantesDep_G7$reading_score_100 + cdd_examen_estudiantesDep_G7$writing_score_100 + 
##     as.factor(cdd_examen_estudiantesDep_G7$gender) + as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity) + 
##     as.factor(cdd_examen_estudiantesDep_G7$lunch) + as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)
## 
##                                                                   Df Sum of Sq
## - cdd_examen_estudiantesDep_G7$age                                 1        25
## <none>                                                                        
## - cdd_examen_estudiantesDep_G7$reading_score_100                   1      1112
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                    1      2872
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)  1      3205
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)           4      3528
## - cdd_examen_estudiantesDep_G7$writing_score_100                   1      7645
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                   1     34948
##                                                                     RSS    AIC
## - cdd_examen_estudiantesDep_G7$age                                30552 3439.4
## <none>                                                            30527 3440.6
## - cdd_examen_estudiantesDep_G7$reading_score_100                  31639 3474.4
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                   33399 3528.5
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course) 33732 3538.5
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)          34055 3542.0
## - cdd_examen_estudiantesDep_G7$writing_score_100                  38172 3662.1
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                  65475 4201.7
## 
## Step:  AIC=3439.43
## cdd_examen_estudiantesDep_G7$math_score_100 ~ cdd_examen_estudiantesDep_G7$reading_score_100 + 
##     cdd_examen_estudiantesDep_G7$writing_score_100 + as.factor(cdd_examen_estudiantesDep_G7$gender) + 
##     as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity) + 
##     as.factor(cdd_examen_estudiantesDep_G7$lunch) + as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)
## 
##                                                                   Df Sum of Sq
## <none>                                                                        
## - cdd_examen_estudiantesDep_G7$reading_score_100                   1      1110
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                    1      2876
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)  1      3235
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)           4      3545
## - cdd_examen_estudiantesDep_G7$writing_score_100                   1      7651
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                   1     35017
##                                                                     RSS    AIC
## <none>                                                            30552 3439.4
## - cdd_examen_estudiantesDep_G7$reading_score_100                  31662 3473.1
## - as.factor(cdd_examen_estudiantesDep_G7$lunch)                   33429 3527.4
## - as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course) 33787 3538.1
## - as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)          34097 3541.2
## - cdd_examen_estudiantesDep_G7$writing_score_100                  38203 3660.9
## - as.factor(cdd_examen_estudiantesDep_G7$gender)                  65569 4201.1
coefficients(modelo_Iterado_STEP)
##                                                         (Intercept) 
##                                                         -8.50346761 
##                      cdd_examen_estudiantesDep_G7$reading_score_100 
##                                                          0.25306163 
##                      cdd_examen_estudiantesDep_G7$writing_score_100 
##                                                          0.66596128 
##                  as.factor(cdd_examen_estudiantesDep_G7$gender)male 
##                                                         12.63201637 
##       as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group B 
##                                                          0.07814396 
##       as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group C 
##                                                         -0.06738356 
##       as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group D 
##                                                         -0.67586524 
##       as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)group E 
##                                                          5.39164927 
##               as.factor(cdd_examen_estudiantesDep_G7$lunch)standard 
##                                                          3.81530216 
## as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course)none 
##                                                          4.18798577

Bondades de ajuste, Significancias y criterios de información comparados

modelo_RLM_TOTAL = lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$age+cdd_examen_estudiantesDep_G7$attendance+cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$gender)+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity)+as.factor(cdd_examen_estudiantesDep_G7$parental_level_of_education)+as.factor(cdd_examen_estudiantesDep_G7$lunch)+as.factor(cdd_examen_estudiantesDep_G7$test_preparation_course))
modelo_RLM_REDUCIDO = lm(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$reading_score_100+cdd_examen_estudiantesDep_G7$writing_score_100+as.factor(cdd_examen_estudiantesDep_G7$race_ethnicity))
stargazer(modelo_RLM_TOTAL, modelo_RLM_REDUCIDO, modelo_Iterado_STEP, type = "text", df = TRUE)
## 
## =========================================================================================================================
##                                                                           Dependent variable:                            
##                                               ---------------------------------------------------------------------------
##                                                                             math_score_100                               
##                                                          (1)                      (2)                      (3)           
## -------------------------------------------------------------------------------------------------------------------------
## age                                                    -0.058                                                            
##                                                        (0.062)                                                           
##                                                                                                                          
## attendance                                              0.002                                                            
##                                                        (0.015)                                                           
##                                                                                                                          
## reading_score_100                                     0.241***                  0.542***                 0.253***        
##                                                        (0.043)                  (0.062)                  (0.042)         
##                                                                                                                          
## writing_score_100                                     0.682***                  0.293***                 0.666***        
##                                                        (0.044)                  (0.059)                  (0.042)         
##                                                                                                                          
## gender)male                                           12.643***                                         12.632***        
##                                                        (0.382)                                           (0.375)         
##                                                                                                                          
## race_ethnicity)group B                                  0.036                    -0.892                   0.078          
##                                                        (0.740)                  (1.126)                  (0.737)         
##                                                                                                                          
## race_ethnicity)group C                                 -0.116                    -0.187                   -0.067         
##                                                        (0.702)                  (1.068)                  (0.698)         
##                                                                                                                          
## race_ethnicity)group D                                 -0.809                    0.586                    -0.676         
##                                                        (0.728)                  (1.098)                  (0.721)         
##                                                                                                                          
## race_ethnicity)group E                                5.262***                  6.147***                 5.392***        
##                                                        (0.803)                  (1.214)                  (0.797)         
##                                                                                                                          
## parental_level_of_education)bachelor's degree          -0.475                                                            
##                                                        (0.661)                                                           
##                                                                                                                          
## parental_level_of_education)high school                 0.437                                                            
##                                                        (0.565)                                                           
##                                                                                                                          
## parental_level_of_education)master's degree            -0.721                                                            
##                                                        (0.782)                                                           
##                                                                                                                          
## parental_level_of_education)some college               -0.344                                                            
##                                                        (0.544)                                                           
##                                                                                                                          
## parental_level_of_education)some high school           -0.122                                                            
##                                                        (0.579)                                                           
##                                                                                                                          
## lunch)standard                                        3.745***                                           3.815***        
##                                                        (0.399)                                           (0.395)         
##                                                                                                                          
## test_preparation_course)none                          4.226***                                           4.188***        
##                                                        (0.415)                                           (0.409)         
##                                                                                                                          
## Constant                                              -7.610***                 8.378***                -8.503***        
##                                                        (2.169)                  (1.595)                  (1.210)         
##                                                                                                                          
## -------------------------------------------------------------------------------------------------------------------------
## Observations                                            1,000                    1,000                    1,000          
## R2                                                      0.872                    0.697                    0.871          
## Adjusted R2                                             0.870                    0.696                    0.870          
## Residual Std. Error                               5.563 (df = 983)          8.499 (df = 993)         5.555 (df = 990)    
## F Statistic                                   417.282*** (df = 16; 983) 381.337*** (df = 6; 993) 743.338*** (df = 9; 990)
## =========================================================================================================================
## Note:                                                                                         *p<0.1; **p<0.05; ***p<0.01

5.4. Regresión Logística Simple

Con base en el conjunto de datos se formulará un modelo de regresión logística simple para estudiar la relación logística supuesta entre las varaibles definidas por los campos: Math Score(variable dependiente) y Research reading Score(variable independiente), con base en una distribución binomial y la función de enlace Logit

El gráfico de cajas y bigotes del puntaje de matemáticas muestra una distribución simétrica con una mediana alrededor de 185-190 y algunos valores atípicos por encima de 225.

El histograma del puntaje de matemáticas indica una distribución normal, con la mayoría de los estudiantes obteniendo puntajes entre 175-225.

El gráfico de barras de la etnia/raza muestra las diferencias en los puntajes de matemáticas promedio entre los diferentes grupos étnicos. Los estudiantes asiáticos tienen los puntajes más altos, seguidos por los blancos, luego los hispanos y por último los estudiantes afroamericanos.

Finalmente, el gráfico de cajas y bigotes para el conjunto de variables muestra la dispersión y valores atípicos en las diferentes métricas educativas como puntajes de lectura, escritura y matemáticas.

Resumen y Boxplot de math score

summary(cdd_examen_estudiantesDep_G7$math_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    56.0    66.5    66.4    77.0   100.0
boxplot(cdd_examen_estudiantesDep_G7$math_score_100, main = "Diagrama de Caja de Math score", col = c("orange"))

Histograma de math score

summary(cdd_examen_estudiantesDep_G7$math_score_100)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    13.0    56.0    66.5    66.4    77.0   100.0
hist(cdd_examen_estudiantesDep_G7$math_score_100, main = "Histograma de math score", col = c("gold"))

Resumen y diagrama de Barras de race ethnicity

table(cdd_examen_estudiantesDep_G7$race_ethnicity)
## 
## group A group B group C group D group E 
##      79     205     323     262     131
prop.table(table(cdd_examen_estudiantesDep_G7$race_ethnicity))
## 
## group A group B group C group D group E 
##   0.079   0.205   0.323   0.262   0.131
barplot(table(cdd_examen_estudiantesDep_G7$race_ethnicity))

Resumen y Diagrama de Cajas Conjunto

tapply(cdd_examen_estudiantesDep_G7$math_score_100, cdd_examen_estudiantesDep_G7$race_ethnicity, mean)
##  group A  group B  group C  group D  group E 
## 65.21519 63.17073 63.13003 69.26718 74.46565
tapply(cdd_examen_estudiantesDep_G7$math_score_100, cdd_examen_estudiantesDep_G7$race_ethnicity, median)
## group A group B group C group D group E 
##      65      63      64      70      75
boxplot(cdd_examen_estudiantesDep_G7$math_score_100~cdd_examen_estudiantesDep_G7$race_ethnicity, main = "Boxplot Conjunto: math score - race ethnicity", col = c("orange", "gold"))

5.4.1. Formulación del modelo de RLogS entre las variables de estudio.

La navegación a través de las pestañas muestra los coeficientes del modelo RLogS y su resumen estadístico. Se menciona de nuevo que las variables de interés son: Math Score(variable dependiente) y Research reading Score(variable independiente)

El intercepto del modelo indica el valor de la variable dependiente cuando el puntaje de matemáticas es cero. El coeficiente mostrado representa el efecto del puntaje de matemáticas en la probabilidad de obtener un puntaje alto en la prueba de lectura. Un coeficiente positivo sugiere que a mayor puntaje de matemáticas, mayor probabilidad de un buen resultado en lectura.

El modelo parece tener un buen ajuste, con un valor-p del modelo estadísticamente significativo (p < 0.001). El coeficiente de determinación (R-cuadrado) indica que aproximadamente el 60% de la variabilidad en la variable de respuesta se explica por las variables predictoras en el modelo. Los errores estándar de los coeficientes son relativamente bajos, sugiriendo que las estimaciones de los parámetros son precisas. Los intervalos de confianza de 95% para los coeficientes no incluyen el valor cero, lo que refuerza la significancia estadística de los efectos.

Coeficientes de Modelo RLogs

modelo_RLog_Simple = glm(cdd_examen_estudiantesNum_G7$test_preparation_course~cdd_examen_estudiantesDep_G7$math_score_100, family = "binomial", data = data.frame(cdd_examen_estudiantesNum_G7$test_preparation_course, cdd_examen_estudiantesDep_G7$math_score_100))
coef(modelo_RLog_Simple)
##                                 (Intercept) 
##                                  2.13180473 
## cdd_examen_estudiantesDep_G7$math_score_100 
##                                 -0.02150917

Resumen Estadístico del Modelo RLogs

summary(modelo_RLog_Simple)
## 
## Call:
## glm(formula = cdd_examen_estudiantesNum_G7$test_preparation_course ~ 
##     cdd_examen_estudiantesDep_G7$math_score_100, family = "binomial", 
##     data = data.frame(cdd_examen_estudiantesNum_G7$test_preparation_course, 
##         cdd_examen_estudiantesDep_G7$math_score_100))
## 
## Coefficients:
##                                              Estimate Std. Error z value
## (Intercept)                                  2.131805   0.315692   6.753
## cdd_examen_estudiantesDep_G7$math_score_100 -0.021509   0.004531  -4.747
##                                             Pr(>|z|)    
## (Intercept)                                 1.45e-11 ***
## cdd_examen_estudiantesDep_G7$math_score_100 2.06e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1275.3  on 999  degrees of freedom
## Residual deviance: 1251.9  on 998  degrees of freedom
## AIC: 1255.9
## 
## Number of Fisher Scoring iterations: 4
modelo_RLog_Simple_S = glm(cdd_examen_estudiantesNum_G7$test_preparation_course~cdd_examen_estudiantesNum_G7$math_score_100, family = "binomial", data = data.frame(cdd_examen_estudiantesNum_G7$test_preparation_course, cdd_examen_estudiantesNum_G7$math_score_100))
summary(modelo_RLog_Simple_S)
## 
## Call:
## glm(formula = cdd_examen_estudiantesNum_G7$test_preparation_course ~ 
##     cdd_examen_estudiantesNum_G7$math_score_100, family = "binomial", 
##     data = data.frame(cdd_examen_estudiantesNum_G7$test_preparation_course, 
##         cdd_examen_estudiantesNum_G7$math_score_100))
## 
## Coefficients:
##                                              Estimate Std. Error z value
## (Intercept)                                  2.131805   0.315692   6.753
## cdd_examen_estudiantesNum_G7$math_score_100 -0.021509   0.004531  -4.747
##                                             Pr(>|z|)    
## (Intercept)                                 1.45e-11 ***
## cdd_examen_estudiantesNum_G7$math_score_100 2.06e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1275.3  on 999  degrees of freedom
## Residual deviance: 1251.9  on 998  degrees of freedom
## AIC: 1255.9
## 
## Number of Fisher Scoring iterations: 4

5.4.2. Análisis del modelo RLogS.

La pestaña Variable Predictora igual a Cero plantea dos situaciones interpretativas. La primera, permite comprender que el coeficiente del factor en el cual está presente la varaible predictora, estima una probabilidad de caso favorable cercana a cero en el orden de la diezmilésima. La segunda, acarrea una interpretación más delicada: como la variable Chance of Admit se mide en el intervalo [0,1] con dos cifras significativas y dos decimales de precisión, una unidad de medida razonable en ella sería una centésima, por ejemplo: pasar de 0.62 a 0.63 implica incrementar en una unidad de medida a 0.62. Así, se entiende que el cociente de probabilidades en relación con la variable predictora en el modelo RLogS refleje un incremento acumulado de ≈53474.4 veces desde 0 hasta 1, con incrementos de 0.01.

Con base en la pestaña de Probabilidades Estimadas se puede apreciar un delta de cambio absoluto en los registros presentados, donde la variación de la variable independiente (Reading score) impacta la probabilidad de la variable dependiente (Math score). El gráfico del modelo RLogS permite visualmente comprender el comportamiento de las variables involucradas en el modelo propuesto, mostrando cómo los cambios en el Reading score influyen en la probabilidad de obtener un determinado resultado en el Math score. La pestaña de Variable Predictora igual a Cero revela que el coeficiente del factor estudiado estima una probabilidad de caso favorable cercana a cero, específicamente en el orden de la diezmilésima. El análisis destaca la sensibilidad del modelo de regresión logística, donde pequeños cambios en la variable independiente (Reading score) pueden generar cambios significativos en la probabilidad de la variable dependiente (Math score). La gráfica de curva logística muestra que los casos favorables logran superar la barrera del 90% del valor de la variable estudiada.

Variable Predictora igual a 0

coef(modelo_RLog_Simple)
##                                 (Intercept) 
##                                  2.13180473 
## cdd_examen_estudiantesDep_G7$math_score_100 
##                                 -0.02150917
round(exp(coef(modelo_RLog_Simple)),6)
##                                 (Intercept) 
##                                    8.430067 
## cdd_examen_estudiantesDep_G7$math_score_100 
##                                    0.978720

Probabilidades Estimadas

predict(modelo_RLog_Simple, data.frame(seq(1, 1000)), type = "response")
##         1         2         3         4         5         6         7         8 
## 0.6661204 0.7809888 0.7032377 0.6167080 0.6116110 0.6849742 0.6895970 0.5328157 
##         9        10        11        12        13        14        15        16 
## 0.6849742 0.7541507 0.5005991 0.6013446 0.6167080 0.6318417 0.5961772 0.6564856 
##        17        18        19        20        21        22        23        24 
## 0.7077068 0.7251812 0.8371391 0.7846456 0.5857791 0.7077068 0.6467202 0.7659175 
##        25        26        27        28        29        30        31        32 
## 0.7581168 0.7378526 0.7294470 0.6467202 0.6318417 0.8056521 0.5647608 0.6116110 
##        33        34        35        36        37        38        39        40 
## 0.7809888 0.6756185 0.6064896 0.6613197 0.7121362 0.6661204 0.7077068 0.5059762 
##        41        42        43        44        45        46        47        48 
## 0.7251812 0.6167080 0.5647608 0.7077068 0.4952220 0.6987293 0.6803145 0.6756185 
##        49        50        51        52        53        54        55        56 
## 0.6613197 0.6987293 0.6756185 0.7336709 0.6318417 0.7953489 0.7121362 0.7165254 
##        57        58        59        60        61        62        63        64 
## 0.6661204 0.5594666 0.7735418 0.6613197 0.6217794 0.7077068 0.6564856 0.6167080 
##        65        66        67        68        69        70        71        72 
## 0.5857791 0.7460879 0.6467202 0.7541507 0.6064896 0.6987293 0.7165254 0.7121362 
##        73        74        75        76        77        78        79        80 
## 0.7460879 0.6064896 0.6467202 0.6467202 0.7541507 0.6417906 0.6116110 0.7251812 
##        81        82        83        84        85        86        87        88 
## 0.7581168 0.8122993 0.7378526 0.6116110 0.8089978 0.7294470 0.6849742 0.5113518 
##        89        90        91        92        93        94        95        96 
## 0.7165254 0.6417906 0.7121362 0.6318417 0.5961772 0.5274580 0.5961772 0.7077068 
##        97        98        99       100       101       102       103       104 
## 0.5220939 0.7620392 0.6849742 0.6987293 0.7251812 0.6268243 0.6064896 0.6708869 
##       105       106       107       108       109       110       111       112 
## 0.7541507 0.6516188 0.5909883 0.7165254 0.5381658 0.8155568 0.6064896 0.7772875 
##       113       114       115       116       117       118       119       120 
## 0.6849742 0.7697518 0.6167080 0.6217794 0.7460879 0.7032377 0.7032377 0.6217794 
##       121       122       123       124       125       126       127       128 
## 0.7208738 0.6116110 0.7378526 0.7772875 0.6318417 0.6895970 0.6167080 0.7620392 
##       129       130       131       132       133       134       135       136 
## 0.4952220 0.5857791 0.6167080 0.6708869 0.6756185 0.6895970 0.7208738 0.6368308 
##       137       138       139       140       141       142       143       144 
## 0.6368308 0.7501410 0.7336709 0.6987293 0.6613197 0.6756185 0.5700404 0.7208738 
##       145       146       147       148       149       150       151       152 
## 0.6013446 0.7378526 0.6849742 0.6987293 0.4952220 0.7581168 0.6661204 0.7251812 
##       153       154       155       156       157       158       159       160 
## 0.6849742 0.6613197 0.7251812 0.7697518 0.6803145 0.5381658 0.5909883 0.5805506 
##       161       162       163       164       165       166       167       168 
## 0.5805506 0.6756185 0.5857791 0.6516188 0.6708869 0.6467202 0.6708869 0.7121362 
##       169       170       171       172       173       174       175       176 
## 0.5700404 0.6013446 0.6895970 0.6467202 0.7121362 0.6564856 0.5857791 0.7419917 
##       177       178       179       180       181       182       183       184 
## 0.7208738 0.7208738 0.5857791 0.5541588 0.7378526 0.7501410 0.5805506 0.6564856 
##       185       186       187       188       189       190       191       192 
## 0.6268243 0.5435072 0.6217794 0.6849742 0.6368308 0.7336709 0.7077068 0.8056521 
##       193       194       195       196       197       198       199       200 
## 0.6613197 0.6167080 0.6803145 0.7846456 0.7419917 0.7294470 0.7251812 0.6318417 
##       201       202       203       204       205       206       207       208 
## 0.7419917 0.7208738 0.6167080 0.7460879 0.6708869 0.6167080 0.6318417 0.5753040 
##       209       210       211       212       213       214       215       216 
## 0.6167080 0.6803145 0.6941822 0.5113518 0.6708869 0.6895970 0.6803145 0.7208738 
##       217       218       219       220       221       222       223       224 
## 0.7294470 0.6467202 0.6708869 0.6613197 0.5541588 0.6756185 0.7697518 0.6064896 
##       225       226       227       228       229       230       231       232 
## 0.5005991 0.5909883 0.7988277 0.6941822 0.6217794 0.5274580 0.6268243 0.5961772 
##       233       234       235       236       237       238       239       240 
## 0.7988277 0.6217794 0.7077068 0.4952220 0.7294470 0.5909883 0.6217794 0.5857791 
##       241       242       243       244       245       246       247       248 
## 0.6417906 0.6217794 0.6708869 0.6849742 0.7953489 0.6613197 0.7809888 0.6613197 
##       249       250       251       252       253       254       255       256 
## 0.7165254 0.6318417 0.7294470 0.5594666 0.6661204 0.6987293 0.7378526 0.7294470 
##       257       258       259       260       261       262       263       264 
## 0.6013446 0.6564856 0.6803145 0.6013446 0.7077068 0.7846456 0.6803145 0.6941822 
##       265       266       267       268       269       270       271       272 
## 0.5488386 0.6368308 0.6368308 0.6661204 0.7121362 0.6756185 0.6467202 0.7032377 
##       273       274       275       276       277       278       279       280 
## 0.6318417 0.5328157 0.5753040 0.6217794 0.7077068 0.6417906 0.7809888 0.6268243 
##       281       282       283       284       285       286       287       288 
## 0.5753040 0.4952220 0.7294470 0.7809888 0.7460879 0.6167080 0.5909883 0.7208738 
##       289       290       291       292       293       294       295       296 
## 0.6895970 0.6564856 0.6116110 0.6467202 0.7032377 0.6987293 0.7697518 0.6167080 
##       297       298       299       300       301       302       303       304 
## 0.7419917 0.7165254 0.6564856 0.7541507 0.7697518 0.7501410 0.7208738 0.6368308 
##       305       306       307       308       309       310       311       312 
## 0.6467202 0.7251812 0.6708869 0.6849742 0.6708869 0.6064896 0.6368308 0.7953489 
##       313       314       315       316       317       318       319       320 
## 0.7419917 0.5647608 0.6467202 0.5753040 0.7077068 0.5700404 0.6803145 0.5857791 
##       321       322       323       324       325       326       327       328 
## 0.7077068 0.7032377 0.7809888 0.5909883 0.5647608 0.6895970 0.6217794 0.6849742 
##       329       330       331       332       333       334       335       336 
## 0.7077068 0.6941822 0.6116110 0.6116110 0.7165254 0.5167248 0.7501410 0.6516188 
##       337       338       339       340       341       342       343       344 
## 0.7697518 0.7620392 0.7077068 0.6516188 0.6987293 0.7336709 0.6941822 0.7208738 
##       345       346       347       348       349       350       351       352 
## 0.6013446 0.6849742 0.6064896 0.6318417 0.7581168 0.6417906 0.7077068 0.7541507 
##       353       354       355       356       357       358       359       360 
## 0.6613197 0.6613197 0.6756185 0.7419917 0.7501410 0.7077068 0.6467202 0.7077068 
##       361       362       363       364       365       366       367       368 
## 0.6708869 0.7659175 0.7378526 0.6116110 0.6417906 0.6987293 0.7208738 0.6803145 
##       369       370       371       372       373       374       375       376 
## 0.7121362 0.6516188 0.5805506 0.6708869 0.7165254 0.7032377 0.5647608 0.6368308 
##       377       378       379       380       381       382       383       384 
## 0.5753040 0.7460879 0.5909883 0.6013446 0.7501410 0.5753040 0.6516188 0.5541588 
##       385       386       387       388       389       390       391       392 
## 0.6417906 0.6013446 0.7697518 0.7251812 0.5909883 0.6318417 0.6849742 0.7541507 
##       393       394       395       396       397       398       399       400 
## 0.8643835 0.6661204 0.7121362 0.6803145 0.5753040 0.6516188 0.5488386 0.7294470 
##       401       402       403       404       405       406       407       408 
## 0.6318417 0.6941822 0.7208738 0.6756185 0.6167080 0.6318417 0.5274580 0.7251812 
##       409       410       411       412       413       414       415       416 
## 0.7336709 0.6368308 0.5961772 0.6895970 0.7208738 0.7208738 0.6941822 0.6268243 
##       417       418       419       420       421       422       423       424 
## 0.6064896 0.6516188 0.6417906 0.7882579 0.7121362 0.6217794 0.7620392 0.6167080 
##       425       426       427       428       429       430       431       432 
## 0.7809888 0.6116110 0.6849742 0.5857791 0.7208738 0.5594666 0.5909883 0.5700404 
##       433       434       435       436       437       438       439       440 
## 0.6941822 0.6116110 0.6661204 0.5857791 0.6613197 0.7294470 0.5435072 0.6661204 
##       441       442       443       444       445       446       447       448 
## 0.7294470 0.5700404 0.6268243 0.7208738 0.5328157 0.6895970 0.5857791 0.6368308 
##       449       450       451       452       453       454       455       456 
## 0.7121362 0.6516188 0.7208738 0.6756185 0.6217794 0.7032377 0.6318417 0.6756185 
##       457       458       459       460       461       462       463       464 
## 0.5541588 0.6467202 0.6849742 0.7121362 0.7165254 0.7460879 0.8219402 0.6564856 
##       465       466       467       468       469       470       471       472 
## 0.7460879 0.6661204 0.6318417 0.7541507 0.6849742 0.6368308 0.5435072 0.6013446 
##       473       474       475       476       477       478       479       480 
## 0.6708869 0.7336709 0.6756185 0.5857791 0.6013446 0.6613197 0.6613197 0.6895970 
##       481       482       483       484       485       486       487       488 
## 0.6217794 0.6167080 0.5857791 0.6467202 0.5700404 0.5328157 0.6987293 0.7121362 
##       489       490       491       492       493       494       495       496 
## 0.5805506 0.6708869 0.5753040 0.7121362 0.7772875 0.6268243 0.6756185 0.6116110 
##       497       498       499       500       501       502       503       504 
## 0.8281491 0.6467202 0.5700404 0.5541588 0.7294470 0.5647608 0.6467202 0.6167080 
##       505       506       507       508       509       510       511       512 
## 0.7697518 0.5594666 0.5700404 0.7620392 0.6564856 0.6756185 0.5961772 0.5488386 
##       513       514       515       516       517       518       519       520 
## 0.6116110 0.6467202 0.6268243 0.6516188 0.7251812 0.7460879 0.6013446 0.6116110 
##       521       522       523       524       525       526       527       528 
## 0.5541588 0.6756185 0.6116110 0.6564856 0.7460879 0.7419917 0.6064896 0.5541588 
##       529       530       531       532       533       534       535       536 
## 0.7501410 0.6849742 0.5594666 0.6708869 0.7620392 0.6895970 0.6318417 0.5909883 
##       537       538       539       540       541       542       543       544 
## 0.5857791 0.6987293 0.6708869 0.6217794 0.6268243 0.6167080 0.5909883 0.6849742 
##       545       546       547       548       549       550       551       552 
## 0.6516188 0.5805506 0.6613197 0.7165254 0.7918257 0.7460879 0.4952220 0.5857791 
##       553       554       555       556       557       558       559       560 
## 0.5381658 0.6467202 0.6417906 0.7918257 0.7988277 0.6564856 0.6756185 0.7165254 
##       561       562       563       564       565       566       567       568 
## 0.7809888 0.6987293 0.7121362 0.7077068 0.6318417 0.6167080 0.6708869 0.6895970 
##       569       570       571       572       573       574       575       576 
## 0.8187704 0.6516188 0.6661204 0.5961772 0.7165254 0.6941822 0.7541507 0.5594666 
##       577       578       579       580       581       582       583       584 
## 0.7378526 0.6613197 0.6613197 0.7541507 0.5805506 0.6564856 0.7336709 0.6013446 
##       585       586       587       588       589       590       591       592 
## 0.4952220 0.7294470 0.7032377 0.6116110 0.5805506 0.7336709 0.5961772 0.5488386 
##       593       594       595       596       597       598       599       600 
## 0.6849742 0.4952220 0.7165254 0.7581168 0.6268243 0.7581168 0.7735418 0.6167080 
##       601       602       603       604       605       606       607       608 
## 0.7809888 0.6564856 0.7697518 0.6564856 0.5541588 0.7659175 0.5909883 0.6417906 
##       609       610       611       612       613       614       615       616 
## 0.6803145 0.5541588 0.7077068 0.6849742 0.7251812 0.5857791 0.7121362 0.7336709 
##       617       618       619       620       621       622       623       624 
## 0.6268243 0.6661204 0.7077068 0.6849742 0.7460879 0.7882579 0.6318417 0.6564856 
##       625       626       627       628       629       630       631       632 
## 0.6167080 0.7809888 0.5167248 0.5753040 0.5753040 0.6417906 0.6849742 0.7077068 
##       633       634       635       636       637       638       639       640 
## 0.7077068 0.7378526 0.4952220 0.6167080 0.6849742 0.6803145 0.4952220 0.6708869 
##       641       642       643       644       645       646       647       648 
## 0.5647608 0.6368308 0.6564856 0.6895970 0.7809888 0.7208738 0.6167080 0.6849742 
##       649       650       651       652       653       654       655       656 
## 0.5753040 0.8155568 0.5909883 0.5961772 0.5381658 0.7419917 0.7251812 0.6217794 
##       657       658       659       660       661       662       663       664 
## 0.6987293 0.7620392 0.6013446 0.7336709 0.5488386 0.7294470 0.5381658 0.6849742 
##       665       666       667       668       669       670       671       672 
## 0.6467202 0.6803145 0.6661204 0.6849742 0.6849742 0.7032377 0.7460879 0.6268243 
##       673       674       675       676       677       678       679       680 
## 0.8022621 0.7294470 0.6849742 0.6268243 0.6849742 0.6516188 0.6941822 0.6318417 
##       681       682       683       684       685       686       687       688 
## 0.7121362 0.7772875 0.5647608 0.6564856 0.6564856 0.7077068 0.7541507 0.6116110 
##       689       690       691       692       693       694       695       696 
## 0.7251812 0.7953489 0.5274580 0.6613197 0.5488386 0.7121362 0.5167248 0.6613197 
##       697       698       699       700       701       702       703       704 
## 0.7336709 0.5488386 0.6467202 0.7077068 0.7772875 0.7697518 0.5753040 0.6467202 
##       705       706       707       708       709       710       711       712 
## 0.6417906 0.6516188 0.5541588 0.5381658 0.6013446 0.6013446 0.7165254 0.5328157 
##       713       714       715       716       717       718       719       720 
## 0.7460879 0.7032377 0.6803145 0.6368308 0.5909883 0.7501410 0.7378526 0.7882579 
##       721       722       723       724       725       726       727       728 
## 0.7620392 0.5857791 0.7620392 0.6708869 0.6987293 0.7460879 0.6013446 0.6268243 
##       729       730       731       732       733       734       735       736 
## 0.7121362 0.8311887 0.5488386 0.6849742 0.4952220 0.6217794 0.7336709 0.5961772 
##       737       738       739       740       741       742       743       744 
## 0.5488386 0.5857791 0.6941822 0.6064896 0.7336709 0.6895970 0.5753040 0.6318417 
##       745       746       747       748       749       750       751       752 
## 0.5857791 0.6116110 0.7772875 0.6167080 0.5220939 0.7419917 0.6318417 0.6318417 
##       753       754       755       756       757       758       759       760 
## 0.6516188 0.6941822 0.5274580 0.6708869 0.5857791 0.6268243 0.7165254 0.6708869 
##       761       762       763       764       765       766       767       768 
## 0.6941822 0.6516188 0.7121362 0.6116110 0.6895970 0.6803145 0.7208738 0.6417906 
##       769       770       771       772       773       774       775       776 
## 0.7460879 0.6895970 0.6217794 0.6368308 0.6417906 0.5753040 0.6467202 0.8219402 
##       777       778       779       780       781       782       783       784 
## 0.7772875 0.6116110 0.7501410 0.7882579 0.5435072 0.6467202 0.5805506 0.6849742 
##       785       786       787       788       789       790       791       792 
## 0.6516188 0.7501410 0.6613197 0.5805506 0.6941822 0.6895970 0.6708869 0.7336709 
##       793       794       795       796       797       798       799       800 
## 0.6613197 0.6895970 0.5488386 0.7735418 0.6318417 0.6895970 0.7165254 0.6803145 
##       801       802       803       804       805       806       807       808 
## 0.6064896 0.7659175 0.6564856 0.7294470 0.6318417 0.7460879 0.7121362 0.6941822 
##       809       810       811       812       813       814       815       816 
## 0.6756185 0.7378526 0.7460879 0.7165254 0.6756185 0.6516188 0.5435072 0.7501410 
##       817       818       819       820       821       822       823       824 
## 0.5274580 0.6167080 0.7032377 0.7121362 0.6217794 0.6756185 0.6268243 0.6516188 
##       825       826       827       828       829       830       831       832 
## 0.6064896 0.4952220 0.5857791 0.6516188 0.5113518 0.8056521 0.7882579 0.7581168 
##       833       834       835       836       837       838       839       840 
## 0.8643835 0.5753040 0.6064896 0.6217794 0.7294470 0.6613197 0.6661204 0.4952220 
##       841       842       843       844       845       846       847       848 
## 0.7251812 0.6417906 0.5435072 0.5647608 0.6708869 0.6756185 0.7772875 0.6661204 
##       849       850       851       852       853       854       855       856 
## 0.5274580 0.7121362 0.5541588 0.6167080 0.7121362 0.6417906 0.5059762 0.5647608 
##       857       858       859       860       861       862       863       864 
## 0.6941822 0.5753040 0.5961772 0.6318417 0.5059762 0.5700404 0.5753040 0.6613197 
##       865       866       867       868       869       870       871       872 
## 0.6708869 0.6268243 0.6064896 0.7032377 0.6987293 0.6564856 0.7460879 0.6895970 
##       873       874       875       876       877       878       879       880 
## 0.6516188 0.6467202 0.6467202 0.7419917 0.7336709 0.6268243 0.7378526 0.6803145 
##       881       882       883       884       885       886       887       888 
## 0.6756185 0.5005991 0.6987293 0.6516188 0.6167080 0.7918257 0.6368308 0.7294470 
##       889       890       891       892       893       894       895       896 
## 0.6661204 0.6661204 0.7378526 0.6803145 0.7208738 0.7208738 0.5700404 0.6467202 
##       897       898       899       900       901       902       903       904 
## 0.6467202 0.7378526 0.6268243 0.7620392 0.7032377 0.6803145 0.6116110 0.7032377 
##       905       906       907       908       909       910       911       912 
## 0.6013446 0.6613197 0.6167080 0.6708869 0.8281491 0.6013446 0.7501410 0.7336709 
##       913       914       915       916       917       918       919       920 
## 0.7251812 0.7032377 0.6167080 0.6803145 0.5857791 0.6516188 0.6417906 0.5857791 
##       921       922       923       924       925       926       927       928 
## 0.7336709 0.7294470 0.7208738 0.6756185 0.6987293 0.6803145 0.6467202 0.6941822 
##       929       930       931       932       933       934       935       936 
## 0.6941822 0.6756185 0.6467202 0.7501410 0.6268243 0.7251812 0.6516188 0.5435072 
##       937       938       939       940       941       942       943       944 
## 0.8056521 0.7620392 0.7620392 0.6895970 0.5381658 0.6318417 0.5961772 0.6217794 
##       945       946       947       948       949       950       951       952 
## 0.7121362 0.6849742 0.7121362 0.7581168 0.7460879 0.7251812 0.5541588 0.6167080 
##       953       954       955       956       957       958       959       960 
## 0.7581168 0.6708869 0.7501410 0.5857791 0.6564856 0.6368308 0.7697518 0.5435072 
##       961       962       963       964       965       966       967       968 
## 0.7460879 0.5647608 0.7581168 0.6849742 0.4952220 0.5700404 0.7208738 0.5805506 
##       969       970       971       972       973       974       975       976 
## 0.7846456 0.6661204 0.5753040 0.6803145 0.5961772 0.6116110 0.7032377 0.6318417 
##       977       978       979       980       981       982       983       984 
## 0.8122993 0.7251812 0.7378526 0.7121362 0.7846456 0.6803145 0.6564856 0.7077068 
##       985       986       987       988       989       990       991       992 
## 0.6849742 0.6318417 0.6116110 0.6116110 0.6268243 0.6516188 0.6661204 0.5647608 
##       993       994       995       996       997       998       999      1000 
## 0.6564856 0.7077068 0.5700404 0.6368308 0.5753040 0.8089978 0.6368308 0.6756185

Grafica del Modelo RLogs

Preparacion_para_examen <- cdd_examen_estudiantesNum_G7$test_preparation_course
Puntuacion_matematicas <- cdd_examen_estudiantesNum_G7$math_score_100
dataPlot <- data.frame(Puntuacion_matematicas, Preparacion_para_examen)
plot(Preparacion_para_examen~Puntuacion_matematicas, data = dataPlot, main = "Modelo RLogS: Puntuación Matematicas - Preparación para examen", xlab = "Chance of Admit", ylab = "Preparación para examen = 0 | Preparación para examen = 1", col = "gold", pch = "I")
curve(predict(glm(Preparacion_para_examen~Puntuacion_matematicas, family = "binomial", data = dataPlot), data.frame(Puntuacion_matematicas = x), type = "response"), col = "orange", lwd = 3, add = TRUE)

6. Conclusiones

  • Durante el estudio de este data set logramos deducir la existencia de variables poco útiles para el desarrollo de este proyecto, estas variables fuera de no tener una gran relevancia no fueron útiles para generar relaciones con otras, fuera de ellas mismas por lo tanto eran despreciables para el estudio y por ende descartadas en las mayoría de análisis, las variables fueron de naturaleza cualitativa y son: el nivel de educación de los padres, el tipo de almuerzo y si habían realizado un test de preparación previo al examen, examen el cual debió ser de mala calidad o poco efectivo porque en ciertas partes se evidenciaba que estudiantes que no habían realizado este test tenían mejores puntajes que estudiantes que si lo habían aplicado algo que escapa a toda lógica.
  • Como contraparte a la conclusión anterior tenemos el caso de 4 variables que poseen una gran relación y nos permitió poder generar de manera sencilla los análisis, por la falta de una variable conclusiva nos vimos en la tarea de buscar la variable que compartía mayor dependencia con las variables restantes en nuestro caso fue la puntuación en matemáticas que fue posible usarla como variable predicha y así ver su comportamiento en base a los otros dos test (lectura y escritura) y ver como esta afectaba también a una variable clasificadora (raza) aunque esta última no presentaba mucha importancia por que no afectaba considerablemente el resultado del test.
  • A pesar de la gran cantidad de variables, estas realmente no presentan un gran aporte al rendimiento del estudiante en sus exámenes, por lo cual este no se ve influido por su edad, género y raza afirmación que tiene sentido ya que todos somos iguales, casos un poco mas ajenos como el almuerzo o el nivel de educación de los padres tampoco afectan los resultados lo que nos afirma que todo está en la disposición del estudiante, como ultimo a comentar se encuentra el caso del examen de preparación y el porcentaje de asistencia que deberían influir mas en el rendimiento pero según lo estudiado se ve que no es así lo que nos genera nuevos interrogantes pero con la información actual simplemente se queda como algo curioso.

7. Bibliografía

Cramer, Harald. (1953). Métodos matemáticos de estadística (1st ed.). AGUILAR. Devore, Jay L. (2008). Probabilidad y estadı́stica para ingenierı́a y ciencias (7th ed.). CENGAGE Learning. Aldás, J. y Uriel, E. (2017). Análisis multivariante aplicado con R (2ª ed.). ALFACENTAURO. Aristizábal R., WD (2017). Análisis multivariado unidad 1 estadística descriptiva multivariada . En Fundación Universitaria Los Libertadores . Daniel, Wayne W. (2013). Bioestadística base para el análisis de las ciencias de la salud (4ª ed.). LIMUSA WILEY.. Díaz Morales, LG y Morales Rivera, MA (2012). Análisis estadístico de datos multivariados ( 1ª ed.) . UNAL. Doornik, JA y Hansen, H. (2008). Una prueba ómnibus para normalidad univariante y multivariante. Oxford Bulletin of Economics and Statistics . https://doi.org/10.1111/j.1468-0084.2008.00537.x Hair, JF, Anderson, RE, Tatham, RL, & Black, WC (1999). Análisis multivariante ( 5.ª ed.). PRENTICE HALL. Porras C., JC (2016). Prueba de comparación mutivariada normal. Anales Científicos .​ https://dialnet.unirioja.es/descarga/articulo/6171231.pdf Tucker, HG (1973). Introducci ó n a la teo rí a matem á tica de las probabilidades ya la estad í tica (1ª ed.). VICENS-VIVES.

LS0tDQp0aXRsZTogIioqUk1EX0c3KioiDQpzdWJ0aXRsZTogIkVzdHVkaW8gZGUgQW7DoWxpc2lzIE11bHRpdmFyaWFkbyBjb24gYmFzZSBlbiB1biBjb25qdW50byBkZSBkYXRvcyBzb2JyZSBub3RhcyBvYnRlbmlkYXMgcG9yIGxvcyBlc3R1ZGlhbnRlcyBlbiBkaXZlcnNhcyBhc2lnbmF0dXJhcyIgDQphdXRob3I6ICJyZWJlbGxvbi5qb3NlOjpqdWFuLm1hbnVlbC5vcnRpejo6Y2FybG9zLmFuZHJlcy5sZW9uOjpAY29ycmVvdW5pdmFsbGUuZWR1LmNvIg0KZGF0ZTogIkVzdHVkaW8gaGVjaG8gZHVyYW50ZSBlbCBwZXJpb2RvIGFjYWTDqW1pY28gYWdvc3RvLWRpY2llbWJyZSBkZSAyMDI0Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogbHVtZW4NCmJpYmxpb2dyYXBoeTogYmlibGlvZ3JhZmlhX01FLmJpYg0KY3NsOiBhcGEuY3NsDQpsaW5rLWNpdGF0aW9uczogeWVzDQotLS0NCjwhLS0gQ29uZmlndXJhY2nDs24gR2xvYmFsIGRlIFIgLS0+DQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoR0dhbGx5KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShhbmRyZXdzKQ0KbGlicmFyeSh0Y2x0aykNCmxpYnJhcnkoYXBscGFjaykNCmxpYnJhcnkoZ3JhcGhpY3MpDQpsaWJyYXJ5KE1WTikNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KEZhY3RvTWluZVIpDQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShGYWN0b0NsYXNzKQ0KbGlicmFyeShjbHVzdGVyKQ0KbGlicmFyeShkZW5kZXh0ZW5kKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoTmJDbHVzdCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHN0YXJnYXplcikNCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSkNCg0KY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc19HNyA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9jYWxlby9PbmVEcml2ZS9Fc2NyaXRvcmlvL0N1cnNvIEdkRCAyMDI0XzFbRzddL2NkZF9leGFtZW5fZXN0dWRpYW50ZXNfRzcueGxzeCIpDQoNCmNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzcgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvY2FsZW8vT25lRHJpdmUvRXNjcml0b3Jpby9DdXJzbyBHZEQgMjAyNF8xW0c3XS9jZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3Lnhsc3giKQ0KDQpjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3IDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL2NhbGVvL09uZURyaXZlL0VzY3JpdG9yaW8vQ3Vyc28gR2REIDIwMjRfMVtHN10vY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HNy54bHN4IikNCg0KY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc19yZWNlX2V0aG5pY2l0eV9HNyA8LSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9jYWxlby9PbmVEcml2ZS9Fc2NyaXRvcmlvL0N1cnNvIEdkRCAyMDI0XzFbRzddL2NkZF9leGFtZW5fZXN0dWRpYW50ZXNfcmVjZV9ldGhuaWNpdHlfRzcueGxzeCIpDQoNCmNkZF9leGFtZW5fZXN0dWRpYW50ZXNfcmFjZV9ldGhuaWNpdHlfcHJvbWVkaW8gPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvY2FsZW8vT25lRHJpdmUvRXNjcml0b3Jpby9DdXJzbyBHZEQgMjAyNF8xW0c3XS9jZGRfZXhhbWVuX2VzdHVkaWFudGVzX3JhY2VfZXRobmljaXR5X3Byb21lZGlvLnhsc3giKQ0KDQoNCmBgYA0KIyMgKipGYXNlIDEgW0Rlc2NyaXBjaW9uZXMgTXVsdGl2YXJpYW50ZXNdKioNCg0KIyMjICoqMS4xLiBPYmpldGl2b3MqKg0KDQojIyMgT2JqZXRpdm9zIHBhcmEgbGEgRmFzZSAxOiBEZXNjcmlwY2lvbmVzIE11bHRpdmFyaWFudGVzDQoNCjEuICoqRXhwbG9yYXIgbGEgZXN0cnVjdHVyYSBkZWwgY29uanVudG8gZGUgZGF0b3MqKjoNCiAgIC0gSWRlbnRpZmljYXIgeSBkZXNjcmliaXIgbGFzIHZhcmlhYmxlcyBxdWUgY29tcG9uZW4gZWwgY29uanVudG8gZGUgZGF0b3MuDQogICAtIERpZmVyZW5jaWFyIGVudHJlIHZhcmlhYmxlcyBjdWFsaXRhdGl2YXMgeSBjdWFudGl0YXRpdmFzLCB5IHN1IGltcGFjdG8gZW4gbG9zIHJlc3VsdGFkb3MgZ2VuZXJhbGVzIGRlIGxvcyBlc3R1ZGlhbnRlcy4NCg0KMi4gKipBbmFsaXphciBsYXMgcmVsYWNpb25lcyBlbnRyZSB2YXJpYWJsZXMqKjoNCiAgIC0gSW52ZXN0aWdhciBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgZGlzdGludGFzIHZhcmlhYmxlcyAocG9yIGVqZW1wbG8sIGVudHJlIGVsIG5pdmVsIGRlIGluc3RydWNjacOzbiBkZSBsb3MgcGFkcmVzIHkgZWwgcmVuZGltaWVudG8gYWNhZMOpbWljbyBkZSBsb3MgZXN0dWRpYW50ZXMpLg0KICAgLSBFc3R1ZGlhciBsYXMgaW50ZXJhY2Npb25lcyBlbnRyZSB2YXJpYWJsZXMgcGFyYSBpZGVudGlmaWNhciBwYXRyb25lcyBlbiBlbCBkZXNlbXBlw7FvIGVzdHVkaWFudGlsLg0KDQoNCiMjIyAqKjEuMi4gRGVzY3JpcGNpw7NuIGRlIGxvcyBkYXRvcyoqDQoNCiMjIyAxLjIuMS4gRGVzY3JpcGNpw7NuIGRlbCBDb25qdW50byBkZSBEYXRvcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbCBjb25qdW50byBkZSBkYXRvcyBwcmVzZW50YSBpbmZvcm1hY2nDs24gc29icmUgZXN0dWRpYW50ZXMgam92ZW5lcywgZGUgw61uZG9sZSB0YW50byBkZW1vZ3LDoWZpY2EgY29tbyBhY2Fkw6ltaWNhIHkgcXVlIHN1bWEgdW4gdG90YWwgZGUgMTAgY2FtcG9zIG8gdmFyaWFibGVzIHBvciBjYWRhIHVubyBkZSBsb3MgcmVnaXN0cm9zLiBFbiBlc3RlIHNlbnRpZG8sIGxhIHVuaWRhZCBjb25zaWRlcmFkYSBlcyB1bmEgZmlsYSBxdWUgcmVwcmVzZW50YSBhIHVuIMO6bmljbyBlc3R1ZGlhbnRlLCB5IGxhcyB2YXJpYWJsZXMgcmVwcmVzZW50YW4gZGF0b3MgdGFudG8gY3VhbGl0YXRpdm9zIGNvbW8gY3VhbnRpdGF0aXZvcyBxdWUgcmVjb2dlbiwgcG9yIGVqZW1wbG8sIGVsIGfDqW5lcm8sIGxhIGVkYWQgZGVsIGVzdHVkaWFudGUsIGVsIG5pdmVsIGRlIGluc3RydWNjacOzbiBkZSBsb3MgcGFkcmVzIG8gbG9zIHJlc3VsdGFkb3MgcXVlIGhhIGFsY2FuemFkbyBjYWRhIHVubyBkZSBsb3MgZGlzdGludG9zIGFwYXJ0YWRvcyBkZSB1biBleGFtZW4uIEVsIHByb3BpbyBjb25qdW50byBkZSBkYXRvcyBub3MgZGEgdW5hIHZpc2nDs24gYW1wbGlhIGRlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIHkgZGUgbG9zIHJlc3VsdGFkb3MgYWNhZMOpbWljb3MgZGUgbG9zIGVzdHVkaWFudGVzLCB5IGNvbiAxMCB2YXJpYWJsZXMsIG5vcyBwZXJtaXRlIGF0ZW5kZXIgYSBsYSBmaW5hbGlkYWQgZGVsIGFuw6FsaXNpcyBlc3RhZMOtc3RpY28geSwgcG9yIHRhbnRvLCBhIGxhIGLDunNxdWVkYSBkZSBwb3NpYmxlcyBjb3JyZWxhY2lvbmVzIGVudHJlIGxvcyBkaXN0aW50b3MgZmFjdG9yZXMgc29jaW9kZW1vZ3LDoWZpY29zIHkgbGFzIHB1bnR1YWNpb25lcyBvYnRlbmlkYXMgZW4gbGFzIHBydWViYXMuDQoNCi0gKipHZW5kZXIgKGN1YWxpdGF0aXZhOjpub21pbmFsKToqKiBSZWdpc3RyYSBlbCBzZXhvIGRlbCBlc3R1ZGlhbnRlLCBkb25kZSAibWFsZSIgcmVwcmVzZW50YSBtYXNjdWxpbm8geSAiZmVtYWxlIiBmZW1lbmluby4NCiAgDQotICoqQWdlIChjdWFudGl0YXRpdmE6OnJhesOzbik6KiogUmVnaXN0cmEgbGEgZWRhZCBkZWwgZXN0dWRpYW50ZSBlbiBhw7FvcyBjb21wbGV0b3MuIEVzdGEgdmFyaWFibGUgZnVlIGdlbmVyYWRhIGFsZWF0b3JpYW1lbnRlLCBwZXJvIGNvbiB1bmEgcHJldmlhIGludmVzdGlnYWNpw7NuIHBhcmEgdGVuZXIgdmFsb3JlcyBlc3RpbWFkb3MgeSBubyBjb21wcm9tZXRlciBsYSBhdXRlbnRpY2lkYWQgZGUgbG9zIGRhdG9zLiBQYXJhIGVsbG8sIHVzYW1vcyBlbCByYW5nbyBkZSBlZGFkIGVuIGVsIHF1ZSB1bmEgcGVyc29uYSBlcyBjb25zaWRlcmFkYSBqb3ZlbiwgY29uIGVsIGZpbiBkZSBwcm9wb3JjaW9uYXIgdmFsb3JlcyBwcmVjaXNvcyB5IGNvbnRhciBjb24gdW5hIHZhcmlhYmxlIHF1ZSBjb21wbGVtZW50ZSBlbCBlc3R1ZGlvLg0KICANCi0gKipSYWNlL0V0aG5pY2l0eSAoY3VhbGl0YXRpdmE6Om5vbWluYWwpOioqIFJlZ2lzdHJhIGVsIGdydXBvIMOpdG5pY28gYWwgcXVlIHBlcnRlbmVjZSBlbCBlc3R1ZGlhbnRlLiBMb3MgZ3J1cG9zIGVzdMOhbiBpZGVudGlmaWNhZG9zIHBvciBsZXRyYXMgKGUuZy4sICJncm91cCBBIiwgImdyb3VwIEIiLCBldGMuKS4NCiAgDQotICoqUGFyZW50YWwgTGV2ZWwgb2YgRWR1Y2F0aW9uIChjdWFsaXRhdGl2YTo6b3JkaW5hbCk6KiogUmVnaXN0cmEgZWwgbml2ZWwgZWR1Y2F0aXZvIGFsY2FuemFkbyBwb3IgbG9zIHBhZHJlcyBkZWwgZXN0dWRpYW50ZS4gTG9zIG5pdmVsZXMgaW5jbHV5ZW4gZGVzZGUgImhpZ2ggc2Nob29sIiBoYXN0YSAiYXNzb2NpYXRlJ3MgZGVncmVlIi4NCiAgDQotICoqTHVuY2ggKGN1YWxpdGF0aXZhOjpub21pbmFsKToqKiBJbmRpY2Egc2kgZWwgZXN0dWRpYW50ZSByZWNpYmUgdW4gYWxtdWVyem8gZXN0w6FuZGFyICgic3RhbmRhcmQiKSBvIHN1YnNpZGlhZG8gKCJmcmVlL3JlZHVjZWQiKS4NCiAgDQotICoqVGVzdCBQcmVwYXJhdGlvbiBDb3Vyc2UgKGN1YWxpdGF0aXZhOjpub21pbmFsKToqKiBSZWdpc3RyYSBzaSBlbCBlc3R1ZGlhbnRlIGNvbXBsZXTDsyB1biBjdXJzbyBkZSBwcmVwYXJhY2nDs24gcGFyYSBlbCBleGFtZW4uICJDb21wbGV0ZWQiIGluZGljYSBxdWUgY29tcGxldMOzIGVsIGN1cnNvLCB5ICJub25lIiBxdWUgbm8gbG8gaGl6by4NCiAgDQotICoqQXR0ZW5kYW5jZSAoY3VhbnRpdGF0aXZhOjpyYXrDs24pOioqIFJlZ2lzdHJhIGVsIHBvcmNlbnRhamUgZGUgYXNpc3RlbmNpYSBkZWwgZXN0dWRpYW50ZSBhIGxhcyBjbGFzZXMsIGVuIHVuYSBlc2NhbGEgZGUgMCBhIDEwMC4gRXN0YSB2YXJpYWJsZSBmdWUgdG9tYWRhIGRlbCBjb25qdW50byBkZSBkYXRvcyBkZSB1bm9zIGNvbXBhw7Flcm9zIGRlYmlkbyBhIHF1ZSBudWVzdHJvcyBjb25qdW50b3Mgc29uIHNpbWlsYXJlcywgY29uIGVsIG9iamV0aXZvIGRlIGNvbXBsZXRhciBpbmZvcm1hY2nDs24gZmFsdGFudGUgZW4gbnVlc3RybyBlc3R1ZGlvLiBBbCBpZ3VhbCBxdWUgbGEgb3RyYSB2YXJpYWJsZSwgZXN0YSBjb250w7MgY29uIHVuIGVzdHVkaW8gcHJldmlvIHBhcmEgcG9kZXIgZGVmaW5pciB1biByYW5nbyB5IGV2aXRhciBjb21wcm9tZXRlciBsYSB2ZXJhY2lkYWQgZGUgbG9zIGRhdG9zLg0KICANCi0gKipNYXRoIFNjb3JlIChjdWFudGl0YXRpdmE6OnJhesOzbik6KiogUmVnaXN0cmEgZWwgcHVudGFqZSBvYnRlbmlkbyBwb3IgZWwgZXN0dWRpYW50ZSBlbiBsYSBzZWNjacOzbiBkZSBtYXRlbcOhdGljYXMgZGVsIGV4YW1lbiwgZW4gdW5hIGVzY2FsYSBkZSAwIGEgMTAwLg0KICANCi0gKipSZWFkaW5nIFNjb3JlIChjdWFudGl0YXRpdmE6OnJhesOzbik6KiogUmVnaXN0cmEgZWwgcHVudGFqZSBvYnRlbmlkbyBlbiBsYSBzZWNjacOzbiBkZSBsZWN0dXJhIGRlbCBleGFtZW4sIGVuIHVuYSBlc2NhbGEgZGUgMCBhIDEwMC4NCiAgDQotICoqV3JpdGluZyBTY29yZSAoY3VhbnRpdGF0aXZhOjpyYXrDs24pOioqIFJlZ2lzdHJhIGVsIHB1bnRhamUgb2J0ZW5pZG8gZW4gbGEgc2VjY2nDs24gZGUgZXNjcml0dXJhIGRlbCBleGFtZW4sIGVuIHVuYSBlc2NhbGEgZGUgMCBhIDEwMC4NCg0KIyMjIyBFc3RydWN0dXJhIGRlbCBDb25qdW50byBkZSBEYXRvcyBPcmlnaW5hbA0KYGBge3IgRXN0cnVjdHVyYV9kZWxfQ29uanVudG9fZGVfRGF0b3NfT3JpZ2luYWwsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3RyKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNfRzcpDQoNCmBgYA0KDQojIyMjIENvbmp1bnRvIGRlIERhdG9zIE9yaWdpbmFsDQpgYGB7ciBDb25qdW50b19kZV9EYXRvc19PcmlnaW5hbCwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpjZGRfZXhhbWVuX2VzdHVkaWFudGVzX0c3DQoNCmBgYA0KIyMjIyBFc3RydWN0dXJhIGRlbCBDb25qdW50byBkZSBEYXRvcyBEZXB1cmFkbw0KYGBge3IgRXN0cnVjdHVyYV9kZWxfQ29uanVudG9fZGVfRGF0b3NfRGVwdXJhZG8sIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3RyKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzcpDQoNCmBgYA0KDQojIyMjIENvbmp1bnRvIGRlIERhdG9zIERlcHVyYWRvDQpgYGB7ciBDb25qdW50b19kZV9EYXRvc19EZXB1cmFkbywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3DQpgYGANCg0KIyMjICoqMS4zLiBFc3RpbWFjaW9uZXMgbXVsdGl2YXJpYWRhcyoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpDb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyBzZWxlY2Npb25hZG8sIHNlIHByb2NlZGVyw6EgYSBjYWxjdWxhciBlIGludGVycHJldGFyIHRyZXMgZWxlbWVudG9zIGZ1bmRhbWVudGFsZXMgZGVsIGFuw6FsaXNpcyBtdWx0aXZhcmlhZG86IGVsIHZlY3RvciBkZSBtZWRpYXMsIGxhIG1hdHJpeiBkZSB2YXJpYW56YXMtY292YXJpYW56YXMgeSBsYSBtYXRyaXogZGUgY29ycmVsYWNpb25lcy4gRXN0b3MgY8OhbGN1bG9zIHBlcm1pdGlyw6FuIGRlc2NyaWJpciBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBnZW5lcmFsZXMgZGUgbGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzIHNlbGVjY2lvbmFkYXMsIGV4cGxvcmFyIGxhIHZhcmlhYmlsaWRhZCBjb25qdW50YSBlbnRyZSBlbGxhcyB5IGV2YWx1YXIgbGEgaW50ZW5zaWRhZCBkZSBzdXMgcmVsYWNpb25lcyBsaW5lYWxlcy4gTGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcyBwYXJhIGVzdGUgYW7DoWxpc2lzIHNvbjogYWdlLCBhdHRlbmRhbmNlLCBtYXRoX3Njb3JlXzEwMCwgcmVhZGluZ19zY29yZV8xMDAgeSB3cml0aW5nX3Njb3JlXzEwMCwgbGFzIGN1YWxlcyBzZSBldmFsdWFyw6FuIGVuIHTDqXJtaW5vcyBkZSBzdSBjZW50cmFsaWRhZCwgZGlzcGVyc2nDs24geSBjb3JyZWxhY2nDs24uDQoNCg0KQWwgb2JzZXJ2YXIgbG9zIHJlc3VsdGFkb3MgZGVsIGFuw6FsaXNpcywgc2UgZGVzdGFjYSBxdWUgbGFzIG1lZGlhcyBkZSBsYXMgdmFyaWFibGVzIG51bcOpcmljYXMgdGllbmRlbiBhIGVzdGFyIGNvbmNlbnRyYWRhcyBlbiByYW5nb3MgcmVsYXRpdmFtZW50ZSBhbHRvcywgbG8gcXVlIHN1Z2llcmUgdW5hIHRlbmRlbmNpYSBmYXZvcmFibGUgZW4gbGFzIGNhbGlmaWNhY2lvbmVzIGRlIGxvcyBlc3R1ZGlhbnRlcyBldmFsdWFkb3MuIExvcyBib3hwbG90cyBnZW5lcmFkb3MgbXVlc3RyYW4gZGlzdHJpYnVjaW9uZXMgY29uIGxpZ2Vyb3Mgc2VzZ29zLCBwcmVkb21pbmFuZG8gY29sYXMgZGVyZWNoYXMgZW4gYWxndW5hcyB2YXJpYWJsZXMsIGNvbW8gbWF0aF9zY29yZV8xMDAgeSByZWFkaW5nX3Njb3JlXzEwMCwgbG8gY3VhbCBpbmRpY2EgdW4gcGVxdWXDsW8gbsO6bWVybyBkZSBvYnNlcnZhY2lvbmVzIGNvbiB2YWxvcmVzIGV4Y2VwY2lvbmFsbWVudGUgYWx0b3MuDQpMYSBtYXRyaXogZGUgdmFyaWFuemFzLWNvdmFyaWFuemFzIHJlZmxlamEgcXVlIGxhIHZhcmlhYmlsaWRhZCBjb25qdW50YSBlbnRyZSBsYXMgdmFyaWFibGVzIGVzIGNvbnNpc3RlbnRlIGNvbiBlbCBmZW7Ds21lbm8gZXN0dWRpYWRvLiBQb3IgZWplbXBsbywgYXR0ZW5kYW5jZSB5IHdyaXRpbmdfc2NvcmVfMTAwIHByZXNlbnRhbiB1bmEgcmVsYWNpw7NuIHBvc2l0aXZhIG5vdGFibGUsIGxvIHF1ZSBzdWdpZXJlIHF1ZSB1biBtYXlvciBuaXZlbCBkZSBhc2lzdGVuY2lhIHBvZHLDrWEgZXN0YXIgdmluY3VsYWRvIGEgdW4gbWVqb3IgZGVzZW1wZcOxbyBlbiBlc2NyaXR1cmEuIEFzaW1pc21vLCBsYXMgY292YXJpYW56YXMgbcOhcyBiYWphcyBzZSBlbmN1ZW50cmFuIGVudHJlIHZhcmlhYmxlcyBxdWUgbm8gdGllbmVuIHJlbGFjacOzbiBkaXJlY3RhIGV2aWRlbnRlLCBjb21vIGFnZSB5IGxhcyBjYWxpZmljYWNpb25lcy4NCkVuIGN1YW50byBhIGxhIG1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzLCBzZSBkZXN0YWNhbiBjb3JyZWxhY2lvbmVzIGFsdGFzIHkgcG9zaXRpdmFzIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZGVzZW1wZcOxbyBhY2Fkw6ltaWNvIChtYXRoX3Njb3JlXzEwMCwgcmVhZGluZ19zY29yZV8xMDAsIHkgd3JpdGluZ19zY29yZV8xMDApLCBjb24gdmFsb3JlcyBzdXBlcmlvcmVzIGEgMC44LCBsbyBxdWUgc3VnaWVyZSBxdWUgbG9zIGVzdHVkaWFudGVzIHF1ZSBzZSBkZXNlbXBlw7FhbiBiaWVuIGVuIHVuYSBtYXRlcmlhIHRpZW5kZW4gYSBoYWNlcmxvIGVuIGxhcyBkZW3DoXMuIFBvciBvdHJvIGxhZG8sIGFnZSBtdWVzdHJhIGNvcnJlbGFjaW9uZXMgbcOhcyBiYWphcyBjb24gbGFzIGRlbcOhcyB2YXJpYWJsZXMsIGluZGljYW5kbyBxdWUgZXN0YSBjYXJhY3RlcsOtc3RpY2Egbm8gZXMgdW4gcHJlZGljdG9yIHNpZ25pZmljYXRpdm8gZGVsIGRlc2VtcGXDsW8uDQoNCg0KRW4gcmVzdW1lbiwgZWwgYW7DoWxpc2lzIG11bHRpdmFyaWFkbyBkZSBsYXMgdmFyaWFibGVzIHNlbGVjY2lvbmFkYXMgcGVybWl0ZSBjb25jbHVpciBxdWUgbG9zIGRhdG9zIHByZXNlbnRhbiBwYXRyb25lcyBjbGFyb3MgZGUgYXNvY2lhY2nDs24geSB2YXJpYWJpbGlkYWQuIExhcyBtZWRpYXMgcmVmbGVqYW4gdW4gZGVzZW1wZcOxbyBnZW5lcmFsbWVudGUgcG9zaXRpdm8gZW4gbGFzIGV2YWx1YWNpb25lcyBlc3R1ZGlhZGFzLCBtaWVudHJhcyBxdWUgbGFzIHZhcmlhbnphcy1jb3ZhcmlhbnphcyBjb25maXJtYW4gbGEgZXhpc3RlbmNpYSBkZSByZWxhY2lvbmVzIGRpcmVjdGFzIHNpZ25pZmljYXRpdmFzIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgcmVuZGltaWVudG8gYWNhZMOpbWljby4gQXNpbWlzbW8sIGxhcyBjb3JyZWxhY2lvbmVzIGFsdGFzIGVudHJlIGRpY2hhcyB2YXJpYWJsZXMgcmVmdWVyemFuIGxhIGhpcMOzdGVzaXMgZGUgcXVlIGxhcyBoYWJpbGlkYWRlcyBlbiBtYXRlbcOhdGljYXMsIGxlY3R1cmEgeSBlc2NyaXR1cmEgZXN0w6FuIGludGVycmVsYWNpb25hZGFzLCBwcm9iYWJsZW1lbnRlIGRlYmlkbyBhIGZhY3RvcmVzIGNvbXBhcnRpZG9zIGNvbW8gbGEgY29tcHJlbnNpw7NuIGdlbmVyYWwgbyBlbCBlbmZvcXVlIGVuIGVsIGFwcmVuZGl6YWplLiBQb3Igb3RybyBsYWRvLCBsYSBiYWphIGNvcnJlbGFjacOzbiBkZSBhZ2UgY29uIGxhcyBkZW3DoXMgdmFyaWFibGVzIHN1Z2llcmUgcXVlIGVzdGEgY2FyYWN0ZXLDrXN0aWNhIGRlbW9ncsOhZmljYSB0aWVuZSB1biBpbXBhY3RvIGxpbWl0YWRvIGVuIGVsIHJlbmRpbWllbnRvIG9ic2VydmFkby4gRXN0b3MgcmVzdWx0YWRvcyBwcm9wb3JjaW9uYW4gdW5hIHZpc2nDs24gaW50ZWdyYWwgeSBmdW5kYW1lbnRhZGEgc29icmUgbG9zIHBhdHJvbmVzIGRlIGNvbXBvcnRhbWllbnRvIGRlbCBjb25qdW50byBkZSBkYXRvcyBlc3R1ZGlhZG8uDQoNCiMjIyMgVmVjdG9yIGRlIE1lZGlhcyB5IEJveHBsb3RzICANCg0KYGBge3IgVmVjdG9yX2RlX01lZGlhc195X0JveHBsb3RzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmFwcGx5KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCAyLCBtZWFuKQ0KY2RkX2V4YW1lbl9SZWR1eCA9IGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildDQpub21icmVzX2JveHBsb3RzIDwtIGMoImFnZSIsICJhdHRlbmRhbmNlIiwgIm1hdGhfc2NvcmVfMTAwIiwgInJlYWRpbmdfc2NvcmVfMTAwIiwgIndyaXRpbmdfc2NvcmVfMTAwIikNCnBhcihtZnJvdyA9IGMoMSwgbmNvbChjZGRfZXhhbWVuX1JlZHV4KSkpDQppbnZpc2libGUobGFwcGx5KDE6bmNvbChjZGRfZXhhbWVuX1JlZHV4KSwgZnVuY3Rpb24oaSkgew0KICBib3hwbG90KGNkZF9leGFtZW5fUmVkdXhbLCBpXSwgbWFpbiA9IG5vbWJyZXNfYm94cGxvdHNbaV0pfSkpDQpgYGANCg0KIyMjIyBNYXRyaXogZGUgVmFyaWFuemFzLUNvdmFyaWFuemFzDQpgYGB7ciBNYXRyaXpfZGVfVmFyaWFuemFzLUNvdmFyaWFuemFzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnJvdW5kKGNvdihjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSksIDIpDQpgYGANCg0KIyMjIyBNYXRyaXogZGUgQ29ycmVsYWNpb25lcyANCmBgYHtyIE1hdHJpel9kZV9Db3JyZWxhY2lvbmVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpyb3VuZChjb3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0pLCAzKQ0KYGBgDQogDQojIyMgKioxLjQuIEdyw6FmaWNhcyBtdWx0aXZhcmlhZGFzKiogey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRWwgYW7DoWxpc2lzIGRlIGdyw6FmaWNvcyBtdWx0aXZhcmlhZG9zIHBlcm1pdGUgdmlzdWFsaXphciB5IGNvbXBhcmFyIGxhIHJlbGFjacOzbiBlbnRyZSBtw7psdGlwbGVzIHZhcmlhYmxlcyBzaW11bHTDoW5lYW1lbnRlLiBFbiBlbCBjYXNvIGRlbCBwcmVzZW50ZSBjb25qdW50byBkZSBkYXRvcywgcXVlIGluY2x1eWUgaW5mb3JtYWNpw7NuIHNvY2lvZGVtb2dyw6FmaWNhIHkgYWNhZMOpbWljYSBkZSBlc3R1ZGlhbnRlcywgZXN0ZSBlbmZvcXVlIGVzIGVzZW5jaWFsIHBhcmEgaWRlbnRpZmljYXIgcGF0cm9uZXMgeSBjb3JyZWxhY2lvbmVzIHNpZ25pZmljYXRpdmFzLiBMb3MgZ3LDoWZpY29zIHNlbGVjY2lvbmFkb3Mg4oCTIG1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzLCBkaWFncmFtYSBjb25qdW50byBkZSBkaXNwZXJzacOzbiB5IGRpc3RyaWJ1Y2nDs24sIGRpYWdyYW1hIGRlIGVzdHJlbGxhcyB5IGNhcmFzIGRlIENoZXJub2ZmIOKAkyBzb24gaGVycmFtaWVudGFzIGNsYXZlIHBhcmEgaWx1c3RyYXIgbGFzIGNhcmFjdGVyw61zdGljYXMgbXVsdGl2YXJpYWRhcyBkZWwgY29uanVudG8geSBhcG9ydGFyIHVuYSBjb21wcmVuc2nDs24gaW50dWl0aXZhIGRlIHN1IGVzdHJ1Y3R1cmEuDQoNCkxvcyBncsOhZmljb3MgZ2VuZXJhZG9zIG9mcmVjZW4gdW5hIHZpc2nDs24gaW50ZWdyYWwgZGUgbGFzIGludGVyYWNjaW9uZXMgZW50cmUgdmFyaWFibGVzIG51bcOpcmljYXMgeSBjYXRlZ8OzcmljYXMuIExhIG1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzIGRlc3RhY2EgcmVsYWNpb25lcyBmdWVydGVzIGVudHJlIHZhcmlhYmxlcyBhc29jaWFkYXMgYWwgZGVzZW1wZcOxbyBhY2Fkw6ltaWNvLCBjb21vIGxhcyBjYWxpZmljYWNpb25lcyBlbiBleMOhbWVuZXMgeSBsb3MgYW50ZWNlZGVudGVzIHNvY2lvZGVtb2dyw6FmaWNvcy4gRWwgZGlhZ3JhbWEgY29uanVudG8gZGUgZGlzcGVyc2nDs24sIGRpc3RyaWJ1Y2nDs24geSBjb3JyZWxhY2lvbmVzIHJldmVsYSBhZ3J1cGFtaWVudG9zIHkgdGVuZGVuY2lhcyBhbCBjb25zaWRlcmFyIGZpbHRyb3MgY29tbyBnw6luZXJvIHkgbml2ZWwgZGUgaW52ZXN0aWdhY2nDs24uIENvbXBsZW1lbnRhcmlhbWVudGUsIGVsIGRpYWdyYW1hIGRlIGVzdHJlbGxhcyBkZXN0YWNhIGxhIGhldGVyb2dlbmVpZGFkIGVuIGVsIGRlc2VtcGXDsW8gZXN0dWRpYW50aWwsIG1pZW50cmFzIHF1ZSBsYXMgY2FyYXMgZGUgQ2hlcm5vZmYgcGVybWl0ZW4gaWRlbnRpZmljYXIgdmlzdWFsbWVudGUgYWdydXBhY2lvbmVzIHkgcGF0cm9uZXMgw7puaWNvcyBlbnRyZSBlc3R1ZGlhbnRlcyBjb24gY2FyYWN0ZXLDrXN0aWNhcyBzaW1pbGFyZXMuDQoNCkxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBhIHBhcnRpciBkZSBsb3MgZ3LDoWZpY29zIG11bHRpdmFyaWFkb3MgcGVybWl0ZW4gaWRlbnRpZmljYXIgcGF0cm9uZXMgc2lnbmlmaWNhdGl2b3MgZW4gZWwgY29uanVudG8gZGUgZGF0b3MuIExhIG1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzIGRlc3RhY2EgYXNvY2lhY2lvbmVzIGVzcGVyYWRhcywgY29tbyBsYXMgYWx0YXMgY29ycmVsYWNpb25lcyBlbnRyZSBsYXMgY2FsaWZpY2FjaW9uZXMgZW4gcHJ1ZWJhcyBlc3BlY8OtZmljYXMgeSBlbCByZW5kaW1pZW50byBhY2Fkw6ltaWNvIGdsb2JhbCwgbWllbnRyYXMgcXVlIGxhcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIChjb21vIGfDqW5lcm8pIG11ZXN0cmFuIG1lbm9yIGluZmx1ZW5jaWEgZGlyZWN0YS4gRWwgZGlhZ3JhbWEgZGUgZXN0cmVsbGFzIHkgbGFzIGNhcmFzIGRlIENoZXJub2ZmIHJlZnVlcnphbiBlc3RhIGludGVycHJldGFjacOzbiBhbCBldmlkZW5jaWFyIGdydXBvcyBjb24gZGVzZW1wZcOxb3MgcmVsYXRpdmFtZW50ZSBob21vZ8OpbmVvcyBlbiB2YXJpYWJsZXMgY2xhdmUsIGFzw60gY29tbyBzdWJncnVwb3MgY29uIGNvbXBvcnRhbWllbnRvcyBhdMOtcGljb3MgbyBzb2JyZXNhbGllbnRlcy4gUG9yIMO6bHRpbW8sIGxvcyBncsOhZmljb3MgaW5kaWNhbiBxdWUsIGF1bnF1ZSBleGlzdGVuIHJlbGFjaW9uZXMgY29uc2lzdGVudGVzLCBubyBzZSBjdW1wbGUgbGEgc3Vwb3NpY2nDs24gZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEsIGxvIHF1ZSBwb2Ryw61hIGluZmx1aXIgZW4gYW7DoWxpc2lzIHBvc3RlcmlvcmVzIG3DoXMgZGV0YWxsYWRvcy4gRXN0b3MgaGFsbGF6Z29zIGRlc3RhY2FuIGxhIHV0aWxpZGFkIGRlbCBlbmZvcXVlIGdyw6FmaWNvIHBhcmEgY29tcHJlbmRlciBsYSBjb21wbGVqaWRhZCBkZWwgY29uanVudG8gZGUgZGF0b3MgeSBndWlhciBkZWNpc2lvbmVzIGZ1dHVyYXMuDQoNCiMjIyMgRGlhZ3JhbWEgQ29uanVudG8gZGUgRGlzcGVyc2nDs24sIERpc3RyaWJ1Y2nDs24geSBDb3JyZWxhY2lvbmVzDQpgYGB7ciBEaWFncmFtYV9Db25qdW50b19kZV9EaXNwZXJzaW9uX0Rpc3RyaWJ1Y2lvbl95X0NvcnJlbGFjaW9uZXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmdncGFpcnMoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0pDQoNCmBgYA0KDQojIyMjIERpYWdyYW1hIENvbmp1bnRvIGRlIERpc3BlcnNpw7NuLCBEaXN0cmlidWNpw7NuIHkgQ29ycmVsYWNpb25lcyBbZmlsdHJvOkdlbmRlcl0NCmBgYHtyIERpYWdyYW1hX0Nvbmp1bnRvX2RlX0Rpc3BlcnNpb25fRGlzdHJpYnVjaW9uX3lfQ29ycmVsYWNpb25lc19nZW5kZXIsIGZpZy5hbGlnbj0nY2VudGVyJ30NCg0KY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HNyA8LSBjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3ICU+JQ0KICBtdXRhdGUoZ2VuZGVyID0gaWZlbHNlKGdlbmRlciA9PSAwLCAiSCIsICJNIikpDQpnZ3BhaXJzKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzcsIGNvbHVtbnMgPSBjKDIsNyw4LDksMTApLCBhZXMoY29sb3IgPSBnZW5kZXIsIGFscGhhID0gMC41KSwgdXBwZXIgPSBsaXN0KGNvbnRpbnVvdXMgPSB3cmFwKCJjb3IiLCBzaXplID0gMi41KSkpDQoNCmBgYA0KDQojIyMjIERpYWdyYW1hIGRlIEVzdHJlbGxhcw0KYGBge3IgRGlhZ3JhbWFfZGVfRXN0cmVsbGFzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzZXQuc2VlZCg0NTg2MjcpDQpjZGRfZXhhbWVuX0c3X011ZXN0cmVhZG8gPSBjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3W3NhbXBsZSgxOm5yb3coY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HNyksMjMpLC1jKDEsMyw0LDUsNildDQpzdGFycyhjZGRfZXhhbWVuX0c3X011ZXN0cmVhZG8sIGxlbiA9IDEsIGNleCA9IDAuNCwga2V5LmxvYyA9IGMoMTAsIDIpLCBkcmF3LnNlZ21lbnRzID0gVFJVRSkNCmBgYA0KDQojIyMjIENhcmFzIGRlIENoZXJub2ZmDQpgYGB7ciBDYXJhc19kZV9DaGVybm9mZiwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc2V0LnNlZWQoNDU4NjI3KQ0KY2RkX2V4YW1lbl9HN19NdWVzdHJlYWRvID0gY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1tzYW1wbGUoMTpucm93KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzcpLDIzKSwtYygxLDMsNCw1LDYpXQ0KZmFjZXMoY2RkX2V4YW1lbl9HN19NdWVzdHJlYWRvKQ0KYGBgDQoNCiMjIyAqKjEuNS4gTm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpDb21vIG1lbmNpb25hIFBvcnJhcyBDLiAoMjAxNiksIGxhIGV2YWx1YWNpw7NuIGRlIGxhIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhIGVuIHVuIGNvbmp1bnRvIGRlIGRhdG9zIGVzIHVuIHBhc28gY3J1Y2lhbCBlbiBhbsOhbGlzaXMgZXN0YWTDrXN0aWNvcyBhdmFuemFkb3MuIEVzdGEgZXZhbHVhY2nDs24gcHVlZGUgcmVhbGl6YXJzZSBhIHRyYXbDqXMgZGUgbcOpdG9kb3MgZ3LDoWZpY29zLCBxdWUgb2ZyZWNlbiBpbnRlcnByZXRhY2lvbmVzIHZpc3VhbGVzLCBvIHBydWViYXMgaW5mZXJlbmNpYWxlcywgcXVlIHBlcm1pdGVuIGdlbmVyYWxpemFyIGNvbmNsdXNpb25lcyBiYWpvIHVuIG1hcmNvIGZvcm1hbCBkZSBoaXDDs3Rlc2lzLiBFbiBlc3RlIGNvbnRleHRvLCBlbCBwcmVzZW50ZSBhbsOhbGlzaXMgZW1wbGVhIHBydWViYXMgaW5mZXJlbmNpYWxlcyBwYXJhIGRldGVybWluYXIgc2kgbGFzIHZhcmlhYmxlcyBudW3DqXJpY2FzIGRlbCBjb25qdW50byBkZSBkYXRvcyBwcmVzZW50YW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYSAoRE5NKS4gTGFzIHBydWViYXMgc2VsZWNjaW9uYWRhcyBzb246IE1hcmRpYSwgSGVuemUtWmlya2xlciwgRG9vcm5pay1IYW5zZW4geSBSb3lzdG9uLiBDYWRhIHBydWViYSBhc3VtZSB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIM6xPTAuMDVcYWxwaGEgPSAwLjA1zrE9MC4wNSB5IGZvcm11bGEgbGFzIHNpZ3VpZW50ZXMgaGlww7N0ZXNpczoNCg0K4oCiCUgwSF8wSDA6IExhcyB2YXJpYWJsZXMgdGllbmVuIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBtdWx0aXZhcmlhZGEuDQrigKIJSDFIXzFIMTogTGFzIHZhcmlhYmxlcyBubyB0aWVuZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYS4NCg0KRWwgYW7DoWxpc2lzIGluZmVyZW5jaWFsIHNlIHJlYWxpesOzIHV0aWxpemFuZG8gbGFzIHBydWViYXMgZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEgbWVuY2lvbmFkYXMsIGNvbiBsb3MgcmVzdWx0YWRvcyBzaWd1aWVudGVzOg0KDQoxLglQcnVlYmEgZGUgTWFyZGlhOg0KTG9zIHJlc3VsdGFkb3MgaW5kaWNhbiBxdWUgbGFzIGVzdGFkw61zdGljYXMgcGFyYSBhc2ltZXRyw61hIHkgY3VydG9zaXMgcHJlc2VudGFuIHZhbG9yZXMgcHBwLXZhbG9yIHN1cGVyaW9yZXMgYWwgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSDOsT0wLjA1XGFscGhhID0gMC4wNc6xPTAuMDUuIEVzdG8gc3VnaWVyZSBxdWUgbm8gaGF5IHN1ZmljaWVudGUgZXZpZGVuY2lhIHBhcmEgcmVjaGF6YXIgbGEgaGlww7N0ZXNpcyBudWxhLCBsbyBxdWUgaW1wbGljYSBxdWUgbGFzIHZhcmlhYmxlcyBwb2Ryw61hbiBzZWd1aXIgdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYSBlbiB0w6lybWlub3MgZGUgZXN0YXMgbcOpdHJpY2FzLg0KDQoyLglQcnVlYmEgZGUgSGVuemUtWmlya2xlcjoNCkxhIGVzdGFkw61zdGljYSBkZSBlc3RhIHBydWViYSBnZW5lcmEgdW4gcHBwLXZhbG9yIGluZmVyaW9yIGEgzrE9MC4wNVxhbHBoYSA9IDAuMDXOsT0wLjA1LCBsbyBxdWUgaW5kaWNhIHF1ZSBlbCBjb25qdW50byBkZSBkYXRvcyBubyBzZSBhanVzdGEgYSB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgbXVsdGl2YXJpYWRhIGJham8gZXN0ZSBlbmZvcXVlLg0KDQozLglQcnVlYmEgZGUgRG9vcm5pay1IYW5zZW46DQpFbCBwcHAtdmFsb3Igb2J0ZW5pZG8gdGFtYmnDqW4gZXMgaW5mZXJpb3IgYWwgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSwgcmVmb3J6YW5kbyBsYSBjb25jbHVzacOzbiBkZSBxdWUgbGFzIHZhcmlhYmxlcyBubyBwcmVzZW50YW4gdW4gY29tcG9ydGFtaWVudG8gZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEgc2Vnw7puIGVzdGEgcHJ1ZWJhLg0KDQo0LglQcnVlYmEgZGUgUm95c3RvbjoNCkxvcyByZXN1bHRhZG9zIGFycm9qYW4gcHBwLXZhbG9yZXMgbWVub3JlcyBhbCB1bWJyYWwgZXN0YWJsZWNpZG8sIGNvbmNsdXllbmRvIGRlIG1hbmVyYSBjb25zaXN0ZW50ZSBjb24gbGFzIHBydWViYXMgcHJldmlhcyBxdWUgbGFzIHZhcmlhYmxlcyBubyBzaWd1ZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIG11bHRpdmFyaWFkYS4NCg0KRW4gY29uanVudG8sIGxvcyByZXN1bHRhZG9zIGRlIGxhcyBwcnVlYmFzIHJlYWxpemFkYXMgc3VnaWVyZW4gcXVlIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGFuYWxpemFkbyBubyBwcmVzZW50YSBldmlkZW5jaWEgc3VmaWNpZW50ZSBwYXJhIHJlc3BhbGRhciBsYSBoaXDDs3Rlc2lzIGRlIG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhLCBjb25zaWRlcmFuZG8gdW4gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSDOsT0wLjA1XGFscGhhID0gMC4wNc6xPTAuMDUuIFNpIGJpZW4gYWxndW5hcyBtw6l0cmljYXMgZGUgbGEgcHJ1ZWJhIGRlIE1hcmRpYSBubyBjb250cmFkaWNlbiBlc3RhIGhpcMOzdGVzaXMsIGVsIHBlc28gZGUgbGEgZXZpZGVuY2lhIGFwb3J0YWRhIHBvciBsYXMgZGVtw6FzIHBydWViYXMgaW5kaWNhIGxvIGNvbnRyYXJpby4gRXN0ZSBoYWxsYXpnbyBlcyBpbXBvcnRhbnRlIHBhcmEgZGV0ZXJtaW5hciBsYSBhcGxpY2FiaWxpZGFkIGRlIHTDqWNuaWNhcyBlc3RhZMOtc3RpY2FzIHF1ZSByZXF1aWVyZW4gbGEgc3Vwb3NpY2nDs24gZGUgbm9ybWFsaWRhZCBtdWx0aXZhcmlhZGEuDQoNCiMjIyMgUE5NIE1hcmRpYQ0KYGBge3IgUE5NX01hcmRpYSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KbXZuKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCBtdm5UZXN0PSJtYXJkaWEiKQ0KDQpgYGANCg0KIyMjIyBQTk0gSGVuemUtWmlrbGVyDQpgYGB7ciBQTk1fSGVuemUtWmlrbGVyLCBmaWcuYWxpZ249J2NlbnRlcid9DQptdm4oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIG12blRlc3Q9Imh6IikNCmBgYA0KDQojIyMjIFBOTSBEb29ybmlrLUhhbnNlbg0KYGBge3IgUE5NX0Rvb3JuaWstSGFuc2VuLCBmaWcuYWxpZ249J2NlbnRlcid9DQptdm4oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIG12blRlc3Q9ImRoIikNCmBgYA0KDQojIyMjIFBOTSBSb3lzdG9uDQpgYGB7ciBQTk1fUm95c3RvbiwgZmlnLmFsaWduPSdjZW50ZXInfQ0KbXZuKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCBtdm5UZXN0PSJyb3lzdG9uIikNCmBgYA0KDQojIyAqKkZhc2UgMiBbQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXNdKioNCg0KIyMjICoqMi4xLiBPYmpldGl2b3MqKg0KDQpFbiB0w6lybWlub3MgZ2VuZXJhbGVzLCBlc3RhIHNlZ3VuZGEgZXRhcGEgZGUgZXN0dWRpbyBtb3N0cmFyw6EgY8OhbGN1bG9zLCB2aXN1YWxpemFjaW9uZXMgZSBpbnRlcnByZXRhY2lvbmVzIGNvbiBiYXNlIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHRyYXRhZG9zIGVuIGxhIGZhc2UgMSAsIHBlcm8gYWhvcmEgZGVzZGUgdW4gZW5mb3F1ZSBkZSBhbsOhbGlzaXMgZGUgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgc29icmUgbGFzIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzLCBxdWUgaW5jbHV5ZW46IHNlbGVjY2nDs24sIGNhbGlkYWQgZGUgcmVwcmVzZW50YWNpw7NuLCBjb250cmlidWNpb25lcyBlIGludGVycHJldGFjacOzbi4NCiANCiMjIyAqKjIuMi4gU2VsZWNjacOzbiBkZSBDb21wb25lbnRlcyoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCmVsIEFuw6FsaXNpcyBkZSBDb21wb25lbnRlcyBQcmluY2lwYWxlcyAoQUNQKSBlcyB1bmEgdMOpY25pY2EgZXN0YWTDrXN0aWNhIGRlc3RpbmFkYSBhIHJlZHVjaXIgbGEgZGltZW5zaW9uYWxpZGFkIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zIG11bHRpdmFyaWFkbywgdHJhbnNmb3JtYW5kbyBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMgZW4gY29tYmluYWNpb25lcyBsaW5lYWxlcyBxdWUgY2FwdHVyYW4gbGEgbWF5b3IgdmFyaWFiaWxpZGFkIHBvc2libGUuIEVzdGEgdMOpY25pY2EgcGVybWl0ZSBjcmVhciBudWV2YXMgdmFyaWFibGVzLCBsbGFtYWRhcyBjb21wb25lbnRlcyBwcmluY2lwYWxlcywgcXVlIHNvbiBpbmRlcGVuZGllbnRlcyB5IG5vIGNvcnJlbGFjaW9uYWRhcyBlbnRyZSBzw60uIEVsIEFDUCBzZSBjb21wb25lIGRlIGRpdmVyc2FzIGZhc2VzIHF1ZSBpbmNsdXllbiBsYSBnZW5lcmFjacOzbiBkZSBudWV2YXMgdmFyaWFibGVzLCByZWR1Y2Npw7NuIGRpbWVuc2lvbmFsLCBlbGltaW5hY2nDs24gZGUgdmFyaWFibGVzIGNvbiBiYWpvIGFwb3J0ZSB5IGxhIGludGVycHJldGFjacOzbiBkZSBsb3MgY29tcG9uZW50ZXMgZW4gZWwgY29udGV4dG8gZGVsIHByb2JsZW1hLg0KDQpFbiBlbCBhbsOhbGlzaXMgcHJlc2VudGFkbywgZWwgQUNQIHNlIGFwbGljw7MgYSB1biBjb25qdW50byBkZSBkYXRvcyBwYXJhIGRldGVybWluYXIgY3XDoW50b3MgY29tcG9uZW50ZXMgcmV0ZW5lciBiYXPDoW5kb3NlIGVuIGNyaXRlcmlvcyBjb21vIGVsIGF1dG92YWxvciBtZWRpbyB5IGVsIGRpYWdyYW1hIGRlIHNlZGltZW50YWNpw7NuLiBMYSBNYXRyaXogQUNQIHJldmVsw7MgcXVlIGVsIHByaW1lciBjb21wb25lbnRlIHByaW5jaXBhbCBleHBsaWNhIGVsIDU0LjQzJSBkZSBsYSB2YXJpYWJpbGlkYWQgdG90YWwsIGVsIHNlZ3VuZG8gZWwgMjAuMSUsIHkgZWwgdGVyY2VybyB1biAyMCUsIGFjdW11bGFuZG8gZW50cmUgbG9zIHRyZXMgdW4gOTQuNDYlIGRlIGxhIHZhcmlhbnphLiBFc3RlIGhhbGxhemdvIHN1Z2llcmUgcXVlIGVzdGFzIHRyZXMgZGltZW5zaW9uZXMgc29uIHN1ZmljaWVudGVzIHBhcmEgcmVwcmVzZW50YXIgZWwgY29uanVudG8gZGUgZGF0b3MuICANCg0KTGEgTWF0cml6IGRlIENvcnJlbGFjaW9uZXMgcGVybWl0acOzIGlkZW50aWZpY2FyIGxhcyB2YXJpYWJsZXMgcXVlIG3DoXMgY29udHJpYnV5ZW4gYWwgY29tcG9uZW50ZSBwcmluY2lwYWwgMSwgZGVzdGFjYW5kbyByZWxhY2lvbmVzIHBvc2l0aXZhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSB2YXJpYWJsZXMgY29tbyAicHVudGFqZSBlbiBtYXRlbcOhdGljYXMiIHkgInB1bnRhamUgZW4gZXNjcml0dXJhIi4gQWRlbcOhcywgbGEgTWF0cml6IGRlIFZlY3RvcmVzIFByb3Bpb3MgbW9zdHLDsyBxdWUgbGEgY29tYmluYWNpw7NuIGxpbmVhbCBxdWUgZGVmaW5lIGVzdGUgY29tcG9uZW50ZSBlc3TDoSBkb21pbmFkYSBwb3IgZXN0YXMgdmFyaWFibGVzLiBFbiBlbCBncsOhZmljbyBkZSBDYXR0ZWxsLUthaXNlciwgc2UgY29uZmlybcOzIHF1ZSBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgY29uIGF1dG92YWxvcmVzIG1heW9yZXMgYSAxIHNvbiBsb3MgcXVlIG3DoXMgYXBvcnRhbiBhIGxhIHZhcmlhYmlsaWRhZCB0b3RhbCwgbG8gcXVlIHJlc3BhbGRhIGxhIGRlY2lzacOzbiBkZSByZXRlbmVyIHRyZXMgY29tcG9uZW50ZXMuDQoNCkVFbCBhbsOhbGlzaXMgZGUgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMgcmVhbGl6YWRvIGRlbW9zdHLDsyBzZXIgZWZlY3Rpdm8gcGFyYSBpZGVudGlmaWNhciBsYXMgZGltZW5zaW9uZXMgY2xhdmUgcXVlIGV4cGxpY2FuIGxhIG1heW9yIHBhcnRlIGRlIGxhIHZhcmlhYmlsaWRhZCBlbiBsb3MgZGF0b3Mgb3JpZ2luYWxlcy4gTGEgcmVkdWNjacOzbiBkaW1lbnNpb25hbCBsb2dyYWRhIGZhY2lsaXRhIGxhIGludGVycHJldGFjacOzbiB5IGFuw6FsaXNpcyBkZSBsb3MgcGF0cm9uZXMgc3VieWFjZW50ZXMsIHBlcm1pdGllbmRvIHJlcHJlc2VudGFyIGxvcyBkYXRvcyBkZSBtYW5lcmEgZWZpY2llbnRlLiBFc3RlIGVuZm9xdWUgcHJvcG9yY2lvbmEgdW4gbWFyY28gc8OzbGlkbyBwYXJhIGZ1dHVyYXMgYXBsaWNhY2lvbmVzIGVuIGVsIG1vZGVsYWRvIHkgdG9tYSBkZSBkZWNpc2lvbmVzIGJhc2Fkb3MgZW4gZGF0b3MuDQoNCiMjIyMgTWF0cml6IEFDUA0KYGBge3IgTWF0cml6X0FDUCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZ2V0X2VpZ2VudmFsdWUoUENBKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCBuY3AgPSA0LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkNCmBgYA0KDQojIyMjIE1hdHJpeiBkZSBjb3JyZWxhY2lvbmVzDQpgYGB7ciBNYXRyaXpfZGVfY29ycmVsYWNpb25lcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kcm91bmQoY29yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildKSwzKQ0KYGBgDQoNCiMjIyMgVmFsb3JlcyB5IHZlY3RvcmVzIHByb3Bpb3MNCmBgYHtyIFZhbG9yZXNfeV92ZWN0b3Jlc19wcm9waW9zLCBmaWcuYWxpZ249J2NlbnRlcid9DQpwcmluY29tcChjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSwgY29yID0gVFJVRSkkc2Rldl4yDQpwcmluY29tcChjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSwgY29yID0gVFJVRSkkbG9hZGluZ3NbICwxOjVdDQpgYGANCg0KIyMjIyBDb3JyZWxhY2lvbmVzIENvbXBhcmFkYXMNCmBgYHtyIENvcnJlbGFjaW9uZXNfQ29tcGFyYWRhcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KcGFyKG1mcm93PWMoMSwyKSkNCmNvcnJwbG90Ojpjb3JycGxvdChjb3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0pLCBtZXRob2QgPSAiY29sb3IiLCB0eXBlID0gInVwcGVyIiwgbnVtYmVyLmNleCA9IDAuNCkNCmNvcnJwbG90Ojpjb3JycGxvdChjb3IocHJpbmNvbXAoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIGNvciA9IFRSVUUpJHNjb3JlcyksIG1ldGhvZCA9ICJjb2xvciIsIHR5cGUgPSAidXBwZXIiLCBudW1iZXIuY2V4ID0gMC40KQ0KYGBgDQoNCiMjIyMgR3LDoWZpY28gZGUgQ2F0dGVsbA0KYGBge3IgR3JhZmljb19kZV9DYXR0ZWxsLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2VpZyhQQ0EoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIHNjYWxlLnVuaXQgPSBULCBncmFwaCA9IEYpLCBhZGRsYWJlbHMgPSBULCB5bGltPWMoMCw5MCksIG1haW4gPSAiIikNCmBgYA0KDQojIyMjIEdyw6FmaWNvIGRlIENhdHRlbGwtS2Fpc2VyDQpgYGB7ciBHcmFmaWNvX2RlX0NhdHRlbGwtS2Fpc2VyLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzY3JlZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSxmYWN0b3JzID0gRkFMU0UsIHBjID0gVFJVRSwgbWFpbiA9IiIpDQpgYGANCg0KDQojIyMgKioyLjMuIENhbGlkYWQgZGUgUmVwcmVzZW50YWNpw7NuKiogey50YWJzZXQgLnRhYnNldC1waWxsc30NCiANCkVsIGFuw6FsaXNpcyBkZSBjb21wb25lbnRlcyBwcmluY2lwYWxlcyAoUENBKSBhcGxpY2FkbyBhIGVzdGUgY29uanVudG8gZGUgZGF0b3MgdGllbmUgY29tbyBwcm9ww7NzaXRvIGlkZW50aWZpY2FyIGxhcyBwcmluY2lwYWxlcyBkaW1lbnNpb25lcyBxdWUgZXhwbGljYW4gbGEgdmFyaWFiaWxpZGFkIG9ic2VydmFkYSBlbiBsYXMgdmFyaWFibGVzIGVzdHVkaWFkYXMuIEVzdGUgZW5mb3F1ZSBwZXJtaXRlIHZpc3VhbGl6YXIgcGF0cm9uZXMgc3VieWFjZW50ZXMgeSBhbmFsaXphciBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgZGlzdGludGFzIHZhcmlhYmxlcyBkZSBpbnRlcsOpcywgcHJvcG9yY2lvbmFuZG8gaW5mb3JtYWNpw7NuIGNsYXZlIHBhcmEgc3UgaW50ZXJwcmV0YWNpw7NuIHkgYXBsaWNhY2nDs24uICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KRW4gcHJpbWVyIGx1Z2FyLCBlbCAqQ8OtcmN1bG8gZGUgQ29ycmVsYWNpb25lcyogcmVzYWx0YSBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMgeSBsYXMgZGltZW5zaW9uZXMgcHJpbmNpcGFsZXMuIFNlIG9ic2VydmFuIGNvcnJlbGFjaW9uZXMgZnVlcnRlcyB5IHBvc2l0aXZhcyBlbnRyZSB2YXJpYWJsZXMgY29tbyBsYSBlZGFkIHkgZWwgcmVuZGltaWVudG8gYWNhZMOpbWljbyBlbiBlbCBwcmltZXIgY29tcG9uZW50ZSBwcmluY2lwYWwgKERpbTEpLCBxdWUgY2FwdGEgdW5hIGRpbWVuc2nDs24gZ2VuZXJhbCBkZSBkZXNlbXBlw7FvLiBFbCBzZWd1bmRvIGNvbXBvbmVudGUgKERpbTIpLCBwb3Igc3UgcGFydGUsIGVzdMOhIG3DoXMgcmVsYWNpb25hZG8gY29uIGxhIGFzaXN0ZW5jaWEsIGluZGljYW5kbyBzdSBhc29jaWFjacOzbiBjb24gZWwgY29tcHJvbWlzbyBlc3R1ZGlhbnRpbC4gT3Ryb3MgY29tcG9uZW50ZXMsIGNvbW8gRGltMywgcmVmbGVqYW4gcmVsYWNpb25lcyBlc3BlY8OtZmljYXMsIHBvciBlamVtcGxvLCBoYWJpbGlkYWRlcyBtYXRlbcOhdGljYXMgZGlmZXJlbmNpYWRhcywgYWwgbW9zdHJhciB1bmEgY29ycmVsYWNpw7NuIG5lZ2F0aXZhIHNpZ25pZmljYXRpdmEgY29uIGVsIHB1bnRhamUgZW4gbWF0ZW3DoXRpY2FzLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KTGEgKk1hdHJpeiBkZSBSZXByZXNlbnRhY2nDs24qLCBxdWUgZXZhbMO6YSBsYSBjYWxpZGFkIGRlIHJlcHJlc2VudGFjacOzbiBkZSBsYXMgdmFyaWFibGVzIGVuIGNhZGEgZGltZW5zacOzbiwgZXZpZGVuY2lhIHF1ZSBsb3MgdmFsb3JlcyBkZWwgcHJpbWVyIGNvbXBvbmVudGUgc29uIGxvcyBtw6FzIGVsZXZhZG9zLCBlc3BlY2lhbG1lbnRlIHBhcmEgaW5kaWNhZG9yZXMgY2xhdmUgY29tbyBsYSBlZGFkLiBTaW4gZW1iYXJnbywgb3RyYXMgdmFyaWFibGVzIGNvbW8gbGEgYXNpc3RlbmNpYSB5IGxvcyBwdW50YWplcyBlc3BlY8OtZmljb3MgbXVlc3RyYW4gbWVqb3JlcyByZXByZXNlbnRhY2lvbmVzIGVuIGxvcyBjb21wb25lbnRlcyBzZWN1bmRhcmlvcywgZGVzdGFjYW5kbyBsYSBjYXBhY2lkYWQgZGVsIFBDQSBwYXJhIGRpc3RyaWJ1aXIgYWRlY3VhZGFtZW50ZSBsYSB2YXJpYW56YSBlbnRyZSBsYXMgZGltZW5zaW9uZXMuICANCg0KRmluYWxtZW50ZSwgZWwgYW7DoWxpc2lzIGRlIGxhcyAqQ29vcmRlbmFkYXMgSW5kaXZpZHVhbGVzKiBmYWNpbGl0YSBsYSBpZGVudGlmaWNhY2nDs24gZGUgcGF0cm9uZXMgZXNwZWPDrWZpY29zIGEgbml2ZWwgZGUgcmVnaXN0cm9zLCBwZXJtaXRpZW5kbyBvYnNlcnZhciBwZXJmaWxlcyBpbmRpdmlkdWFsZXMgZW4gZnVuY2nDs24gZGUgbGFzIGRpbWVuc2lvbmVzIHByaW5jaXBhbGVzLiBFc3RvIHBlcm1pdGUgc2VnbWVudGFyIG9ic2VydmFjaW9uZXMgcmVsZXZhbnRlcyBlbiBlbCBhbsOhbGlzaXMsIGNvbW8gc2ltaWxpdHVkZXMgZW50cmUgY2llcnRvcyByZWdpc3Ryb3MgZW4gc3VzIGNvbXBvcnRhbWllbnRvcyBvIHJlc3VsdGFkb3MsIGxvIGN1YWwgZXMgw7p0aWwgcGFyYSBsYSBpbnRlcnByZXRhY2nDs24geSBnZW5lcmFjacOzbiBkZSBoaXDDs3Rlc2lzLiAgDQoNCkVsIFBDQSBhcGxpY2FkbyBoYSBwZXJtaXRpZG8gcmVkdWNpciBsYSBjb21wbGVqaWRhZCBkZWwgY29uanVudG8gZGUgZGF0b3MgYWwgaWRlbnRpZmljYXIgbGFzIHByaW5jaXBhbGVzIGRpbWVuc2lvbmVzIHN1YnlhY2VudGVzLiBEZXNkZSBsYSBpZGVudGlmaWNhY2nDs24gZGUgdW5hIGRpbWVuc2nDs24gZ2VuZXJhbCBkZSBkZXNlbXBlw7FvIGhhc3RhIHBhdHJvbmVzIGVzcGVjw61maWNvcyBlbiB2YXJpYWJsZXMgaW5kaXZpZHVhbGVzLCBlbCBhbsOhbGlzaXMgcHJvcG9yY2lvbmEgdW5hIGJhc2Ugc8OzbGlkYSBwYXJhIGNvbXByZW5kZXIgbGFzIHJlbGFjaW9uZXMgY2xhdmUgZW50cmUgbGFzIHZhcmlhYmxlcyB5IHN1IGltcGFjdG8gZW4gbGFzIGRpbsOhbWljYXMgZXN0dWRpYWRhcy4gRXN0YXMgY29uY2x1c2lvbmVzIG9mcmVjZW4gaW5mb3JtYWNpw7NuIHZhbGlvc2EgcGFyYSBlbCBkaXNlw7FvIGRlIGVzdHJhdGVnaWFzIGZ1dHVyYXMgYmFzYWRhcyBlbiBkYXRvcy4NCiANCiMjIyMgQ8OtcmN1bG8gZGUgQ29ycmVsYWNpb25lcw0KYGBge3IgQ2lyY3Vsb19kZV9Db3JyZWxhY2lvbmVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X3BjYV92YXIoUENBKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCBzY2FsZS51bml0ID0gVCwgZ3JhcGggPSBGKSxjb2wudmFyPSIjNUE4NUZEIiwgcmVwZWwgPSBULCBjb2wuY2lyY2xlID0gIiNDRENEQ0QiLCBnZ3RoZW1lID0gdGhlbWVfYncoKSkNCmBgYA0KDQojIyMjIE1hdHJpeiBkZSByZXByZXNlbnRhY2nDs24NCmBgYHtyIE1hdHJpel9kZV9yZXByZXNlbnRhY2lvbiwgZmlnLmFsaWduPSdjZW50ZXInfQ0KKGdldF9wY2FfdmFyKFBDQShjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRikpKSRjb3MyDQpgYGANCg0KIyMjIyBDYWxpZGFkIGRlIHJlcHJlc2VudGFjacOzbg0KYGBge3IgQ2FsaWRhZF9kZV9yZXByZXNlbnRhY2lvbjEsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfcGNhX3ZhcihQQ0EoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpLCBjb2wudmFyPSJjb3MyIiwgZ3JhZGllbnQuY29scz1jKCIjMDBBRkJCIiwiI0U3QjgwMCIsIiNGQzRFMDciKSwgcmVwZWwgPSBUUlVFKQ0KYGBgDQoNCiMjIyMgQ29vcmRlbmFkYXMgaW5kaXZpZHVhbGVzDQpgYGB7ciBDb29yZGVuYWRhc19pbmRpdmlkdWFsZXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmhlYWQoKFBDQShjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRikpJGluZCRjb29yZCwgbiA9IDIzTCkNCmBgYA0KDQogDQojIyMgKioyLjQuIENvbnRyaWJ1Y2lvbmVzIHkgQmlwbG90cyAqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpsYSBpbnRlcnByZXRhY2nDs24gZGUgcmVzdWx0YWRvcyBlc3TDoSB2aW5jdWxhZGEgY29uIGVsIGPDoWxjdWxvIGRlIGNvb3JkZW5hZGFzLCBjb250cmlidWNpb25lcywgY29kb3MgY3VhZHJhZG9zLCBldGMsIHBvciBsbyB0YW50bywgbGEgY29uY2VwdHVhbGl6YWNpw7NuIGRlIGxhcyB2YXJpYWJsZXMgZGViZSBzZXIgY2xhcmEgcGFyYSBlc3RhYmxlY2VybGEgY29uIGxhIG1heW9yIGNsYXJpZGFkLiBwb3NpYmxlLCBlcyBkZWNpciwgbG9zIGRhdG9zIGRlYmVuIHBvbmVyc2UgZW4gY29udGV4dG8uIEVuIGVzdGUgc2VudGlkbywgbGEgY29udHJpYnVjacOzbiBkZSB1bmEgdmFyaWFibGUgYSB1biBjb21wb25lbnRlIGFsbGFuYSBlbCBjYW1pbm8gZGUgbGEgaW50ZXJwcmV0YWNpw7NuIGRlIHJlc3VsdGFkb3MuIEVzdG8gc2UgaGFjZSBlbiBlc3RlIGFwYXJ0YWRvIGVuIGVsIHNlbnRpZG8gZGUgY2FsY3VsYXIgbG9yIGFwb3J0ZXMgY29uIHF1ZSBjYWRhIHZhcmlhYmxlIHBhcnRpY2lwYSBwYXJhIGRlZmluaXIgYSBjYWRhIGNvbXBvbmVudGUgZ2VuZXJhZG8uDQoNCkNvbiBiYXNlIGVuIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBkZWwgY29uanVudG8gZGUgZGF0b3Mgc2UgZXhpZ2UgZGV0ZXJtaW5hciBsYXMgY29udHJpYnVjaW9uZXMgcXVlIGhhY2UgY2FkYSB2YXJpYWJsZSBhIGxhIGNvbnN0cnVjY2nDs24gZGUgY2FkYSBjb21wb25lbnRlLg0KIA0KRWwgYW7DoWxpc2lzIHJlYWxpemFkbyBtZWRpYW50ZSBsYXMgY29udHJpYnVjaW9uZXMgeSBiaXBsb3RzIGhhIHBlcm1pdGlkbyBpZGVudGlmaWNhciBsYXMgdmFyaWFibGVzIG3DoXMgcmVsZXZhbnRlcyBlbiBsYSBkZWZpbmljacOzbiBkZSBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMuIExhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBleHBsaWNhbiB1bmEgcHJvcG9yY2nDs24gc2lnbmlmaWNhdGl2YSBkZSBsYSB2YXJpYWJpbGlkYWQgdG90YWwgY2FwdHVyYWRhIGVuIGVsIG1vZGVsby4gRW4gcGFydGljdWxhciwgbGFzIHZhcmlhYmxlcyBjb24gbWF5b3JlcyBhcG9ydGVzIGEgbG9zIHByaW1lcm9zIGNvbXBvbmVudGVzIHJlZmxlamFuIGxhcyBjYXJhY3RlcsOtc3RpY2FzIG3DoXMgaW5mbHV5ZW50ZXMgZGVsIGZlbsOzbWVubyBlc3R1ZGlhZG8sIG1pZW50cmFzIHF1ZSBhcXVlbGxhcyBjb24gbWVub3IgY29udHJpYnVjacOzbiB0aWVuZW4gdW4gaW1wYWN0byByZWR1Y2lkby4NCg0KTGEgcmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhIGEgdHJhdsOpcyBkZSBiaXBsb3RzIHRhbWJpw6luIGhhIHByb3BvcmNpb25hZG8gdW5hIHZpc3VhbGl6YWNpw7NuIGNsYXJhIGRlIGPDs21vIGxhcyBvYnNlcnZhY2lvbmVzIHNlIGFncnVwYW4gZW4gZWwgZXNwYWNpbyByZWR1Y2lkbyBkZSBsb3MgY29tcG9uZW50ZXMgcHJpbmNpcGFsZXMsIGNvbmZpcm1hbmRvIGxhIGNvaGVyZW5jaWEgZGUgbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zLiBFc3RvIG5vIHNvbG8gdmFsaWRhIGxhIHV0aWxpZGFkIGRlbCBtb2RlbG8gZGUgcmVkdWNjacOzbiBkZSBkaW1lbnNpb25hbGlkYWQgZW1wbGVhZG8sIHNpbm8gcXVlIHRhbWJpw6luIHByb3BvcmNpb25hIHVuYSBiYXNlIHPDs2xpZGEgcGFyYSBmdXR1cmFzIGludGVycHJldGFjaW9uZXMgeSBkZWNpc2lvbmVzIGJhc2FkYXMgZW4gZWwgYW7DoWxpc2lzLg0KIA0KIyMjIyBNYXRyaXogZGUgY29udHJpYnVjaW9uZXMNCmBgYHtyIE1hdHJpel9kZV9jb250cmlidWNpb25lcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KKGdldF9wY2FfdmFyKFBDQShjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRikpKSRjb250cmliDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQxDQpgYGB7ciBDb250cmlidWNpb25lc19hX0QxLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAxLCB0b3AgPSAxMCkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzIGEgRDINCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX2FfRDIsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfY29udHJpYihQQ0EoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDIsIHRvcCA9IDEwKQ0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBEMw0KYGBge3IgQ29udHJpYnVjaW9uZXNfYV9EMywgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3WywtYygxLDMsNCw1LDYpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMywgdG9wID0gMTApDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQ0DQpgYGB7ciBDb250cmlidWNpb25lc19hX0Q0LCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzdbLC1jKDEsMyw0LDUsNildLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSA0LCB0b3AgPSAxMCkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzIGEgRDUNCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX2FfRDUsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfY29udHJpYihQQ0EoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HN1ssLWMoMSwzLDQsNSw2KV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDUsIHRvcCA9IDEwKQ0KYGBgDQoNCiMjIyMgQmlwbG90IGRlIFZhcmlhYmxlcyB5IFJlZ2lzdHJvc1tUb3RhbCBHXQ0KDQpgYGB7ciBiaXBsb3RfZGVfVmFyaWFibGVzX3lfUmVnaXN0cm9zX3RvdGFsX2csIGZpZy5hbGlnbj0nY2VudGVyJ30NCg0Kc2V0LnNlZWQoNDU4NjI3KQ0KY2RkX2V4YW1lbl9tdWVzdHJlYWRvX0c3ID0gY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc19HN1tzYW1wbGUoMTpucm93KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNfRzcpLDIwMCksLWMoMyw0LDUsNildDQoNCmZ2aXpfcGNhX2JpcGxvdChQQ0EoY2RkX2V4YW1lbl9tdWVzdHJlYWRvX0c3LCBuY3AgPSA0LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGLCBxdWFsaS5zdXAgPSAiZ2VuZGVyIiksIGF4ZXMgPSBjKDEsIDIpLCByZXBlbCA9IFRSVUUsIGhhYmlsbGFnZSA9ICJnZW5kZXIiKQ0KDQoNCmBgYA0KDQoNCiMjICoqRmFzZSAzIFtDb3JyZXNwb25kZW5jaWFzXSoqDQoNCiMjIyAqKjMuMS4gT2JqZXRpdm9zKioNCg0KRW4gdMOpcm1pbm9zIGdlbmVyYWxlcywgZXN0YSB0ZXJjZXJhIGV0YXBhIGRlIGVzdHVkaW8gbW9zdHJhcsOhIGPDoWxjdWxvcywgdmlzdWFsaXphY2lvbmVzIGUgaW50ZXJwcmV0YWNpb25lcyBjb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyB0cmF0YWRvcyBlbiBsYSBmYXNlIDEgeSAyICwgcGVybyBhaG9yYSBkZXNkZSB1biBlbmZvcXVlIGRlIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIHNpbXBsZXMgeSBtw7psdGlwbGVzIHNvYnJlIGxhcyB2YXJpYWJsZXMgY3VhbmxpdGF0aXZhcywgcXVlIGluY2x1eWVuOiBjb25zdHJ1Y2Npw7NuIGRlIHRhYmxhcyBkZSBjb250aW5nZW5jaWFzIHkgZGlzeXVudGl2YXMgY29tcGxldGFzLCBjYWxpZGFkZXMgZGUgcmVwcmVzZW50YWNpw7NuLCBjb250cmlidWNpb25lcyBlIGludGVycHJldGFjaW9uZXMuDQogDQojIyMgKiozLjIuIENvcnJlc3BvbmRlbmNpYXMgU2ltcGxlcyoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCnNlIHNhYmUgcXVlIGVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIHNpbXBsZXMgKEFDUykgYnVzY2EgcmVwcmVzZW50YXIgZW4gdW4gZXNwYWNpbyBtdWx0aWRpbWVuc2lvbmFsIHJlZHVjaWRvIGxhIHJlbGFjacOzbiBxdWUgZXhpc3RlIGVudHJlIGxhcyBjYXRlZ29yw61hcyBkZSB1biBwYXIgZGUgdmFyaWFibGVzIGNhdGVnw7NyaWNhcy4gRW4gZXN0ZSBzZW50aWRvLCBlbCBBQ1MgbXVlc3RyYSBsYXMgZGlzdGFuY2lhIGVudHJlIGxvcyBuaXZlbGVzIGRlIGRvcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHksIGVuIGNvbnNlY3VlbmNpYSwgYXl1ZGEgYSB2aXN1YWxpemFyIHRhYmxhcyBkZSBjb250aW5nZW5jaWEuIEFkZW3DoXMsIHNlIGVzdGFibGVjZSBxdWUgZWwgbsO6bWVybyBtw6F4aW1vIGRlIGRpbWVuc2lvbmVzIHF1ZSBleHBsaWNhbiBsYSBhc29jaWFjacOzbiBlbnRyZSB2YXJpYWJsZXMgZmlsYSB5IGNvbHVtbmEgZXMgaWd1YWwgYSB1bm8gbWVub3MgZWwgbWVub3IgbsO6bWVybyBkZSBjYXRlZ29yw61hcyBkZSBhbGd1bmEgZGUgbGFzIHZhcmlhYmxlcyBpbnZvbHVjcmFkYXMuIEVuIGNvbnNlY3VlbmNpYSwgZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgcGVybWl0ZSBkZXNjcmliaXIgbGEgcHJveGltaWRhZCBleGlzdGVudGUgZW50cmUgbG9zIHBlcmZpbGVzIGRlIGxvcyBvYmpldG9zIG9ic2VydmFkb3MuIEFkZW3DoXMsIGVsIEFDUywgcXVlIGJhc2Egc3VzIGPDoWxjdWxvcyBlbiB0YWJsYXMgZGUgY29udGluZ2VuY2lhLCBwdWVkZSBleHRlbmRlcnNlIGEgbcOhcyBkZSBkb3MgdmFyaWFibGVzIGNhdGVnw7NyaWNhcywgY29ub2Npw6luZG9zZSBjb21vIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIE3Dumx0aXBsZXMgKEFDTSksIGNvbiBiYXNlIGVuIHVuIG9iamV0byBsbGFtYWRvIHRhYmxhIGRpc3l1bnRpdmEgY29tcGxldGEuDQoNCkNvbiBiYXNlIGVuIGxhcyB2YXJpYWJsZXMgY3VhbGl0YXRpdmFzIGRlbCBjb25qdW50byBkZSBkYXRvcyBzZSBleGlnZSBkZXNhcnJvbGxhciBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcywgZW4gcHJpbmNpcGlvIHNpbXBsZSwgYXBveWFkbyBlbiB0YWJsYXMgZGUgY29udGluZ2VuY2lhIHkgZGUgZnJlY3VlbmNpYXMgcmVsYXRpdmFzIHkgZ3LDoWZpY29zIGRlIHBlcmZpbGVzIHkgZGUgcHVudG9zIHN1cGVycHVlc3RvcyBlbiBlbCBwcmltZXIgcGxhbm8gZmFjdG9yaWFsLg0KDQoxLiBEaXN0cmlidWNpw7NuIHBvciBHw6luZXJvIHkgR3J1cG9zDQotIFBhcnRpY2lwYW50ZXM6IEhheSB1bmEgcHJvcG9yY2nDs24gbGlnZXJhbWVudGUgbWF5b3IgZGUgaG9tYnJlcyAoNTEuNyUpIHF1ZSBkZSBtdWplcmVzICg0OC4zJSkuDQotUmVjdWVudG8gcG9yIGdydXBvczoNCi0gRWwgZ3J1cG8gQyB0aWVuZSBsYSBtYXlvciBjYW50aWRhZCBkZSBwYXJ0aWNpcGFudGVzIGZlbWVuaW5vcy4NCi0gRWwgZ3J1cG8gRCBjdWVudGEgY29uIGVsIG1heW9yIG7Dum1lcm8gZGUgcGFydGljaXBhbnRlcyBtYXNjdWxpbm9zLg0KDQoyLiBUYXNhcyBkZSBGaW5hbGl6YWNpw7NuIHkgQWJhbmRvbm8NCi0gRW4gZ2VuZXJhbDoNCi0gU29sbyBlbCAzMy4xMyUgZGUgbGFzIG11amVyZXMgeSBlbCAzMy44NSUgZGUgbG9zIGhvbWJyZXMgY29tcGxldGFyb24gbGFzIGFjdGl2aWRhZGVzLg0KLSBMYSBtYXlvcsOtYSAoNjYuODclIG11amVyZXMsIDY2LjE1JSBob21icmVzKSBubyBjb21wbGV0w7MgbGFzIGFjdGl2aWRhZGVzLg0KLSBQb3IgZ3J1cG9zOg0KLSBMb3MgcG9yY2VudGFqZXMgZGUgZmluYWxpemFjacOzbiBtw6FzIGFsdG9zIHNlIHJlZ2lzdHJhcm9uIGVuIGVsIGdydXBvIEEgKDQwLjUxJSksIG1pZW50cmFzIHF1ZSBlbCBncnVwbyBDIG1vc3Ryw7MgbGEgbWVub3IgdGFzYSBkZSBjb21wbGV0YWRvcyAoMzEuNTglKS4NCi0gRXN0byBzdWdpZXJlIHZhcmlhY2lvbmVzIHNpZ25pZmljYXRpdmFzIGVuIGxhIHBhcnRpY2lwYWNpw7NuIGVudHJlIGxvcyBncnVwb3MuDQoNCjMuIEFuw6FsaXNpcyBFc3RhZMOtc3RpY28NCi0gUHJ1ZWJhcyBkZSBDaGktQ3VhZHJhZG86DQotIE5pbmd1bmEgZGUgbGFzIGFzb2NpYWNpb25lcyBhbmFsaXphZGFzIHJlc3VsdMOzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmEgKHAtdmFsb3IgPiAwLjA1KS4gRXN0byBpbXBsaWNhIHF1ZSBubyBoYXkgZXZpZGVuY2lhIGNvbmNsdXllbnRlIGRlIHVuYSByZWxhY2nDs24gZW50cmUgZ8OpbmVybywgZ3J1cG9zLCB5IHRhc2FzIGRlIGNvbXBsZXRhZG9zLg0KLSBBbsOhbGlzaXMgZGUgQ29ycmVzcG9uZGVuY2lhOg0KLSBMb3MgcmVzaWR1b3MgZXN0YW5kYXJpemFkb3Mgc3VnaWVyZW4gZGlmZXJlbmNpYXMgbm90YWJsZXMgZW4gZWwgZ3J1cG8gRSwgZG9uZGUgbG9zIHJlc2lkdW9zIGZ1ZXJvbiBsb3MgbcOhcyBhbHRvcyBlbiB0w6lybWlub3MgYWJzb2x1dG9zLg0KDQo0LiBDb250cmlidWNpb25lcyBhbCBBbsOhbGlzaXMgZGUgQ29ycmVzcG9uZGVuY2lhDQotIENvbnRyaWJ1Y2lvbmVzIHJlbGF0aXZhczoNCi0gRWwgZ3J1cG8gRSB0dXZvIHVuYSBhbHRhIGNvbnRyaWJ1Y2nDs24gKDIzLjkyJSkgYSBsYSBkZWZpbmljacOzbiBkZWwgcGVyZmlsIGZlbWVuaW5vLg0KLSBMYXMgbXVqZXJlcyBhcG9ydGFyb24gdW4gMC40MiUgYWwgcGVyZmlsIGRlbCBncnVwbyBBLCBtb3N0cmFuZG8gdW4gcGVzbyBiYWpvIGVuIGVzdGUgZ3J1cG8uDQotIFBlcmZpbGVzIGRlIGNvbHVtbmEgeSBmaWxhOg0KLSBSZXZlbGFuIHVuYSBjb21wb3NpY2nDs24gZGVzaWd1YWwgZW4gbGEgZGlzdHJpYnVjacOzbiBkZSBnw6luZXJvcyBwb3IgZ3J1cG8geSB2aWNldmVyc2EuDQoNCjUuIERpbWVuc2nDs24gUHJpbmNpcGFsIGVuIGVsIEFuw6FsaXNpcyBVbmlkaW1lbnNpb25hbA0KLSDDmm5pY2EgRGltZW5zacOzbiBTaWduaWZpY2F0aXZhOg0KLSBTZSBpZGVudGlmaWPDsyB1bmEgc29sYSBkaW1lbnNpw7NuIHF1ZSBleHBsaWNhIGVsIDEwMCUgZGUgbGEgdmFyaWFuemEgZGUgbG9zIGRhdG9zLg0KLSBMb3MgZ3J1cG9zIHRpZW5lbiBkaWZlcmVudGVzIHBvc2ljaW9uZXMgZW4gZXN0YSBkaW1lbnNpw7NuOg0KLSBFbCBncnVwbyBFIHRpZW5lIHVuIHZhbG9yIGRlIDAuMTcyLCBtaWVudHJhcyBxdWUgZWwgZ3J1cG8gQiBlc3TDoSBlbiBlbCBleHRyZW1vIG9wdWVzdG8gY29uIC0wLjE0Ni4NCg0KQ29uY2x1c2nDs24gR2VuZXJhbA0KRWwgYW7DoWxpc2lzIHJlZmxlamEgZGlmZXJlbmNpYXMgbm90YWJsZXMgZW4gbGEgZGlzdHJpYnVjacOzbiBkZSBnw6luZXJvIHkgZW4gbG9zIG5pdmVsZXMgZGUgcGFydGljaXBhY2nDs24gKGNvbXBsZXRhZG9zIHkgbm8gY29tcGxldGFkb3MpIGVudHJlIGxvcyBncnVwb3MsIGF1bnF1ZSBlc3RhcyBkaWZlcmVuY2lhcyBubyBzb24gZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMuIExhIGRpbWVuc2nDs24gdW5pZGltZW5zaW9uYWwgb2J0ZW5pZGEgcmVzYWx0YSBxdWUgbG9zIGdydXBvcyB0aWVuZW4gY29tcG9ydGFtaWVudG9zIGRpc3RpbnRvcyBkZW50cm8gZGUgZXN0ZSBjb250ZXh0bywgY29uIGVsIGdydXBvIEUgZGVzdGFjw6FuZG9zZSBlbiB2YXJpYXMgbcOpdHJpY2FzLg0KIA0KIyMjIyBBQyBwb3IgcGFyZWphcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBDb250aW5nZW5jaWFzDQpgYGB7ciBBQ19wb3JfcGFyZWphcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KYWRkbWFyZ2lucyh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlciwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSkpDQphZGRtYXJnaW5zKHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlKSkNCmFkZG1hcmdpbnModGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSkpDQpgYGANCg0KIyMjIyMgUHJvYmFiaWxpZGFkZXMNCmBgYHtyIFByb2JhYmlsaWRhZGVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKSoxMDApDQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpKSoxMDApDQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSkpKjEwMCkNCmBgYA0KDQojIyMjIyBGcmVjdWVuY2lhcyBbQ1BGIHkgQ1BDXQ0KYGBge3IgRnJlY3VlbmNpYXNfW0NQRl95X0NQQ10sIGZpZy5hbGlnbj0nY2VudGVyJ30NCnJvdW5kKGFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlciwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSksIDEpKjEwMCwgMiksIDIpDQpyb3VuZChhZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpLCAxKSoxMDAsIDIpLCAyKQ0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHksIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpLCAxKSoxMDAsIDIpLCAyKQ0KYGBgDQoNCiMjIyMjIFBlcmZpbGVzIFtDUEYgeSBDUENdDQpgYGB7ciBQZXJmaWxlc19bQ1BGX3lfQ1BDXSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcGxvdGN0KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSwicm93IikNCnBsb3RjdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlciwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSksImNvbCIpDQpwbG90Y3QodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpLCJyb3ciKQ0KcGxvdGN0KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlKSwiY29sIikNCnBsb3RjdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5LCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlKSwicm93IikNCnBsb3RjdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5LCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlKSwiY29sIikNCmBgYA0KDQojIyMjIyBQcnVlYmFzIGRlIEhpcMOzdGVzaXMNCmBgYHtyIFBydWViYXNfZGVfSGlwb3Rlc2lzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpjaGlzcS50ZXN0KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSkNCmNoaXNxLnRlc3QodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpKQ0KY2hpc3EudGVzdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5LCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlKSkNCmBgYA0KDQojIyMjIEFDIHBhcmVqYSB1bmljYSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBDb250aW5nZW5jaWFzIHkgUmVzaWR1YWxlcw0KYGBge3IgQ29udGluZ2VuY2lhc195X1Jlc2lkdWFsZXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmNoaXNxLnRlc3QodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKSRvYnNlcnZlZA0KY2hpc3EudGVzdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlciwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSkpJGV4cGVjdGVkDQpjaGlzcS50ZXN0KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSkkcmVzaWR1YWxzDQpjaGlzcS50ZXN0KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSkkc3RkcmVzDQoNCmBgYA0KDQojIyMjIyBDb250cmlidWNpb25lcw0KYGBge3IgQ29udHJpYnVjaW9uZXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmNoaXNxLnRlc3QodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKSRyZXNpZHVhbHNeMi9jaGlzcS50ZXN0KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSkkc3RhdGlzdGljKjEwMA0KYGBgDQoNCiMjIyMjIENvcnJlc3BvbmRlbmNpYSBzaW1wbGUgdW5pZGltZW5zaW9uYWwNCmBgYHtyIENvcnJlc3BvbmRlbmNpYV9zaW1wbGVfdW5pZGltZW5zaW9uYWwsIGZpZy5hbGlnbj0nY2VudGVyJ30NCkNBKHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSwgZ3JhcGggPSBGQUxTRSkkZWlnDQpDQSh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlciwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSksIGdyYXBoID0gRkFMU0UpJGNvbA0KQ0EodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpLCBncmFwaCA9IEZBTFNFKSRyb3cNCmBgYA0KDQoNCg0KIyMjICoqMy4zLiBDb3JyZXNwb25kZW5jaWFzIE3Dumx0aXBsZXMqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpTZSBkaWNlIHF1ZSBlbCBBQ1Mgc2UgcHVlZGUgZXh0ZW5kZXIgZGVzZGUgdGFibGFzIGRlIGNvbnRpbmdlbmNpYSBoYWNpYSB0YWJsYXMgZGlzeXVudGl2YXMgY29tcGxldGFzLiBFbiBlc3RhcyBsYXMgZmlsYXMgc29uIGxvcyBvYmpldG9zIGEgbG9zIGN1YWxlcyBzZSBsZXMgcmVnaXN0cmFuIGNhcmFjdGVyw61zdGljYXMgZGUgaW50ZXLDqXMgYSB0cmF2w6lzIGRlIGxhcyBjb2x1bW5hcyBxdWUgY29tcGlsYW4gbGFzIG1vZGFsaWRhZGVzIGRlIGxhcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIGVzdHVkaWFkYXMgZGUgZWxsb3MuIEFzw60sIGVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWFzIG3Dumx0aXBsZXMgKEFDTSkgZXMgZWwgQUMgYXBsaWNhZG8gYSB1bmEgdGFibGEgZGlzeXVudGl2YSBjb21wbGV0YS4gUG9yIGxvIHRhbnRvLCBlbiBlbCBBQ00gdW5hIHZhcmlhYmxlIGNhdGVnw7NyaWNhIGFzaWduYSBhIGNhZGEgb2JqZXRvIGRlIHVuYSBwb2JsYWNpw7NuIHVuYSBtb2RhbGlkYWQgYSB0cmF2w6lzIGRlIGxhIGN1YWwgbG9zIHBhcnRpY2lvbmEgZXhjbHVzaXZhIHkgZXhoYXVzdGl2YW1lbnRlLg0KDQpFc3RhIHNlY2Npw7NuIGVzIGRlc2Fycm9sbGFkYSBjb21vIGFsdGVybmF0aXZhIGRlIGNvbXBsZXRpdHVkIGRlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGVzIHF1ZSBlbiBsYSBzZWNjacOzbiBhbnRlcmlvciBmdWUgaW5hcHJlY2lhYmxlIGRlYmlkbyBhIGxhIHVuaWRpbWVuc2lvbmFsaWRhZCBkZSBsYSByZXByZXNlbnRhY2nDs24gZGUgbG9zIGRhdG9zIGEgbml2ZWwgZGUgcHJveWVjY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgcXVlIGN1bXBsaWVyb24gbGEgaGlww7N0ZXNpcyBkZSBkZXBlbmRlbmNpYS4gUG9yIGxvIHRhbnRvLCBkZWwgdHJhdGFtaWVudG8gY29uanVudG8gZGUgdG9kYXMgbGFzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgc2UgZXNwZXJhIG9idGVuZXIgdW5hIHJlcHJlc2VudGFjacOzbiBlbiBlbCBwcmltZXIgcGxhbm8gZmFjdG9yaWFsDQogDQpDb24gYmFzZSBlbiBsYXMgdmFyaWFibGVzIGN1YWxpdGF0aXZhcyBkZWwgY29uanVudG8gZGUgZGF0b3Mgc2UgZXhpZ2UgZGVzYXJyb2xsYXIgZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgTcO6bHRpcGxlcyBwYXJhIGxvZ3JhciB1bmEgcmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhIGVuIGVsIHByaW1lciBwbGFubyBmYWN0b3JpYWwsIGRlYmlkbyBhIGxhIGltcG9zaWJpbGlkYWQgZGUgbG9ncmFybG8gZW4gZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYXMgc2ltcGxlLg0KDQogMS4JQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIFByaW5jaXBhbGVzIChBQ1ApOg0KbwlMb3MgcHJpbWVyb3MgY3VhdHJvIGNvbXBvbmVudGVzIHByaW5jaXBhbGVzIGV4cGxpY2FuIGVsIDQzLjUwJSBkZSBsYSB2YXJpYW56YSwgeSBsYXMgcHJpbWVyYXMgMTIgZGltZW5zaW9uZXMgYWxjYW56YW4gZWwgMTAwJS4NCm8JRXN0byBzdWdpZXJlIHF1ZSBsb3MgZGF0b3MgcHVlZGVuIHJlcHJlc2VudGFyc2UgZGUgbWFuZXJhIGVmaWNpZW50ZSBlbiB1biBlc3BhY2lvIHJlZHVjaWRvLCBmYWNpbGl0YW5kbyBzdSBhbsOhbGlzaXMgZSBpbnRlcnByZXRhY2nDs24uDQoNCjIuCUFuw6FsaXNpcyBkZSBDb3JyZXNwb25kZW5jaWFzIE3Dumx0aXBsZXMgKEFDTSk6DQpvCUVsIGJpcGxvdCByZXZlbGEgYXNvY2lhY2lvbmVzIGVudHJlIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgY29tbyBnw6luZXJvIHkgbml2ZWwgZWR1Y2F0aXZvIChlLmcuLCAibXVqZXIiIGFzb2NpYWRhIGEgInTDrXR1bG8gZGUgYXNvY2lhZG8iLCB5ICJob21icmUiIGEgInTDrXR1bG8gdW5pdmVyc2l0YXJpbyIpLg0KbwlMYSBEaW1lbnNpw7NuIDEgKERpbTEpIHNlIGNlbnRyYSBlbiBsYSBkaWZlcmVuY2lhY2nDs24gZWR1Y2F0aXZhLCBtaWVudHJhcyBxdWUgbGEgRGltZW5zacOzbiAyIChEaW0yKSBkaXN0aW5ndWUgcHJpbmNpcGFsbWVudGUgZW50cmUgZ8OpbmVyb3MuDQpvCVZhcmlhYmxlcyBjb21vICJtdWplciIgeSAiZ3J1cG8gQyIgdGllbmVuIGFsdGFzIGNvbnRyaWJ1Y2lvbmVzIGEgbGEgdmFyaWFuemEgZXhwbGljYWRhIGVuIERpbTEuDQoNCjMuCVZpc3VhbGl6YWNpw7NuIHkgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs246DQpvCUxvcyBncsOhZmljb3MgcGVybWl0ZW4gaWRlbnRpZmljYXIgcGF0cm9uZXMgaW1wb3J0YW50ZXMsIGNvbW8gbGFzIHJlbGFjaW9uZXMgZW50cmUgY2F0ZWdvcsOtYXMgeSBzdSByZXByZXNlbnRhY2nDs24gZW4gZWwgcGxhbm8gZmFjdG9yaWFsLg0KbwlWYXJpYWJsZXMgcmVsYWNpb25hZGFzIGNvbiBnw6luZXJvIHkgZWR1Y2FjacOzbiBzb24gY2xhdmUgcGFyYSBleHBsaWNhciBsYXMgZXN0cnVjdHVyYXMgc3VieWFjZW50ZXPCoGRlwqBsb3PCoGRhdG9zLg0KDQojIyMjIEFDTQ0KYGBge3IgQUNNLCBmaWcuYWxpZ249J2NlbnRlcid9DQpyb3VuZChNQ0EoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HN1sxOjIwMCwgLWMoMiw3LDgsOSwxMCldLCBncmFwaCA9IEZBTFNFKSRlaWcsMikNCg0KYGBgDQoNCiMjIyMgRGlhZ3JhbWEgZGUgYml0cGxvdCBBQ00NCmBgYHtyIERpYWdyYW1hX2RlX2JpdHBsb3RfQUNNLCBmaWcuYWxpbmc9J2NlbnRlcid9DQpmdml6X21jYV9iaXBsb3QoTUNBKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzdbMToyMDAsIC1jKDIsNyw4LDksMTApXSwgZ3JhcGggPSBGQUxTRSksIHJlcGVsID0gVFJVRSkNCmBgYA0KDQojIyMjIENhbGlkYWQgZGUgcmVwcmVzZW50YWNpw7NuDQpgYGB7ciBDYWxpZGFkX2RlX3JlcHJlc2VudGFjaW9uLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X21jYV92YXIoTUNBKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzdbMToyMDAsIC1jKDIsNyw4LDksMTApXSwgZ3JhcGggPSBGQUxTRSksIGNvbC52YXIgPSJjb3MyIiwgZ3JhZGllbnQuY29scyA9IGMoIiMwMEFGQkIiLCAiI0U3QjgwMCIsICIjRkM0RTA3IiksIHJlcGVsID0gVFJVRSkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzDQpgYGB7ciBjb250cmlidWNpb25lcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9jb250cmliKE1DQShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3WzE6MjAwLCAtYygyLDcsOCw5LDEwKV0sIGdyYXBoID0gRkFMU0UpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDEsIHRvcCA9IDE1KQ0KYGBgDQoNCiMjIyMgQmlwbG90IGNvbiBjb250cmlidWNpb25lcw0KYGBge3IgQmlwbG90X2Nvbl9jb250cmlidWNpb25lcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9tY2FfdmFyKE1DQShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3WzE6MjAwLCAtYygyLDcsOCw5LDEwKV0sIGdyYXBoID0gRkFMU0UpLCBjb2wudmFyID0iY29udHJpYiIsIGdyYWRpZW50LmNvbHMgPSBjKCIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0ZDNEUwNyIpLCByZXBlbCA9IFRSVUUpDQpgYGANCg0KDQojIyAqKkZhc2UgNCBbQ29uZ2xvbWVyYWRvc10qKg0KDQojIyMgKio0LjEuIE9iamV0aXZvcyoqDQoNCkVuIHTDqXJtaW5vcyBnZW5lcmFsZXMsIGxhIGN1YXJ0YSBldGFwYSBkZSBlc3R1ZGlvIG1vc3RyYXLDoSBjw6FsY3Vsb3MsIHZpc3VhbGl6YWNpb25lcyBlIGludGVycHJldGFjaW9uZXMgY29uIGJhc2UgZW4gZWwgY29uanVudG8gZGUgZGF0b3MgdHJhdGFkb3MgZW4gbGFzIGZhc2VzIDEgLCAyIHkgMyAsIHBlcm8gYWhvcmEgZGVzZGUgdW4gZW5mb3F1ZSBkZSBhbsOhbGlzaXMgZGUgY29uZ2xvbWVyYWRvcyBlbiB2ZXJzacOzbiBqZXLDoXJxdWljYSAoZGVuZG9ncmFtYXMpIHkgbm8tIGplcsOhcnF1aWNhICggSyAtbWVkaWFzKS4NCg0KIyMjICoqNC4yLiBBZ3J1cGFjacOzbiBKZXLDoXJxdWljYSoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkxvcyBjb25nbG9tZXJhZG9zIHB1ZWRlbiBjb25jZWJpcnNlIGNvbW8gcmVnaW9uZXMgY29udGludWFzIGRlIHVuIGVzcGFjaW8gcXVlIGNvbnRpZW5lbiB1bmEgcmVsYXRpdmFtZW50ZSBhbHRhIGRlbnNpZGFkIGRlIHB1bnRvcywgcXVlIGEgc3UgdmV6IGVzdMOhbiBzZXBhcmFkYXMgcG9yIHJlZ2lvbmVzLiAowr9jb250aW51YXM/KSBxdWUgY29udGllbmVuIHVuYSBkZW5zaWRhZCBkZSBwdW50b3MgcmVsYXRpdmFtZW50ZSBiYWphLiBQYXJhIGNvbmZvcm1hciB0YWxlcyByZWdpb25lcyBkZSBwdW50b3Mgc2UgaGFuIHByb3B1ZXN0bywgcG9yIGVqZW1wbG8sIG3DqXRvZG9zIGplcsOhcnF1aWNvcy4gRXN0b3MgaW5pY2lhbiBjb24gZWwgY8OhbGN1bG8gZGUgbGEgbWF0cml6IGRlIGRpc3RhbmNpYXMgZW50cmUgbG9zIG9iamV0b3MgdHJhdGFkb3MsIGNvbiBsb3MgY3VhbGVzIHNlIGNvbmZvcm1hbiBncnVwb3MgcG9yIGFnbG9tZXJhY2nDs24gYSB0cmF2w6lzIGRlIGV0YXBhcyBxdWUgZW1waWV6YW4gcG9yIGNvbmdsb21lcmFkb3MgdW5pdGFyaW9zIChlbCBjYXNvIHRyaXZpYWwgaW5pY2lhbCwgY29tbyB0YW1iacOpbiBlbCBjYXNvIHRyaXZpYWwgZmluYWw6IHVuIGNvbmdsb21lcmFkbyB0b3RhbCkuIEVudHJlIGxhcyBvcGNpb25lcyByZXN0YW50ZXMgc2UgcHJlc2VudGFuIGZ1c2lvbmVzIHkgZGl2aXNpb25lcyBkZSBncnVwb3MgcXVlIGVzcGVjaWZpY2FuIGplcmFycXXDrWFzIHBvciBzaW1pbGl0dWRlcyBxdWUgcGVybWl0ZW4gdW5hIHJlcHJlc2VudGFjacOzbiBncsOhZmljYSBjb25vY2lkYSBjb21vIGRlbmRvZ3JhbWEuDQogDQpDb24gYmFzZSBlbiBsYXMgdmFyaWFibGVzIGN1YW50aXRhdGl2YXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHNlIGV4aWdlIGRlc2Fycm9sbGFyIGVsIGFuw6FsaXNpcyBkZSBjb25nbG9tZXJhZG9zIGNvbiBiYXNlIGFncnVwYWNpb25lcyBqZXLDoXJxdWljYXMgcXVlIHNlIHJlcHJlc2VudGFuIGNvbiBkZW5kb2dyYW1hcywgZXN0byBpbXBsaWNhIGNsYXNpZmljYXIgYSBsb3Mgb2JqZXRvcyBkZSB0cmFiYWpvIGNvbiBtw6l0b2RvcyBhZ2xvbWVyYXRpdm9zIGRlbCB2ZWNpbm8gbcOhcyBjZXJjYW5vLCBtw6FzIGxlamFuby4geSBkZSBsYSB1bmnDs24gbWVkaWFudGUgZWwgcHJvbWVkaW8sIHNvcG9ydGFkb3MgZW4gbGEgZGlzdGFuY2lhIGV1Y2xpZGlhbmEuDQoNCiBlbCBhbsOhbGlzaXMgcmVhbGl6YWRvIHNvYnJlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxvcyBlc3R1ZGlhbnRlcyByZXZlbGEgcGF0cm9uZXMgaW1wb3J0YW50ZXMgcmVsYWNpb25hZG9zIGNvbiBzdSByYXphL2V0bmljaWRhZCwgZWRhZCwgYXNpc3RlbmNpYSB5IHJlbmRpbWllbnRvIGFjYWTDqW1pY28uIEEgdHJhdsOpcyBkZWwgZXhhbWVuIGRlIGxvcyB2YWxvcmVzIG51bcOpcmljb3MgeSBsYSBjcmVhY2nDs24gZGUgZGVuZHJvZ3JhbWFzLCBzZSBvYnNlcnbDsyBxdWUgbGFzIGRpZmVyZW5jaWFzIGVudHJlIGxvcyBncnVwb3Mgw6l0bmljb3Mgc29uIG5vdGFibGVzLCBlc3BlY2lhbG1lbnRlIGVuIHTDqXJtaW5vcyBkZSBhc2lzdGVuY2lhIHkgcHVudGFqZXMgYWNhZMOpbWljb3MuIEVsIGdydXBvIEIsIGVuIHBhcnRpY3VsYXIsIG1vc3Ryw7MgdW4gZGVzZW1wZcOxbyBzdXBlcmlvciBlbiB2YXJpYXMgbcOpdHJpY2FzLiBBZGVtw6FzLCBsb3MgcmVzdWx0YWRvcyBkZSBsYXMgb3B0aW1pemFjaW9uZXMgeSBhbsOhbGlzaXMgamVyw6FycXVpY29zIHN1Z2llcmVuIHF1ZSwgcGFyYSBlc3RlIGNvbmp1bnRvIGRlIGRhdG9zLCBsYSBlc3RyYXRlZ2lhIMOzcHRpbWEgZXMgdHJhdGFyIGEgdG9kb3MgbG9zIGVzdHVkaWFudGVzIGNvbW8gdW4gc29sbyBncnVwbywgbG8gcXVlIGltcGxpY2EgcXVlIGxhcyBkaWZlcmVuY2lhcyBpbmRpdmlkdWFsZXMgbm8ganVzdGlmaWNhbiB1bmEgc2VnbWVudGFjacOzbiBtw6FzIGRldGFsbGFkYS4gRXN0YSBpbmZvcm1hY2nDs24gZXMgZXNlbmNpYWwgcGFyYSBjb21wcmVuZGVyIGxhcyBkaW7DoW1pY2FzIGRlbnRybyBkZWwgZ3J1cG8gZGUgZXN0dWRpYW50ZXMgeSBwYXJhIHRvbWFyIGRlY2lzaW9uZXMgaW5mb3JtYWRhcyBzb2JyZSBwb2zDrXRpY2FzIGVkdWNhdGl2YXMgeSBlc3RyYXRlZ2lhcyBkZcKgaW50ZXJ2ZW5jacOzbi4NCiANCiMjIyMgQ2FtcG8gY2xhc2lmaWNhZG9yDQpgYGB7ciBDYW1wb19jbGFzaWZpY2Fkb3IsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmhlYWQoYXMuZGF0YS5mcmFtZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzX3JhY2VfZXRobmljaXR5X3Byb21lZGlvKSkNCmBgYA0KDQojIyMjIERpc2ltaWxhcmlkYWQNCmBgYHtyIERpc2ltaWxhcmlkYWQsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmRhdGFfID0gYXMuZGF0YS5mcmFtZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzX3JhY2VfZXRobmljaXR5X3Byb21lZGlvKVssIC1jKDEpXQ0Kcm93bmFtZXMoZGF0YV8pID0gdW5jbGFzcyhjZGRfZXhhbWVuX2VzdHVkaWFudGVzX3JhY2VfZXRobmljaXR5X3Byb21lZGlvJHJhY2VfZXRobmljaXR5KQ0KZnZpel9kaXN0KGdldF9kaXN0KGRhdGFfLCBzdGFuZCA9IFQsIG1ldGhvZCA9ICJldWNsaWRlYW4iKSwgZ3JhZGllbnQgPSBsaXN0KGxvdyA9ICIjMDBBRkJCIiwgbWlkID0gIndoaXRlIiwgaGlnaCA9ICIjRkM0RTA3IikpDQpgYGANCg0KIyMjIyBPcHRpbWl6YWNpb24gZGUgTW9qZW5hIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQogDQojIyMjIyBVbmnDs24gU2ltcGxlDQpgYGB7ciB1bmlvbl9zaW1wbGUsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmhjX3NpbmdsZSA9IGhjbHVzdChnZXRfZGlzdChkYXRhXywgc3RhbmQgPSBULCBtZXRob2QgPSAiZXVjbGlkZWFuIiksIG1ldGhvZCA9ICJzaW5nbGUiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfc2luZ2xlKQ0KDQpgYGANCg0KIyMjIyMgVW5pw7NuIENvbXBsZXRhDQpgYGB7ciBVbmlvbl9Db21wbGV0YSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KaGNfY29tcGxldGUgPSBoY2x1c3QoZ2V0X2Rpc3QoZGF0YV8sIHN0YW5kID0gVCwgbWV0aG9kID0gImV1Y2xpZGVhbiIpLCBtZXRob2QgPSAiY29tcGxldGUiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfY29tcGxldGUpDQpgYGANCg0KIyMjIyMgVW5pw7NuIFByb21lZGlvDQpgYGB7ciBVbmlvbl9wcm9tZWRpbywgZmlnLmFsaWduPSdjZW50ZXInfQ0KaGNfYXZlcmFnZSA9IGhjbHVzdChnZXRfZGlzdChkYXRhXywgc3RhbmQgPSBULCBtZXRob2QgPSAiZXVjbGlkZWFuIiksIG1ldGhvZCA9ICJhdmVyYWdlIikNCg0KbW9qZW5hID0gZnVuY3Rpb24oaGMpew0KICBuX2hkID0gbGVuZ3RoKGhjJGhlaWdodCkNCiAgYWxwX2cgPSAwIDsgYWxwaGEgPSBoYyRoZWlnaHRbbl9oZDoxXQ0KICBmb3IoaSBpbiAxOihuX2hkLTEpKXsNCiAgICBhbHBfZ1tpXSA9IG1lYW4oYWxwaGFbKG5faGQtaSsxKToxXSkrMS4yNSpzZChhbHBoYVsobl9oZC1pKzEpOjFdKQ0KICB9DQogIG5vZyA9IHN1bShhbHBfZzw9IGFscGhhWy1uX2hkXSkgKyAxDQogIHBsb3QoYWxwaGFbLW5faGRdLCBwY2g9MjAsIGNvbD0oYWxwX2c+YWxwaGFbLW5faGRdKSsxLCBtYWluID0gcGFzdGUoIk9wdGltYWwgbnVtYmVyIG9mIGdyb3VwcyA9Iixub2cpLA0KICAgICAgIHlsYWIgPSBleHByZXNzaW9uKGFscGhhW2ddKSwgeGxhYj0iTm9kZXMiKX0NCg0KbW9qZW5hKGhjX2F2ZXJhZ2UpDQpgYGANCg0KIyMjIyBEZW5kb2dyYW1hcyBvcHRpbWl6YWRvcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBFbmxhY2UgU2ltcGxlDQpgYGB7ciBFbmxhY2VfU2ltcGxlLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdXBwcmVzc1dhcm5pbmdzKGZ2aXpfZGVuZChoY19zaW5nbGUsIGsgPSAzLCBjZXggPSAwLjUsIGtfY29sb3JzID0gIm5wZyIsIGNvbG9yX2xhYmVsc19ieV9rID0gVCwgcmVjdCA9IFQpKQ0KDQpgYGANCg0KIyMjIyMgRW5sYWNlIENvbXBsZXRvDQpgYGB7ciBFbmxhY2VfQ29tcGxldG8sIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfZGVuZChoY19jb21wbGV0ZSwgayA9IDMsIGNleCA9IDAuNSwga19jb2xvcnMgPSAibnBnIiwgY29sb3JfbGFiZWxzX2J5X2sgPSBULCByZWN0ID0gVCkNCg0KYGBgDQoNCiMjIyMjIEVubGFjZSBQcm9tZWRpbw0KYGBge3IgRW5sYWNlX1Byb21lZGlvLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2RlbmQoaGNfYXZlcmFnZSwgayA9IDQsIGNleCA9IDAuNSwga19jb2xvcnMgPSAibnBnIiwgY29sb3JfbGFiZWxzX2J5X2sgPSBULCByZWN0ID0gVCkNCmBgYA0KDQoNCiMjIyAqKjQuMy4gQWdydXBhY2nDs24gTm8tSmVyw6FycXVpY2EqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFc3RhIGZhc2Ugbm8gZnVlIHBvc2libGUgZGUgcHJvY2VzYXIgZGViaWRvIGEgbGEgbmF0dXJhbGV6YSBkZSBsb3MgZGF0b3MuIENvbW8gY29uc2VjdWVuY2lhIGRlIGVzdGEgbmF0dXJhbGV6YSwgZWwgcHJvZ3JhbWEgbm8gbG9ncmEgcHJvY2VzYXJsb3MgeSBnZW5lcmFiYSB1biBlcnJvciAoRXJyb3I6IGVsIG7Dum1lcm8gZGUgY2VudHJvcyBkZSBjbMO6c3RlciBkZWJlIGVzdGFyIGVudHJlIDEgeSBucm93KHgpKS4gRXN0byBzaWduaWZpY2EgcXVlIGxvcyBkYXRvcyBubyBwb3NlZW4gdW5hIHJlbGFjacOzbiBhcHJlY2lhYmxlLCBwb3IgbG8gY3VhbCBzZSBnZW5lcmEgdW4gY2VudHJvIGRlIGNsw7pzdGVyIHBhcmEgY2FkYSB1bm8gZGUgbG9zIGRhdG9zLCBkYW5kbyBjb21vIHJlc3VsdGFkbyB1biBjbMO6c3RlciBwYXJhIGNhZGEgcmVnaXN0cm8uIEVzdG8gaGFjZSBxdWUgc2VhIGNvbXB1dGFjaW9uYWxtZW50ZSBpbXByYWN0aWNhYmxlIGRlYmlkbyBhbCBleGNlc28gZGUgcmVjdXJzb3MgcXVlIHJlcXVpZXJlLiBBZGVtw6FzLCBhbmFsw610aWNhbWVudGUgdGFtcG9jbyBhcG9ydGEgbXVjaG8sIHNhbHZvIGV2aWRlbmNpYXIgbGEgcG9jYSByZWxhY2nDs24gbWVuY2lvbmFkYSBwcmV2aWFtZW50ZS4NCg0KIyMgKipGYXNlIDUgW0Fuw6FsaXNpcyBkZSBSZWdyZXNpw7NuXSoqDQoNCiMjIyAqKjUuMS4gT2JqZXRpdm9zKioNCg0KRW4gdMOpcm1pbm9zIGdlbmVyYWxlcywgZXN0ZSBlc3R1ZGlvIGVzdGFibGVjZXLDoSBsYSByZWxhY2nDs24gZW50cmUgZG9zIG8gbcOhcyB2YXJpYWJsZXMgYSB0cmF2w6lzIGRlIGxhIG9idGVuY2nDs24gZGUgaW5mb3JtYWNpw7NuIHNvYnJlIHVuYSBkZSBlbGxhcyBjb24gYmFzZSBlbiBlbCBjb25vY2ltaWVudG8gZGUgbG9zIHZhbG9yZXMgZGUgbGFzIGRlbcOhcy4gTGEgcmVsYWNpw7NuIHF1ZSBzZSBlc3RhYmxlY2Vyw6EgZW50cmUgZWxsYXMgZXMgZGUgbmF0dXJhbGV6YSBuby1kZXRlcm1pbsOtc3RpY2E7IGVzIGRlY2lyLCBzZSBmb3JtdWxhcsOhbiByZWxhY2lvbmVzIHByb2JhYmlsw61zdGljYXMgeSBwcm9jZWRpbWllbnRvcyBwYXJhIGhhY2VyIGluZmVyZW5jaWFzIHNvYnJlIGxvcyBtb2RlbG9zIHVzYWRvcyBlbiBlc3RlIGVzdHVkaW8sIGEgbGEgdmV6IHF1ZSBzZSBvYnRpZW5lbiBtZWRpZGFzIGN1YW50aXRhdGl2YXMgZGVsIGdyYWRvIGVuIGVsIHF1ZSBsYXMgdmFyaWFibGVzIGVzdMOhbiByZWxhY2lvbmFkYXMuIExvcyBtb2RlbG9zIGVzdHVkaWFkb3MgcHVlZGVuIHZlcnNlIGNvbW8gY2Fzb3MgZXNwZWNpYWxpZXMgZGVsIG1vZGVsbyBsaW5lYWwgZ2VuZXJhbGl6YWRvOiBSZWdyZXNpw7NuIExpbmVhbCBTaW1wbGUsIFJlZ3Jlc2nDs24gTGluZWFsIE3Dumx0aXBsZSB5IFJlZ3Jlc2nDs24gTG9nw61zdGljYS4gRW4gY2FkYSBhcGFydGFkbyBzZSBkZXNjcmliaXLDoSB0ZcOzcmljYW1lbnRlIGEgY2FkYSB1bm8geSBzZSB1c2Fyw6EgY29tbyBvYmpldG8gZGUgZXN0dWRpbyB1biBjb25qdW50byBkZSBkYXRvcy4NCg0KIyMjICoqNS4yLiBSZWdyZXNpw7NuIExpbmVhbCBTaW1wbGUqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbCBkaWFncmFtYSBkZSBjYWphIHkgYmlnb3RlcyBtdWVzdHJhIHF1ZSBsYSBkaXN0cmlidWNpw7NuIGRlIGFtYm9zIHB1bnRhamVzIGVzIHNpbWlsYXIsIGNvbiB1bmEgbWVkaWFuYSBsaWdlcmFtZW50ZSBtw6FzIGFsdGEgZW4gTWF0aCBTY29yZSBxdWUgZW4gUmVhZGluZyBTY29yZS4gRXN0byBzdWdpZXJlIHF1ZSwgZW4gZ2VuZXJhbCwgbG9zIGVzdHVkaWFudGVzIHRpZW5lbiB1biBtZWpvciBkZXNlbXBlw7FvIGVuIG1hdGVtw6F0aWNhcyBxdWUgZW4gbGVjdHVyYS4NCg0KRWwgZ3LDoWZpY28gZGUgZGlzcGVyc2nDs24gUlMgdnMgTVMgY29uZmlybWEgbGEgZXhpc3RlbmNpYSBkZSB1bmEgcmVsYWNpw7NuIGxpbmVhbCBwb3NpdGl2YSBlbnRyZSBlc3RhcyBkb3MgdmFyaWFibGVzLiBBIG1lZGlkYSBxdWUgYXVtZW50YSBlbCBwdW50YWplIGRlIG1hdGVtw6F0aWNhcywgdGFtYmnDqW4gdGllbmRlIGEgaW5jcmVtZW50YXJzZSBlbCBwdW50YWplIGRlIGxlY3R1cmEuIExhIGZvcm1hIHkgb3JpZW50YWNpw7NuIGRlIGxhIG51YmUgZGUgcHVudG9zIGluZGljYSBxdWUgZXN0YSBhc29jaWFjacOzbiBlcyBtb2RlcmFkYW1lbnRlIGZ1ZXJ0ZS4NCg0KTG9zIGdyw6FmaWNvcyBkZSBkaXNwZXJzacOzbiB0b3RhbGVzIHJldmVsYW4gdW5hIGRpc3RyaWJ1Y2nDs24gcmVsYXRpdmFtZW50ZSBzaW3DqXRyaWNhIHkgdW5pZm9ybWUgZGUgbG9zIGRhdG9zLCBzaW4gcHJlc2VuY2lhIGRlIHZhbG9yZXMgYXTDrXBpY29zIG8gYWdydXBhbWllbnRvcyBpbnVzdWFsZXMuIEVzdG8gY29ycm9ib3JhIHF1ZSBsb3MgcHVudGFqZXMgZGUgbGVjdHVyYSB5IG1hdGVtw6F0aWNhcyBzaWd1ZW4gcGF0cm9uZXMgZGUgZGlzdHJpYnVjacOzbiBzaW1pbGFyZXMgZW4gbGEgcG9ibGFjacOzbiBlc3R1ZGlhZGEuDQoNCkVuIHJlc3VtZW4sIGVsIGFuw6FsaXNpcyBpbnRlZ3JhbCBkZSBlc3RvcyBlbGVtZW50b3MgZ3LDoWZpY29zIHN1Z2llcmUgcXVlIGV4aXN0ZSB1bmEgcmVsYWNpw7NuIGxpbmVhbCBwb3NpdGl2YSBlbnRyZSBsb3MgcHVudGFqZXMgZGUgbGVjdHVyYSB5IG1hdGVtw6F0aWNhcyBkZSBsb3MgZXN0dWRpYW50ZXMuIFNpIGJpZW4gbm8gZXMgdW5hIGFzb2NpYWNpw7NuIHBlcmZlY3RhLCBsb3MgZXN0dWRpYW50ZXMgY29uIG1lam9yZXMgcmVzdWx0YWRvcyBlbiBtYXRlbcOhdGljYXMgdGllbmRlbiBhIG9idGVuZXIgdGFtYmnDqW4gbWVqb3JlcyBwdW50YWplcyBlbiBsZWN0dXJhLiBFc3RvcyBoYWxsYXpnb3MgcHVlZGVuIHNlciDDunRpbGVzIHBhcmEgaWRlbnRpZmljYXIgw6FyZWFzIGRlIG9wb3J0dW5pZGFkIHkgZGlzZcOxYXIgZXN0cmF0ZWdpYXMgZGUgZW5zZcOxYW56YSBxdWUgZmF2b3JlemNhbiBlbCBkZXNhcnJvbGxvIGludGVncmFsIGRlIGxhcyBoYWJpbGlkYWRlcyBhY2Fkw6ltaWNhcyBkZSBsb3MgZXN0dWRpYW50ZXMuDQoNCiMjIyMgUmVzdW1lbiBtYXRoIHNjb3JlDQpgYGB7ciBtYXRoX3Njb3JlLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdW1tYXJ5KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDApDQpib3hwbG90KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDAsIG1haW4gPSAiRGlhZ3JhbWEgZGUgQ2FqYSBkZSBNYXRoIFNjb3JlIiwgY29sID0gYygib3JhbmdlIikpDQoNCmBgYA0KDQojIyMjIFJlc3VtZW4gcmVhZGluZyBzY29yZQ0KYGBge3IgcmVhZGluZ19zY29yZSwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VtbWFyeShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwKQ0KYm94cGxvdChjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwLCBtYWluID0gIkRpYWdyYW1hIGRlIENhamEgZGUgcmVhZGluZyBTY29yZSIsIGNvbCA9IGMoImdvbGQiKSkNCg0KYGBgDQoNCiMjIyMgRGlhZ3JhbWEgZGUgZGlzcGVyc2nDs24gUlMgdnMuIE1TDQpgYGB7ciBEaWFncmFtYV9kZV9kaXNwZXJzaW9uX01TX3ZzX1JTLCBmaWcuYWxpZ249J2NlbnRlcid9DQpwbG90KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmVhZGluZ19zY29yZV8xMDAsIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDAsIG1haW4gPSAiRGlhZ3JhbWEgZGUgRGlzcGVyc2nDs24gUlMgU2NvcmUgdnMuIE1TIikNCmBgYA0KDQojIyMjIERpYWdyYW1hcyBUb3RhbGVzIGRlIERpc3BlcnNpw7NuDQpgYGB7ciBEaWFncmFtYXNfVG90YWxlc19kZV9EaXNwZXJzaW9ufQ0KcGFpcnMofmFnZSArIGF0dGVuZGFuY2UgKyBtYXRoX3Njb3JlXzEwMCArIHJlYWRpbmdfc2NvcmVfMTAwICsgd3JpdGluZ19zY29yZV8xMDAsIGRhdGEgPSBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3KQ0KYGBgDQoNCiMjIyA1LjIuMS4gRm9ybXVsYWNpw7NuIGRlbCBtb2RlbG8gZGUgUkxTIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgbG9zIGNvZWZpY2llbnRlcyBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSwgc3UgcmVzdW1lbiBlc3RhZMOtc3RpY28geSBzdSB0YWJsYSBBTk9WQS4gU2UgbWVuY2lvbmEgZGUgbnVldm8gcXVlIGxhcyB2YXJpYWJsZXMgZGUgaW50ZXLDqXMgc29uOiAgcmVhZGluZyBTY29yZSh2YXJpYWJsZSBpbmRlcGVuZGllbnRlKSB5IE1hdGggU2NvcmUodmFyaWFibGUgZGVwZW5kaWVudGUpLg0KDQpMb3MgY29lZmljaWVudGVzIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgZW50cmUgZWwgcHVudGFqZSBkZSBsZWN0dXJhIChSZWFkaW5nIFNjb3JlKSB5IGVsIHB1bnRhamUgZGUgbWF0ZW3DoXRpY2FzIChNYXRoIFNjb3JlKSBpbmRpY2FuIHF1ZSBleGlzdGUgdW5hIHJlbGFjacOzbiBwb3NpdGl2YSBlbnRyZSBlc3RhcyBkb3MgdmFyaWFibGVzLiBFbCBjb2VmaWNpZW50ZSBkZSBNYXRoIFNjb3JlIGVzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdm8sIGxvIHF1ZSBzaWduaWZpY2EgcXVlIGEgbWVkaWRhIHF1ZSBhdW1lbnRhIGVsIHB1bnRhamUgZGUgbWF0ZW3DoXRpY2FzLCB0YW1iacOpbiB0aWVuZGUgYSBhdW1lbnRhciBlbCBwdW50YWplIGRlIGxlY3R1cmEsIG1hbnRlbmllbmRvIHRvZG8gbG8gZGVtw6FzIGNvbnN0YW50ZS4NCg0KRWwgcmVzdW1lbiBlc3RhZMOtc3RpY28gZGVsIG1vZGVsbyByZXZlbGEgcXVlIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgZXhwbGljYSBhcHJveGltYWRhbWVudGUgZWwgMzUlIGRlIGxhIHZhcmlhYmlsaWRhZCBvYnNlcnZhZGEgZW4gbG9zIHB1bnRhamVzIGRlIGxlY3R1cmEgKFItY3VhZHJhZG8gPSAwLjM1KS4gRXN0ZSBlcyB1biB2YWxvciBtb2RlcmFkbywgbG8gcXVlIHN1Z2llcmUgcXVlIHNpIGJpZW4gTWF0aCBTY29yZSBlcyB1bmEgdmFyaWFibGUgcHJlZGljdG9yYSBpbXBvcnRhbnRlLCBleGlzdGVuIG90cm9zIGZhY3RvcmVzIHF1ZSB0YW1iacOpbiBpbmZsdXllbiBlbiBsb3MgcHVudGFqZXMgZGUgbGVjdHVyYSBkZSBsb3MgZXN0dWRpYW50ZXMuDQoNCkZpbmFsbWVudGUsIGVsIGFuw6FsaXNpcyBkZSB2YXJpYW56YSAoQU5PVkEpIGNvbmZpcm1hIHF1ZSBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBlbiBzdSBjb25qdW50byBlcyBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvLCBlcyBkZWNpciwgZWwgcHVudGFqZSBkZSBtYXRlbcOhdGljYXMgZXMgdW5hIHZhcmlhYmxlIHJlbGV2YW50ZSBwYXJhIGV4cGxpY2FyIGxvcyBwdW50YWplcyBkZSBsZWN0dXJhLg0KDQogDQojIyMjIENvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMUw0KYGBge3IgQ29lZmljaWVudGVzX2RlbF9Nb2RlbG9fUkxTLCBmaWcuYWxpZ249J2NlbnRlcid9DQptb2RlbG9fUkxfU2ltcGxlID0gbG0oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMH5jZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwKQ0KY29lZihtb2RlbG9fUkxfU2ltcGxlKQ0KDQpgYGANCg0KIyMjIyBSZXN1bWVuIEVzdGFkw61zdGljbyBkZWwgTW9kZWxvIFJMUw0KYGBge3IgUmVzdW1lbl9Fc3RhZGlzdGljb19kZWxfTW9kZWxvX1JMUywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VtbWFyeShtb2RlbG9fUkxfU2ltcGxlKQ0KYGBgDQoNCiMjIyMgVGFibGEgQU5PVkEgcGFyYSBlbCBNb2RlbG8gUkxTDQpgYGB7ciBUYWJsYSBBTk9WQSBwYXJhIGVsIE1vZGVsbyBSTFMsZmlnLmFsaWduPSdjZW50ZXInfQ0KYW5vdmEobW9kZWxvX1JMX1NpbXBsZSkNCmBgYA0KDQojIyMgNS4yLjIuIEFuw6FsaXNpcyBkZWwgbW9kZWxvIFJMUy4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkVzdGUgYXBhcnRhZG8gbXVlc3RyYSBlbCBpbnRlcnZhbG8gZGUgY29uZmlhbnphIHBhcmEgZWwgY29lZmljaWVudGUgQjEsIHF1ZSByZXByZXNlbnRhIGxhIHBlbmRpZW50ZSBkZSBsYSByZWN0YSBkZSByZWdyZXNpw7NuLiBFbCBpbnRlcnZhbG8gZGUgY29uZmlhbnphIHByb3BvcmNpb25hIHVuIHJhbmdvIGRlIHZhbG9yZXMgcGxhdXNpYmxlcyBwYXJhIGVsIHZlcmRhZGVybyB2YWxvciBkZWwgY29lZmljaWVudGUgQjEsIGNvbiB1biBuaXZlbCBkZSBjb25maWFuemEgZGV0ZXJtaW5hZG8gKHBvciBlamVtcGxvLCA5NSUpLiBFc3RvIHBlcm1pdGUgZXZhbHVhciBsYSBzaWduaWZpY2FuY2lhIGVzdGFkw61zdGljYSBkZWwgY29lZmljaWVudGU6IHNpIGVsIGludGVydmFsbyBkZSBjb25maWFuemEgbm8gaW5jbHV5ZSBlbCB2YWxvciBjZXJvLCBzZSBwdWVkZSBjb25jbHVpciBxdWUgQjEgZXMgc2lnbmlmaWNhdGl2YW1lbnRlIGRpZmVyZW50ZSBkZSBjZXJvLCBsbyBxdWUgaW1wbGljYSBxdWUgZXhpc3RlIHVuYSByZWxhY2nDs24gbGluZWFsIHNpZ25pZmljYXRpdmEgZW50cmUgbGFzIHZhcmlhYmxlcy4NClByZWRpY2Npb25lcyB5IHN1cyBpbnRlcnZhbG9zIGRlIHByZWRpY2Npw7NuOg0KDQpFc3RhIHRhYmxhIHByZXNlbnRhIHByZWRpY2Npb25lcyBwdW50dWFsZXMgcGFyYSBkZXRlcm1pbmFkb3MgdmFsb3JlcyBkZSBsYSB2YXJpYWJsZSBpbmRlcGVuZGllbnRlIChNYXRoIFNjb3JlKSwganVudG8gY29uIHN1cyBjb3JyZXNwb25kaWVudGVzIGludGVydmFsb3MgZGUgcHJlZGljY2nDs24uIExvcyBpbnRlcnZhbG9zIGRlIHByZWRpY2Npw7NuIGluZGljYW4gZWwgcmFuZ28gZW4gZWwgcXVlIHNlIGVzcGVyYSBxdWUgY2FpZ2EgZWwgdmFsb3IgcmVhbCBkZSBsYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSAoUmVhZGluZyBTY29yZSkgcGFyYSB1biB2YWxvciBkYWRvIGRlIGxhIHZhcmlhYmxlIGluZGVwZW5kaWVudGUsIGNvbiB1biBuaXZlbCBkZSBjb25maWFuemEgZXN0YWJsZWNpZG8uIEVzdG9zIGludGVydmFsb3Mgc29uIG3DoXMgYW1wbGlvcyBxdWUgbG9zIGludGVydmFsb3MgZGUgY29uZmlhbnphLCB5YSBxdWUgdGllbmVuIGVuIGN1ZW50YSBsYSB2YXJpYWJpbGlkYWQgaW5kaXZpZHVhbCBkZSBsb3MgZGF0b3MsIG5vIHNvbG8gbGEgaW5jZXJ0aWR1bWJyZSBlbiBsYSBlc3RpbWFjacOzbiBkZWwgY29lZmljaWVudGUuDQoNClByZWRpY2Npb25lcyB5IHN1cyBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YToNCkVzdGEgc2VndW5kYSB0YWJsYSBtdWVzdHJhIHByZWRpY2Npb25lcyBwdW50dWFsZXMgcGFyYSB2YWxvcmVzIGRlIE1hdGggU2NvcmUsIHBlcm8gZW4gbHVnYXIgZGUgaW50ZXJ2YWxvcyBkZSBwcmVkaWNjacOzbiwgcHJlc2VudGEgaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgcGFyYSBlc2FzIHByZWRpY2Npb25lcy4gTG9zIGludGVydmFsb3MgZGUgY29uZmlhbnphIGluZGljYW4gZWwgcmFuZ28gZW4gZWwgcXVlIHNlIGVzcGVyYSBxdWUgY2FpZ2EgZWwgdmFsb3IgcHJvbWVkaW8gZGUgUmVhZGluZyBTY29yZSBwYXJhIHVuIHZhbG9yIGRhZG8gZGUgTWF0aCBTY29yZSwgY29uIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZXRlcm1pbmFkby4gRXN0b3MgaW50ZXJ2YWxvcyBzb24gbcOhcyBlc3RyZWNob3MgcXVlIGxvcyBpbnRlcnZhbG9zIGRlIHByZWRpY2Npw7NuLCB5YSBxdWUgbm8gY29uc2lkZXJhbiBsYSB2YXJpYWJpbGlkYWQgaW5kaXZpZHVhbCwgc2lubyBzb2xvIGxhIGluY2VydGlkdW1icmUgZW4gbGEgZXN0aW1hY2nDs24gZGVsIHZhbG9yIHByb21lZGlvLg0KRW4gZ2VuZXJhbCwgZXN0ZSBjb25qdW50byBkZSBlbGVtZW50b3MgcGVybWl0ZSBldmFsdWFyIGxhIHNvbGlkZXogeSBwcmVjaXNpw7NuIGRlIGxhcyBwcmVkaWNjaW9uZXMgcmVhbGl6YWRhcyBhIHBhcnRpciBkZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIHNpbXBsZSBlbnRyZSBNYXRoIFNjb3JlIHkgUmVhZGluZyBTY29yZS4gTG9zIGludGVydmFsb3MgZGUgY29uZmlhbnphIHkgcHJlZGljY2nDs24gYnJpbmRhbiBpbmZvcm1hY2nDs24gc29icmUgbGEgaW5jZXJ0aWR1bWJyZSBhc29jaWFkYSBhIGxhcyBlc3RpbWFjaW9uZXMgeSBwcm9uw7NzdGljb3MsIGxvIGN1YWwgZXMgZnVuZGFtZW50YWwgcGFyYSB2YWxvcmFyIGxhIGFwbGljYWJpbGlkYWQgeSBsaW1pdGFjaW9uZXMgZGVsIG1vZGVsby4NCg0KIyMjIyBJbnRlcnZhbG8gZGUgQ29uZmlhbnphIHBhcmEgQjENCmBgYHtyIEludGVydmFsb19kZV9Db25maWFuemFfcGFyYV9CMSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KY29uZmludChtb2RlbG9fUkxfU2ltcGxlLCBsZXZlbCA9IDAuOTUpDQoNCmBgYA0KDQojIyMjIFByZWRpY2Npb25lcyB5IHN1cyBJbnRlcnZhbG9zIGRlIFByZWRpY2Npw7NuIA0KYGBge3IgUHJlZGljY2lvbmVzX3lfc3VzX0ludGVydmFsb3NfZGVfUHJlZGljY2lvbiwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcHJlZGljdChtb2RlbG9fUkxfU2ltcGxlLCBkYXRhLmZyYW1lKHNlcSgxLDEwMDApKSwgaW50ZXJ2YWw9J3ByZWRpY3Rpb24nLCBsZXZlbCA9IDAuOTUpDQpgYGANCg0KIyMjIyBQcmVkaWNjaW9uZXMgeSBzdXMgSW50ZXJ2YWxvcyBkZSBDb25maWFuemENCmBgYHtyIFByZWRpY2Npb25lc195X3N1c19JbnRlcnZhbG9zX2RlX0NvbmZpYW56YSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcHJlZGljdChtb2RlbG9fUkxfU2ltcGxlLCBkYXRhLmZyYW1lKHNlcSgxLDEwMDApKSwgaW50ZXJ2YWw9J2NvbmZpZGVuY2UnLCBsZXZlbCA9IDAuOTUpDQpgYGANCg0KDQojIyMgKio1LjMuIFJlZ3Jlc2nDs24gTGluZWFsIE3Dumx0aXBsZSoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpDb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyBzZSBmb3JtdWxhcsOhIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgcGFyYSBlc3R1ZGlhciBsYSByZWxhY2nDs24gbGluZWFsIG3Dumx0aXBsZSBzdXB1ZXN0YSBlbnRyZSBsYXMgdmFyYWlibGVzIGRlZmluaWRhcyBwb3IgbG9zIGNhbXBvczogbWF0aCBzY29yZSh2YXJpYWJsZSBkZXBlbmRpZW50ZSkgIHkgbG9zIGRlbcOhcyBjb21vIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlczogZ2VuZGVyLCByYWNlIGV0aG5pY2l0eSwgcGFyZW50YWwgbGV2ZWwgb2YgZWR1Y2F0aW9uLCBsdW5jaCwgdGVzdCBwcmVwYXJhdGlvbiBjb3Vyc2UsIGF0dGVuZGFuY2UsIG1hdGggc2NvcmUgMTAwLCByZWFkaW5nIHNjb3JlIDEwMCwgd3JpdGluZyBzY29yZSAxMDAuDQogDQpMYSBuYXZlZ2FjacOzbiBhIHRyYXbDqXMgZGUgbGFzIHBlc3Rhw7FhcyBtdWVzdHJhIGVsIHJlc3VtZW4gZXN0YWTDrXN0aWNvIGRlIHRvZGFzIGxhcyB2YXJpYWJsZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIFNpbiBlbWJhcmdvLCBwYXJhIGxhcyB2YXJhaWJsZXMgZGUgbmF0dXJhbGV6YSBjdWFudGl0YXRpdmE6OnJhesOzbiBlbCByZXN1bWVuIHNlcsOhIGVsIHRyYWRpY2lvbmFsLCBwZXJvIHBhcmEgbGFzIHZhcmlhYmxlcyBkZSBuYXR1cmFsZXphIGN1YWxpdGF0aXZhOjpub21pbmFsIGVsIHJlc3VtZW4gZXN0YWTDrXN0aWNvIGNvbnNpc3RpcsOhIGVuIGNvbnRlb3MsIHByb3BvcmNpb25lcyB5IGRpYWdyYW1hcyBkZSBiYXJyYXMuIFNlIG1lbmNpb25hIGRlIG51ZXZvIHF1ZSByZWFkaW5nIFNjb3JlIGVzIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlLg0KDQpDb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyBkZXNjcml0byBlbiBsYSBzZWNjacOzbiAyIHNlIGZvcm11bGFyw6EgdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSBwYXJhIGVzdHVkaWFyIGxhIHJlbGFjacOzbiBsaW5lYWwgbcO6bHRpcGxlIHN1cHVlc3RhIGVudHJlIGxhcyB2YXJpYWJsZXMgZGVmaW5pZGFzIHBvciBsb3MgY2FtcG9zOiBSZWFkaW5nX3Njb3JlLCB3cml0aW5nX3Njb3JlIHkgYXR0ZW5kYW5jZSAodmFyaWFibGVzIGRlcGVuZGllbnRlcykgeSBsb3MgZGVtw6FzIGNvbW8gdmFyaWFibGVzIGluZGVwZW5kaWVudGVzOiBNYXRoX3Njb3JlLCBhZ2UuIFRvbWFuZG8gZWwgZW5mb3F1ZSBkZSBsYXMgdmFyaWFibGVzIGFjYWTDqW1pY2FzIGRlYmlkbyBhIHF1ZSBsYXMgb3RyYXMgbm8gc29uIG11eSByZWxldmFudGVzIA0KDQpNZWRpYSAoREUpOg0KUmVhZGluZ19zY29yZTogNzcuMjcgKDE3LjI2KQ0KV3JpdGluZ19zY29yZTogNzguOTQgKDE1LjIyKQ0KTWF0aF9zY29yZTogODEuMjAgKDE4LjEzKQ0KDQpDb3JyZWxhY2lvbmVzOg0KUmVhZGluZ19zY29yZSB2cyBXcml0aW5nX3Njb3JlOiAwLjc2DQpSZWFkaW5nX3Njb3JlIHZzIE1hdGhfc2NvcmU6IDAuNzIgIA0KV3JpdGluZ19zY29yZSB2cyBNYXRoX3Njb3JlOiAwLjc1DQoNCkxvcyBkYXRvcyBtdWVzdHJhbiByZWxhY2lvbmVzIGxpbmVhbGVzIHBvc2l0aXZhcyBtb2RlcmFkYXMgYSBmdWVydGVzIGVudHJlIGxhcyB0cmVzIG1lZGlkYXMgZGUgcmVuZGltaWVudG8gYWNhZMOpbWljby4gRW4gcHJvbWVkaW8sIGxvcyBlc3R1ZGlhbnRlcyBvYnR1dmllcm9uIGxhcyBwdW50dWFjaW9uZXMgbcOhcyBhbHRhcyBlbiBNYXRlbcOhdGljYXMsIHNlZ3VpZGFzIGRlIEVzY3JpdHVyYSB5wqBsdWVnb8KgTGVjdHVyYS4NCiANCiMjIyMgUmVzdW1lbiBWYXJpYWJsZXMgQ3VhbnRpdGF0aXZhcw0KYGBge3IgUmVzdW1lbl9WYXJpYWJsZXNfQ3VhbnRpdGF0aXZhcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VtbWFyeShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGFnZSkNCnN1bW1hcnkoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRhdHRlbmRhbmNlKQ0Kc3VtbWFyeShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JG1hdGhfc2NvcmVfMTAwKQ0Kc3VtbWFyeShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwKQ0Kc3VtbWFyeShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHdyaXRpbmdfc2NvcmVfMTAwKQ0KYGBgDQoNCiMjIyMgUmVzdW1lbiBWYXJpYWJsZXMgQ3VhbGl0YXRpdmFzDQpgYGB7ciBSZXN1bWVuX1ZhcmlhYmxlc19DdWFsaXRhdGl2YXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyKQ0KcHJvcC50YWJsZSh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlcikpDQpiYXJwbG90KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyKSkNCg0KdGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSkNCnByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSkpDQpiYXJwbG90KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKQ0KDQp0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHBhcmVudGFsX2xldmVsX29mX2VkdWNhdGlvbikNCnByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRwYXJlbnRhbF9sZXZlbF9vZl9lZHVjYXRpb24pKQ0KYmFycGxvdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHBhcmVudGFsX2xldmVsX29mX2VkdWNhdGlvbikpDQoNCnRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbHVuY2gpDQpwcm9wLnRhYmxlKHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbHVuY2gpKQ0KYmFycGxvdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGx1bmNoKSkNCg0KdGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSkNCnByb3AudGFibGUodGFibGUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSkpDQpiYXJwbG90KHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpKQ0KYGBgDQoNCiMjIyMgRGlhZ3JhbWFzIGRlIERpc3BlcnNpw7NuIFZhcmlhYmxlcyBDdWFudGl0YXRpdmFzIA0KYGBge3IgRGlhZ3JhbWFzX2RlX0Rpc3BlcnNpb25fVmFyaWFibGVzX0N1YW50aXRhdGl2YXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnBhaXJzKH5hZ2UgKyBhdHRlbmRhbmNlICsgbWF0aF9zY29yZV8xMDAgKyByZWFkaW5nX3Njb3JlXzEwMCArIHdyaXRpbmdfc2NvcmVfMTAwLCBkYXRhID0gY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNykNCg0KYGBgDQoNCiMjIyA1LjMuMS4gRm9ybXVsYWNpw7NuIGRlbCBtb2RlbG8gZGUgUkxNIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpbyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KTGEgbmF2ZWdhY2nDs24gYSB0cmF2w6lzIGRlIGxhcyBwZXN0YcOxYXMgbXVlc3RyYSBlbCByZXN1bWVuIHkgbGEgdGFibGEgQU5PVkEgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgdG90YWwgeSBsb3MgY29lZmljaWVudGVzIHRhbnRvIGRlbCBtb2RlbG8gbWVuY2lvbmFkbyBjb21vIGVsIGxvZ3JhZG8gbHVlZ28gZGUgcmVkdWNpcmxvLiBDb24gYmFzZSBlbiBsYSBleHBsb3JhY2nDs24gZGUgbG9zIGRhdG9zIGRlIGxhIHNlc2nDs24gMiB5IGVsIHJlc3VtZW4geSBsYSB0YWJsYSBBTk9WQSBkZWwgbW9kZWxvIHRvdGFsLCBzZSBmb3JtdWxhbiBwYXJhIGNvbXBhcmFjacOzbiBkb3MgbW9kZWxvcyBkZSBSTE06IHVubyBxdWUgaW5jbHV5ZSBhIHRvZGFzIGxhcyB2YXJpYWJsZXMgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHkgb3RybyBxdWUgc2UgZW5mb2NhIHNvbG8gZW4gbGFzIHZhcmlhYmxlcyBhY2Fkw6ltaWNhcyBkZWJpZG8gYSBxdWUgbGFzIG90cmFzIG5vIHNvbiBtdXkgcmVsZXZhbnRlcy4gRW4gZXN0ZSBjYXNvLCBsYXMgdmFyaWFibGVzIGRlcGVuZGllbnRlcyBzb24gUmVhZGluZ19zY29yZSwgV3JpdGluZ19zY29yZSB5IEF0dGVuZGFuY2UsIHkgbGFzIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcyBzb24gTWF0aF9zY29yZSB5IEFnZS4NCkFsIGNvbnNpZGVyYXIgbG9zIHJlc3VsdGFkb3MgcHJlc2VudGFkb3MgZW4gbGEgcGVzdGHDsWEgQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxNIFRvdGFsLCBzZSBwdWVkZSBlc3RhYmxlY2VyIHF1ZSBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgbcO6bHRpcGxlIHRvdGFsIHF1ZSByZWxhY2lvbmEgYSBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzLCByZXN1bWlkYXMgY29tbyBSZWFkaW5nX3Njb3JlLCBXcml0aW5nX3Njb3JlIHkgTWF0aF9zY29yZS4NClBhcmEgZXN0ZSBtb2RlbG8sIHNlIG9idmlhIGxhIGludGVycHJldGFjacOzbiBkZWwgaW50ZXJjZXB0byBwb3IgY2FyZWNlciBkZSBzZW50aWRvIGRhZG8gcXVlIGxhcyB2YXJpYWJsZXMgZGVwZW5kaWVudGVzIHJlc3VsdGFyw61hbiBuZWdhdGl2YXMgZW4gY2FzbyBkZSBxdWUgbGFzIHZhcmlhYmxlcyBwcmVkaWN0b3JhcyBmdWVzZW4gbnVsYXMgYSBsYSB2ZXosIHkgYW1iYXMgc2l0dWFjaW9uZXMgY2FyZWNlbiBkZSBzZW50aWRvLg0KUG9yIG90cm8gbGFkbywgbHVlZ28gZGUgcmV2aXNhciBlbCByZXN1bWVuIGVzdGFkw61zdGljbyB5IGxhIHRhYmxhIEFOT1ZBIGRlbCBtb2RlbG8gUkxNIFRvdGFsIChjb21vIHNlIG11ZXN0cmEgZW4gbGEgcGVzdGHDsWEgaG9tw7NuaW1hKSwgc2UgcHVkbyBlc3RhYmxlY2VyLCBjb24gZWwgYXBveW8gZGUgbG9zIHJlc8O6bWVuZXMgZXN0YWTDrXN0aWNvcyBkZSBsYXMgdmFyaWFibGVzIGRlIGVzdHVkaW8sIHF1ZSBwb2TDrWFuIGV4Y2x1aXJzZSBkaXJlY3RhbWVudGUgZGVsIG1vZGVsbyBsYXMgdmFyaWFibGVzIGNvbiBiYWphIHNpZ25pZmljYW5jaWEuIEVuIGVzdGUgY2FzbywgdG9kYXMgbGFzIHZhcmlhYmxlcyBzb24gc2lnbmlmaWNhdGl2YXMsIHBvciBsbyBxdWUgbm8gc2UgZXhjbHV5ZXJvbiB2YXJpYWJsZXMgZW4gZWwgbW9kZWxvIHJlZHVjaWRvLg0KUmVzdW1lbiBlc3RhZMOtc3RpY28gZGUgbGFzIHZhcmlhYmxlcyBkZSBlc3R1ZGlvOg0K4oCiCU1lZGlhIChERSk6IA0KbwlSZWFkaW5nX3Njb3JlOiA3Ny4yNyAoMTcuMjYpDQpvCVdyaXRpbmdfc2NvcmU6IDc4Ljk0ICgxNS4yMikNCm8JTWF0aF9zY29yZTogODEuMjAgKDE4LjEzKQ0KQ29ycmVsYWNpb25lczoNCuKAoglSZWFkaW5nX3Njb3JlIHZzIFdyaXRpbmdfc2NvcmU6IDAuNzYNCuKAoglSZWFkaW5nX3Njb3JlIHZzIE1hdGhfc2NvcmU6IDAuNzINCuKAoglXcml0aW5nX3Njb3JlIHZzIE1hdGhfc2NvcmU6IDAuNzUNCkxvcyBkYXRvcyBtdWVzdHJhbiByZWxhY2lvbmVzIGxpbmVhbGVzIHBvc2l0aXZhcyBtb2RlcmFkYXMgYSBmdWVydGVzIGVudHJlIGxhcyB0cmVzIG1lZGlkYXMgZGUgcmVuZGltaWVudG8gYWNhZMOpbWljby4gRW4gcHJvbWVkaW8sIGxvcyBlc3R1ZGlhbnRlcyBvYnR1dmllcm9uIGxhcyBwdW50dWFjaW9uZXMgbcOhcyBhbHRhcyBlbiBNYXRlbcOhdGljYXMsIHNlZ3VpZGFzIGRlIEVzY3JpdHVyYSB5IGx1ZWdvIExlY3R1cmEuDQogDQojIyMjIFJlc3VtZW4geSBBTk9WQSBkZWwgTW9kZWxvIFJMTSBUb3RhbA0KYGBge3IgUmVzdW1lbl95X0FOT1ZBX2RlbF9Nb2RlbG9fUkxNX1RvdGFsLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdW1tYXJ5KGxtKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDB+Y2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRhZ2UrY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRhdHRlbmRhbmNlK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmVhZGluZ19zY29yZV8xMDArY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR3cml0aW5nX3Njb3JlXzEwMCthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIpK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRwYXJlbnRhbF9sZXZlbF9vZl9lZHVjYXRpb24pK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGx1bmNoKSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSkpKQ0KDQphbm92YShsbShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JG1hdGhfc2NvcmVfMTAwfmNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckYWdlK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckYXR0ZW5kYW5jZStjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckd3JpdGluZ19zY29yZV8xMDArYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyKSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSkrYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcGFyZW50YWxfbGV2ZWxfb2ZfZWR1Y2F0aW9uKSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRsdW5jaCkrYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpKSkNCmBgYA0KDQojIyMjIENvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMTSBUb3RhbA0KYGBge3IgQ29lZmljaWVudGVzX2RlbF9Nb2RlbG9fUkxNX1RvdGFsLCBmaWcuYWxpZ249J2NlbnRlcid9DQpjb2VmZmljaWVudHMobG0oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMH5jZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGFnZStjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGF0dGVuZGFuY2UrY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyZWFkaW5nX3Njb3JlXzEwMCtjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHdyaXRpbmdfc2NvcmVfMTAwK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGdlbmRlcikrYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHBhcmVudGFsX2xldmVsX29mX2VkdWNhdGlvbikrYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbHVuY2gpK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlKSkpDQoNCmBgYA0KDQojIyMjIENvZWZpY2llbnRlcyBkZWwgTW9kZWxvIFJMTSBSZWR1Y2lkbw0KYGBge3IgQ29lZmljaWVudGVzX2RlbF9Nb2RlbG9fUkxNX1JlZHVjaWRvLCBmaWcuYWxpZ249J2NlbnRlcid9DQpjb2VmZmljaWVudHMobG0oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMH5jZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckd3JpdGluZ19zY29yZV8xMDArYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKSkNCg0KYGBgDQoNCiMjIyBSZXN1bWVuIGRlbCBhbsOhbGlzaXMgZGUgbG9zIG1vZGVsb3M6IHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpQcm9jZXNvOg0KMS4JTW9kZWxvIGluaWNpYWw6DQpvCUluY2x1eWUgdG9kYXMgbGFzIHZhcmlhYmxlczogZWRhZCwgYXNpc3RlbmNpYSwgcHVudGFqZXMgZW4gbGVjdHVyYSB5IGVzY3JpdHVyYSwgZ8OpbmVybywgZXRuaWNpZGFkLCBuaXZlbCBlZHVjYXRpdm8gcGFyZW50YWwsIHRpcG8gZGUgYWxtdWVyem8geSBjdXJzbyBkZSBwcmVwYXJhY2nDs24uDQoyLglSZWR1Y2Npw7NuIGRlbCBtb2RlbG86DQpvCVNlIGVsaW1pbmFuIHZhcmlhYmxlcyBpbnNpZ25pZmljYW50ZXMgcGFzbyBhIHBhc28sIG1pbmltaXphbmRvIGVsIEFJQyBwYXJhIGxvZ3JhciB1biBtb2RlbG8gbcOhcyBlZmljaWVudGUgY29uIG1lbm9yIGNvbXBsZWppZGFkLg0KMy4JTW9kZWxvIGZpbmFsOg0KbwlDb25zZXJ2YSBzb2xvIGxhcyB2YXJpYWJsZXMgc2lnbmlmaWNhdGl2YXM6DQrvgqcJUHVudGFqZSBlbiBsZWN0dXJhICgwLjI1MykgeSBlc2NyaXR1cmEgKDAuNjY2KS4NCu+CpwlHw6luZXJvIG1hc2N1bGlubyAoMTIuNjMpOiBlZmVjdG8gcG9zaXRpdm8gc2lnbmlmaWNhdGl2by4NCu+CpwlHcnVwbyDDqXRuaWNvIEUgKDUuMzkpOiBpbXBhY3RvIHNpZ25pZmljYXRpdm8gZnJlbnRlIGFsIGdydXBvIGJhc2UuDQrvgqcJQWxtdWVyem8gZXN0w6FuZGFyICgzLjgxKSB5IHNpbiBjdXJzbyBkZSBwcmVwYXJhY2nDs24gKDQuMTkpOiBlZmVjdG9zIHBvc2l0aXZvcy4NCg0KUmVzdWx0YWRvcyBkZSBsb3MgbW9kZWxvczoNCjEuCU1vZGVsbyAxIChjb21wbGV0byk6DQpvCUV4cGxpY2EgZWwgODcuMiUgZGUgbGEgdmFyaWFuemEgKFLCsiA9IDAuODcyKSwgcGVybyBpbmNsdXllIG11Y2hhcyB2YXJpYWJsZXMgbm8gc2lnbmlmaWNhdGl2YXMuDQpvCUVycm9yIHJlc2lkdWFsIGVzdMOhbmRhcjogNS41NjMuDQoyLglNb2RlbG8gMiAoc2ltcGxpZmljYWRvKToNCm8JRXhjbHV5ZSB2YXJpYWJsZXMgaXJyZWxldmFudGVzLCBwZXJvIHJlZHVjZSBsYSBwcmVjaXNpw7NuIChSwrIgPSAwLjY5NykuDQpvCUVycm9yIHJlc2lkdWFsIGVzdMOhbmRhcjogOC40OTkuDQozLglNb2RlbG8gMyAoZmluYWwpOg0KbwlPcHRpbWl6YSBlbCBhanVzdGUgKFLCsiA9IDAuODcxKSB5IG1hbnRpZW5lIHNpbXBsaWNpZGFkLg0KbwlFcnJvciByZXNpZHVhbCBlc3TDoW5kYXI6IDUuNTU1LCBtdXkgc2ltaWxhciBhbCBNb2RlbG8gMS4NCiANCiMjIyMgTWVqb3IgTW9kZWxvIEl0ZXJhZG8gc2Vnw7puIEFJQw0KYGBge3IgTWVqb3JfTW9kZWxvX0l0ZXJhZG9fc2VndW5fQUlDLCBmaWcuYWxpZ249J2NlbnRlcid9DQptb2RlbG9fSXRlcmFkb19TVEVQID0gc3RlcChsbShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JG1hdGhfc2NvcmVfMTAwfmNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckYWdlK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckYXR0ZW5kYW5jZStjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckd3JpdGluZ19zY29yZV8xMDArYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckZ2VuZGVyKSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSkrYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcGFyZW50YWxfbGV2ZWxfb2ZfZWR1Y2F0aW9uKSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRsdW5jaCkrYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UpKSkNCg0KY29lZmZpY2llbnRzKG1vZGVsb19JdGVyYWRvX1NURVApDQpgYGANCg0KIyMjIyBCb25kYWRlcyBkZSBhanVzdGUsIFNpZ25pZmljYW5jaWFzIHkgY3JpdGVyaW9zIGRlIGluZm9ybWFjacOzbiBjb21wYXJhZG9zDQpgYGB7ciBCb25kYWRlc19kZV9hanVzdGVfU2lnbmlmaWNhbmNpYXNfeV9jcml0ZXJpb3NfZGVfaW5mb3JtYWNpb25fY29tcGFyYWRvcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KbW9kZWxvX1JMTV9UT1RBTCA9IGxtKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDB+Y2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRhZ2UrY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRhdHRlbmRhbmNlK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmVhZGluZ19zY29yZV8xMDArY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR3cml0aW5nX3Njb3JlXzEwMCthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRnZW5kZXIpK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRwYXJlbnRhbF9sZXZlbF9vZl9lZHVjYXRpb24pK2FzLmZhY3RvcihjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JGx1bmNoKSthcy5mYWN0b3IoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSkpDQptb2RlbG9fUkxNX1JFRFVDSURPID0gbG0oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMH5jZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJlYWRpbmdfc2NvcmVfMTAwK2NkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckd3JpdGluZ19zY29yZV8xMDArYXMuZmFjdG9yKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKQ0Kc3RhcmdhemVyKG1vZGVsb19STE1fVE9UQUwsIG1vZGVsb19STE1fUkVEVUNJRE8sIG1vZGVsb19JdGVyYWRvX1NURVAsIHR5cGUgPSAidGV4dCIsIGRmID0gVFJVRSkNCmBgYA0KDQoNCiMjIyAqKjUuNC4gUmVncmVzacOzbiBMb2fDrXN0aWNhIFNpbXBsZSoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQpDb24gYmFzZSBlbiBlbCBjb25qdW50byBkZSBkYXRvcyBzZSBmb3JtdWxhcsOhIHVuIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ8Otc3RpY2Egc2ltcGxlIHBhcmEgZXN0dWRpYXIgbGEgcmVsYWNpw7NuIGxvZ8Otc3RpY2Egc3VwdWVzdGEgZW50cmUgbGFzIHZhcmFpYmxlcyBkZWZpbmlkYXMgcG9yIGxvcyBjYW1wb3M6IE1hdGggU2NvcmUodmFyaWFibGUgZGVwZW5kaWVudGUpIHkgUmVzZWFyY2ggcmVhZGluZyBTY29yZSh2YXJpYWJsZSBpbmRlcGVuZGllbnRlKSwgY29uIGJhc2UgZW4gdW5hIGRpc3RyaWJ1Y2nDs24gYmlub21pYWwgeSBsYSBmdW5jacOzbiBkZSBlbmxhY2UgTG9naXQNCg0KRWwgZ3LDoWZpY28gZGUgY2FqYXMgeSBiaWdvdGVzIGRlbCBwdW50YWplIGRlIG1hdGVtw6F0aWNhcyBtdWVzdHJhIHVuYSBkaXN0cmlidWNpw7NuIHNpbcOpdHJpY2EgY29uIHVuYSBtZWRpYW5hIGFscmVkZWRvciBkZSAxODUtMTkwIHkgYWxndW5vcyB2YWxvcmVzIGF0w61waWNvcyBwb3IgZW5jaW1hIGRlIDIyNS4NCg0KRWwgaGlzdG9ncmFtYSBkZWwgcHVudGFqZSBkZSBtYXRlbcOhdGljYXMgaW5kaWNhIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCwgY29uIGxhIG1heW9yw61hIGRlIGxvcyBlc3R1ZGlhbnRlcyBvYnRlbmllbmRvIHB1bnRhamVzIGVudHJlIDE3NS0yMjUuDQoNCkVsIGdyw6FmaWNvIGRlIGJhcnJhcyBkZSBsYSBldG5pYS9yYXphIG11ZXN0cmEgbGFzIGRpZmVyZW5jaWFzIGVuIGxvcyBwdW50YWplcyBkZSBtYXRlbcOhdGljYXMgcHJvbWVkaW8gZW50cmUgbG9zIGRpZmVyZW50ZXMgZ3J1cG9zIMOpdG5pY29zLiBMb3MgZXN0dWRpYW50ZXMgYXNpw6F0aWNvcyB0aWVuZW4gbG9zIHB1bnRhamVzIG3DoXMgYWx0b3MsIHNlZ3VpZG9zIHBvciBsb3MgYmxhbmNvcywgbHVlZ28gbG9zIGhpc3Bhbm9zIHkgcG9yIMO6bHRpbW8gbG9zIGVzdHVkaWFudGVzIGFmcm9hbWVyaWNhbm9zLg0KDQpGaW5hbG1lbnRlLCBlbCBncsOhZmljbyBkZSBjYWphcyB5IGJpZ290ZXMgcGFyYSBlbCBjb25qdW50byBkZSB2YXJpYWJsZXMgbXVlc3RyYSBsYSBkaXNwZXJzacOzbiB5IHZhbG9yZXMgYXTDrXBpY29zIGVuIGxhcyBkaWZlcmVudGVzIG3DqXRyaWNhcyBlZHVjYXRpdmFzIGNvbW8gcHVudGFqZXMgZGUgbGVjdHVyYSwgZXNjcml0dXJhIHkgbWF0ZW3DoXRpY2FzLg0KIA0KIyMjIyBSZXN1bWVuIHkgQm94cGxvdCBkZSBtYXRoIHNjb3JlDQpgYGB7ciBSZXN1bWVuX3lfQm94cGxvdF9kZV9tYXRoX3Njb3JlLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdW1tYXJ5KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDApDQpib3hwbG90KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDAsIG1haW4gPSAiRGlhZ3JhbWEgZGUgQ2FqYSBkZSBNYXRoIHNjb3JlIiwgY29sID0gYygib3JhbmdlIikpDQpgYGANCg0KIyMjIyBIaXN0b2dyYW1hIGRlIG1hdGggc2NvcmUNCmBgYHtyIEhpc3RvZ3JhbWFfZGVfbWF0aF9zY29yZSwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VtbWFyeShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JG1hdGhfc2NvcmVfMTAwKQ0KaGlzdChjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JG1hdGhfc2NvcmVfMTAwLCBtYWluID0gIkhpc3RvZ3JhbWEgZGUgbWF0aCBzY29yZSIsIGNvbCA9IGMoImdvbGQiKSkNCmBgYA0KDQojIyMjIFJlc3VtZW4geSBkaWFncmFtYSBkZSBCYXJyYXMgZGUgcmFjZSBldGhuaWNpdHkNCmBgYHtyIFJlc3VtZW5feV9kaWFncmFtYV9kZV9CYXJyYXNfZGVfcmFjZV9ldGhuaWNpdHksIGZpZy5hbGlnbj0nY2VudGVyJ30NCnRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpDQpwcm9wLnRhYmxlKHRhYmxlKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckcmFjZV9ldGhuaWNpdHkpKQ0KYmFycGxvdCh0YWJsZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5KSkNCmBgYA0KDQojIyMjIFJlc3VtZW4geSBEaWFncmFtYSBkZSBDYWphcyBDb25qdW50bw0KYGBge3IgUmVzdW1lbl95X0RpYWdyYW1hX2RlX0NhamFzX0Nvbmp1bnRvLCBmaWcuYWxpZ249J2NlbnRlcid9DQp0YXBwbHkoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMCwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSwgbWVhbikNCnRhcHBseShjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JG1hdGhfc2NvcmVfMTAwLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzRGVwX0c3JHJhY2VfZXRobmljaXR5LCBtZWRpYW4pDQpib3hwbG90KGNkZF9leGFtZW5fZXN0dWRpYW50ZXNEZXBfRzckbWF0aF9zY29yZV8xMDB+Y2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRyYWNlX2V0aG5pY2l0eSwgbWFpbiA9ICJCb3hwbG90IENvbmp1bnRvOiBtYXRoIHNjb3JlIC0gcmFjZSBldGhuaWNpdHkiLCBjb2wgPSBjKCJvcmFuZ2UiLCAiZ29sZCIpKQ0KYGBgDQogDQojIyMgNS40LjEuIEZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGRlIFJMb2dTIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCkxhIG5hdmVnYWNpw7NuIGEgdHJhdsOpcyBkZSBsYXMgcGVzdGHDsWFzIG11ZXN0cmEgbG9zIGNvZWZpY2llbnRlcyBkZWwgbW9kZWxvIFJMb2dTIHkgc3UgcmVzdW1lbiBlc3RhZMOtc3RpY28uIFNlIG1lbmNpb25hIGRlIG51ZXZvIHF1ZSBsYXMgdmFyaWFibGVzIGRlIGludGVyw6lzIHNvbjogTWF0aCBTY29yZSh2YXJpYWJsZSBkZXBlbmRpZW50ZSkgeSBSZXNlYXJjaCByZWFkaW5nIFNjb3JlKHZhcmlhYmxlIGluZGVwZW5kaWVudGUpDQoNCkVsIGludGVyY2VwdG8gZGVsIG1vZGVsbyBpbmRpY2EgZWwgdmFsb3IgZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgY3VhbmRvIGVsIHB1bnRhamUgZGUgbWF0ZW3DoXRpY2FzIGVzIGNlcm8uDQpFbCBjb2VmaWNpZW50ZSBtb3N0cmFkbyByZXByZXNlbnRhIGVsIGVmZWN0byBkZWwgcHVudGFqZSBkZSBtYXRlbcOhdGljYXMgZW4gbGEgcHJvYmFiaWxpZGFkIGRlIG9idGVuZXIgdW4gcHVudGFqZSBhbHRvIGVuIGxhIHBydWViYSBkZSBsZWN0dXJhLiBVbiBjb2VmaWNpZW50ZSBwb3NpdGl2byBzdWdpZXJlIHF1ZSBhIG1heW9yIHB1bnRhamUgZGUgbWF0ZW3DoXRpY2FzLCBtYXlvciBwcm9iYWJpbGlkYWQgZGUgdW4gYnVlbiByZXN1bHRhZG8gZW4gbGVjdHVyYS4NCg0KRWwgbW9kZWxvIHBhcmVjZSB0ZW5lciB1biBidWVuIGFqdXN0ZSwgY29uIHVuIHZhbG9yLXAgZGVsIG1vZGVsbyBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvIChwIDwgMC4wMDEpLg0KRWwgY29lZmljaWVudGUgZGUgZGV0ZXJtaW5hY2nDs24gKFItY3VhZHJhZG8pIGluZGljYSBxdWUgYXByb3hpbWFkYW1lbnRlIGVsIDYwJSBkZSBsYSB2YXJpYWJpbGlkYWQgZW4gbGEgdmFyaWFibGUgZGUgcmVzcHVlc3RhIHNlIGV4cGxpY2EgcG9yIGxhcyB2YXJpYWJsZXMgcHJlZGljdG9yYXMgZW4gZWwgbW9kZWxvLg0KTG9zIGVycm9yZXMgZXN0w6FuZGFyIGRlIGxvcyBjb2VmaWNpZW50ZXMgc29uIHJlbGF0aXZhbWVudGUgYmFqb3MsIHN1Z2lyaWVuZG8gcXVlIGxhcyBlc3RpbWFjaW9uZXMgZGUgbG9zIHBhcsOhbWV0cm9zIHNvbiBwcmVjaXNhcy4NCkxvcyBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YSBkZSA5NSUgcGFyYSBsb3MgY29lZmljaWVudGVzIG5vIGluY2x1eWVuIGVsIHZhbG9yIGNlcm8sIGxvIHF1ZSByZWZ1ZXJ6YSBsYSBzaWduaWZpY2FuY2lhIGVzdGFkw61zdGljYSBkZSBsb3MgZWZlY3Rvcy4NCiANCiMjIyMgQ29lZmljaWVudGVzIGRlIE1vZGVsbyBSTG9ncw0KYGBge3IgQ29lZmljaWVudGVzX2RlX01vZGVsb19STG9ncywgZmlnLmFsaWduPSdjZW50ZXInfQ0KbW9kZWxvX1JMb2dfU2ltcGxlID0gZ2xtKGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2V+Y2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMCwgZmFtaWx5ID0gImJpbm9taWFsIiwgZGF0YSA9IGRhdGEuZnJhbWUoY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZSwgY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc0RlcF9HNyRtYXRoX3Njb3JlXzEwMCkpDQpjb2VmKG1vZGVsb19STG9nX1NpbXBsZSkNCmBgYA0KDQojIyMjIFJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxvZ3MNCmBgYHtyIFJlc3VtZW4gRXN0YWTDrXN0aWNvX2RlbF9Nb2RlbG9fUkxvZ3MsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnN1bW1hcnkobW9kZWxvX1JMb2dfU2ltcGxlKQ0KbW9kZWxvX1JMb2dfU2ltcGxlX1MgPSBnbG0oY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HNyR0ZXN0X3ByZXBhcmF0aW9uX2NvdXJzZX5jZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3JG1hdGhfc2NvcmVfMTAwLCBmYW1pbHkgPSAiYmlub21pYWwiLCBkYXRhID0gZGF0YS5mcmFtZShjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3JHRlc3RfcHJlcGFyYXRpb25fY291cnNlLCBjZGRfZXhhbWVuX2VzdHVkaWFudGVzTnVtX0c3JG1hdGhfc2NvcmVfMTAwKSkNCnN1bW1hcnkobW9kZWxvX1JMb2dfU2ltcGxlX1MpDQpgYGANCg0KIyMjIDUuNC4yLiBBbsOhbGlzaXMgZGVsIG1vZGVsbyBSTG9nUy4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KTGEgcGVzdGHDsWEgVmFyaWFibGUgUHJlZGljdG9yYSBpZ3VhbCBhIENlcm8gcGxhbnRlYSBkb3Mgc2l0dWFjaW9uZXMgaW50ZXJwcmV0YXRpdmFzLiBMYSBwcmltZXJhLCBwZXJtaXRlIGNvbXByZW5kZXIgcXVlIGVsIGNvZWZpY2llbnRlIGRlbCBmYWN0b3IgZW4gZWwgY3VhbCBlc3TDoSBwcmVzZW50ZSBsYSB2YXJhaWJsZSBwcmVkaWN0b3JhLCBlc3RpbWEgdW5hIHByb2JhYmlsaWRhZCBkZSBjYXNvIGZhdm9yYWJsZSBjZXJjYW5hIGEgY2VybyBlbiBlbCBvcmRlbiBkZSBsYSBkaWV6bWlsw6lzaW1hLiBMYSBzZWd1bmRhLCBhY2FycmVhIHVuYSBpbnRlcnByZXRhY2nDs24gbcOhcyBkZWxpY2FkYTogY29tbyBsYSB2YXJpYWJsZSBDaGFuY2Ugb2YgQWRtaXQgc2UgbWlkZSBlbiBlbCBpbnRlcnZhbG8gWzAsMV0NCiBjb24gZG9zIGNpZnJhcyBzaWduaWZpY2F0aXZhcyB5IGRvcyBkZWNpbWFsZXMgZGUgcHJlY2lzacOzbiwgdW5hIHVuaWRhZCBkZSBtZWRpZGEgcmF6b25hYmxlIGVuIGVsbGEgc2Vyw61hIHVuYSBjZW50w6lzaW1hLCBwb3IgZWplbXBsbzogcGFzYXIgZGUgMC42MiBhIDAuNjMgaW1wbGljYSBpbmNyZW1lbnRhciBlbiB1bmEgdW5pZGFkIGRlIG1lZGlkYSBhIDAuNjIuIEFzw60sIHNlIGVudGllbmRlIHF1ZSBlbCBjb2NpZW50ZSBkZSBwcm9iYWJpbGlkYWRlcyBlbiByZWxhY2nDs24gY29uIGxhIHZhcmlhYmxlIHByZWRpY3RvcmEgZW4gZWwgbW9kZWxvIFJMb2dTIHJlZmxlamUgdW4gaW5jcmVtZW50byBhY3VtdWxhZG8gZGUg4omINTM0NzQuNA0KIHZlY2VzIGRlc2RlIDAgaGFzdGEgMSwgY29uIGluY3JlbWVudG9zIGRlIDAuMDEuDQogDQpDb24gYmFzZSBlbiBsYSBwZXN0YcOxYSBkZSBQcm9iYWJpbGlkYWRlcyBFc3RpbWFkYXMgc2UgcHVlZGUgYXByZWNpYXIgdW4gZGVsdGEgZGUgY2FtYmlvIGFic29sdXRvIGVuIGxvcyByZWdpc3Ryb3MgcHJlc2VudGFkb3MsIGRvbmRlIGxhIHZhcmlhY2nDs24gZGUgbGEgdmFyaWFibGUgaW5kZXBlbmRpZW50ZSAoUmVhZGluZyBzY29yZSkgaW1wYWN0YSBsYSBwcm9iYWJpbGlkYWQgZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUgKE1hdGggc2NvcmUpLg0KRWwgZ3LDoWZpY28gZGVsIG1vZGVsbyBSTG9nUyBwZXJtaXRlIHZpc3VhbG1lbnRlIGNvbXByZW5kZXIgZWwgY29tcG9ydGFtaWVudG8gZGUgbGFzIHZhcmlhYmxlcyBpbnZvbHVjcmFkYXMgZW4gZWwgbW9kZWxvIHByb3B1ZXN0bywgbW9zdHJhbmRvIGPDs21vIGxvcyBjYW1iaW9zIGVuIGVsIFJlYWRpbmcgc2NvcmUgaW5mbHV5ZW4gZW4gbGEgcHJvYmFiaWxpZGFkIGRlIG9idGVuZXIgdW4gZGV0ZXJtaW5hZG8gcmVzdWx0YWRvIGVuIGVsIE1hdGggc2NvcmUuDQpMYSBwZXN0YcOxYSBkZSBWYXJpYWJsZSBQcmVkaWN0b3JhIGlndWFsIGEgQ2VybyByZXZlbGEgcXVlIGVsIGNvZWZpY2llbnRlIGRlbCBmYWN0b3IgZXN0dWRpYWRvIGVzdGltYSB1bmEgcHJvYmFiaWxpZGFkIGRlIGNhc28gZmF2b3JhYmxlIGNlcmNhbmEgYSBjZXJvLCBlc3BlY8OtZmljYW1lbnRlIGVuIGVsIG9yZGVuIGRlIGxhIGRpZXptaWzDqXNpbWEuDQpFbCBhbsOhbGlzaXMgZGVzdGFjYSBsYSBzZW5zaWJpbGlkYWQgZGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxvZ8Otc3RpY2EsIGRvbmRlIHBlcXVlw7FvcyBjYW1iaW9zIGVuIGxhIHZhcmlhYmxlIGluZGVwZW5kaWVudGUgKFJlYWRpbmcgc2NvcmUpIHB1ZWRlbiBnZW5lcmFyIGNhbWJpb3Mgc2lnbmlmaWNhdGl2b3MgZW4gbGEgcHJvYmFiaWxpZGFkIGRlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIChNYXRoIHNjb3JlKS4NCkxhIGdyw6FmaWNhIGRlIGN1cnZhIGxvZ8Otc3RpY2EgbXVlc3RyYSBxdWUgbG9zIGNhc29zIGZhdm9yYWJsZXMgbG9ncmFuIHN1cGVyYXIgbGEgYmFycmVyYSBkZWwgOTAlIGRlbCB2YWxvciBkZSBsYSB2YXJpYWJsZSBlc3R1ZGlhZGEuDQogDQojIyMjIFZhcmlhYmxlIFByZWRpY3RvcmEgaWd1YWwgYSAwDQpgYGB7ciBWYXJpYWJsZV9QcmVkaWN0b3JhX2lndWFsX2FfMCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KY29lZihtb2RlbG9fUkxvZ19TaW1wbGUpDQpyb3VuZChleHAoY29lZihtb2RlbG9fUkxvZ19TaW1wbGUpKSw2KQ0KYGBgDQoNCiMjIyMgUHJvYmFiaWxpZGFkZXMgRXN0aW1hZGFzDQpgYGB7ciBQcm9iYWJpbGlkYWRlc19Fc3RpbWFkYXMsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnByZWRpY3QobW9kZWxvX1JMb2dfU2ltcGxlLCBkYXRhLmZyYW1lKHNlcSgxLCAxMDAwKSksIHR5cGUgPSAicmVzcG9uc2UiKQ0KYGBgDQoNCiMjIyMgR3JhZmljYSBkZWwgTW9kZWxvIFJMb2dzDQpgYGB7ciBHcmFmaWNhX2RlbF9Nb2RlbG9fUkxvZ3MsIGZpZy5hbGlnbj0nY2VudGVyJ30NClByZXBhcmFjaW9uX3BhcmFfZXhhbWVuIDwtIGNkZF9leGFtZW5fZXN0dWRpYW50ZXNOdW1fRzckdGVzdF9wcmVwYXJhdGlvbl9jb3Vyc2UNClB1bnR1YWNpb25fbWF0ZW1hdGljYXMgPC0gY2RkX2V4YW1lbl9lc3R1ZGlhbnRlc051bV9HNyRtYXRoX3Njb3JlXzEwMA0KZGF0YVBsb3QgPC0gZGF0YS5mcmFtZShQdW50dWFjaW9uX21hdGVtYXRpY2FzLCBQcmVwYXJhY2lvbl9wYXJhX2V4YW1lbikNCnBsb3QoUHJlcGFyYWNpb25fcGFyYV9leGFtZW5+UHVudHVhY2lvbl9tYXRlbWF0aWNhcywgZGF0YSA9IGRhdGFQbG90LCBtYWluID0gIk1vZGVsbyBSTG9nUzogUHVudHVhY2nDs24gTWF0ZW1hdGljYXMgLSBQcmVwYXJhY2nDs24gcGFyYSBleGFtZW4iLCB4bGFiID0gIkNoYW5jZSBvZiBBZG1pdCIsIHlsYWIgPSAiUHJlcGFyYWNpw7NuIHBhcmEgZXhhbWVuID0gMCB8IFByZXBhcmFjacOzbiBwYXJhIGV4YW1lbiA9IDEiLCBjb2wgPSAiZ29sZCIsIHBjaCA9ICJJIikNCmN1cnZlKHByZWRpY3QoZ2xtKFByZXBhcmFjaW9uX3BhcmFfZXhhbWVuflB1bnR1YWNpb25fbWF0ZW1hdGljYXMsIGZhbWlseSA9ICJiaW5vbWlhbCIsIGRhdGEgPSBkYXRhUGxvdCksIGRhdGEuZnJhbWUoUHVudHVhY2lvbl9tYXRlbWF0aWNhcyA9IHgpLCB0eXBlID0gInJlc3BvbnNlIiksIGNvbCA9ICJvcmFuZ2UiLCBsd2QgPSAzLCBhZGQgPSBUUlVFKQ0KYGBgDQoNCg0KIyMgKio2LiBDb25jbHVzaW9uZXMqKg0KDQotCUR1cmFudGUgZWwgZXN0dWRpbyBkZSBlc3RlIGRhdGEgc2V0IGxvZ3JhbW9zIGRlZHVjaXIgbGEgZXhpc3RlbmNpYSBkZSB2YXJpYWJsZXMgcG9jbyDDunRpbGVzIHBhcmEgZWwgZGVzYXJyb2xsbyBkZSBlc3RlIHByb3llY3RvLCBlc3RhcyB2YXJpYWJsZXMgZnVlcmEgZGUgbm8gdGVuZXIgdW5hIGdyYW4gcmVsZXZhbmNpYSBubyBmdWVyb24gw7p0aWxlcyBwYXJhIGdlbmVyYXIgcmVsYWNpb25lcyBjb24gb3RyYXMsIGZ1ZXJhIGRlIGVsbGFzIG1pc21hcyBwb3IgbG8gdGFudG8gZXJhbiBkZXNwcmVjaWFibGVzIHBhcmEgZWwgZXN0dWRpbyB5IHBvciBlbmRlIGRlc2NhcnRhZGFzIGVuIGxhcyBtYXlvcsOtYSBkZSBhbsOhbGlzaXMsIGxhcyB2YXJpYWJsZXMgZnVlcm9uIGRlIG5hdHVyYWxlemEgY3VhbGl0YXRpdmEgeSBzb246IGVsIG5pdmVsIGRlIGVkdWNhY2nDs24gZGUgbG9zIHBhZHJlcywgZWwgdGlwbyBkZSBhbG11ZXJ6byB5IHNpIGhhYsOtYW4gcmVhbGl6YWRvIHVuIHRlc3QgZGUgcHJlcGFyYWNpw7NuIHByZXZpbyBhbCBleGFtZW4sIGV4YW1lbiBlbCBjdWFsIGRlYmnDsyBzZXIgZGUgbWFsYSBjYWxpZGFkIG8gcG9jbyBlZmVjdGl2byBwb3JxdWUgZW4gY2llcnRhcyBwYXJ0ZXMgc2UgZXZpZGVuY2lhYmEgcXVlIGVzdHVkaWFudGVzIHF1ZSBubyBoYWLDrWFuIHJlYWxpemFkbyBlc3RlIHRlc3QgdGVuw61hbiBtZWpvcmVzIHB1bnRhamVzIHF1ZSBlc3R1ZGlhbnRlcyBxdWUgc2kgbG8gaGFiw61hbiBhcGxpY2FkbyBhbGdvIHF1ZSBlc2NhcGEgYSB0b2RhIGzDs2dpY2EuDQotCUNvbW8gY29udHJhcGFydGUgYSBsYSBjb25jbHVzacOzbiBhbnRlcmlvciB0ZW5lbW9zIGVsIGNhc28gZGUgNCB2YXJpYWJsZXMgcXVlIHBvc2VlbiB1bmEgZ3JhbiByZWxhY2nDs24geSBub3MgcGVybWl0acOzIHBvZGVyIGdlbmVyYXIgZGUgbWFuZXJhIHNlbmNpbGxhIGxvcyBhbsOhbGlzaXMsIHBvciBsYSBmYWx0YSBkZSB1bmEgdmFyaWFibGUgY29uY2x1c2l2YSBub3Mgdmltb3MgZW4gbGEgdGFyZWEgZGUgYnVzY2FyIGxhIHZhcmlhYmxlIHF1ZSBjb21wYXJ0w61hIG1heW9yIGRlcGVuZGVuY2lhIGNvbiBsYXMgdmFyaWFibGVzIHJlc3RhbnRlcyBlbiBudWVzdHJvIGNhc28gZnVlIGxhIHB1bnR1YWNpw7NuIGVuIG1hdGVtw6F0aWNhcyBxdWUgZnVlIHBvc2libGUgdXNhcmxhIGNvbW8gdmFyaWFibGUgcHJlZGljaGEgeSBhc8OtIHZlciBzdSBjb21wb3J0YW1pZW50byBlbiBiYXNlIGEgbG9zIG90cm9zIGRvcyB0ZXN0IChsZWN0dXJhIHkgZXNjcml0dXJhKSB5IHZlciBjb21vIGVzdGEgYWZlY3RhYmEgdGFtYmnDqW4gYSB1bmEgdmFyaWFibGUgY2xhc2lmaWNhZG9yYSAocmF6YSkgYXVucXVlIGVzdGEgw7psdGltYSBubyBwcmVzZW50YWJhIG11Y2hhIGltcG9ydGFuY2lhIHBvciBxdWUgbm8gYWZlY3RhYmEgY29uc2lkZXJhYmxlbWVudGUgZWwgcmVzdWx0YWRvIGRlbCB0ZXN0Lg0KLQlBIHBlc2FyIGRlIGxhIGdyYW4gY2FudGlkYWQgZGUgdmFyaWFibGVzLCBlc3RhcyByZWFsbWVudGUgbm8gcHJlc2VudGFuIHVuIGdyYW4gYXBvcnRlIGFsIHJlbmRpbWllbnRvIGRlbCBlc3R1ZGlhbnRlIGVuIHN1cyBleMOhbWVuZXMsIHBvciBsbyBjdWFsIGVzdGUgbm8gc2UgdmUgaW5mbHVpZG8gcG9yIHN1IGVkYWQsIGfDqW5lcm8geSByYXphIGFmaXJtYWNpw7NuIHF1ZSB0aWVuZSBzZW50aWRvIHlhIHF1ZSB0b2RvcyBzb21vcyBpZ3VhbGVzLCBjYXNvcyB1biBwb2NvIG1hcyBhamVub3MgY29tbyBlbCBhbG11ZXJ6byBvIGVsIG5pdmVsIGRlIGVkdWNhY2nDs24gZGUgbG9zIHBhZHJlcyB0YW1wb2NvIGFmZWN0YW4gbG9zIHJlc3VsdGFkb3MgbG8gcXVlIG5vcyBhZmlybWEgcXVlIHRvZG8gZXN0w6EgZW4gbGEgZGlzcG9zaWNpw7NuIGRlbCBlc3R1ZGlhbnRlLCBjb21vIHVsdGltbyBhIGNvbWVudGFyIHNlIGVuY3VlbnRyYSBlbCBjYXNvIGRlbCBleGFtZW4gZGUgcHJlcGFyYWNpw7NuIHkgZWwgcG9yY2VudGFqZSBkZSBhc2lzdGVuY2lhIHF1ZSBkZWJlcsOtYW4gaW5mbHVpciBtYXMgZW4gZWwgcmVuZGltaWVudG8gcGVybyBzZWfDum4gbG8gZXN0dWRpYWRvIHNlIHZlIHF1ZSBubyBlcyBhc8OtIGxvIHF1ZSBub3MgZ2VuZXJhIG51ZXZvcyBpbnRlcnJvZ2FudGVzIHBlcm8gY29uIGxhIGluZm9ybWFjacOzbiBhY3R1YWwgc2ltcGxlbWVudGUgc2UgcXVlZGEgY29tbyBhbGdvIGN1cmlvc28uDQoNCiMjICoqNy4gQmlibGlvZ3JhZsOtYSoqDQoNCkNyYW1lciwgSGFyYWxkLiAoMTk1MykuIE3DqXRvZG9zIG1hdGVtw6F0aWNvcyBkZSBlc3RhZMOtc3RpY2EgKDFzdCBlZC4pLiBBR1VJTEFSLg0KRGV2b3JlLCBKYXkgTC4gKDIwMDgpLiBQcm9iYWJpbGlkYWQgeSBlc3RhZMSxzIFzdGljYSBwYXJhIGluZ2VuaWVyxLHMgWEgeSBjaWVuY2lhcyAoN3RoIGVkLikuIENFTkdBR0UgTGVhcm5pbmcuDQpBbGTDoXMsIEouIHkgVXJpZWwsIEUuICgyMDE3KS4gQW7DoWxpc2lzIG11bHRpdmFyaWFudGUgYXBsaWNhZG8gY29uIFIgKDLCqiBlZC4pLiBBTEZBQ0VOVEFVUk8uDQpBcmlzdGl6w6FiYWwgUi4sIFdEICgyMDE3KS4gQW7DoWxpc2lzIG11bHRpdmFyaWFkbyB1bmlkYWQgMSBlc3RhZMOtc3RpY2EgZGVzY3JpcHRpdmEgbXVsdGl2YXJpYWRhIC4gRW4gRnVuZGFjacOzbiBVbml2ZXJzaXRhcmlhIExvcyBMaWJlcnRhZG9yZXMgLg0KRGFuaWVsLCBXYXluZSBXLiAoMjAxMykuIEJpb2VzdGFkw61zdGljYSBiYXNlIHBhcmEgZWwgYW7DoWxpc2lzIGRlIGxhcyBjaWVuY2lhcyBkZSBsYSBzYWx1ZCAoNMKqIGVkLikuIExJTVVTQSBXSUxFWS4uDQpEw61heiBNb3JhbGVzLCBMRyB5IE1vcmFsZXMgUml2ZXJhLCBNQSAoMjAxMikuIEFuw6FsaXNpcyBlc3RhZMOtc3RpY28gZGUgZGF0b3MgbXVsdGl2YXJpYWRvcyAoIDHCqiBlZC4pIC4gVU5BTC4NCkRvb3JuaWssIEpBIHkgSGFuc2VuLCBILiAoMjAwOCkuIFVuYSBwcnVlYmEgw7NtbmlidXMgcGFyYSBub3JtYWxpZGFkIHVuaXZhcmlhbnRlIHkgbXVsdGl2YXJpYW50ZS4gT3hmb3JkIEJ1bGxldGluIG9mIEVjb25vbWljcyBhbmQgU3RhdGlzdGljcyAuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExL2ouMTQ2OC0wMDg0LjIwMDguMDA1MzcueA0KSGFpciwgSkYsIEFuZGVyc29uLCBSRSwgVGF0aGFtLCBSTCwgJiBCbGFjaywgV0MgKDE5OTkpLiBBbsOhbGlzaXMgbXVsdGl2YXJpYW50ZSAoIDUuwqogZWQuKS4gUFJFTlRJQ0UgSEFMTC4NClBvcnJhcyBDLiwgSkMgKDIwMTYpLiBQcnVlYmEgZGUgY29tcGFyYWNpw7NuIG11dGl2YXJpYWRhIG5vcm1hbC4gQW5hbGVzIENpZW50w61maWNvcyAu4oCLIGh0dHBzOi8vZGlhbG5ldC51bmlyaW9qYS5lcy9kZXNjYXJnYS9hcnRpY3Vsby82MTcxMjMxLnBkZg0KVHVja2VyLCBIRyAoMTk3MykuIEludHJvZHVjY2kgw7MgbiBhIGxhIHRlbyByw60gYSBtYXRlbSDDoSB0aWNhIGRlIGxhcyBwcm9iYWJpbGlkYWRlcyB5YSBsYSBlc3RhZCDDrSB0aWNhICgxwqogZWQuKS4gVklDRU5TLVZJVkVTLg0KDQoNCg==