Distribución Normal

Teoría

Las Distribuciones de Probabilidad Continua pueden tomar varias formas , pero un gran número de variables aleatorias observadas en la naturaleza poseen una distribución de frecuencia que tiene más o menos de la forma de montículo, o bien, como se diría en estadística, es aproximadamente una distribución normal de probabilidad.

Ejercicio de Rendimiento de la Gasolina

Estudios demuestran que el uso de gasolina para autos compactos vendidos en Estados Unidos está normalmente distribuido, con una media de 25.5 millas por galón (mpg). ¿Qué porcentaje de compactos recorre 30 mpg o más?

mediag <- 25.5
desviacioneg <- 4.5
probabilidadg <- 1 - pnorm(30, mediag, desviacioneg)
porcentajeg <- probabilidadg * 100
porcentajeg
## [1] 15.86553

Si un fabricante desea desarrollar un auto compacto que supere 95% de los compactos actuales en economía de combustible, ¿Cuál debe ser el porcentaje de uso de gasolina para el nuevo auto?

cuantileg <- qnorm(0.95, mediag, desviacioneg)
cuantileg
## [1] 32.90184

Ejericio de Girasoles

Suponga que los diámetros de tallos no soportados en la base, de una especia particural de girasol, tienen una distribución normal con un diámetro promedio de 35mm y una desviación estandar de 3mm.

a.- ¿Cuál es la probabilidad de una planta de girasol tenga un diametro de base de más de 40mm?

z41 <- (40-35)/3
z41
## [1] 1.666667
p41 <- 1-pnorm(40,35,3)
p41
## [1] 0.04779035
x <- 40
promedio <- 35
desviacion_estandar <- 3

Función de Densidad de Probabilidad

x_densidad <- seq(promedio-3*desviacion_estandar,promedio+3*desviacion_estandar, length=1000)
y_densidad <- dnorm(x_densidad, promedio, desviacion_estandar)
plot(x_densidad, y_densidad,type="l", lty=1, xlab="x", ylab="f(x)",main="Función de Densidad de Probabilidad (Normal)", col="red")

Función de Distribución de Probabilidad

x_distribucion <- seq(promedio-3*desviacion_estandar,promedio+3*desviacion_estandar, length=1000)
y_distribucion <- pnorm(x_distribucion, promedio, desviacion_estandar)
plot(x_distribucion, y_distribucion,type="l", lty=1, xlab="x", ylab="f(x)",main="Función de Distribucion de Probabilidad (Normal)", col="blue")

b.- ¿Si 2 plantas de girasol se seleccionaran al azar ¿Cuál es la probabilidad de que ambas plantas tengan un diáetro de base de más de 40mm?

p42 <- p41*p41
p42
## [1] 0.002283918

c.- ¿Dentro de que límites esperaría usted que se encuentren los diámetros de base, con la probabilidad de 0.95?

Para una probabilidad de 2.5 %, de tablas obtenemos que z= -1.96

p43_li <- qnorm(0.025,35,3)
p43_li
## [1] 29.12011

Para obtener una probabilidad de 97.5%, de tablas obtenemos que z= 1.96

p43_ls <- qnorm(0.975,35,3)
p43_ls
## [1] 40.87989

d.- ¿Qué diámetro represrtna el 90avo percentil de la distribución de diámetro?

p44<- qnorm(0.90,35,3)
p44
## [1] 38.84465

Shiny App

## 
## Listening on http://127.0.0.1:7403

Distribución t de Student

Ejercicio Diamantes

peso_diamantes <- c(.46, .61, .52, .48, .57, .54)
prm5 <- mean(peso_diamantes)
desviacion_estandar_muestral <- sqrt(var(peso_diamantes))
n5 <- 6
miu_o <- 0.5
t5 <- (prm5-miu_o)/(desviacion_estandar_muestral/sqrt(n5))

Conclusion, No se rechaza la Ho. Los datos no presentan suficiente evidencia para indicar que el peso medio de los diamantes exceda los 0.5 quilates.

Ejercicio Oxígeno

oxigeno <- c(4.9, 5.1, 4.9, 5.0, 5.0, 4.7)
prom_oxigeno <- mean(oxigeno)
desviacion_estandar_oxigeno <- sqrt(var(oxigeno))
n_oxi <- 6
miu_oxi <- 5
t_oxigeno <- (prom_oxigeno-miu_oxi)/(desviacion_estandar_oxigeno/sqrt(n_oxi))

