En este documento se mostrará el análisis realizado a los datos de la encuesta realizada a los integrantes del salón, del curso de seminario de construcción con enfoque en herramientas estadísticas.

Lo primero que se realiza es cargar la matriz donde se encuentran los datos recolectados, y se muestran las variables a evaluar en la encuesta:

E<-read.csv("LibroEjercicio.csv", sep = ";")
names(E)
 [1] "NOMBRE"          "EDAD"            "ESTATURA"        "PESO..Kg."      
 [5] "PROFESIÓN"       "CANT..HIJOS"     "ESTRATO"         "CANT..HERMANO"  
 [9] "MATRICULADO"     "ESTADO.CIVIL"    "LUGAR.DE.ORIGEN" "SEXO"           
library(ggplot2)
ggplot(E, aes(x = EDAD)) + geom_histogram(breaks = seq(20, 40, by = 5), col = "black", fill = "deeppink4") + ggtitle("Edad") + ylab("No. Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + scale_y_continuous(breaks = seq(0, 14, by = 2), limits = c(0,14)) + xlab("Edad [Años]") + annotate("text", x = c(22.5, 27.5, 32.5, 37.5), y = c(12.5, 6.5, 1.5, 2.5), label = c("50%", "25%", "4.17%", "8.33%"))

ggplot(E, aes(x = ESTATURA)) + geom_histogram(breaks = seq(1.5, 1.9, by = 0.1), col = "black", fill = "darkturquoise") + ggtitle("Estatura") + ylab("No. Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + scale_y_continuous(breaks = seq(0, 10, by = 2), limits = c(0,10)) + xlab("Estatura [m]") + annotate("text", x = c(1.55, 1.65, 1.75, 1.85), y = c(9.5, 7.5, 5.5, 3.5), label = c("37.5%", "29.17%", "20.83%", "12.5%"))

ggplot(E, aes(x = C$PESO..Kg.)) + geom_histogram(breaks = seq(50, 80, by = 6), col = "black", fill = "midnightblue") + ggtitle("Peso") + ylab("No. Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + scale_y_continuous(breaks = seq(0, 7, by = 1), limits = c(0,7)) + xlab("Peso [Kg]") + scale_x_continuous(breaks = seq(50, 80, by = 6), limits = c(50,80))  + annotate("text", x = c(53, 59, 65, 71, 77), y = c(4.5, 6.5, 2.5, 4.5, 6.5), label = c("16.67%", "25%", "8.33%", "16.67%", "25%"))

NA
PRO<-as.data.frame(prop.table(table(E$PROFESIÓN))*100)
colnames(PRO)<-c("PROFESION", "PORCENTAJE")
k<-c("Pregrado", "Postgrado", "Doctorado")
v<-c("1", "2", "3")
ggplot(PRO, aes(x = PROFESION, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill = "royalblue3") + ggtitle("Nivel Educativo") + xlab("") + ylab("% Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 1), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_x_discrete(breaks = v, labels = k) + scale_y_continuous(breaks = seq(0, 80, by = 5), limits = c(0,80))

H<-as.data.frame(prop.table(table(E$CANT..HIJOS))*100)
colnames(H)<-c("HIJOS", "PORCENTAJE")
ggplot(H, aes(x = HIJOS, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill = "palevioletred4") + ggtitle("No. Hijos") + ylab("% Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 1), "%")), position = position_dodge(width = 0.5), size=4, vjust=0.5, hjust=-0.2 ,col="black") + scale_y_continuous(breaks = seq(0, 80, by = 5), limits = c(0,80)) + xlab("No. Hijos") + coord_flip()

Est<-as.data.frame(prop.table(table(E$ESTRATO))*100)
colnames(Est)<-c("Estrato", "PORCENTAJE")
ggplot(Est, aes(x = Estrato, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill = "seagreen4") + ggtitle("Estrato") + xlab("") + ylab("% Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + scale_y_continuous(breaks = seq(0, 60, by = 5), limits = c(0,60)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=0.5, hjust=-0.2 ,col="black") + scale_x_discrete(breaks = c("1","2","3","4","5"), labels = c("Estrato 1", "Estrato 2", "Estrato 3", "Estrato 4", "Estrato 5")) + coord_flip()

HE<-as.data.frame(prop.table(table(E$CANT..HERMANO))*100)
colnames(HE)<-c("Hermanos", "PORCENTAJE")
ggplot(HE, aes(x = Hermanos, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill = "pink4",  col = "black") + ggtitle("No. Hermanos") + xlab("No. Hermanos") + ylab("% Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_y_continuous(breaks = seq(0, 30, by = 5), limits = c(0,30))

M<-as.data.frame(prop.table(table(E$MATRICULADO))*100)
colnames(M)<-c("MATRICULADO", "PORCENTAJE")
library(ggplot2)
ggplot(M, aes(x="", y = PORCENTAJE, fill = MATRICULADO)) + geom_bar(stat = "identity", width = 1)+coord_polar("y", start=0)+scale_fill_brewer(palette = "Spectral", labels=c("Si","No"))+ labs(title = "Matriculados", x = NULL, y = NULL, fill = "")+scale_x_discrete(labels=NULL,breaks = NULL)+scale_y_discrete(labels=NULL,breaks = NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 1), "%")), position = position_dodge(width = 1), size=5, vjust=-3.5, hjust=0.7 ,col="black")+ylim(0, 100)+ theme(plot.title = element_text(hjust = 0.5)) + theme(legend.position = "right", legend.background = element_rect(fill = "white", size = 0.5, linetype = "solid"))
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

EC<-as.data.frame(prop.table(table(E$ESTADO.CIVIL))*100)
colnames(EC)<-c("ECI", "PORCENTAJE")
library(ggplot2)
ggplot(EC, aes(x="", y = PORCENTAJE, fill = ECI)) + geom_bar(stat = "identity", width = 1)+coord_polar("y", start=0)+scale_fill_brewer(palette = "Set2", labels=c("Soltero","Casado"))+ labs(title = "Estado Civil", x = NULL, y = NULL, fill = "")+scale_x_discrete(labels=NULL,breaks = NULL)+scale_y_discrete(labels=NULL,breaks = NULL)+ geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 1), "%")), position = position_dodge(width = 1), size=4, vjust=0, hjust=1.2 ,col="black")+ylim(0, 100)+ theme(plot.title = element_text(hjust = 0.5)) + theme(legend.position = "right", legend.background = element_rect(fill = "white", size = 0.5, linetype = "solid"))
Scale for 'y' is already present. Adding another scale for 'y', which will replace
the existing scale.

R<-as.data.frame(prop.table(table(E$LUGAR.DE.ORIGEN))*100)
colnames(R)<-c("L", "PORCENTAJE")
ggplot(R, aes(x = L, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.8, fill = "orangered") + ggtitle("Departamento") + xlab("") + ylab("% Encuestados") + theme(plot.title = element_text(hjust = 0.5)) + scale_y_continuous(breaks = seq(0, 80, by = 10), limits = c(0,80)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_x_discrete(breaks = c("1","2", "3","4","5"), labels = c("Valle del Cauca", "Cauca", "Quindio", "Nariño", "Cundinamarca")) 

Sexo<-as.data.frame(prop.table(table(E$SEXO))*100)
colnames(Sexo)<-c("Sexo", "PORCENTAJE")
d<-c("HOMBRES", "MUJERES")
f<-c("1", "2")
library(ggplot2)
ggplot(Sexo, aes(x = Sexo, y = PORCENTAJE)) + geom_bar(stat = "identity", width = 0.5, fill =c("turquoise4","violetred4")) + ggtitle("GÉNERO") + xlab("") + ylab("% ENCUESTADOS") + theme(plot.title = element_text(hjust = 0.5)) + geom_text(aes(y = PORCENTAJE, label = paste(round(PORCENTAJE, 2), "%")), position = position_dodge(width = 0.5), size=4, vjust=-0.5, hjust=0.5 ,col="black") + scale_x_discrete(breaks = f, labels = d) + scale_y_continuous(breaks = seq(0, 60, by = 5), limits = c(0,60))

summary(E)
              NOMBRE        EDAD          ESTATURA       PESO..Kg.       PROFESIÓN    
 ALEJANDRO ARCILA: 1   Min.   :21.00   Min.   :1.520   Min.   :50.00   Min.   :1.000  
 ANDRÉS CASANOVA : 1   1st Qu.:23.00   1st Qu.:1.595   1st Qu.:57.00   1st Qu.:1.000  
 ANGELA PEREZ    : 1   Median :25.50   Median :1.660   Median :67.50   Median :1.000  
 ANGIE ALDEMAR   : 1   Mean   :28.71   Mean   :1.673   Mean   :67.46   Mean   :1.375  
 ANGIE CABEZAS   : 1   3rd Qu.:30.25   3rd Qu.:1.750   3rd Qu.:75.25   3rd Qu.:2.000  
 CARLOS ZAPATA   : 1   Max.   :49.00   Max.   :1.880   Max.   :98.00   Max.   :3.000  
 (Other)         :18                                                                  
  CANT..HIJOS        ESTRATO     CANT..HERMANO    MATRICULADO     ESTADO.CIVIL  
 Min.   :0.0000   Min.   :1.00   Min.   :0.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:0.0000   1st Qu.:3.00   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:1.000  
 Median :0.0000   Median :3.00   Median :2.000   Median :1.000   Median :1.000  
 Mean   :0.4167   Mean   :3.25   Mean   :2.292   Mean   :1.375   Mean   :1.125  
 3rd Qu.:0.2500   3rd Qu.:4.00   3rd Qu.:3.250   3rd Qu.:2.000   3rd Qu.:1.000  
 Max.   :3.0000   Max.   :5.00   Max.   :6.000   Max.   :2.000   Max.   :2.000  
                                                                                
 LUGAR.DE.ORIGEN      SEXO      
 Min.   :1.000   Min.   :1.000  
 1st Qu.:1.000   1st Qu.:1.000  
 Median :1.000   Median :2.000  
 Mean   :1.875   Mean   :1.583  
 3rd Qu.:2.000   3rd Qu.:2.000  
 Max.   :5.000   Max.   :2.000  
                                

Promedio de edad = 28.7 años Estrato promedio = 3 Número de hijos promedio = 0 - 1 Con respecto a la edad, la mitad de los encuestados son menores de 25 años.

La profesora propone responder las siguientes preguntas a partir de la información suministrada por la encuesta.

  1. ¿Es posible conocer el número de estudiantes que van a aprobar el curso? Puede ser posible que se tenga conocimiento de los estudiantes que van a aprobar el curso si se tiene presenta la entrega del trabajo, pero no a partir de los datos, dado que las variables estudiadas no tienen alguna relación con el desempeño académico.

  2. ¿En el programa de ingeniería civil hay más hombres que mujeres? La tendencia de que haya más hombres que mujeres en una carrera de ingeniería civil es cada vez menor, dado que como es el caso de este curso, es mayor el número de mujeres que de hombres.

  3. ¿Cuál es la tendencia de los estudiantes de ingeniería civil con respecto a tener hijos? Teniendo en cuenta que la mayoría de estudiantes del curso son solteros, se encuentran en pregrado y no tienen hijos, no es conveniente hablar de la tendencia de los estudiantes con respecto a los hijos.

LS0tDQp0aXRsZTogIkVOQ1VFU1RBIENMQVNFIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCkVuIGVzdGUgZG9jdW1lbnRvIHNlIG1vc3RyYXLhIGVsIGFu4Wxpc2lzIHJlYWxpemFkbyBhIGxvcyBkYXRvcyBkZSBsYSBlbmN1ZXN0YSByZWFsaXphZGEgYSBsb3MgaW50ZWdyYW50ZXMgZGVsIHNhbPNuLCBkZWwgY3Vyc28gZGUgc2VtaW5hcmlvIGRlIGNvbnN0cnVjY2nzbiBjb24gZW5mb3F1ZSBlbiBoZXJyYW1pZW50YXMgZXN0YWTtc3RpY2FzLg0KDQpMbyBwcmltZXJvIHF1ZSBzZSByZWFsaXphIGVzIGNhcmdhciBsYSBtYXRyaXogZG9uZGUgc2UgZW5jdWVudHJhbiBsb3MgZGF0b3MgcmVjb2xlY3RhZG9zLCB5IHNlIG11ZXN0cmFuIGxhcyB2YXJpYWJsZXMgYSBldmFsdWFyIGVuIGxhIGVuY3Vlc3RhOg0KDQoNCmBgYHtyfQ0KRTwtcmVhZC5jc3YoIkxpYnJvRWplcmNpY2lvLmNzdiIsIHNlcCA9ICI7IikNCm5hbWVzKEUpDQpgYGANCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KEUsIGFlcyh4ID0gRURBRCkpICsgZ2VvbV9oaXN0b2dyYW0oYnJlYWtzID0gc2VxKDIwLCA0MCwgYnkgPSA1KSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJkZWVwcGluazQiKSArIGdndGl0bGUoIkVkYWQiKSArIHlsYWIoIk5vLiBFbmN1ZXN0YWRvcyIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxNCwgYnkgPSAyKSwgbGltaXRzID0gYygwLDE0KSkgKyB4bGFiKCJFZGFkIFtB8W9zXSIpICsgYW5ub3RhdGUoInRleHQiLCB4ID0gYygyMi41LCAyNy41LCAzMi41LCAzNy41KSwgeSA9IGMoMTIuNSwgNi41LCAxLjUsIDIuNSksIGxhYmVsID0gYygiNTAlIiwgIjI1JSIsICI0LjE3JSIsICI4LjMzJSIpKQ0KDQpnZ3Bsb3QoRSwgYWVzKHggPSBFU1RBVFVSQSkpICsgZ2VvbV9oaXN0b2dyYW0oYnJlYWtzID0gc2VxKDEuNSwgMS45LCBieSA9IDAuMSksIGNvbCA9ICJibGFjayIsIGZpbGwgPSAiZGFya3R1cnF1b2lzZSIpICsgZ2d0aXRsZSgiRXN0YXR1cmEiKSArIHlsYWIoIk5vLiBFbmN1ZXN0YWRvcyIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxMCwgYnkgPSAyKSwgbGltaXRzID0gYygwLDEwKSkgKyB4bGFiKCJFc3RhdHVyYSBbbV0iKSArIGFubm90YXRlKCJ0ZXh0IiwgeCA9IGMoMS41NSwgMS42NSwgMS43NSwgMS44NSksIHkgPSBjKDkuNSwgNy41LCA1LjUsIDMuNSksIGxhYmVsID0gYygiMzcuNSUiLCAiMjkuMTclIiwgIjIwLjgzJSIsICIxMi41JSIpKQ0KDQpnZ3Bsb3QoRSwgYWVzKHggPSBDJFBFU08uLktnLikpICsgZ2VvbV9oaXN0b2dyYW0oYnJlYWtzID0gc2VxKDUwLCA4MCwgYnkgPSA2KSwgY29sID0gImJsYWNrIiwgZmlsbCA9ICJtaWRuaWdodGJsdWUiKSArIGdndGl0bGUoIlBlc28iKSArIHlsYWIoIk5vLiBFbmN1ZXN0YWRvcyIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3LCBieSA9IDEpLCBsaW1pdHMgPSBjKDAsNykpICsgeGxhYigiUGVzbyBbS2ddIikgKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDUwLCA4MCwgYnkgPSA2KSwgbGltaXRzID0gYyg1MCw4MCkpICArIGFubm90YXRlKCJ0ZXh0IiwgeCA9IGMoNTMsIDU5LCA2NSwgNzEsIDc3KSwgeSA9IGMoNC41LCA2LjUsIDIuNSwgNC41LCA2LjUpLCBsYWJlbCA9IGMoIjE2LjY3JSIsICIyNSUiLCAiOC4zMyUiLCAiMTYuNjclIiwgIjI1JSIpKQ0KIA0KDQpgYGANCg0KYGBge3J9DQpQUk88LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShFJFBST0ZFU0nTTikpKjEwMCkNCmNvbG5hbWVzKFBSTyk8LWMoIlBST0ZFU0lPTiIsICJQT1JDRU5UQUpFIikNCg0KazwtYygiUHJlZ3JhZG8iLCAiUG9zdGdyYWRvIiwgIkRvY3RvcmFkbyIpDQp2PC1jKCIxIiwgIjIiLCAiMyIpDQoNCmdncGxvdChQUk8sIGFlcyh4ID0gUFJPRkVTSU9OLCB5ID0gUE9SQ0VOVEFKRSkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC44LCBmaWxsID0gInJveWFsYmx1ZTMiKSArIGdndGl0bGUoIk5pdmVsIEVkdWNhdGl2byIpICsgeGxhYigiIikgKyB5bGFiKCIlIEVuY3Vlc3RhZG9zIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDEpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9NCwgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikgKyBzY2FsZV94X2Rpc2NyZXRlKGJyZWFrcyA9IHYsIGxhYmVscyA9IGspICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA4MCwgYnkgPSA1KSwgbGltaXRzID0gYygwLDgwKSkNCmBgYA0KDQpgYGB7cn0NCkg8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShFJENBTlQuLkhJSk9TKSkqMTAwKQ0KY29sbmFtZXMoSCk8LWMoIkhJSk9TIiwgIlBPUkNFTlRBSkUiKQ0KDQoNCg0KZ2dwbG90KEgsIGFlcyh4ID0gSElKT1MsIHkgPSBQT1JDRU5UQUpFKSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjgsIGZpbGwgPSAicGFsZXZpb2xldHJlZDQiKSArIGdndGl0bGUoIk5vLiBIaWpvcyIpICsgeWxhYigiJSBFbmN1ZXN0YWRvcyIpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgZ2VvbV90ZXh0KGFlcyh5ID0gUE9SQ0VOVEFKRSwgbGFiZWwgPSBwYXN0ZShyb3VuZChQT1JDRU5UQUpFLCAxKSwgIiUiKSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLCBzaXplPTQsIHZqdXN0PTAuNSwgaGp1c3Q9LTAuMiAsY29sPSJibGFjayIpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA4MCwgYnkgPSA1KSwgbGltaXRzID0gYygwLDgwKSkgKyB4bGFiKCJOby4gSGlqb3MiKSArIGNvb3JkX2ZsaXAoKQ0KYGBgDQpgYGB7cn0NCkVzdDwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKEUkRVNUUkFUTykpKjEwMCkNCmNvbG5hbWVzKEVzdCk8LWMoIkVzdHJhdG8iLCAiUE9SQ0VOVEFKRSIpDQoNCg0KZ2dwbG90KEVzdCwgYWVzKHggPSBFc3RyYXRvLCB5ID0gUE9SQ0VOVEFKRSkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC44LCBmaWxsID0gInNlYWdyZWVuNCIpICsgZ2d0aXRsZSgiRXN0cmF0byIpICsgeGxhYigiIikgKyB5bGFiKCIlIEVuY3Vlc3RhZG9zIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDYwLCBieSA9IDUpLCBsaW1pdHMgPSBjKDAsNjApKSArIGdlb21fdGV4dChhZXMoeSA9IFBPUkNFTlRBSkUsIGxhYmVsID0gcGFzdGUocm91bmQoUE9SQ0VOVEFKRSwgMiksICIlIikpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC41KSwgc2l6ZT00LCB2anVzdD0wLjUsIGhqdXN0PS0wLjIgLGNvbD0iYmxhY2siKSArIHNjYWxlX3hfZGlzY3JldGUoYnJlYWtzID0gYygiMSIsIjIiLCIzIiwiNCIsIjUiKSwgbGFiZWxzID0gYygiRXN0cmF0byAxIiwgIkVzdHJhdG8gMiIsICJFc3RyYXRvIDMiLCAiRXN0cmF0byA0IiwgIkVzdHJhdG8gNSIpKSArIGNvb3JkX2ZsaXAoKQ0KYGBgDQoNCmBgYHtyfQ0KSEU8LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShFJENBTlQuLkhFUk1BTk8pKSoxMDApDQpjb2xuYW1lcyhIRSk8LWMoIkhlcm1hbm9zIiwgIlBPUkNFTlRBSkUiKQ0KDQoNCmdncGxvdChIRSwgYWVzKHggPSBIZXJtYW5vcywgeSA9IFBPUkNFTlRBSkUpKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuOCwgZmlsbCA9ICJwaW5rNCIsICBjb2wgPSAiYmxhY2siKSArIGdndGl0bGUoIk5vLiBIZXJtYW5vcyIpICsgeGxhYigiTm8uIEhlcm1hbm9zIikgKyB5bGFiKCIlIEVuY3Vlc3RhZG9zIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9NCwgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikgKyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMwLCBieSA9IDUpLCBsaW1pdHMgPSBjKDAsMzApKQ0KYGBgDQpgYGB7cn0NCk08LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShFJE1BVFJJQ1VMQURPKSkqMTAwKQ0KY29sbmFtZXMoTSk8LWMoIk1BVFJJQ1VMQURPIiwgIlBPUkNFTlRBSkUiKQ0KDQoNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChNLCBhZXMoeD0iIiwgeSA9IFBPUkNFTlRBSkUsIGZpbGwgPSBNQVRSSUNVTEFETykpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSkrY29vcmRfcG9sYXIoInkiLCBzdGFydD0wKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNwZWN0cmFsIiwgbGFiZWxzPWMoIlNpIiwiTm8iKSkrIGxhYnModGl0bGUgPSAiTWF0cmljdWxhZG9zIiwgeCA9IE5VTEwsIHkgPSBOVUxMLCBmaWxsID0gIiIpK3NjYWxlX3hfZGlzY3JldGUobGFiZWxzPU5VTEwsYnJlYWtzID0gTlVMTCkrc2NhbGVfeV9kaXNjcmV0ZShsYWJlbHM9TlVMTCxicmVha3MgPSBOVUxMKSsgZ2VvbV90ZXh0KGFlcyh5ID0gUE9SQ0VOVEFKRSwgbGFiZWwgPSBwYXN0ZShyb3VuZChQT1JDRU5UQUpFLCAxKSwgIiUiKSksIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAxKSwgc2l6ZT01LCB2anVzdD0tMy41LCBoanVzdD0wLjcgLGNvbD0iYmxhY2siKSt5bGltKDAsIDEwMCkrIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIsIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIpKQ0KYGBgDQpgYGB7cn0NCkVDPC1hcy5kYXRhLmZyYW1lKHByb3AudGFibGUodGFibGUoRSRFU1RBRE8uQ0lWSUwpKSoxMDApDQpjb2xuYW1lcyhFQyk8LWMoIkVDSSIsICJQT1JDRU5UQUpFIikNCg0KDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoRUMsIGFlcyh4PSIiLCB5ID0gUE9SQ0VOVEFKRSwgZmlsbCA9IEVDSSkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSkrY29vcmRfcG9sYXIoInkiLCBzdGFydD0wKStzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiLCBsYWJlbHM9YygiU29sdGVybyIsIkNhc2FkbyIpKSsgbGFicyh0aXRsZSA9ICJFc3RhZG8gQ2l2aWwiLCB4ID0gTlVMTCwgeSA9IE5VTEwsIGZpbGwgPSAiIikrc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9TlVMTCxicmVha3MgPSBOVUxMKStzY2FsZV95X2Rpc2NyZXRlKGxhYmVscz1OVUxMLGJyZWFrcyA9IE5VTEwpKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDEpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDEpLCBzaXplPTQsIHZqdXN0PTAsIGhqdXN0PTEuMiAsY29sPSJibGFjayIpK3lsaW0oMCwgMTAwKSsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IiwgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIikpDQpgYGANCmBgYHtyfQ0KUjwtYXMuZGF0YS5mcmFtZShwcm9wLnRhYmxlKHRhYmxlKEUkTFVHQVIuREUuT1JJR0VOKSkqMTAwKQ0KY29sbmFtZXMoUik8LWMoIkwiLCAiUE9SQ0VOVEFKRSIpDQoNCg0KZ2dwbG90KFIsIGFlcyh4ID0gTCwgeSA9IFBPUkNFTlRBSkUpKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCB3aWR0aCA9IDAuOCwgZmlsbCA9ICJvcmFuZ2VyZWQiKSArIGdndGl0bGUoIkRlcGFydGFtZW50byIpICsgeGxhYigiIikgKyB5bGFiKCIlIEVuY3Vlc3RhZG9zIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDgwLCBieSA9IDEwKSwgbGltaXRzID0gYygwLDgwKSkgKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9NCwgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikgKyBzY2FsZV94X2Rpc2NyZXRlKGJyZWFrcyA9IGMoIjEiLCIyIiwgIjMiLCI0IiwiNSIpLCBsYWJlbHMgPSBjKCJWYWxsZSBkZWwgQ2F1Y2EiLCAiQ2F1Y2EiLCAiUXVpbmRpbyIsICJOYXJp8W8iLCAiQ3VuZGluYW1hcmNhIikpIA0KYGBgDQpgYGB7cn0NClNleG88LWFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YWJsZShFJFNFWE8pKSoxMDApDQpjb2xuYW1lcyhTZXhvKTwtYygiU2V4byIsICJQT1JDRU5UQUpFIikNCg0KZDwtYygiSE9NQlJFUyIsICJNVUpFUkVTIikNCmY8LWMoIjEiLCAiMiIpDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoU2V4bywgYWVzKHggPSBTZXhvLCB5ID0gUE9SQ0VOVEFKRSkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC41LCBmaWxsID1jKCJ0dXJxdW9pc2U0IiwidmlvbGV0cmVkNCIpKSArIGdndGl0bGUoIkfJTkVSTyIpICsgeGxhYigiIikgKyB5bGFiKCIlIEVOQ1VFU1RBRE9TIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyBnZW9tX3RleHQoYWVzKHkgPSBQT1JDRU5UQUpFLCBsYWJlbCA9IHBhc3RlKHJvdW5kKFBPUkNFTlRBSkUsIDIpLCAiJSIpKSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksIHNpemU9NCwgdmp1c3Q9LTAuNSwgaGp1c3Q9MC41ICxjb2w9ImJsYWNrIikgKyBzY2FsZV94X2Rpc2NyZXRlKGJyZWFrcyA9IGYsIGxhYmVscyA9IGQpICsgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA2MCwgYnkgPSA1KSwgbGltaXRzID0gYygwLDYwKSkNCmBgYA0KDQpgYGB7cn0NCnN1bW1hcnkoRSkNCmBgYA0KUHJvbWVkaW8gZGUgZWRhZCA9IDI4LjcgYfFvcw0KRXN0cmF0byBwcm9tZWRpbyA9IDMNCk76bWVybyBkZSBoaWpvcyBwcm9tZWRpbyA9IDAgLSAxDQpDb24gcmVzcGVjdG8gYSBsYSBlZGFkLCBsYSBtaXRhZCBkZSBsb3MgZW5jdWVzdGFkb3Mgc29uIG1lbm9yZXMgZGUgMjUgYfFvcy4NCg0KTGEgcHJvZmVzb3JhIHByb3BvbmUgcmVzcG9uZGVyIGxhcyBzaWd1aWVudGVzIHByZWd1bnRhcyBhIHBhcnRpciBkZSBsYSBpbmZvcm1hY2nzbiBzdW1pbmlzdHJhZGEgcG9yIGxhIGVuY3Vlc3RhLg0KDQoxKSC/RXMgcG9zaWJsZSBjb25vY2VyIGVsIG76bWVybyBkZSBlc3R1ZGlhbnRlcyBxdWUgdmFuIGEgYXByb2JhciBlbCBjdXJzbz8NClB1ZWRlIHNlciBwb3NpYmxlIHF1ZSBzZSB0ZW5nYSBjb25vY2ltaWVudG8gZGUgbG9zIGVzdHVkaWFudGVzIHF1ZSB2YW4gYSBhcHJvYmFyIGVsIGN1cnNvIHNpIHNlIHRpZW5lIHByZXNlbnRhIGxhIGVudHJlZ2EgZGVsIHRyYWJham8sIHBlcm8gbm8gYSBwYXJ0aXIgZGUgbG9zIGRhdG9zLCBkYWRvIHF1ZSBsYXMgdmFyaWFibGVzIGVzdHVkaWFkYXMgbm8gdGllbmVuIGFsZ3VuYSByZWxhY2nzbiBjb24gZWwgZGVzZW1wZfFvIGFjYWTpbWljby4NCg0KMikgv0VuIGVsIHByb2dyYW1hIGRlIGluZ2VuaWVy7WEgY2l2aWwgaGF5IG3hcyBob21icmVzIHF1ZSBtdWplcmVzPw0KTGEgdGVuZGVuY2lhIGRlIHF1ZSBoYXlhIG3hcyBob21icmVzIHF1ZSBtdWplcmVzIGVuIHVuYSBjYXJyZXJhIGRlIGluZ2VuaWVy7WEgY2l2aWwgZXMgY2FkYSB2ZXogbWVub3IsIGRhZG8gcXVlIGNvbW8gZXMgZWwgY2FzbyBkZSBlc3RlIGN1cnNvLCBlcyBtYXlvciBlbCBu+m1lcm8gZGUgbXVqZXJlcyBxdWUgZGUgaG9tYnJlcy4NCg0KMykgv0N14WwgZXMgbGEgdGVuZGVuY2lhIGRlIGxvcyBlc3R1ZGlhbnRlcyBkZSBpbmdlbmllcu1hIGNpdmlsIGNvbiByZXNwZWN0byBhIHRlbmVyIGhpam9zPw0KVGVuaWVuZG8gZW4gY3VlbnRhIHF1ZSBsYSBtYXlvcu1hIGRlIGVzdHVkaWFudGVzIGRlbCBjdXJzbyBzb24gc29sdGVyb3MsIHNlIGVuY3VlbnRyYW4gZW4gcHJlZ3JhZG8geSBubyB0aWVuZW4gaGlqb3MsIG5vIGVzIGNvbnZlbmllbnRlIGhhYmxhciBkZSBsYSB0ZW5kZW5jaWEgZGUgbG9zIGVzdHVkaWFudGVzIGNvbiByZXNwZWN0byBhIGxvcyBoaWpvcy4g