1. Introducción
Con base en la base de datos disponible en el siguiente enlace: https://www.datos.gov.co/Agricultura-y-Desarrollo-Rural/Evaluaciones-Agropecuarias-Municipales-EVA/2pnw-mmge/data,
se presentan estadísticas plurianuales sobre la producción agrícola en
Colombia, abarcando el periodo 2007-2018. Este conjunto de datos,
proporcionado por el Ministerio de Agricultura y Desarrollo Rural,
permite analizar diversos indicadores, como área cosechada, área
sembrada, producción total y especies cultivadas, para diferentes
departamentos y municipios.
En este análisis, nos enfocaremos en el departamento del Putumayo,
ilustrando cómo varían los criterios de producción entre municipios, los
grupos de cultivos más representativos, las especies predominantes, y
otros factores relacionados con el desempeño agrícola. Mediante tablas y
gráficos informativos, se busca destacar tendencias clave que
contribuyen a entender el panorama agrícola de la región y su impacto en
el desarrollo rural.
2. Conjunto de datos EVA plurianual para el departamento del
Putumayo
Se seleccionó la base de datos de las Evaluaciones Agropecuarias
Municipales (EVA) debido a que constituye una recopilación integral y
específica de información agrícola de Colombia, lo que permite trabajar
directamente con datos relevantes para el contexto nacional. Su
estructura facilita regular y organizar los datos de acuerdo con los
criterios necesarios para este análisis, como producción por grupos de
cultivos, especies agrícolas, área cosechada y producida, entre otros
indicadores clave.
Además, al tratarse de una base de datos de acceso libre al público,
se convierte en una herramienta sumamente valiosa para realizar
investigaciones y proyectos enfocados en temas agronómicos o
agropecuarios. Su disponibilidad fomenta la transparencia y el acceso
equitativo a información de gran relevancia.
Finalmente, el uso de R como herramienta principal para la
manipulación y análisis de datos proporciona un enfoque eficiente y
reproducible, permitiendo transformar esta información en tablas y
gráficas informativas que facilitan una comprensión más profunda del
comportamiento agrícola en regiones como el Putumayo.
3. Lectura de la base de datos EVA
(eva = read_csv("C:/Users/gutie/Music/Evaluaciones_Agropecuarias_Municipales_EVA.csv", col_names = TRUE,show_col_types = FALSE))
La tabla obtenida de la base de datos incluye información clave como
el código del municipio, el nombre del departamento, el nombre de los
municipios, el grupo y subgrupo de cultivo, el tipo de cultivo, la
desagregación regional y/o sistema productivo, así como datos
específicos relacionados con el año, el periodo, el área sembrada y
cosechada (en hectáreas), la producción (en toneladas), el rendimiento
(en toneladas por hectárea) y el estado físico de la producción. Estos
criterios son fundamentales para el estudio y análisis del sector
agrícola, ya que permiten una visión detallada de la distribución y
desempeño de los cultivos en diferentes regiones.
Facilitan la identificación de patrones productivos, la evaluación
del rendimiento agrícola y el impacto de variables geográficas y
climáticas en la producción. Además, esta información resulta esencial
para la planificación estratégica, la formulación de políticas públicas,
la optimización de recursos y el diseño de sistemas productivos
sostenibles adaptados a las características específicas de cada
región.
4. Limpieza del conjunto de datos de EVA
names(eva)
[1] "CÓD. \nDEP." "DEPARTAMENTO"
[3] "CÓD. MUN." "MUNICIPIO"
[5] "GRUPO \nDE CULTIVO" "SUBGRUPO \nDE CULTIVO"
[7] "CULTIVO" "DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO"
[9] "AÑO" "PERIODO"
[11] "Área Sembrada\n(ha)" "Área Cosechada\n(ha)"
[13] "Producción\n(t)" "Rendimiento\n(t/ha)"
[15] "ESTADO FISICO PRODUCCION" "NOMBRE \nCIENTIFICO"
[17] "CICLO DE CULTIVO"
eva.tmp
eva.tmp %>% dplyr::rename('Cod_Mun' = 'CÓD. MUN.','Grupo' = 'GRUPO \nDE CULTIVO','Subgrupo' = 'SUBGRUPO \nDE CULTIVO', 'Year' = 'AÑO','AreaSembrada' = 'Área Sembrada\n(ha)','AreaCosechada' = 'Área Sembrada\n(ha)','Produccion' ='Producción\n(t)','Rendimiento' = 'Rendimiento\n(t/ha)','Sistema' = 'DESAGREGACIÓN REGIONAL Y/O SISTEMA PRODUCTIVO','Estado' = 'ESTADO FISICO PRODUCCION') -> new_eva
new_eva
4. Análisis de la base de datos EVA, para el departamento del
Putumayo
La tabla de datos nos permite reconocer la variabilidad de los grupos
de cultivos mayormente cultivados en el departamento del Putumayo, entre
los que se encuentran cereales, frutales, leguminosas, hortalizas,
forestales, tubérculos y plátanos, oleaginosas, flores y follajes. Esta
diversidad agrícola se debe principalmente a las características
climáticas y edáficas de la región. El Putumayo cuenta con un clima
cálido-húmedo tropical y una abundante precipitación anual, condiciones
ideales para el cultivo de plátano, yuca y otros tubérculos que
requieren suelos ricos en materia orgánica y bien drenados (Universidad
Tecnologíca de Pereira, 2023). Asimismo, suelos aluviales y de alta
fertilidad favorecen el desarrollo de cultivos como frutales tropicales
y oleaginosas, mientras que las temperaturas constantes y la alta
humedad son ideales para el crecimiento de flores y follajes de
exportación (Ministerio de Agricultura, 2020).
El uso de esta información permite identificar las ventajas
productivas de la región y fomentar prácticas agrícolas sostenibles que
maximicen el rendimiento de los cultivos tradicionales, al tiempo que se
exploran nuevas oportunidades para diversificar la oferta agrícola,
fortaleciendo la economía local. Este análisis detallado apoya la toma
de decisiones estratégicas en el sector agrícola, desde políticas
públicas hasta inversiones privadas.
4.1. Los cultivos más importantes entre 2007 y 2018
new_eva %>%
##filter(Produccion > 0) %>%
group_by(Grupo) %>%
summarize(total_produccion = sum(Produccion)) %>%
arrange(desc(total_produccion))
new_eva %>%
group_by(Grupo) %>%
summarize(total_produccion = sum(Produccion)) -> PT
PT %>%
filter(total_produccion > 1000) -> main.groups
Resultado del total de producción en el Putumayo
El valor total de la producción en el departamento del Putumayo,
correspondiente a la cifra de 1,177,717, refleja el volumen total de la
producción agrícola registrado para la región durante el período
analizado. Este dato es clave para evaluar el desempeño y la
productividad de los cultivos en Putumayo, proporcionando una base
sólida para el análisis y la toma de decisiones sobre el sector agrícola
en la región.
(value = sum(main.groups$total_produccion))
[1] 1177717
main.groups$percent = main.groups$total_produccion/value
Gráfico acerca del porcentaje entre grupo y producción en el
Putumayo
# Barplot
bp<- ggplot(main.groups, aes(x="", y=percent, fill=Grupo))+
geom_bar(width = 1, stat = "identity")
# Piechart
pie <- bp + coord_polar("y", start=0)
pie