Conclusión, no se rechaza la Ho

Ejercicio de Funciones

Función de Densidad de Probabilidad (t de Student)

x_densidad <- seq(-4,4, length=1000)
y_densidad <- dt(x_densidad, df=5)
plot(x_densidad, y_densidad, type="l", lty=1, xlab="t", ylab="f(t)", main="Funcion de Densidad de Probabilidad (t de Student)")

Función de Distribución de Probabilidad (t de Student)

x_distribucion <- seq(-4,4, length=1000)
y_distribucion <- pt(x_distribucion, df=5)
plot(x_distribucion, y_distribucion, type="l", lty=1, xlab="t", ylab="f(t)", main="Funcion de Densidad de Probabilidad (t de Student)")

Winsorizing vs Trimming

library(DescTools)

peso_diamantes_error <- c(3,4,3,5,6,4,5,4,3,3,5,6,4,3,5,4,3,3,5,6,5,4,3,4,5,6,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,33,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1) 
#peso_diamantes_error <- c(.46, .61, .52, .48, .57, 54) 
boxplot(peso_diamantes_error)

Winsorizing

peso_diamantes_winsorizado <- Winsorize(peso_diamantes_error, 0.05)
boxplot(peso_diamantes_winsorizado)

Trimming

peso_diamantes_recortado <- Trim(peso_diamantes_error, 0.05)
boxplot(peso_diamantes_recortado)

