Descripción
Nota importante: todos los ejercicios deben ser
resueltos a través de código, no son válidas las soluciones
manuales .
Descarga y ejecución: para responder cada pregunta
del taller se recomienda descargar el documento .Rmd y editarlo
desde su computador. También es posible hacerlo desde la página web, sin
embargo, tenga paciencia porque puede ser lenta la
ejecución.
Entregable: documento .Rmd con solución a
cada pregunta. Enviar este documento a mi correo.
Fecha de entrega: máximo el lunes 14 de
noviembre de 2022
Activación de R
Clic en Activate para activar el
kernel de R y poder ejecutar (run) cada fragmento
de código desde el navegador. Tenga paciencia ⌛⌛⌛
Activate
Bibliotecas
library (tidyverse)
library (lubridate)
Pregunta 1
Complete el siguiente fragmento ingresando su nombre en la variable
texto2 y corrija el código…🤯🤯🤯
Rta: "Hola, mi nombre es Edimer"
texto1 <- "Hola, mi nombre es"
texto2 <- " Estefani"
str_c (texto1, texto2)
Pregunta 2
Use la función mean() para calcular el promedio del
siguiente vector 🤔🤔🤔:
numeros <- c (23 , 12.2 , "13,5" , 11L, 210.14 )
numeros_1 <- str_replace_all (string = numeros, pattern = "," , replacement = "." ) %>% as.numeric ()
class (numeros_1)
mean (numeros_1, na.rm = TRUE )
Pregunta 3
Construya una base de datos con los siguientes vectores y obtenga el
promedio de los números impares al cuadrado (v3) 😨😨😨:
v1 <- c (1 , 2 , 3 , 4 , 5 , 6 )
v2 <- c ("Impar" , "Par" , "Impar" , "Par" , "Impar" )
v3 <- c (1 , 4 , 9 , 16 , 25 , 36 )
# Solucion
v2_c <- c (v2, "Par" )
dtf <- data.frame (
v2_c,
v1,
v3
)
# se extrae V3
impar_v3 <- impar[,3 ]
impar_v3
mean (impar_v3)
Pregunta 4
En la base de datos PlantGrowth hay información de peso
para tres grupos de plantas (control, tratamiento 1 y tratamiento 2).
¿Cuántos registros superan el promedio general (media_p4)
de peso (weight) para el tratamiento 1? 💡💡💡
# tener en cuenta para arreglos mas grandes y conocer el nombre de las entradas
entradas <- PlantGrowth %>%
select (c (group)) %>%
filter (! duplicated (group))
entradas
media_p4 <- PlantGrowth %>%
pull (weight) %>%
mean ()
media_p4
trat_1 <- PlantGrowth %>%
filter (group == "trt1" , weight > media_p4)
trat_1 %>%
count ()
Pregunta 5
Los siguientes vectores poseen información de fechas iniciales y
fechas finales para ciclos hipotéticos de cultivos. Obtenga el vector
con la diferencia de días para cada cultivo y calcule el promedio de
días. 🔂🔂🔂
fecha_inicial <- c ("2010-01-01" , "2020-01-01" , "2021-01-01" , "2022-01-01" )
fecha_final <- c ("2010-03-25" , "2020-04-17" , "2021-03-10" , "2022-05-29" )
# Se establecen como fechas
fecha_inicial <- c ("2010-01-01" , "2020-01-01" , "2021-01-01" , "2022-01-01" ) %>% as.Date ()
fecha_final <- c ("2010-03-25" , "2020-04-17" , "2021-03-10" , "2022-05-29" ) %>% as.Date ()
# Se crea una data.frame
tabla_fechas <- data.frame (
fecha_final,
fecha_inicial
)
# Se muta el data.frame y se operan con diferencia entre los vectores
tabla_diferencia <- tabla1 %>% mutate (
difere = fecha_final - fecha_inicial
)
tabla_diferencia
# Promedio
meandife <- tabla_diferencia[,3 ]
meandife
mean (meandife)
Pregunta 6
arboles <- read_csv ("_rboles_plantados_en_el_municipio_de_Cota.csv" )
arboles
head (arboles)
# por cantidad
arboles %>%
filter (Cantidad > 187 ) %>%
count ()
Pregunta 7
arboles <- read_csv ("_rboles_plantados_en_el_municipio_de_Cota.csv" )
arboles <- read_csv ("_rboles_plantados_en_el_municipio_de_Cota.csv" )
arb_2021 <- arboles %>%
mutate (fecha2 = dmy_hms (Fecha),
anual = year (fecha2)) %>%
filter (anual == 2021 )
sum (arboles_2021$ Cantidad)
Pregunta 8
¿Cuál es el día con mayor número de registros en el siguiente vector
de fechas?
vector_year <- seq (from = 1990 , to = 2021 , by = 2 )
vector_mes <- rep (1 : 12 , each = 5 )
vector_dia <- rep (1 : 30 , each = 3 )
vector_fechas <- str_c (vector_year, "-" , vector_mes, "-" , vector_dia) %>% as.Date ()
vector_fechas
LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgZGUgY2xhc2UiDQpzdWJ0aXRsZTogIkZ1bmRhbWVudG9zIGRlIFIiDQphdXRob3I6ICJFc3RlZmFuaSBDYXJkZW5hcyINCmRhdGU6ICIyNy8xMC8yMDIyIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiBmYWxzZQ0KICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UNCiAgICBoaWdobGlnaHQ6IGthdGUNCi0tLQ0KDQo8IS0tIFNvbWUgc3R1ZmYgZnJvbSB0aGViZWxhYiByZXF1aXJlZCBmb3IgdGhlIG1hZ2ljIC0tPg0KPCEtLSBDb25maWd1cmUgYW5kIGxvYWQgVGhlYmUgIS0tPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtdGhlYmUtY29uZmlnIj4NCiAgew0KICAgIHJlcXVlc3RLZXJuZWw6IHRydWUsDQogICAgYmluZGVyT3B0aW9uczogew0KICAgICAgcmVwbzogImJpbmRlci1leGFtcGxlcy9yIiwNCiAgICB9LA0KICAgIGtlcm5lbE9wdGlvbnM6IHsNCiAgICAgIG5hbWU6ICJSIiwNCiAgICAgIGtlcm5lbE5hbWU6ICJpciIsDQogICAgfSwNCiAgfQ0KPC9zY3JpcHQ+DQoNCjwhLS0gc2NyaXB0IGZvciB0aGViZWxhYiAtLT4NCjxzY3JpcHQgc3JjPSJodHRwczovL3VucGtnLmNvbS90aGViZWxhYkBsYXRlc3QvbGliL2luZGV4LmpzIj48L3NjcmlwdD4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChldmFsID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCiMgRGVzY3JpcGNpw7NuDQoNCi0gKipOb3RhIGltcG9ydGFudGU6KiogdG9kb3MgbG9zIGVqZXJjaWNpb3MgZGViZW4gc2VyIHJlc3VlbHRvcyBhIHRyYXbDqXMgZGUgY8OzZGlnbywgKipubyBzb24gdsOhbGlkYXMgbGFzICBzb2x1Y2lvbmVzIG1hbnVhbGVzKiouDQotICoqRGVzY2FyZ2EgeSBlamVjdWNpw7NuOioqIHBhcmEgcmVzcG9uZGVyIGNhZGEgcHJlZ3VudGEgZGVsIHRhbGxlciBzZSByZWNvbWllbmRhIGRlc2NhcmdhciBlbCBkb2N1bWVudG8gKi5SbWQqIHkgZWRpdGFybG8gZGVzZGUgc3UgY29tcHV0YWRvci4gVGFtYmnDqW4gZXMgcG9zaWJsZSBoYWNlcmxvIGRlc2RlIGxhIHDDoWdpbmEgd2ViLCBzaW4gZW1iYXJnbywgdGVuZ2EgcGFjaWVuY2lhIHBvcnF1ZSBwdWVkZSBzZXIgKipsZW50YSoqIGxhIGVqZWN1Y2nDs24uDQotICoqRW50cmVnYWJsZToqKiBkb2N1bWVudG8gKi5SbWQqIGNvbiBzb2x1Y2nDs24gYSBjYWRhIHByZWd1bnRhLiBFbnZpYXIgZXN0ZSBkb2N1bWVudG8gYSBtaSBjb3JyZW8uDQotICoqRmVjaGEgZGUgZW50cmVnYToqKiBtw6F4aW1vIGVsICoqbHVuZXMgMTQgZGUgbm92aWVtYnJlIGRlIDIwMjIqKg0KDQoNCjxjZW50ZXI+DQo8aW1nIHNyYyA9ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWVkaW1lci9ycHJvamVjdF91ZGVhL2Jsb2IvZ2gtcGFnZXMvdGVtYXMvR3VpZGVzL2ltZy9pbWcxLlBORz9yYXc9dHJ1ZSIgLz4NCjwvY2VudGVyPg0KDQojIEFjdGl2YWNpw7NuIGRlIFINCg0KPiBDbGljIGVuICoqYEFjdGl2YXRlYCoqIHBhcmEgYWN0aXZhciBlbCAqa2VybmVsKiBkZSBSIHkgcG9kZXIgZWplY3V0YXIgKGBydW5gKSBjYWRhIGZyYWdtZW50byBkZSBjw7NkaWdvIGRlc2RlIGVsIG5hdmVnYWRvci4gVGVuZ2EgcGFjaWVuY2lhIOKMm+KMm+KMmw0KDQpgYGB7ciwgZXZhbCA9IFRSVUUsIGVjaG8gPSBGQUxTRX0NCiMgYWQgYSBidXR0b24NCmh0bWx0b29sczo6dGFncyRidXR0b24oDQogIGlkID0gImFjdGl2YXRlQnV0dG9uIiwNCiAgc3R5bGU9IndpZHRoOiA4MDBweDsgaGVpZ2h0OiA1MHB4OyBmb250LXNpemU6IDIuNWVtOyIsIA0KICAiQWN0aXZhdGUiDQopDQpgYGANCg0KYGBge2pzLCBldmFsPVRSVUUsIGVjaG8gPSBGQUxTRX0NCi8vIHRoZWJlbGFiIGpzIHNjcmlwdA0KdmFyIGJvb3RzdHJhcFRoZWJlID0gZnVuY3Rpb24oKSB7DQogICAgdGhlYmVsYWIuYm9vdHN0cmFwKCk7DQp9DQpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aXZhdGVCdXR0b24iKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJvb3RzdHJhcFRoZWJlKQ0KYGBgDQoNCiMgQmlibGlvdGVjYXMNCg0KYGBge3IsIGF0dHIuc291cmNlID0gYygnZGF0YS1leGVjdXRhYmxlPSJ0cnVlIicsICdkYXRhLWxhbmd1YWdlPSJyIicpfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmBgYA0KDQojIFByZWd1bnRhIDENCg0KLSBDb21wbGV0ZSBlbCBzaWd1aWVudGUgZnJhZ21lbnRvIGluZ3Jlc2FuZG8gc3Ugbm9tYnJlIGVuIGxhIHZhcmlhYmxlIGB0ZXh0bzJgIHkgY29ycmlqYSBlbCBjw7NkaWdvLi4u8J+kr/CfpK/wn6SvDQogIC0gKipSdGE6KiogYCJIb2xhLCBtaSBub21icmUgZXMgRWRpbWVyImANCg0KYGBge3IsIGF0dHIuc291cmNlID0gYygnZGF0YS1leGVjdXRhYmxlPSJ0cnVlIicsICdkYXRhLWxhbmd1YWdlPSJyIicpfQ0KdGV4dG8xIDwtICJIb2xhLCBtaSBub21icmUgZXMiDQp0ZXh0bzIgPC0gIiBFc3RlZmFuaSINCnN0cl9jKHRleHRvMSwgdGV4dG8yKQ0KYGBgDQoNCiMgUHJlZ3VudGEgMg0KDQotIFVzZSBsYSBmdW5jacOzbiBgbWVhbigpYCBwYXJhIGNhbGN1bGFyIGVsIHByb21lZGlvIGRlbCBzaWd1aWVudGUgdmVjdG9yIPCfpJTwn6SU8J+klDoNCiAgLSAqKlJ0YToqKiBgNTMuOTY4YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQoNCm51bWVyb3MgPC0gYygyMywgMTIuMiwgIjEzLDUiLCAxMUwsIDIxMC4xNCkNCg0KbnVtZXJvc18xIDwtIHN0cl9yZXBsYWNlX2FsbChzdHJpbmcgPSBudW1lcm9zLCBwYXR0ZXJuID0gIiwiLCByZXBsYWNlbWVudCA9ICIuIikgJT4lIGFzLm51bWVyaWMoKQ0KY2xhc3MobnVtZXJvc18xKQ0KDQptZWFuKG51bWVyb3NfMSwgbmEucm0gPSBUUlVFKQ0KDQpgYGANCg0KIyBQcmVndW50YSAzDQoNCi0gQ29uc3RydXlhIHVuYSBiYXNlIGRlIGRhdG9zICBjb24gbG9zIHNpZ3VpZW50ZXMgdmVjdG9yZXMgeSBvYnRlbmdhIGVsIHByb21lZGlvIGRlIGxvcyBuw7ptZXJvcyBpbXBhcmVzIGFsIGN1YWRyYWRvIChgdjNgKSDwn5io8J+YqPCfmKg6DQogIC0gKipSdGE6KiogYDExLjY2NjY3YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQp2MSA8LSBjKDEsIDIsIDMsIDQsIDUsIDYpDQp2MiA8LSBjKCJJbXBhciIsICJQYXIiLCAiSW1wYXIiLCAiUGFyIiwgIkltcGFyIikNCnYzIDwtIGMoMSwgNCwgOSwgMTYsIDI1LCAzNikNCg0KIyBTb2x1Y2lvbiANCnYyX2MgPC0gYyh2MiwgIlBhciIpDQoNCmR0ZiA8LSBkYXRhLmZyYW1lKA0KICB2Ml9jLA0KICB2MSwNCiAgdjMNCikNCg0KIyBzZSBleHRyYWUgVjMNCg0KaW1wYXJfdjMgPC0gaW1wYXJbLDNdDQppbXBhcl92Mw0KDQptZWFuKGltcGFyX3YzKQ0KDQpgYGANCg0KIyBQcmVndW50YSA0DQoNCi0gRW4gbGEgYmFzZSBkZSBkYXRvcyBgUGxhbnRHcm93dGhgIGhheSBpbmZvcm1hY2nDs24gZGUgcGVzbyBwYXJhIHRyZXMgZ3J1cG9zIGRlIHBsYW50YXMgKGNvbnRyb2wsIHRyYXRhbWllbnRvIDEgeSB0cmF0YW1pZW50byAyKS4gwr9DdcOhbnRvcyByZWdpc3Ryb3Mgc3VwZXJhbiBlbCBwcm9tZWRpbyBnZW5lcmFsIChgbWVkaWFfcDRgKSBkZSBwZXNvIChgd2VpZ2h0YCkgcGFyYSBlbCB0cmF0YW1pZW50byAxPyDwn5Kh8J+SofCfkqENCiAgLSAqKlJ0YToqKiBgMiByZWdpc3Ryb3NgDQoNCmBgYHtyfQ0KaGVhZChQbGFudEdyb3d0aCkNCmBgYA0KDQpgYGB7cn0NCiMgdGVuZXIgZW4gY3VlbnRhIHBhcmEgYXJyZWdsb3MgbWFzIGdyYW5kZXMgeSBjb25vY2VyIGVsIG5vbWJyZSBkZSBsYXMgZW50cmFkYXMNCg0KZW50cmFkYXMgPC0gUGxhbnRHcm93dGggJT4lIA0KICBzZWxlY3QoYyhncm91cCkpICU+JSANCmZpbHRlcighZHVwbGljYXRlZChncm91cCkpDQplbnRyYWRhcyANCg0KYGBgDQoNCmBgYHtyLCBhdHRyLnNvdXJjZSA9IGMoJ2RhdGEtZXhlY3V0YWJsZT0idHJ1ZSInLCAnZGF0YS1sYW5ndWFnZT0iciInKX0NCm1lZGlhX3A0IDwtIFBsYW50R3Jvd3RoICU+JSANCiAgcHVsbCh3ZWlnaHQpICU+JSANCiAgbWVhbigpDQptZWRpYV9wNA0KDQp0cmF0XzEgPC0gUGxhbnRHcm93dGggJT4lIA0KICBmaWx0ZXIoZ3JvdXAgPT0gInRydDEiLCB3ZWlnaHQgPiBtZWRpYV9wNCkgDQp0cmF0XzEgJT4lIA0KICBjb3VudCgpDQoNCmBgYA0KDQojIFByZWd1bnRhIDUNCg0KLSBMb3Mgc2lndWllbnRlcyB2ZWN0b3JlcyBwb3NlZW4gaW5mb3JtYWNpw7NuIGRlIGZlY2hhcyBpbmljaWFsZXMgeSBmZWNoYXMgZmluYWxlcyBwYXJhIGNpY2xvcyBoaXBvdMOpdGljb3MgZGUgY3VsdGl2b3MuIE9idGVuZ2EgZWwgdmVjdG9yIGNvbiBsYSBkaWZlcmVuY2lhIGRlIGTDrWFzIHBhcmEgY2FkYSBjdWx0aXZvIHkgY2FsY3VsZSBlbCBwcm9tZWRpbyBkZSBkw61hcy4g8J+UgvCflILwn5SCDQogIC0gKipSdGE6KiogYDEwMS41YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQpmZWNoYV9pbmljaWFsIDwtIGMoIjIwMTAtMDEtMDEiLCAiMjAyMC0wMS0wMSIsICIyMDIxLTAxLTAxIiwgIjIwMjItMDEtMDEiKQ0KZmVjaGFfZmluYWwgPC0gYygiMjAxMC0wMy0yNSIsICIyMDIwLTA0LTE3IiwgIjIwMjEtMDMtMTAiLCAiMjAyMi0wNS0yOSIpDQoNCiMgU2UgZXN0YWJsZWNlbiBjb21vIGZlY2hhcw0KZmVjaGFfaW5pY2lhbCA8LSBjKCIyMDEwLTAxLTAxIiwgIjIwMjAtMDEtMDEiLCAiMjAyMS0wMS0wMSIsICIyMDIyLTAxLTAxIikgJT4lIGFzLkRhdGUoKQ0KZmVjaGFfZmluYWwgPC0gYygiMjAxMC0wMy0yNSIsICIyMDIwLTA0LTE3IiwgIjIwMjEtMDMtMTAiLCAiMjAyMi0wNS0yOSIpICU+JSBhcy5EYXRlKCkNCg0KIyBTZSBjcmVhIHVuYSBkYXRhLmZyYW1lIA0KDQp0YWJsYV9mZWNoYXMgPC0gZGF0YS5mcmFtZSgNCiAgZmVjaGFfZmluYWwsIA0KICBmZWNoYV9pbmljaWFsDQogICkNCg0KIyBTZSBtdXRhIGVsIGRhdGEuZnJhbWUgeSBzZSBvcGVyYW4gY29uIGRpZmVyZW5jaWEgZW50cmUgbG9zIHZlY3RvcmVzIA0KDQp0YWJsYV9kaWZlcmVuY2lhIDwtIHRhYmxhMSAlPiUgbXV0YXRlKA0KICBkaWZlcmUgPSBmZWNoYV9maW5hbCAtIGZlY2hhX2luaWNpYWwNCiAgKQ0KdGFibGFfZGlmZXJlbmNpYQ0KDQojIFByb21lZGlvIA0KDQptZWFuZGlmZSA8LSB0YWJsYV9kaWZlcmVuY2lhWywzXQ0KbWVhbmRpZmUNCg0KbWVhbihtZWFuZGlmZSkNCg0KYGBgDQoNCiMgUHJlZ3VudGEgNg0KDQotIENvbiBsYSBiYXNlIGRlIGRhdG9zIGRlIFvDoXJib2xlcyBwbGFudGFkb3MgZW4gZWwgbXVuaWNpcGlvIGRlIENvdGEgMjAyMC0yMDIyXShodHRwczovL3d3dy5kYXRvcy5nb3YuY28vQWdyaWN1bHR1cmEteS1EZXNhcnJvbGxvLVJ1cmFsLy1yYm9sZXMtcGxhbnRhZG9zLWVuLWVsLW11bmljaXBpby1kZS1Db3RhLzZoaGgtdHA0cikgcmVzcG9uZGEgwr9jdcOhbnRvcyBwcmVkaW9zIHN1cGVyYW4gbG9zIDE4NyDDoXJib2xlcyBwbGFudGFkb3M/DQogIC0gKipSdGE6KiogYDQ3YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQphcmJvbGVzIDwtIHJlYWRfY3N2KCJfcmJvbGVzX3BsYW50YWRvc19lbl9lbF9tdW5pY2lwaW9fZGVfQ290YS5jc3YiKQ0KYXJib2xlcw0KDQpoZWFkKGFyYm9sZXMpDQoNCiMgcG9yIGNhbnRpZGFkIA0KDQogYXJib2xlcyAlPiUgDQogIGZpbHRlciAoQ2FudGlkYWQgPiAxODcpICU+JSANCiAgIGNvdW50KCkNCg0KYGBgDQoNCg0KDQojIFByZWd1bnRhIDcNCg0KLSBDb24gbGEgYmFzZSBkZSBkYXRvcyBkZSBbw6FyYm9sZXMgcGxhbnRhZG9zIGVuIGVsIG11bmljaXBpbyBkZSBDb3RhIDIwMjAtMjAyMl0oaHR0cHM6Ly93d3cuZGF0b3MuZ292LmNvL0FncmljdWx0dXJhLXktRGVzYXJyb2xsby1SdXJhbC8tcmJvbGVzLXBsYW50YWRvcy1lbi1lbC1tdW5pY2lwaW8tZGUtQ290YS82aGhoLXRwNHIpIHJlc3BvbmRhIMK/Y3XDoW50b3Mgw6FyYm9sZXMgZnVlcm9uIHBsYW50YWRvcyBlbiBlbCAyMDIxPw0KICAtICoqUnRhOioqIGAxNjM2NWANCiAgDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQphcmJvbGVzIDwtIHJlYWRfY3N2KCJfcmJvbGVzX3BsYW50YWRvc19lbl9lbF9tdW5pY2lwaW9fZGVfQ290YS5jc3YiKQ0KDQphcmJvbGVzIDwtIHJlYWRfY3N2KCJfcmJvbGVzX3BsYW50YWRvc19lbl9lbF9tdW5pY2lwaW9fZGVfQ290YS5jc3YiKQ0KDQphcmJfMjAyMSA8LSBhcmJvbGVzICU+JSANCiAgbXV0YXRlKGZlY2hhMiA9IGRteV9obXMoRmVjaGEpLA0KICAgICAgICAgYW51YWwgPSB5ZWFyKGZlY2hhMikpICU+JSANCiAgZmlsdGVyKGFudWFsID09IDIwMjEpDQoNCnN1bShhcmJvbGVzXzIwMjEkQ2FudGlkYWQpDQpgYGAgIA0KDQojIFByZWd1bnRhIDgNCg0KLSDCv0N1w6FsIGVzIGVsIGTDrWEgY29uIG1heW9yIG7Dum1lcm8gZGUgcmVnaXN0cm9zIGVuIGVsIHNpZ3VpZW50ZSB2ZWN0b3IgZGUgZmVjaGFzPw0KICAtICoqUnRhOioqIGBsdW5lczogMTVgDQoNCmBgYHtyLCBhdHRyLnNvdXJjZSA9IGMoJ2RhdGEtZXhlY3V0YWJsZT0idHJ1ZSInLCAnZGF0YS1sYW5ndWFnZT0iciInKX0NCnZlY3Rvcl95ZWFyIDwtIHNlcShmcm9tID0gMTk5MCwgdG8gPSAyMDIxLCBieSA9IDIpDQp2ZWN0b3JfbWVzIDwtIHJlcCgxOjEyLCBlYWNoID0gNSkNCnZlY3Rvcl9kaWEgPC0gcmVwKDE6MzAsIGVhY2ggPSAzKQ0KDQp2ZWN0b3JfZmVjaGFzIDwtIHN0cl9jKHZlY3Rvcl95ZWFyLCAiLSIsIHZlY3Rvcl9tZXMsICItIiwgdmVjdG9yX2RpYSkgJT4lIGFzLkRhdGUoKQ0KdmVjdG9yX2ZlY2hhcw0KDQoNCg0KDQpgYGAgDQoNCg==