El gráfico circular evidencia la predominancia de los tubérculos y
plátanos en la agricultura del Putumayo, ocupando la mitad de la
producción total. Esta concentración se explica por las condiciones
agroclimáticas favorables y la arraigada tradición agrícola. Si bien
estos cultivos son fundamentales, el gráfico también revela una
diversidad productiva, incluyendo cereales, forestales, frutales,
hortalizas, leguminosas, oleaginosas, otras permanentes y plantas
aromáticas. Esta variedad responde a las necesidades alimentarias y
económicas de la región, aunque la proporción de cada grupo sugiere
áreas de oportunidad para la diversificación y el desarrollo
agrícola.
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_prod)) %>%
arrange(desc(total_prod))
`summarise()` has grouped output by 'Grupo'. You can override using the `.groups` argument.
new_eva %>%
group_by(Grupo, MUNICIPIO) %>%
summarize(total_prod = sum(Produccion, na.rm = TRUE)) %>%
slice(which.max(total_prod)) -> leaders
`summarise()` has grouped output by 'Grupo'. You can override using the `.groups` argument.
leaders
leaders %>%
filter(total_prod > 50) -> main.leaders
Gráfico acerca de la producción en municipios del Putumayo
# Basic barplot
p<-ggplot(data=main.leaders, aes(x=MUNICIPIO, y=total_prod)) +
geom_bar(stat="identity")
p

El presente gráfico evidencia una marcada disparidad en la producción
total entre los municipios del Putumayo, con Puerto Guzmán destacando
como el principal productor. Esta concentración podría atribuirse a
diversos factores como condiciones agroclimáticas más favorables, mayor
inversión en infraestructura, tipo de cultivos predominantes, tamaño de
las explotaciones o políticas públicas que favorecen determinadas zonas.
Orito, aunque en menor medida, también presenta un nivel de producción
considerable. En contraste, Mocoa, Puerto Caicedo, Sibundoy y Valle del
Guamuez muestran cifras de producción significativamente menores. Esta
disparidad sugiere la necesidad de analizar a fondo las características
específicas de cada municipio, incluyendo aspectos como la calidad de
los suelos, el acceso a mercados, las políticas de apoyo al sector
agrícola y los desafíos que enfrentan los productores locales. Un
análisis más detallado permitiría identificar las causas de estas
diferencias y diseñar estrategias para promover un desarrollo agrícola
más equitativo y sostenible en toda la región.
4.2. Dinámica del cultivo con mayor producción en el Putumayo entre
2007 y 2018
eva %>%
filter(MUNICIPIO=="PUERTO GUZMAN" & CULTIVO=="PLATANO") %>%
group_by(AÑO, CULTIVO) %>%
select(MUNICIPIO, CULTIVO, `Producción
(t)`, AÑO) -> puertoguzman_platano
puertoguzman_platano
g <- ggplot(aes(x=AÑO, y= `Producción
(t)`/1000), data = puertoguzman_platano) + geom_bar(stat='identity') + labs(y='Produccion de Platano [Ton x 1000]')
Gráfico acerca de la evolución de la producción de platano en Puerto
Guzman desde 2007 hasta 2018
g + ggtitle("Evolucion de la Produccion de platano en Puerto Guzman desde 2007 hasta 2018") + labs(caption= "Based on EVA data (Minagricultura, 2020)")