LS0tDQp0aXRsZTogIkFjdGl2aWRhZDMuMiINCmF1dGhvcjogIkVucmlxdWUgTW9uc2l2YWlzIEEwMTM4Mjk2MiINCmRhdGU6ICIyMDIzLTA4LTI5Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6ICJjb3NtbyINCi0tLQ0KDQohW10oQzpcXFVzZXJzXFxlbnJpcVxcT25lRHJpdmVcXERvY3VtZW50b3NcXERhdG9zIGEgRGVzaWNpb25lc1xcTW9kdWxvIDNcXGdpZjEuZ2lmKQ0KDQojIERpc3RyaWJ1Y2nDs24gTm9ybWFsDQojIyBUZW9yw61hDQoNCiMjIyMgTGFzIERpc3RyaWJ1Y2lvbmVzIGRlIFByb2JhYmlsaWRhZCBDb250aW51YSBwdWVkZW4gdG9tYXIgdmFyaWFzIGZvcm1hcyAsIHBlcm8gdW4gZ3JhbiBuw7ptZXJvIGRlIHZhcmlhYmxlcyBhbGVhdG9yaWFzIG9ic2VydmFkYXMgZW4gbGEgbmF0dXJhbGV6YSBwb3NlZW4gdW5hIGRpc3RyaWJ1Y2nDs24gZGUgZnJlY3VlbmNpYSBxdWUgdGllbmUgbcOhcyBvIG1lbm9zIGRlIGxhIGZvcm1hIGRlIG1vbnTDrWN1bG8sIG8gYmllbiwgY29tbyBzZSBkaXLDrWEgZW4gZXN0YWTDrXN0aWNhLCBlcyBhcHJveGltYWRhbWVudGUgdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsIGRlIHByb2JhYmlsaWRhZC4gIVtdKEM6XFxVc2Vyc1xcZW5yaXFcXE9uZURyaXZlXFxEb2N1bWVudG9zXFxEYXRvcyBhIERlc2ljaW9uZXNcXE1vZHVsbyAzXFwxLmpwZWcpDQohW10oQzpcXFVzZXJzXFxlbnJpcVxcT25lRHJpdmVcXERvY3VtZW50b3NcXERhdG9zIGEgRGVzaWNpb25lc1xcTW9kdWxvIDNcXDIuanBlZykNCg0KIyMgRWplcmNpY2lvIGRlIFJlbmRpbWllbnRvIGRlIGxhIEdhc29saW5hDQoNCiMjIyMgRXN0dWRpb3MgZGVtdWVzdHJhbiBxdWUgZWwgdXNvIGRlIGdhc29saW5hIHBhcmEgYXV0b3MgY29tcGFjdG9zIHZlbmRpZG9zIGVuIEVzdGFkb3MgVW5pZG9zIGVzdMOhIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRvLCBjb24gdW5hIG1lZGlhIGRlIDI1LjUgbWlsbGFzIHBvciBnYWzDs24gKG1wZykuIMK/UXXDqSBwb3JjZW50YWplIGRlIGNvbXBhY3RvcyByZWNvcnJlIDMwIG1wZyBvIG3DoXM/DQpgYGB7cn0NCm1lZGlhZyA8LSAyNS41DQpkZXN2aWFjaW9uZWcgPC0gNC41DQpwcm9iYWJpbGlkYWRnIDwtIDEgLSBwbm9ybSgzMCwgbWVkaWFnLCBkZXN2aWFjaW9uZWcpDQpwb3JjZW50YWplZyA8LSBwcm9iYWJpbGlkYWRnICogMTAwDQpwb3JjZW50YWplZw0KYGBgDQoNCiMjIyMgU2kgdW4gZmFicmljYW50ZSBkZXNlYSBkZXNhcnJvbGxhciB1biBhdXRvIGNvbXBhY3RvIHF1ZSBzdXBlcmUgOTUlIGRlIGxvcyBjb21wYWN0b3MgYWN0dWFsZXMgZW4gZWNvbm9tw61hIGRlIGNvbWJ1c3RpYmxlLCDCv0N1w6FsIGRlYmUgc2VyIGVsIHBvcmNlbnRhamUgZGUgdXNvIGRlIGdhc29saW5hIHBhcmEgZWwgbnVldm8gYXV0bz8gDQpgYGB7cn0NCmN1YW50aWxlZyA8LSBxbm9ybSgwLjk1LCBtZWRpYWcsIGRlc3ZpYWNpb25lZykNCmN1YW50aWxlZw0KYGBgDQoNCg0KIyMgRWplcmljaW8gZGUgR2lyYXNvbGVzDQoNCiMjIyMjIFN1cG9uZ2EgcXVlIGxvcyBkacOhbWV0cm9zIGRlIHRhbGxvcyBubyBzb3BvcnRhZG9zIGVuIGxhIGJhc2UsIGRlIHVuYSBlc3BlY2lhIHBhcnRpY3VyYWwgZGUgZ2lyYXNvbCwgdGllbmVuIHVuYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBjb24gdW4gZGnDoW1ldHJvIHByb21lZGlvIGRlIDM1bW0geSB1bmEgZGVzdmlhY2nDs24gZXN0YW5kYXIgZGUgM21tLiANCg0KYS4tIMK/Q3XDoWwgZXMgbGEgcHJvYmFiaWxpZGFkIGRlIHVuYSBwbGFudGEgZGUgZ2lyYXNvbCB0ZW5nYSB1biBkaWFtZXRybyBkZSBiYXNlIGRlIG3DoXMgZGUgNDBtbT8NCmBgYHtyfQ0KejQxIDwtICg0MC0zNSkvMw0KejQxDQpwNDEgPC0gMS1wbm9ybSg0MCwzNSwzKQ0KcDQxDQoNCnggPC0gNDANCnByb21lZGlvIDwtIDM1DQpkZXN2aWFjaW9uX2VzdGFuZGFyIDwtIDMNCmBgYA0KDQpGdW5jacOzbiBkZSBEZW5zaWRhZCBkZSBQcm9iYWJpbGlkYWQNCmBgYHtyfQ0KeF9kZW5zaWRhZCA8LSBzZXEocHJvbWVkaW8tMypkZXN2aWFjaW9uX2VzdGFuZGFyLHByb21lZGlvKzMqZGVzdmlhY2lvbl9lc3RhbmRhciwgbGVuZ3RoPTEwMDApDQp5X2RlbnNpZGFkIDwtIGRub3JtKHhfZGVuc2lkYWQsIHByb21lZGlvLCBkZXN2aWFjaW9uX2VzdGFuZGFyKQ0KcGxvdCh4X2RlbnNpZGFkLCB5X2RlbnNpZGFkLHR5cGU9ImwiLCBsdHk9MSwgeGxhYj0ieCIsIHlsYWI9ImYoeCkiLG1haW49IkZ1bmNpw7NuIGRlIERlbnNpZGFkIGRlIFByb2JhYmlsaWRhZCAoTm9ybWFsKSIsIGNvbD0icmVkIikNCmBgYA0KDQpGdW5jacOzbiBkZSBEaXN0cmlidWNpw7NuIGRlIFByb2JhYmlsaWRhZA0KYGBge3J9DQp4X2Rpc3RyaWJ1Y2lvbiA8LSBzZXEocHJvbWVkaW8tMypkZXN2aWFjaW9uX2VzdGFuZGFyLHByb21lZGlvKzMqZGVzdmlhY2lvbl9lc3RhbmRhciwgbGVuZ3RoPTEwMDApDQp5X2Rpc3RyaWJ1Y2lvbiA8LSBwbm9ybSh4X2Rpc3RyaWJ1Y2lvbiwgcHJvbWVkaW8sIGRlc3ZpYWNpb25fZXN0YW5kYXIpDQpwbG90KHhfZGlzdHJpYnVjaW9uLCB5X2Rpc3RyaWJ1Y2lvbix0eXBlPSJsIiwgbHR5PTEsIHhsYWI9IngiLCB5bGFiPSJmKHgpIixtYWluPSJGdW5jacOzbiBkZSBEaXN0cmlidWNpb24gZGUgUHJvYmFiaWxpZGFkIChOb3JtYWwpIiwgY29sPSJibHVlIikNCmBgYA0KDQoNCmIuLSDCv1NpIDIgcGxhbnRhcyBkZSBnaXJhc29sIHNlIHNlbGVjY2lvbmFyYW4gYWwgYXphciDCv0N1w6FsIGVzIGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgYW1iYXMgcGxhbnRhcyB0ZW5nYW4gdW4gZGnDoWV0cm8gZGUgYmFzZSBkZSBtw6FzIGRlIDQwbW0/DQpgYGB7cn0NCnA0MiA8LSBwNDEqcDQxDQpwNDINCmBgYA0KDQoNCmMuLSDCv0RlbnRybyBkZSBxdWUgbMOtbWl0ZXMgZXNwZXJhcsOtYSB1c3RlZCBxdWUgc2UgZW5jdWVudHJlbiBsb3MgZGnDoW1ldHJvcyBkZSBiYXNlLCBjb24gbGEgcHJvYmFiaWxpZGFkIGRlIDAuOTU/DQoNClBhcmEgdW5hIHByb2JhYmlsaWRhZCBkZSAyLjUgJSwgZGUgdGFibGFzIG9idGVuZW1vcyBxdWUgej0gLTEuOTYNCmBgYHtyfQ0KcDQzX2xpIDwtIHFub3JtKDAuMDI1LDM1LDMpDQpwNDNfbGkNCmBgYA0KDQpQYXJhIG9idGVuZXIgdW5hIHByb2JhYmlsaWRhZCBkZSA5Ny41JSwgZGUgdGFibGFzIG9idGVuZW1vcyBxdWUgej0gMS45Ng0KYGBge3J9DQpwNDNfbHMgPC0gcW5vcm0oMC45NzUsMzUsMykNCnA0M19scw0KYGBgDQoNCg0KZC4tIMK/UXXDqSBkacOhbWV0cm8gcmVwcmVzcnRuYSBlbCA5MGF2byBwZXJjZW50aWwgZGUgbGEgZGlzdHJpYnVjacOzbiBkZSBkacOhbWV0cm8/IA0KYGBge3J9DQpwNDQ8LSBxbm9ybSgwLjkwLDM1LDMpDQpwNDQNCmBgYA0KDQoNCiMgU2hpbnkgQXBwDQpgYGB7ciwgZWNobz1GQUxTRX0NCmxpYnJhcnkoc2hpbnkpDQpsaWJyYXJ5KHNoaW55dGhlbWVzKQ0Kc2hpbnlBcHAoDQogIHVpIDwtIGZsdWlkUGFnZSh0aGVtZT0gc2hpbnl0aGVtZSgiY2VydWxlYW4iKSwNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgbmF2YmFyUGFnZSgiQ2FsY3VsYWRvcmEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHRhYlBhbmVsKCJEaXN0cmlidWNpw7NuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlYmFyUGFuZWwoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzJGgzKCJJbmdyZXNhIGxvcyBzaWd1aWVudGVzIGRhdG9zOiIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY0lucHV0KCJ4IiwgIlg6IiwgIjEiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNJbnB1dCgicHJvbWVkaW8iLCAiUHJvbWVkaW86IiwgIjAiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNJbnB1dCgiZGVzdmlhY2lvbl9lc3RhbmRhciIsICJEZXN2aWFjacOzbiBFc3TDoW5kYXI6IiwgIjEiKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpblBhbmVsKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdE91dHB1dCgiZGVuc2lkYWQiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RPdXRwdXQoImRpc3RyaWJ1Y2lvbiIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgKSwNCg0KIyBEZWZpbmUgc2VydmVyIGxvZ2ljIHJlcXVpcmVkIHRvIGRyYXcgYSBoaXN0b2dyYW0NCnNlcnZlciA8LSBmdW5jdGlvbihpbnB1dCwgb3V0cHV0KSB7DQogIA0Kb3V0cHV0JGRlbnNpZGFkIDwtIHJlbmRlclBsb3Qoew0KICAgIA0KICAgIHhfZGVuc2lkYWQgPC0gc2VxKGlucHV0JHByb21lZGlvLTMqaW5wdXQkZGVzdmlhY2lvbl9lc3RhbmRhcixpbnB1dCRwcm9tZWRpbyszKmlucHV0JGRlc3ZpYWNpb25fZXN0YW5kYXIsIGxlbmd0aD0xMDAwKQ0KICAgIHlfZGVuc2lkYWQgPC0gZG5vcm0oeF9kZW5zaWRhZCwgaW5wdXQkcHJvbWVkaW8sIGlucHV0JGRlc3ZpYWNpb25fZXN0YW5kYXIpIA0KICAgIHBsb3QoeF9kZW5zaWRhZCwgeV9kZW5zaWRhZCx0eXBlPSJsIiwgbHR5PTEsIHhsYWI9IngiLCB5bGFiPSJmKHgpIixtYWluPSJGdW5jacOzbiBkZSBEZW5zaWRhZCBkZSBQcm9iYWJpbGlkYWQgKE5vcm1hbCkiLCBjb2w9InJlZCIpDQp9KQ0KICAgIA0Kb3V0cHV0JGRpc3RyaWJ1Y2lvbiA8LSByZW5kZXJQbG90KHsNCiAgICANCiAgICB4X2Rpc3RyaWJ1Y2lvbiA8LSBzZXEoaW5wdXQkcHJvbWVkaW8tMyppbnB1dCRkZXN2aWFjaW9uX2VzdGFuZGFyLGlucHV0JHByb21lZGlvKzMqaW5wdXQkZGVzdmlhY2lvbl9lc3RhbmRhciwgbGVuZ3RoPTEwMDApDQogICAgeV9kaXN0cmlidWNpb24gPC0gcG5vcm0oeF9kaXN0cmlidWNpb24sIGlucHV0JHByb21lZGlvLCBpbnB1dCRkZXN2aWFjaW9uX2VzdGFuZGFyKSANCiAgICBwbG90KHhfZGlzdHJpYnVjaW9uLCB5X2Rpc3RyaWJ1Y2lvbix0eXBlPSJsIiwgbHR5PTEsIHhsYWI9IngiLCB5bGFiPSJmKHgpIixtYWluPSJGdW5jacOzbiBkZSBEZW5zaWRhZCBkZSBQcm9iYWJpbGlkYWQgKE5vcm1hbCkiLCBjb2w9ImJsdWUiKQ0KfSkNCg0KfQ0KKQ0KDQpgYGANCg0KIyBEaXN0cmlidWNpw7NuIHQgZGUgU3R1ZGVudA0KDQojIyBFamVyY2ljaW8gRGlhbWFudGVzDQpgYGB7cn0NCnBlc29fZGlhbWFudGVzIDwtIGMoLjQ2LCAuNjEsIC41MiwgLjQ4LCAuNTcsIC41NCkNCnBybTUgPC0gbWVhbihwZXNvX2RpYW1hbnRlcykNCmRlc3ZpYWNpb25fZXN0YW5kYXJfbXVlc3RyYWwgPC0gc3FydCh2YXIocGVzb19kaWFtYW50ZXMpKQ0KbjUgPC0gNg0KbWl1X28gPC0gMC41DQp0NSA8LSAocHJtNS1taXVfbykvKGRlc3ZpYWNpb25fZXN0YW5kYXJfbXVlc3RyYWwvc3FydChuNSkpDQpgYGANCkNvbmNsdXNpb24sIE5vIHNlIHJlY2hhemEgbGEgSG8uIExvcyBkYXRvcyBubyBwcmVzZW50YW4gc3VmaWNpZW50ZSBldmlkZW5jaWEgcGFyYSBpbmRpY2FyIHF1ZSBlbCBwZXNvIG1lZGlvIGRlIGxvcyBkaWFtYW50ZXMgZXhjZWRhIGxvcyAwLjUgcXVpbGF0ZXMuDQoNCiMjIEVqZXJjaWNpbyBPeMOtZ2Vubw0KYGBge3J9DQpveGlnZW5vIDwtIGMoNC45LCA1LjEsIDQuOSwgNS4wLCA1LjAsIDQuNykNCnByb21fb3hpZ2VubyA8LSBtZWFuKG94aWdlbm8pDQpkZXN2aWFjaW9uX2VzdGFuZGFyX294aWdlbm8gPC0gc3FydCh2YXIob3hpZ2VubykpDQpuX294aSA8LSA2DQptaXVfb3hpIDwtIDUNCnRfb3hpZ2VubyA8LSAocHJvbV9veGlnZW5vLW1pdV9veGkpLyhkZXN2aWFjaW9uX2VzdGFuZGFyX294aWdlbm8vc3FydChuX294aSkpDQpgYGANCkNvbmNsdXNpw7NuLCBubyBzZSByZWNoYXphIGxhIEhvDQoNCiMjIEVqZXJjaWNpbyBkZSBGdW5jaW9uZXMNCg0KIyMjIEZ1bmNpw7NuIGRlIERlbnNpZGFkIGRlIFByb2JhYmlsaWRhZCAodCBkZSBTdHVkZW50KQ0KYGBge3J9DQp4X2RlbnNpZGFkIDwtIHNlcSgtNCw0LCBsZW5ndGg9MTAwMCkNCnlfZGVuc2lkYWQgPC0gZHQoeF9kZW5zaWRhZCwgZGY9NSkNCnBsb3QoeF9kZW5zaWRhZCwgeV9kZW5zaWRhZCwgdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ0IiwgeWxhYj0iZih0KSIsIG1haW49IkZ1bmNpb24gZGUgRGVuc2lkYWQgZGUgUHJvYmFiaWxpZGFkICh0IGRlIFN0dWRlbnQpIikNCmBgYA0KDQoNCiMjIyBGdW5jacOzbiBkZSBEaXN0cmlidWNpw7NuIGRlIFByb2JhYmlsaWRhZCAodCBkZSBTdHVkZW50KQ0KYGBge3J9DQp4X2Rpc3RyaWJ1Y2lvbiA8LSBzZXEoLTQsNCwgbGVuZ3RoPTEwMDApDQp5X2Rpc3RyaWJ1Y2lvbiA8LSBwdCh4X2Rpc3RyaWJ1Y2lvbiwgZGY9NSkNCnBsb3QoeF9kaXN0cmlidWNpb24sIHlfZGlzdHJpYnVjaW9uLCB0eXBlPSJsIiwgbHR5PTEsIHhsYWI9InQiLCB5bGFiPSJmKHQpIiwgbWFpbj0iRnVuY2lvbiBkZSBEZW5zaWRhZCBkZSBQcm9iYWJpbGlkYWQgKHQgZGUgU3R1ZGVudCkiKQ0KYGBgDQoNCiMgV2luc29yaXppbmcgdnMgVHJpbW1pbmcNCmBgYHtyfQ0KbGlicmFyeShEZXNjVG9vbHMpDQoNCnBlc29fZGlhbWFudGVzX2Vycm9yIDwtIGMoMyw0LDMsNSw2LDQsNSw0LDMsMyw1LDYsNCwzLDUsNCwzLDMsNSw2LDUsNCwzLDQsNSw2LDUsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsNCwzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMzMsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDEsMiwxLDEsMSwxLDEpIA0KI3Blc29fZGlhbWFudGVzX2Vycm9yIDwtIGMoLjQ2LCAuNjEsIC41MiwgLjQ4LCAuNTcsIDU0KSANCmJveHBsb3QocGVzb19kaWFtYW50ZXNfZXJyb3IpDQpgYGANCg0KIyMgV2luc29yaXppbmcNCmBgYHtyfQ0KcGVzb19kaWFtYW50ZXNfd2luc29yaXphZG8gPC0gV2luc29yaXplKHBlc29fZGlhbWFudGVzX2Vycm9yLCAwLjA1KQ0KYm94cGxvdChwZXNvX2RpYW1hbnRlc193aW5zb3JpemFkbykNCmBgYA0KDQojIyBUcmltbWluZw0KYGBge3J9DQpwZXNvX2RpYW1hbnRlc19yZWNvcnRhZG8gPC0gVHJpbShwZXNvX2RpYW1hbnRlc19lcnJvciwgMC4wNSkNCmJveHBsb3QocGVzb19kaWFtYW50ZXNfcmVjb3J0YWRvKQ0KYGBgDQoNCg0K