El gráfico de la producción de plátano en Puerto Guzmán entre 2007 y
2018 revela una tendencia interesante. Inicialmente, entre 2007 y 2010,
se observa un crecimiento sostenido en la producción, alcanzando un pico
máximo alrededor de 2010. Sin embargo, a partir de este punto, la
producción se estabiliza, fluctuando levemente en torno a un valor
promedio. Hacia el final del período analizado, entre 2017 y 2018, se
aprecia una ligera disminución en la producción, aunque se mantiene en
niveles relativamente altos. Esta evolución podría explicarse por
diversos factores, como la madurez del cultivo, las condiciones
climáticas, la dinámica del mercado y los cambios en las prácticas
agrícolas. La estabilidad general de la producción sugiere que el
cultivo de plátano se ha consolidado como una actividad económica
importante en Puerto Guzmán, aunque las fluctuaciones anuales y la
reciente disminución indican la necesidad de un monitoreo continuo y la
implementación de estrategias para garantizar su sostenibilidad a largo
plazo.
5. Bibliográfia
Lizarazo, I., 2022. Entendiendo la productividad dinámica de los
cultivos. Disponible en https://rpubs.com/ials2un/production_dyn_v1.
Ministerio de agricultura, 2020. Plan departamental de extensión
agropecuaria departamento de Putumayo. Gobernación putumayo. Disponible
en https://repository.agrosavia.co/handle/20.500.12324/37136
Universidad tecnologíca de Pereira, 2023. Practícas agroecológicas
para suelos resistentes. Disponible en https://epseaweb.utp.edu.co/wp-content/uploads/2024/02/Putumayo-suelos-resistentes.pdf
sessionInfo()
R version 4.3.3 (2024-02-29 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 11 x64 (build 22631)
Matrix products: default
locale:
[1] LC_COLLATE=Spanish_Spain.utf8 LC_CTYPE=Spanish_Spain.utf8 LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C
[5] LC_TIME=Spanish_Spain.utf8
time zone: America/Bogota
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] lubridate_1.9.3 forcats_1.0.0 stringr_1.5.1 purrr_1.0.2 readr_2.1.5 tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.0
[9] tidyverse_2.0.0 dplyr_1.1.4
loaded via a namespace (and not attached):
[1] sass_0.4.8 utf8_1.2.4 generics_0.1.3 stringi_1.8.3 hms_1.1.3 digest_0.6.34 magrittr_2.0.3
[8] evaluate_0.23 grid_4.3.3 timechange_0.3.0 fastmap_1.1.1 jsonlite_1.8.8 fansi_1.0.6 scales_1.3.0
[15] jquerylib_0.1.4 cli_3.6.2 crayon_1.5.2 rlang_1.1.3 bit64_4.0.5 munsell_0.5.0 withr_3.0.0
[22] cachem_1.0.8 yaml_2.3.8 tools_4.3.3 tzdb_0.4.0 colorspace_2.1-0 vctrs_0.6.5 R6_2.5.1
[29] lifecycle_1.0.4 bit_4.0.5 vroom_1.6.5 pkgconfig_2.0.3 pillar_1.9.0 bslib_0.6.1 gtable_0.3.4
[36] rsconnect_1.3.3 glue_1.7.0 xfun_0.42 tidyselect_1.2.0 rstudioapi_0.15.0 knitr_1.45 farver_2.1.1
[43] htmltools_0.5.7 rmarkdown_2.26 labeling_0.4.3 compiler_4.3.3
LS0tDQp0aXRsZTogIlBhcmNpYWwgTm8uMSAtIEV2YWx1YWNpb25lcyBhZ3JvcGVjdWFyaWFzIGRlbCBkZXBhcnRhbWVudG8gZGVsIFB1dHVtYXlvIGRlc2RlDQogIDIwMDcgYSAyMDE4Ig0KYXV0aG9yOiAiTHVpc2EgQWxlamFuZHJhIEd1dGllcnJleiBIaWd1ZXJhIg0KZGF0ZTogIjIwLjEyLjIwMjQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KIyMgMS4gSW50cm9kdWNjacOzbg0KQ29uIGJhc2UgZW4gbGEgYmFzZSBkZSBkYXRvcyBkaXNwb25pYmxlIGVuIGVsIHNpZ3VpZW50ZSBlbmxhY2U6IGh0dHBzOi8vd3d3LmRhdG9zLmdvdi5jby9BZ3JpY3VsdHVyYS15LURlc2Fycm9sbG8tUnVyYWwvRXZhbHVhY2lvbmVzLUFncm9wZWN1YXJpYXMtTXVuaWNpcGFsZXMtRVZBLzJwbnctbW1nZS9kYXRhLCBzZSBwcmVzZW50YW4gZXN0YWTDrXN0aWNhcyBwbHVyaWFudWFsZXMgc29icmUgbGEgcHJvZHVjY2nDs24gYWdyw61jb2xhIGVuIENvbG9tYmlhLCBhYmFyY2FuZG8gZWwgcGVyaW9kbyAyMDA3LTIwMTguIEVzdGUgY29uanVudG8gZGUgZGF0b3MsIHByb3BvcmNpb25hZG8gcG9yIGVsIE1pbmlzdGVyaW8gZGUgQWdyaWN1bHR1cmEgeSBEZXNhcnJvbGxvIFJ1cmFsLCBwZXJtaXRlIGFuYWxpemFyIGRpdmVyc29zIGluZGljYWRvcmVzLCBjb21vIMOhcmVhIGNvc2VjaGFkYSwgw6FyZWEgc2VtYnJhZGEsIHByb2R1Y2Npw7NuIHRvdGFsIHkgZXNwZWNpZXMgY3VsdGl2YWRhcywgcGFyYSBkaWZlcmVudGVzIGRlcGFydGFtZW50b3MgeSBtdW5pY2lwaW9zLg0KDQpFbiBlc3RlIGFuw6FsaXNpcywgbm9zIGVuZm9jYXJlbW9zIGVuIGVsIGRlcGFydGFtZW50byBkZWwgUHV0dW1heW8sIGlsdXN0cmFuZG8gY8OzbW8gdmFyw61hbiBsb3MgY3JpdGVyaW9zIGRlIHByb2R1Y2Npw7NuIGVudHJlIG11bmljaXBpb3MsIGxvcyBncnVwb3MgZGUgY3VsdGl2b3MgbcOhcyByZXByZXNlbnRhdGl2b3MsIGxhcyBlc3BlY2llcyBwcmVkb21pbmFudGVzLCB5IG90cm9zIGZhY3RvcmVzIHJlbGFjaW9uYWRvcyBjb24gZWwgZGVzZW1wZcOxbyBhZ3LDrWNvbGEuIE1lZGlhbnRlIHRhYmxhcyB5IGdyw6FmaWNvcyBpbmZvcm1hdGl2b3MsIHNlIGJ1c2NhIGRlc3RhY2FyIHRlbmRlbmNpYXMgY2xhdmUgcXVlIGNvbnRyaWJ1eWVuIGEgZW50ZW5kZXIgZWwgcGFub3JhbWEgYWdyw61jb2xhIGRlIGxhIHJlZ2nDs24geSBzdSBpbXBhY3RvIGVuIGVsIGRlc2Fycm9sbG8gcnVyYWwuDQoNCg0KIyMgMi4gQ29uanVudG8gZGUgZGF0b3MgRVZBIHBsdXJpYW51YWwgcGFyYSBlbCBkZXBhcnRhbWVudG8gZGVsIFB1dHVtYXlvDQpTZSBzZWxlY2Npb27DsyBsYSBiYXNlIGRlIGRhdG9zIGRlIGxhcyBFdmFsdWFjaW9uZXMgQWdyb3BlY3VhcmlhcyBNdW5pY2lwYWxlcyAoRVZBKSBkZWJpZG8gYSBxdWUgY29uc3RpdHV5ZSB1bmEgcmVjb3BpbGFjacOzbiBpbnRlZ3JhbCB5IGVzcGVjw61maWNhIGRlIGluZm9ybWFjacOzbiBhZ3LDrWNvbGEgZGUgQ29sb21iaWEsIGxvIHF1ZSBwZXJtaXRlIHRyYWJhamFyIGRpcmVjdGFtZW50ZSBjb24gZGF0b3MgcmVsZXZhbnRlcyBwYXJhIGVsIGNvbnRleHRvIG5hY2lvbmFsLiBTdSBlc3RydWN0dXJhIGZhY2lsaXRhIHJlZ3VsYXIgeSBvcmdhbml6YXIgbG9zIGRhdG9zIGRlIGFjdWVyZG8gY29uIGxvcyBjcml0ZXJpb3MgbmVjZXNhcmlvcyBwYXJhIGVzdGUgYW7DoWxpc2lzLCBjb21vIHByb2R1Y2Npw7NuIHBvciBncnVwb3MgZGUgY3VsdGl2b3MsIGVzcGVjaWVzIGFncsOtY29sYXMsIMOhcmVhIGNvc2VjaGFkYSB5IHByb2R1Y2lkYSwgZW50cmUgb3Ryb3MgaW5kaWNhZG9yZXMgY2xhdmUuDQoNCkFkZW3DoXMsIGFsIHRyYXRhcnNlIGRlIHVuYSBiYXNlIGRlIGRhdG9zIGRlIGFjY2VzbyBsaWJyZSBhbCBww7pibGljbywgc2UgY29udmllcnRlIGVuIHVuYSBoZXJyYW1pZW50YSBzdW1hbWVudGUgdmFsaW9zYSBwYXJhIHJlYWxpemFyIGludmVzdGlnYWNpb25lcyB5IHByb3llY3RvcyBlbmZvY2Fkb3MgZW4gdGVtYXMgYWdyb27Ds21pY29zIG8gYWdyb3BlY3Vhcmlvcy4gU3UgZGlzcG9uaWJpbGlkYWQgZm9tZW50YSBsYSB0cmFuc3BhcmVuY2lhIHkgZWwgYWNjZXNvIGVxdWl0YXRpdm8gYSBpbmZvcm1hY2nDs24gZGUgZ3JhbiByZWxldmFuY2lhLg0KDQpGaW5hbG1lbnRlLCBlbCB1c28gZGUgUiBjb21vIGhlcnJhbWllbnRhIHByaW5jaXBhbCBwYXJhIGxhIG1hbmlwdWxhY2nDs24geSBhbsOhbGlzaXMgZGUgZGF0b3MgcHJvcG9yY2lvbmEgdW4gZW5mb3F1ZSBlZmljaWVudGUgeSByZXByb2R1Y2libGUsIHBlcm1pdGllbmRvIHRyYW5zZm9ybWFyIGVzdGEgaW5mb3JtYWNpw7NuIGVuIHRhYmxhcyB5IGdyw6FmaWNhcyBpbmZvcm1hdGl2YXMgcXVlIGZhY2lsaXRhbiB1bmEgY29tcHJlbnNpw7NuIG3DoXMgcHJvZnVuZGEgZGVsIGNvbXBvcnRhbWllbnRvIGFncsOtY29sYSBlbiByZWdpb25lcyBjb21vIGVsIFB1dHVtYXlvLg0KDQojIyAzLiBMZWN0dXJhIGRlIGxhIGJhc2UgZGUgZGF0b3MgRVZBDQpgYGB7cn0NCihldmEgPSByZWFkX2NzdigiQzovVXNlcnMvZ3V0aWUvTXVzaWMvRXZhbHVhY2lvbmVzX0Fncm9wZWN1YXJpYXNfTXVuaWNpcGFsZXNfRVZBLmNzdiIsIGNvbF9uYW1lcyA9IFRSVUUsc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkpDQpgYGANCg0KTGEgdGFibGEgb2J0ZW5pZGEgZGUgbGEgYmFzZSBkZSBkYXRvcyBpbmNsdXllIGluZm9ybWFjacOzbiBjbGF2ZSBjb21vIGVsIGPDs2RpZ28gZGVsIG11bmljaXBpbywgZWwgbm9tYnJlIGRlbCBkZXBhcnRhbWVudG8sIGVsIG5vbWJyZSBkZSBsb3MgbXVuaWNpcGlvcywgZWwgZ3J1cG8geSBzdWJncnVwbyBkZSBjdWx0aXZvLCBlbCB0aXBvIGRlIGN1bHRpdm8sIGxhIGRlc2FncmVnYWNpw7NuIHJlZ2lvbmFsIHkvbyBzaXN0ZW1hIHByb2R1Y3Rpdm8sIGFzw60gY29tbyBkYXRvcyBlc3BlY8OtZmljb3MgcmVsYWNpb25hZG9zIGNvbiBlbCBhw7FvLCBlbCBwZXJpb2RvLCBlbCDDoXJlYSBzZW1icmFkYSB5IGNvc2VjaGFkYSAoZW4gaGVjdMOhcmVhcyksIGxhIHByb2R1Y2Npw7NuIChlbiB0b25lbGFkYXMpLCBlbCByZW5kaW1pZW50byAoZW4gdG9uZWxhZGFzIHBvciBoZWN0w6FyZWEpIHkgZWwgZXN0YWRvIGbDrXNpY28gZGUgbGEgcHJvZHVjY2nDs24uIEVzdG9zIGNyaXRlcmlvcyBzb24gZnVuZGFtZW50YWxlcyBwYXJhIGVsIGVzdHVkaW8geSBhbsOhbGlzaXMgZGVsIHNlY3RvciBhZ3LDrWNvbGEsIHlhIHF1ZSBwZXJtaXRlbiB1bmEgdmlzacOzbiBkZXRhbGxhZGEgZGUgbGEgZGlzdHJpYnVjacOzbiB5IGRlc2VtcGXDsW8gZGUgbG9zIGN1bHRpdm9zIGVuIGRpZmVyZW50ZXMgcmVnaW9uZXMuIA0KDQpGYWNpbGl0YW4gbGEgaWRlbnRpZmljYWNpw7NuIGRlIHBhdHJvbmVzIHByb2R1Y3Rpdm9zLCBsYSBldmFsdWFjacOzbiBkZWwgcmVuZGltaWVudG8gYWdyw61jb2xhIHkgZWwgaW1wYWN0byBkZSB2YXJpYWJsZXMgZ2VvZ3LDoWZpY2FzIHkgY2xpbcOhdGljYXMgZW4gbGEgcHJvZHVjY2nDs24uIEFkZW3DoXMsIGVzdGEgaW5mb3JtYWNpw7NuIHJlc3VsdGEgZXNlbmNpYWwgcGFyYSBsYSBwbGFuaWZpY2FjacOzbiBlc3RyYXTDqWdpY2EsIGxhIGZvcm11bGFjacOzbiBkZSBwb2zDrXRpY2FzIHDDumJsaWNhcywgbGEgb3B0aW1pemFjacOzbiBkZSByZWN1cnNvcyB5IGVsIGRpc2XDsW8gZGUgc2lzdGVtYXMgcHJvZHVjdGl2b3Mgc29zdGVuaWJsZXMgYWRhcHRhZG9zIGEgbGFzIGNhcmFjdGVyw61zdGljYXMgZXNwZWPDrWZpY2FzIGRlIGNhZGEgcmVnacOzbi4NCg0KIyMgNC4gTGltcGllemEgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGRlIEVWQQ0KDQpgYGB7cn0NCm5hbWVzKGV2YSkNCmBgYA0KYGBge3J9DQpldmEudG1wDQpgYGANCg0KDQpgYGB7cn0NCmV2YS50bXAgJT4lICBkcGx5cjo6cmVuYW1lKCdDb2RfTXVuJyA9ICdDw5NELiBNVU4uJywnR3J1cG8nID0gJ0dSVVBPIFxuREUgQ1VMVElWTycsJ1N1YmdydXBvJyA9ICdTVUJHUlVQTyBcbkRFIENVTFRJVk8nLCAnWWVhcicgPSAnQcORTycsJ0FyZWFTZW1icmFkYScgPSAnw4FyZWEgU2VtYnJhZGFcbihoYSknLCdBcmVhQ29zZWNoYWRhJyA9ICfDgXJlYSBTZW1icmFkYVxuKGhhKScsJ1Byb2R1Y2Npb24nID0nUHJvZHVjY2nDs25cbih0KScsJ1JlbmRpbWllbnRvJyA9ICAnUmVuZGltaWVudG9cbih0L2hhKScsJ1Npc3RlbWEnID0gJ0RFU0FHUkVHQUNJw5NOIFJFR0lPTkFMIFkvTyBTSVNURU1BIFBST0RVQ1RJVk8nLCdFc3RhZG8nID0gJ0VTVEFETyBGSVNJQ08gUFJPRFVDQ0lPTicpIC0+IG5ld19ldmENCmBgYA0KDQpgYGB7cn0NCm5ld19ldmENCmBgYA0KDQojIyA0LiBBbsOhbGlzaXMgZGUgbGEgYmFzZSBkZSBkYXRvcyBFVkEsIHBhcmEgZWwgZGVwYXJ0YW1lbnRvIGRlbCBQdXR1bWF5bw0KDQpMYSB0YWJsYSBkZSBkYXRvcyBub3MgcGVybWl0ZSByZWNvbm9jZXIgbGEgdmFyaWFiaWxpZGFkIGRlIGxvcyBncnVwb3MgZGUgY3VsdGl2b3MgbWF5b3JtZW50ZSBjdWx0aXZhZG9zIGVuIGVsIGRlcGFydGFtZW50byBkZWwgUHV0dW1heW8sIGVudHJlIGxvcyBxdWUgc2UgZW5jdWVudHJhbiBjZXJlYWxlcywgZnJ1dGFsZXMsIGxlZ3VtaW5vc2FzLCBob3J0YWxpemFzLCBmb3Jlc3RhbGVzLCB0dWLDqXJjdWxvcyB5IHBsw6F0YW5vcywgb2xlYWdpbm9zYXMsIGZsb3JlcyB5IGZvbGxhamVzLiBFc3RhIGRpdmVyc2lkYWQgYWdyw61jb2xhIHNlIGRlYmUgcHJpbmNpcGFsbWVudGUgYSBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBjbGltw6F0aWNhcyB5IGVkw6FmaWNhcyBkZSBsYSByZWdpw7NuLiBFbCBQdXR1bWF5byBjdWVudGEgY29uIHVuIGNsaW1hIGPDoWxpZG8taMO6bWVkbyB0cm9waWNhbCB5IHVuYSBhYnVuZGFudGUgcHJlY2lwaXRhY2nDs24gYW51YWwsIGNvbmRpY2lvbmVzIGlkZWFsZXMgcGFyYSBlbCBjdWx0aXZvIGRlIHBsw6F0YW5vLCB5dWNhIHkgb3Ryb3MgdHViw6lyY3Vsb3MgcXVlIHJlcXVpZXJlbiBzdWVsb3Mgcmljb3MgZW4gbWF0ZXJpYSBvcmfDoW5pY2EgeSBiaWVuIGRyZW5hZG9zIChVbml2ZXJzaWRhZCBUZWNub2xvZ8OtY2EgZGUgUGVyZWlyYSwgMjAyMykuIEFzaW1pc21vLCBzdWVsb3MgYWx1dmlhbGVzIHkgZGUgYWx0YSBmZXJ0aWxpZGFkIGZhdm9yZWNlbiBlbCBkZXNhcnJvbGxvIGRlIGN1bHRpdm9zIGNvbW8gZnJ1dGFsZXMgdHJvcGljYWxlcyB5IG9sZWFnaW5vc2FzLCBtaWVudHJhcyBxdWUgbGFzIHRlbXBlcmF0dXJhcyBjb25zdGFudGVzIHkgbGEgYWx0YSBodW1lZGFkIHNvbiBpZGVhbGVzIHBhcmEgZWwgY3JlY2ltaWVudG8gZGUgZmxvcmVzIHkgZm9sbGFqZXMgZGUgZXhwb3J0YWNpw7NuIChNaW5pc3RlcmlvIGRlIEFncmljdWx0dXJhLCAyMDIwKS4NCg0KRWwgdXNvIGRlIGVzdGEgaW5mb3JtYWNpw7NuIHBlcm1pdGUgaWRlbnRpZmljYXIgbGFzIHZlbnRhamFzIHByb2R1Y3RpdmFzIGRlIGxhIHJlZ2nDs24geSBmb21lbnRhciBwcsOhY3RpY2FzIGFncsOtY29sYXMgc29zdGVuaWJsZXMgcXVlIG1heGltaWNlbiBlbCByZW5kaW1pZW50byBkZSBsb3MgY3VsdGl2b3MgdHJhZGljaW9uYWxlcywgYWwgdGllbXBvIHF1ZSBzZSBleHBsb3JhbiBudWV2YXMgb3BvcnR1bmlkYWRlcyBwYXJhIGRpdmVyc2lmaWNhciBsYSBvZmVydGEgYWdyw61jb2xhLCBmb3J0YWxlY2llbmRvIGxhIGVjb25vbcOtYSBsb2NhbC4gRXN0ZSBhbsOhbGlzaXMgZGV0YWxsYWRvIGFwb3lhIGxhIHRvbWEgZGUgZGVjaXNpb25lcyBlc3RyYXTDqWdpY2FzIGVuIGVsIHNlY3RvciBhZ3LDrWNvbGEsIGRlc2RlIHBvbMOtdGljYXMgcMO6YmxpY2FzIGhhc3RhIGludmVyc2lvbmVzIHByaXZhZGFzLg0KDQoNCiMjIDQuMS4gTG9zIGN1bHRpdm9zIG3DoXMgaW1wb3J0YW50ZXMgZW50cmUgMjAwNyB5IDIwMTgNCg0KYGBge3J9DQpuZXdfZXZhICU+JQ0KICAjI2ZpbHRlcihQcm9kdWNjaW9uID4gMCkgJT4lDQogIGdyb3VwX2J5KEdydXBvKSAlPiUNCiAgc3VtbWFyaXplKHRvdGFsX3Byb2R1Y2Npb24gPSBzdW0oUHJvZHVjY2lvbikpICU+JSANCiAgYXJyYW5nZShkZXNjKHRvdGFsX3Byb2R1Y2Npb24pKSANCmBgYA0KDQpgYGB7cn0NCm5ld19ldmEgJT4lDQogIGdyb3VwX2J5KEdydXBvKSAlPiUNCiAgc3VtbWFyaXplKHRvdGFsX3Byb2R1Y2Npb24gPSBzdW0oUHJvZHVjY2lvbikpIC0+IFBUIA0KYGBgDQoNCmBgYHtyfQ0KUFQgJT4lIA0KICBmaWx0ZXIodG90YWxfcHJvZHVjY2lvbiA+IDEwMDApIC0+IG1haW4uZ3JvdXBzDQpgYGANCg0KIyBSZXN1bHRhZG8gZGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuIGVuIGVsIFB1dHVtYXlvIA0KDQpFbCB2YWxvciB0b3RhbCBkZSBsYSBwcm9kdWNjacOzbiBlbiBlbCBkZXBhcnRhbWVudG8gZGVsIFB1dHVtYXlvLCBjb3JyZXNwb25kaWVudGUgYSBsYSBjaWZyYSBkZSAxLDE3Nyw3MTcsIHJlZmxlamEgZWwgdm9sdW1lbiB0b3RhbCBkZSBsYSBwcm9kdWNjacOzbiBhZ3LDrWNvbGEgcmVnaXN0cmFkbyBwYXJhIGxhIHJlZ2nDs24gZHVyYW50ZSBlbCBwZXLDrW9kbyBhbmFsaXphZG8uIEVzdGUgZGF0byBlcyBjbGF2ZSBwYXJhIGV2YWx1YXIgZWwgZGVzZW1wZcOxbyB5IGxhIHByb2R1Y3RpdmlkYWQgZGUgbG9zIGN1bHRpdm9zIGVuIFB1dHVtYXlvLCBwcm9wb3JjaW9uYW5kbyB1bmEgYmFzZSBzw7NsaWRhIHBhcmEgZWwgYW7DoWxpc2lzIHkgbGEgdG9tYSBkZSBkZWNpc2lvbmVzIHNvYnJlIGVsIHNlY3RvciBhZ3LDrWNvbGEgZW4gbGEgcmVnacOzbi4NCmBgYHtyfQ0KKHZhbHVlID0gc3VtKG1haW4uZ3JvdXBzJHRvdGFsX3Byb2R1Y2Npb24pKQ0KYGBgDQpgYGB7cn0NCm1haW4uZ3JvdXBzJHBlcmNlbnQgPSBtYWluLmdyb3VwcyR0b3RhbF9wcm9kdWNjaW9uL3ZhbHVlDQpgYGANCg0KIyBHcsOhZmljbyBhY2VyY2EgZGVsIHBvcmNlbnRhamUgZW50cmUgZ3J1cG8geSBwcm9kdWNjacOzbiBlbiBlbCBQdXR1bWF5bw0KYGBge3J9DQojIEJhcnBsb3QNCmJwPC0gZ2dwbG90KG1haW4uZ3JvdXBzLCBhZXMoeD0iIiwgeT1wZXJjZW50LCBmaWxsPUdydXBvKSkrDQpnZW9tX2Jhcih3aWR0aCA9IDEsIHN0YXQgPSAiaWRlbnRpdHkiKQ0KIyBQaWVjaGFydA0KcGllIDwtIGJwICsgY29vcmRfcG9sYXIoInkiLCBzdGFydD0wKQ0KcGllDQpgYGANCg0KRWwgZ3LDoWZpY28gY2lyY3VsYXIgZXZpZGVuY2lhIGxhIHByZWRvbWluYW5jaWEgZGUgbG9zIHR1YsOpcmN1bG9zIHkgcGzDoXRhbm9zIGVuIGxhIGFncmljdWx0dXJhIGRlbCBQdXR1bWF5bywgb2N1cGFuZG8gbGEgbWl0YWQgZGUgbGEgcHJvZHVjY2nDs24gdG90YWwuIEVzdGEgY29uY2VudHJhY2nDs24gc2UgZXhwbGljYSBwb3IgbGFzIGNvbmRpY2lvbmVzIGFncm9jbGltw6F0aWNhcyBmYXZvcmFibGVzIHkgbGEgYXJyYWlnYWRhIHRyYWRpY2nDs24gYWdyw61jb2xhLiBTaSBiaWVuIGVzdG9zIGN1bHRpdm9zIHNvbiBmdW5kYW1lbnRhbGVzLCBlbCBncsOhZmljbyB0YW1iacOpbiByZXZlbGEgdW5hIGRpdmVyc2lkYWQgcHJvZHVjdGl2YSwgaW5jbHV5ZW5kbyBjZXJlYWxlcywgZm9yZXN0YWxlcywgZnJ1dGFsZXMsIGhvcnRhbGl6YXMsIGxlZ3VtaW5vc2FzLCBvbGVhZ2lub3Nhcywgb3RyYXMgcGVybWFuZW50ZXMgeSBwbGFudGFzIGFyb23DoXRpY2FzLiBFc3RhIHZhcmllZGFkIHJlc3BvbmRlIGEgbGFzIG5lY2VzaWRhZGVzIGFsaW1lbnRhcmlhcyB5IGVjb27Ds21pY2FzIGRlIGxhIHJlZ2nDs24sIGF1bnF1ZSBsYSBwcm9wb3JjacOzbiBkZSBjYWRhIGdydXBvIHN1Z2llcmUgw6FyZWFzIGRlIG9wb3J0dW5pZGFkIHBhcmEgbGEgZGl2ZXJzaWZpY2FjacOzbiB5IGVsIGRlc2Fycm9sbG8gYWdyw61jb2xhLg0KDQoNCmBgYHtyfQ0KbmV3X2V2YSAlPiUNCiAgZ3JvdXBfYnkoR3J1cG8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZSh0b3RhbF9wcm9kID0gc3VtKFByb2R1Y2Npb24sIG5hLnJtID0gVFJVRSkpICU+JQ0KICBzbGljZSh3aGljaC5tYXgodG90YWxfcHJvZCkpICAlPiUNCiAgYXJyYW5nZShkZXNjKHRvdGFsX3Byb2QpKQ0KYGBgDQoNCmBgYHtyfQ0KbmV3X2V2YSAlPiUNCiAgZ3JvdXBfYnkoR3J1cG8sIE1VTklDSVBJTykgJT4lDQogIHN1bW1hcml6ZSh0b3RhbF9wcm9kID0gc3VtKFByb2R1Y2Npb24sIG5hLnJtID0gVFJVRSkpICU+JQ0KICBzbGljZSh3aGljaC5tYXgodG90YWxfcHJvZCkpICAtPiBsZWFkZXJzDQpgYGANCg0KYGBge3J9DQpsZWFkZXJzDQpgYGANCg0KYGBge3J9DQpsZWFkZXJzICU+JSANCiAgZmlsdGVyKHRvdGFsX3Byb2QgPiA1MCkgLT4gbWFpbi5sZWFkZXJzDQpgYGANCg0KIyBHcsOhZmljbyBhY2VyY2EgZGUgbGEgcHJvZHVjY2nDs24gZW4gbXVuaWNpcGlvcyBkZWwgUHV0dW1heW8gDQpgYGB7cn0NCiMgQmFzaWMgYmFycGxvdA0KcDwtZ2dwbG90KGRhdGE9bWFpbi5sZWFkZXJzLCBhZXMoeD1NVU5JQ0lQSU8sIHk9dG90YWxfcHJvZCkpICsNCiAgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKQ0KcA0KYGBgDQoNCkVsIHByZXNlbnRlIGdyw6FmaWNvIGV2aWRlbmNpYSB1bmEgbWFyY2FkYSBkaXNwYXJpZGFkIGVuIGxhIHByb2R1Y2Npw7NuIHRvdGFsIGVudHJlIGxvcyBtdW5pY2lwaW9zIGRlbCBQdXR1bWF5bywgY29uIFB1ZXJ0byBHdXptw6FuIGRlc3RhY2FuZG8gY29tbyBlbCBwcmluY2lwYWwgcHJvZHVjdG9yLiBFc3RhIGNvbmNlbnRyYWNpw7NuIHBvZHLDrWEgYXRyaWJ1aXJzZSBhIGRpdmVyc29zIGZhY3RvcmVzIGNvbW8gY29uZGljaW9uZXMgYWdyb2NsaW3DoXRpY2FzIG3DoXMgZmF2b3JhYmxlcywgbWF5b3IgaW52ZXJzacOzbiBlbiBpbmZyYWVzdHJ1Y3R1cmEsIHRpcG8gZGUgY3VsdGl2b3MgcHJlZG9taW5hbnRlcywgdGFtYcOxbyBkZSBsYXMgZXhwbG90YWNpb25lcyBvIHBvbMOtdGljYXMgcMO6YmxpY2FzIHF1ZSBmYXZvcmVjZW4gZGV0ZXJtaW5hZGFzIHpvbmFzLiBPcml0bywgYXVucXVlIGVuIG1lbm9yIG1lZGlkYSwgdGFtYmnDqW4gcHJlc2VudGEgdW4gbml2ZWwgZGUgcHJvZHVjY2nDs24gY29uc2lkZXJhYmxlLiBFbiBjb250cmFzdGUsIE1vY29hLCBQdWVydG8gQ2FpY2VkbywgU2lidW5kb3kgeSBWYWxsZSBkZWwgR3VhbXVleiBtdWVzdHJhbiBjaWZyYXMgZGUgcHJvZHVjY2nDs24gc2lnbmlmaWNhdGl2YW1lbnRlIG1lbm9yZXMuIEVzdGEgZGlzcGFyaWRhZCBzdWdpZXJlIGxhIG5lY2VzaWRhZCBkZSBhbmFsaXphciBhIGZvbmRvIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGVzcGVjw61maWNhcyBkZSBjYWRhIG11bmljaXBpbywgaW5jbHV5ZW5kbyBhc3BlY3RvcyBjb21vIGxhIGNhbGlkYWQgZGUgbG9zIHN1ZWxvcywgZWwgYWNjZXNvIGEgbWVyY2Fkb3MsIGxhcyBwb2zDrXRpY2FzIGRlIGFwb3lvIGFsIHNlY3RvciBhZ3LDrWNvbGEgeSBsb3MgZGVzYWbDrW9zIHF1ZSBlbmZyZW50YW4gbG9zIHByb2R1Y3RvcmVzIGxvY2FsZXMuIFVuIGFuw6FsaXNpcyBtw6FzIGRldGFsbGFkbyBwZXJtaXRpcsOtYSBpZGVudGlmaWNhciBsYXMgY2F1c2FzIGRlIGVzdGFzIGRpZmVyZW5jaWFzIHkgZGlzZcOxYXIgZXN0cmF0ZWdpYXMgcGFyYSBwcm9tb3ZlciB1biBkZXNhcnJvbGxvIGFncsOtY29sYSBtw6FzIGVxdWl0YXRpdm8geSBzb3N0ZW5pYmxlIGVuIHRvZGEgbGEgcmVnacOzbi4NCg0KDQojIyA0LjIuIERpbsOhbWljYSBkZWwgY3VsdGl2byBjb24gbWF5b3IgcHJvZHVjY2nDs24gZW4gZWwgUHV0dW1heW8gZW50cmUgMjAwNyB5IDIwMTgNCg0KYGBge3J9DQpldmEgJT4lIA0KICBmaWx0ZXIoTVVOSUNJUElPPT0iUFVFUlRPIEdVWk1BTiIgJiBDVUxUSVZPPT0iUExBVEFOTyIpICU+JSANCiAgZ3JvdXBfYnkoQcORTywgQ1VMVElWTykgJT4lDQogIHNlbGVjdChNVU5JQ0lQSU8sIENVTFRJVk8sIGBQcm9kdWNjacOzbg0KKHQpYCwgQcORTykgLT4gIHB1ZXJ0b2d1em1hbl9wbGF0YW5vDQpgYGANCg0KYGBge3J9DQpwdWVydG9ndXptYW5fcGxhdGFubw0KYGBgDQoNCmBgYHtyfQ0KZyA8LSBnZ3Bsb3QoYWVzKHg9QcORTywgeT0gYFByb2R1Y2Npw7NuDQoodClgLzEwMDApLCBkYXRhID0gcHVlcnRvZ3V6bWFuX3BsYXRhbm8pICsgZ2VvbV9iYXIoc3RhdD0naWRlbnRpdHknKSArIGxhYnMoeT0nUHJvZHVjY2lvbiBkZSBQbGF0YW5vIFtUb24geCAxMDAwXScpDQpgYGANCg0KIyBHcsOhZmljbyBhY2VyY2EgZGUgbGEgZXZvbHVjacOzbiBkZSBsYSBwcm9kdWNjacOzbiBkZSBwbGF0YW5vIGVuIFB1ZXJ0byBHdXptYW4gZGVzZGUgMjAwNyBoYXN0YSAyMDE4DQpgYGB7cn0NCmcgKyBnZ3RpdGxlKCJFdm9sdWNpb24gZGUgbGEgUHJvZHVjY2lvbiBkZSBwbGF0YW5vIGVuIFB1ZXJ0byBHdXptYW4gZGVzZGUgMjAwNyBoYXN0YSAyMDE4IikgKyBsYWJzKGNhcHRpb249ICJCYXNlZCBvbiBFVkEgZGF0YSAoTWluYWdyaWN1bHR1cmEsIDIwMjApIikNCmBgYA0KDQpFbCBncsOhZmljbyBkZSBsYSBwcm9kdWNjacOzbiBkZSBwbMOhdGFubyBlbiBQdWVydG8gR3V6bcOhbiBlbnRyZSAyMDA3IHkgMjAxOCByZXZlbGEgdW5hIHRlbmRlbmNpYSBpbnRlcmVzYW50ZS4gSW5pY2lhbG1lbnRlLCBlbnRyZSAyMDA3IHkgMjAxMCwgc2Ugb2JzZXJ2YSB1biBjcmVjaW1pZW50byBzb3N0ZW5pZG8gZW4gbGEgcHJvZHVjY2nDs24sIGFsY2FuemFuZG8gdW4gcGljbyBtw6F4aW1vIGFscmVkZWRvciBkZSAyMDEwLiBTaW4gZW1iYXJnbywgYSBwYXJ0aXIgZGUgZXN0ZSBwdW50bywgbGEgcHJvZHVjY2nDs24gc2UgZXN0YWJpbGl6YSwgZmx1Y3R1YW5kbyBsZXZlbWVudGUgZW4gdG9ybm8gYSB1biB2YWxvciBwcm9tZWRpby4gSGFjaWEgZWwgZmluYWwgZGVsIHBlcsOtb2RvIGFuYWxpemFkbywgZW50cmUgMjAxNyB5IDIwMTgsIHNlIGFwcmVjaWEgdW5hIGxpZ2VyYSBkaXNtaW51Y2nDs24gZW4gbGEgcHJvZHVjY2nDs24sIGF1bnF1ZSBzZSBtYW50aWVuZSBlbiBuaXZlbGVzIHJlbGF0aXZhbWVudGUgYWx0b3MuIEVzdGEgZXZvbHVjacOzbiBwb2Ryw61hIGV4cGxpY2Fyc2UgcG9yIGRpdmVyc29zIGZhY3RvcmVzLCBjb21vIGxhIG1hZHVyZXogZGVsIGN1bHRpdm8sIGxhcyBjb25kaWNpb25lcyBjbGltw6F0aWNhcywgbGEgZGluw6FtaWNhIGRlbCBtZXJjYWRvIHkgbG9zIGNhbWJpb3MgZW4gbGFzIHByw6FjdGljYXMgYWdyw61jb2xhcy4gTGEgZXN0YWJpbGlkYWQgZ2VuZXJhbCBkZSBsYSBwcm9kdWNjacOzbiBzdWdpZXJlIHF1ZSBlbCBjdWx0aXZvIGRlIHBsw6F0YW5vIHNlIGhhIGNvbnNvbGlkYWRvIGNvbW8gdW5hIGFjdGl2aWRhZCBlY29uw7NtaWNhIGltcG9ydGFudGUgZW4gUHVlcnRvIEd1em3DoW4sIGF1bnF1ZSBsYXMgZmx1Y3R1YWNpb25lcyBhbnVhbGVzIHkgbGEgcmVjaWVudGUgZGlzbWludWNpw7NuIGluZGljYW4gbGEgbmVjZXNpZGFkIGRlIHVuIG1vbml0b3JlbyBjb250aW51byB5IGxhIGltcGxlbWVudGFjacOzbiBkZSBlc3RyYXRlZ2lhcyBwYXJhIGdhcmFudGl6YXIgc3Ugc29zdGVuaWJpbGlkYWQgYSBsYXJnbyBwbGF6by4NCg0KIyMgNS4gQmlibGlvZ3LDoWZpYQ0KDQpMaXphcmF6bywgSS4sIDIwMjIuIEVudGVuZGllbmRvIGxhIHByb2R1Y3RpdmlkYWQgZGluw6FtaWNhIGRlIGxvcyBjdWx0aXZvcy4gRGlzcG9uaWJsZSBlbiBodHRwczovL3JwdWJzLmNvbS9pYWxzMnVuL3Byb2R1Y3Rpb25fZHluX3YxLg0KDQpNaW5pc3RlcmlvIGRlIGFncmljdWx0dXJhLCAyMDIwLiBQbGFuIGRlcGFydGFtZW50YWwgZGUgZXh0ZW5zacOzbiBhZ3JvcGVjdWFyaWEgZGVwYXJ0YW1lbnRvIGRlIFB1dHVtYXlvLiBHb2Jlcm5hY2nDs24gcHV0dW1heW8uIERpc3BvbmlibGUgZW4NCmh0dHBzOi8vcmVwb3NpdG9yeS5hZ3Jvc2F2aWEuY28vaGFuZGxlLzIwLjUwMC4xMjMyNC8zNzEzNg0KDQpVbml2ZXJzaWRhZCB0ZWNub2xvZ8OtY2EgZGUgUGVyZWlyYSwgMjAyMy4gUHJhY3TDrWNhcyBhZ3JvZWNvbMOzZ2ljYXMgcGFyYSBzdWVsb3MgcmVzaXN0ZW50ZXMuIERpc3BvbmlibGUgZW4NCmh0dHBzOi8vZXBzZWF3ZWIudXRwLmVkdS5jby93cC1jb250ZW50L3VwbG9hZHMvMjAyNC8wMi9QdXR1bWF5by1zdWVsb3MtcmVzaXN0ZW50ZXMucGRmDQoNCmBgYHtyfQ0Kc2Vzc2lvbkluZm8oKQ0KYGBgDQoNCg==