Honeybees and Neonic Pesticides
Creador del dataset: Kevin Zmith
Fecha de publicación: Mayo de 2018
Este conjunto de datos está inspirado en la Producción de miel de abeja en los Estados Unidos de América, extendido hasta el período 1998-2017. Además, está la unión con el Proyecto de Síntesis Nacional de Pesticidas de USGS, que permite la evaluación de las conexiones estadísticas entre la Producción de Miel y el uso de pesticidas neonicotinoides (neónicos).
Los neonicotinoides son una familia de insecticidas que actúan en el sistema nervioso central de los insectos y, con menor toxicidad, en vertebrados (aves y mamíferos). Los neonicotinoides están entre los insecticidas más usados a nivel mundial.
Y ya se han comprobado sus afecciones en especies como abejas y algunas aves, por eso el interés en enalizar este conjunto de datos y observar el comportamiento de la producción apícola a través de los años mientras el uso de este tipo de insecticidas ha ido aumentando.
Hipótesis: Los insecticidas neonicotinoides están fuertemente ligados al colapso de colonias apícolas.
Objetivos:
1.Observar la relación que tiene el uso de insecticidas de este tipo con la desaparición de abejas.
2.Verificar la relación que existe entre los años en que se comenzó a utilizar este tipo de insecticidas con la desaparición de colonias apícolas.
3.Establacer una relación entre el costo de la producción apícola con el descenso en colonias apícolas y su producción, resultado del uso exponencial de insecticidas neónicos.
Explicación del dataset
El dataset está conformado por 1132 observaciones cada una con 17 atributos sobre el uso de pesticidas neónicos y la relación con la producción de miel de abeja en cada estado del país estadounidense.
Los atributos son los siguientes:
state: apreviatura del estado de los Estados Unidos donde se realizó la observación.
numcol: número de colonias productoras de miel. Las colonias productoras de miel son el número máximo de colonias de las cuales se extrajo miel durante el año. Es posible tomar miel de colonias que no sobrevivieron todo el año.
yieldpercol: rendimiento de miel por colonia en libras.
totalprod: producción total (numcol x yieldpercol) en libras.
stocks: se refiere a las existencias en poder de los productores en libras.
priceperlb: se refiere al precio promedio por libra basado en las ventas expandidas. La unidad es en dólares.
prodvalue: valor de producción (totalprod x priceperlb). La unidad es en dólares.
year: año en que se tomó la observación.
StateName: nombre del estado del país estadounidense.
Region: región del país.
De los datos de USGS:
nCLOTHIANIDIN: la cantidad en kg de CLOTHIANIDIN aplicada.
nIMIDACLOPRID: la cantidad en kg de IMIDACLOPRID aplicada.
nTHIAMETHOXAM: la cantidad en kg de THIAMETHOXAM aplicada.
nACETAMIPRID: la cantidad en kg de ACETAMIPRID aplicada.
nTHIACLOPRID: la cantidad en kg de THIACLOPRID aplicada.
nAllNeonic: la cantidad en kg de todos los neónicos aplicados = (nCLOTHIANIDIN + nIMIDACLOPRID + nTHIAMETHOXAM + nACETAMIPRID + nTHIACLOPRID).
Tipo de datos en cada columna
'data.frame': 1132 obs. of 17 variables:
$ state : Factor w/ 44 levels "AL","AR","AZ",..: 1 1 1 1 1 1 1 1 1 1 ...
$ numcol : num 14000 15000 16000 18000 19000 23000 25000 11000 11000 12000 ...
$ yieldpercol : int 66 64 58 50 45 24 41 56 72 86 ...
$ totalprod : num 924000 960000 928000 900000 855000 ...
$ stocks : num 92000 96000 28000 99000 103000 66000 113000 209000 230000 103000 ...
$ priceperlb : num 0.81 0.87 0.69 0.52 0.59 0.63 0.59 1.49 1.21 1.18 ...
$ prodvalue : num 748000 835000 640000 468000 504000 ...
$ year : int 1997 1996 1995 1994 1993 1991 1992 2007 2006 2002 ...
$ StateName : Factor w/ 44 levels "Alabama","Arizona",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Region : Factor w/ 4 levels "Midwest","Northeast",..: 3 3 3 3 3 3 3 3 3 3 ...
$ FIPS : int 1 1 1 1 1 1 1 1 1 1 ...
$ nCLOTHIANIDIN: num 0 0 0 NA NA ...
$ nIMIDACLOPRID: num 6705 372 716 NA NA ...
$ nTHIAMETHOXAM: num 0 0 0 NA NA ...
$ nACETAMIPRID : num 0 0 0 NA NA NA NA 0 0 0 ...
$ nTHIACLOPRID : num 0 0 0 NA NA NA NA 0 0 0 ...
$ nAllNeonic : num 6705 372 716 NA NA ...
Reducción del dataset, se eliminan las observaciones incompletas que tienen en alguno de los atributos un NA.
Observamos la cantidad de valor faltantes en cada una de las columnas del dataset, que reultan ser los datos acerca del uso de insecticidas, para evitar que los datos jueguen en nuestra contra, se pueden realizar diferentes técnicas, una es reemplazar esos datos con el promedio de la columna u otra opción es quitar esas observaciones para evitar cuqluier desajuste.
Por ahora optaremos por quitar por completo las opservaciones que tengan una característica faltante.
state numcol yieldpercol totalprod stocks priceperlb prodvalue
0 0 0 0 0 0 0
year StateName Region FIPS nCLOTHIANIDIN nIMIDACLOPRID nTHIAMETHOXAM
0 0 0 0 237 237 237
nACETAMIPRID nTHIACLOPRID nAllNeonic
237 237 237

Lo cual reduce el dataset a sólo 895 observaciones con 17 características.
'data.frame': 895 obs. of 17 variables:
$ state : Factor w/ 44 levels "AL","AR","AZ",..: 1 1 1 1 1 1 1 1 1 1 ...
$ numcol : num 14000 15000 16000 11000 11000 12000 12000 13000 13000 14000 ...
$ yieldpercol : int 66 64 58 56 72 86 87 66 82 73 ...
$ totalprod : num 924000 960000 928000 616000 792000 ...
$ stocks : num 92000 96000 28000 209000 230000 103000 282000 266000 43000 235000 ...
$ priceperlb : num 0.81 0.87 0.69 1.49 1.21 1.18 1.41 1.02 1.24 0.72 ...
$ prodvalue : num 748000 835000 640000 918000 958000 ...
$ year : int 1997 1996 1995 2007 2006 2002 2004 2005 2003 2001 ...
$ StateName : Factor w/ 44 levels "Alabama","Arizona",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Region : Factor w/ 4 levels "Midwest","Northeast",..: 3 3 3 3 3 3 3 3 3 3 ...
$ FIPS : int 1 1 1 1 1 1 1 1 1 1 ...
$ nCLOTHIANIDIN: num 0 0 0 7696 680 ...
$ nIMIDACLOPRID: num 6705 372 716 3258 4230 ...
$ nTHIAMETHOXAM: num 0 0 0 4150 5372 ...
$ nACETAMIPRID : num 0 0 0 0 0 0 0 0 0 0 ...
$ nTHIACLOPRID : num 0 0 0 0 0 0 0 0 0 0 ...
$ nAllNeonic : num 6705 372 716 15104 10282 ...
Medidas de Tendencia Central
Por cada atributo se presentas las medidas de tendencia central básicas; mínimo, máximo, primer y tercer cuartil, mediana y promedio de los valores recabados. Entre las cosas a resaltar de este resúmen de métricas son los años en que fueron tomadas las observaciones de 1994 hasta 2016, durante estos años se ha medido por estado el numero de colonias apícolas, su producción y costos así como el uso de los insecticidas neónicos.
El precio por libra de miel de abeja oscila entre los 0.4 dólares hasta 7.09, posteriormente las razones de esto y el cambio a través del tiempo, aunque podemos inferir que el aumento se ha generado a en los últimos años por la situación actual económica global. Sin embargo será interesante ver la relación que tiene el uso de insecticidas neónicos con este aumento en el precio de la miel de abeja.
state numcol yieldpercol totalprod stocks
FL : 23 Min. : 2000 Min. : 19.00 Min. : 84000 Min. : 8000
ID : 23 1st Qu.: 9000 1st Qu.: 47.00 1st Qu.: 476000 1st Qu.: 129000
OR : 23 Median : 28000 Median : 59.00 Median : 1638000 Median : 437000
TX : 23 Mean : 62800 Mean : 60.71 Mean : 4292613 Mean : 1281989
WA : 23 3rd Qu.: 67500 3rd Qu.: 72.00 3rd Qu.: 4352500 3rd Qu.: 1467500
AZ : 22 Max. :510000 Max. :128.00 Max. :46410000 Max. :13800000
(Other):758
priceperlb prodvalue year StateName Region FIPS
Min. :0.470 Min. : 106000 Min. :1994 Florida : 23 Midwest :262 Min. : 1.00
1st Qu.:0.895 1st Qu.: 846500 1st Qu.:2000 Idaho : 23 Northeast:110 1st Qu.:19.00
Median :1.390 Median : 2028000 Median :2005 Oregon : 23 South :290 Median :30.00
Mean :1.568 Mean : 5266421 Mean :2005 Texas : 23 West :233 Mean :30.69
3rd Qu.:1.960 3rd Qu.: 5371500 3rd Qu.:2011 Washington: 23 3rd Qu.:45.00
Max. :7.090 Max. :83859000 Max. :2016 Arizona : 22 Max. :56.00
(Other) :758
nCLOTHIANIDIN nIMIDACLOPRID nTHIAMETHOXAM nACETAMIPRID nTHIACLOPRID
Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0.0 Min. : 0.0
1st Qu.: 0.0 1st Qu.: 617.2 1st Qu.: 0.0 1st Qu.: 0.0 1st Qu.: 0.0
Median : 33.4 Median : 3186.6 Median : 463.2 Median : 0.0 Median : 0.0
Mean : 9260.3 Mean : 8944.1 Mean : 5293.0 Mean : 619.9 Mean : 102.4
3rd Qu.: 4345.1 3rd Qu.: 9373.4 3rd Qu.: 5724.0 3rd Qu.: 202.6 3rd Qu.: 0.0
Max. :278498.8 Max. :150569.3 Max. :64834.6 Max. :36480.3 Max. :4273.2
nAllNeonic
Min. : 0.0
1st Qu.: 923.5
Median : 5151.4
Mean : 24219.8
3rd Qu.: 26130.9
Max. :403011.6
El rendimiento o la producción de miel por colonias apícolas a través del tiempo se ha visto considerablemente afectada, como podemos observar en la gráfica a partir del 2011 la producción disminuyó, siendoel año 2013 el que menor producción ha reportado.

A pesar de que la gráfica del total de producción contra el tiempo no sea tan explicativa por la cantidad de outliers que se muestran, se puede observar claramente que a partir del 2010 el total de producción disminuyó.

Cuando observamos la siguiente gráfica respecto a la anterior nos podemos dar cuenta facilmente de la relación que hay entre el uso de insecticidas respecto a la producción de miel, en los años 2012 a 2014 fueron los años con mayor uso de insecticidas neónicos que coinciden justamente con la gráfica anterior en los años con menor producción de miel, siendo de nuevo el año 2013 el dónde hubo un salto considerable en el uso de insecticidas y la disminución de la produción apícola.

De la misma manera observemos como el precio por libra de miel de abeja a través de los años ha aumentado, siendo igual el año 2013 el que ha tenido un salto considerable en el precio y posteriomente sólo ha continuado a la alza.

Los neonicotinoides son una clase de insecticidas que son químicamente similares a la nicotina, que se ha utilizado como pesticida desde finales de la década de 1700. Los que nos atañen en este reporte son:
- Clothianidin, es un insecticida desarrollado por Takeda Chemical Industries y Bayer AG.
- Imidacloprid, es un tipo de insecticida neuroactivo diseñado a partir de la nicotina fabricado por Bayer AG.
- Tiametoxam es un insecticida sistémico que es absorbido rápidamente y transportado a toda la planta donde actúa como un impedimento a la alimentación de insectos sobre la planta, desarrollado por Syngenta.
- Acetamiprid, se trata de un insecticida inodoro neonicotinoide producida bajo los nombres comerciales Assail, y ’Chipco por Aventis CropSciences.
- Tiacloprid, desarrollado por Bayer CropScience para el control de una variedad de insectos chupadores y masticadores, principalmente pulgones y moscas blancas.
El modo de operación de los neonicotinoides es imitar la acción de neurotransmisor acetilcolina bloqueando los receptores e interrumpiendo la transmisión de impulsos de entre las células nerviosas, es decir, actúan de modo selectivo sobre el sistema nervioso central de los insectos, paralizándolos y provocando su muerte.
Los plaguicidas sistémicos o neonicotinoides son absorbidos por la planta, transportándose a todos los tejidos (hojas, flores, raíces y tallos, así como polen y néctar). Se utilizan cada vez más como un profiláctico con el que tratar suelos o semillas para evitar la plagas en vez de hacer un tratamiento sólo cuando aparece el problema. Son capaces de persistir y acumularse, en particular en el suelo, durante meses o años. Esto aumenta su toxicidad y los hace más perjudiciales para especies a las que no van dirigidos. Estos productos se utilizan en más de 120 países y generan un mercado de 2.600 millones anuales, según cifras de 2011 ofrecidas por el Task Force on Systemic Pesticides.
En la gráfica siguiente se puede observar la cantidad máxima utilizado por estado de cada uno de estos insecticidas, las cantidades se presentan en kilogramos y nos da una idea de la cantidad tremenda que es utilizada en ocasiones por los agricultores estadounidenses.

Correlación
Correlación entre todas las variables numéricas
En esta gráfica de correlación entre las variables numéricas del dataset se puede observar las correlaciones que existen entre ellas.
Las variables con mayor correlación son el total de producción contra el número de colonias apícolas, el total de producción contra la cantidad de stock, el total de producción contra el valor de producción y el precio por libra contra los años. Estas son las correalciones más significativas, pero existe relaciones entre todas las variables del dataset, como se observa en la gráfica.
También podemos ver una correlación negativa entre el precio por libra y el rendimiento por colonia, lo que esto significa es que mientras una aumenta, la otra diminuye. Esto resulta lógico pues a menor producción los precios tienden a elevarse.
Así es como esperábamos encontrar la correlación entre el uso de insecticidas con la producción, se esperaba una corrrelación significativa y negativa, sin embargo por la forma en que están estructurados los datos no encontramos esa característica que nos apoye con las premisas que mencionamos antes sobre los años en que más se utilizaron este tipo de insecticidas y la baja considerable en la producción de miel.

En busca de mejores resultados:
Para tratar de encontrar mejores resultados en la correlación del uso de insecticidas con el precio o la producción de miel, haremos un filtro en el dataset para quitar los años 2014, 2015 y 2016, años en que el uso de estos insecticidas comenzaron a ser investigadosy redujeron su aplicación.
Sin embargo la relación que más nos importaría sería el rendimiento por colonia contra los diferentes tipos de insecticidas neonicotinoides y realmente no podemos observar una correlación significativa, sin embargo es necesario reslatar que aunque sea poca la correlación es una correlación negativa, lo cual significa un decrecimiento.
Otras características que quizás puedan decirnos algo es el precio por libra de miel contra la cantidad de insecticida utilizado, en la que vemos una correlación más significativa que la anterior, aún no muy significativa para comprobar algo, pero debido a que es una correalación positiva nos habla del impacto que tiene el uso de neónicos al elevar el precio de la miel.
En realidad no es mucha la diferencia a la gráfica anterior, pero precisamente eso es lo que queríamos analizar, quitando esos años que cambian el comportamiento y hay un cambio sustancial sirve para encontrar lo que estamos buscando, aunque mejor valores en la producción y precio fueron encontrados.

Aunque la correlación entre el uso de insecticidas y el valor de producción no es significativa, es negativa, lo cual implica que el valor de producción disminuye confome el uso de neónicos aumenta.

Y también es importante observar que el precio por libra aumenta mientras el rendimiento por colonia apícola disminuye, concepto básico de economía, menos producto - mayor demanda - mayor precio.

Precio por libra vs. Cantidad de insecticida neocotinoides
A pesar de ser una correlación no significativa por ser sólo del 0.4, es importante observar como se comporta la gráfica inferior izquierda donde al parecer conforme aumenta el uso de insecticidas aumenta a su vez elprecio por libra de producción de miel.

Ahora si comparamos ambas características respecto a su correalación entre ellas y los años en que fueron tomados los datos obtenemos los siguientes resultados:

Esto siguiendo el filtro de los años desde 1994 hasta 2013, conforme el uso de insecticidas fue aumentando, el precio por libra de miel igualmente fue aumentando el uso de insecticida en los estados norteamericanos.
Correlación entre las variables más relacionads; stocks, prodvalue, numcol, totalprod:
Estas características bien relacionadas nos pueden modelar el comportamiento de las colonias apícolas desde la perspectiva del rendimiento, se podrían utilizar para intentar predecir la producción a futuro o incluso el precio si agregamos un poco más de características.
Sin embargo también es importante notar que la característica que nos define el rendimiento por colonia (yieldpercol) no está correlacionado ni al stock, ni al total de producción, esto quizás se deba a la intervensión de la variable número de colonias apícolas, en el dataset esta características se mantiene casi por los mismos valores pues, a pesar de que las abejas en la colonia hayan dejado de producir miel y/o estén muertas, la colonia apícola sigue contando.

Explicación de correlación con las características totalprod y prodvalue.
La correlación de pearson es la más común y se utiliza para saber que tan relacionadas están dos atributos que describen una población, a través del valor de t, los grados de libertad y el p-value, podemos averigur que tanta confianza tenemos en que una característica nos describa la otra, en este caso tenemos un 95 porciento de intervalo de confianza con una correlación de 0.88, lo cual es buena, ya que tomando en cuenta que los valores de correlación de pearson van desde -1 a 1, siendo 0 el valor de nula correlación entre características.
Usando el coeficiente de determinación \(r^2\) buscamos saber cual es la proporción de la variación total en el valor de la producción que puede ser explicada por el total de producción, \(0.8824146^2=0.7786556\), es decir que el 77.86% del valor de producción está relacionado con el total de producción.
Pearson's product-moment correlation
data: dataset$totalprod and dataset$prodvalue
t = 56.049, df = 893, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.8670196 0.8961265
sample estimates:
cor
0.8824146
Sumado a esto si en algún momento se tiene duda sobre si cumplen con las rigurosas premisas para la aplicación del coeficiente de correlación de Pearson, se debe obtar por una alternativa np paramétrica, a continuación se observa la correlación de spearman entre el precio por libra de miel y el año. Debido a la clasificación por rango de fecha este coeficiente de correlación es más eficiente para conocer la correlación entre estas dos características, igua que el coeficiente de Pearson los valores van de -1 a 1 siendo 0 significado de no correlación.
Cannot compute exact p-value with ties
Spearman's rank correlation rho
data: dataset$priceperlb and dataset$year
S = 21163000, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.8228814
Regresión Múltiple
Como hemos visto en la sección aterior nuestras variables del fenómeno están relacionadas, unas más que otras, pero sí se encuentran relacionados, el análisis de regresión lineal verifica que los atributos sean capaces de y busca como resultado obtener inferencias acerca del fenómeno y con ello econtrar la ecuación de predicción que nos permita encontrar un valor predictorio respeecto al modelo realizado.
Para este ejercicio tomaremos la característica producción total (totalprod) como nuestra variable dependiente (respuesta), pero debido que tenemos diversas variables que la describen usaremos regresión múltiple que permite tomar distintas características independientes que describan la respuesta.
Para ello analizaremos primeramente qué variables son significativas para el modelo de predicción de la producción total de miel de abeja en estadosunidos de américa.
Northeast South West
Midwest 0 0 0
Northeast 1 0 0
South 0 1 0
West 0 0 1
Call:
lm(formula = prodvalue ~ ., data = mydata)
Residuals:
Min 1Q Median 3Q Max
-17935981 -1230836 -42278 1214238 30945825
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -5.258e+08 6.422e+07 -8.188 9.32e-16 ***
numcol 6.083e+01 6.306e+00 9.645 < 2e-16 ***
yieldpercol 1.069e+04 8.727e+03 1.225 0.221048
totalprod 6.299e-01 8.600e-02 7.325 5.41e-13 ***
stocks -8.315e-01 1.122e-01 -7.412 2.93e-13 ***
priceperlb 1.258e+05 2.197e+05 0.572 0.567144
year 2.621e+05 3.220e+04 8.139 1.35e-15 ***
RegionNortheast -2.709e+05 4.401e+05 -0.616 0.538288
RegionSouth -7.751e+05 3.374e+05 -2.297 0.021842 *
RegionWest -1.244e+06 3.591e+05 -3.465 0.000555 ***
nCLOTHIANIDIN 3.384e+00 7.075e+00 0.478 0.632574
nIMIDACLOPRID -5.873e+01 1.240e+01 -4.735 2.55e-06 ***
nTHIAMETHOXAM 6.938e+01 2.127e+01 3.262 0.001149 **
nACETAMIPRID -1.737e+01 6.641e+01 -0.262 0.793701
nTHIACLOPRID 1.373e+01 2.879e+02 0.048 0.961990
nAllNeonic NA NA NA NA
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3362000 on 880 degrees of freedom
Multiple R-squared: 0.8633, Adjusted R-squared: 0.8611
F-statistic: 396.9 on 14 and 880 DF, p-value: < 2.2e-16
Los códigos de significancia dados por la cantidad de asteríscos en cada una de las características nos demuestran que variables sirven para analizar nuestro fenómeno, aunque sean sólo dos de los insecticidas neónicos los que se muestran con mayor significancia no quiere decir que no estén relacionados con el fenómeno, haciendo un análisis previo se puede notar que la presencia de estos dos insecticidas (imidacloprid y thiamethoxam) son los más utilizados al menos en esta observación por loq ue deben ser agregados al modelo que será utilizado.
Northeast South West
Midwest 0 0 0
Northeast 1 0 0
South 0 1 0
West 0 0 1
Call:
lm(formula = prodvalue ~ numcol + totalprod + stocks + year +
nTHIAMETHOXAM + nIMIDACLOPRID, data = mydata)
Residuals:
Min 1Q Median 3Q Max
-18015545 -1295746 -23530 1254557 30420589
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -5.345e+08 4.133e+07 -12.932 < 2e-16 ***
numcol 5.248e+01 5.066e+00 10.359 < 2e-16 ***
totalprod 7.227e-01 6.822e-02 10.594 < 2e-16 ***
stocks -7.450e-01 1.065e-01 -6.997 5.17e-12 ***
year 2.665e+05 2.063e+04 12.918 < 2e-16 ***
nTHIAMETHOXAM 9.579e+01 1.541e+01 6.216 7.82e-10 ***
nIMIDACLOPRID -5.966e+01 1.045e+01 -5.711 1.53e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3383000 on 888 degrees of freedom
Multiple R-squared: 0.8603, Adjusted R-squared: 0.8594
F-statistic: 911.6 on 6 and 888 DF, p-value: < 2.2e-16
Tenemos entonces nuestro modelo con las características más significativas para explicar el comportamiento del total de producción. El valor de \(Multiple R-Squared\) nos indica cuál es el porcentaje de ajuste de los datos a la linea de regresión lineal, en nuestro caso es el 86%, es decir, el 86% de los datos se acercan a la línea del modelo. Según el caso de estudio esto puede significar mucha o poca fiabilidad del modelo, para este caso partícular en que sólo buscamos encontrar respuestas acerca de la relación del uso de insecticidas neónicos con la producción de miel estadounidense tomaremos este valos como significativo y seguiremos adelante con el análisis.
El anova nos reitera nuestra hipótesis sobre que éstas variables tienen una probabilidad diferente de 0 y que son altamente significativas para describir el fenómeno.
Analysis of Variance Table
Response: prodvalue
Df Sum Sq Mean Sq F value Pr(>F)
numcol 1 5.7527e+16 5.7527e+16 5025.584 < 2.2e-16 ***
totalprod 1 9.1604e+14 9.1604e+14 80.025 < 2.2e-16 ***
stocks 1 6.4551e+14 6.4551e+14 56.392 1.445e-13 ***
year 1 2.9790e+15 2.9790e+15 260.245 < 2.2e-16 ***
nTHIAMETHOXAM 1 1.6957e+14 1.6957e+14 14.814 0.0001272 ***
nIMIDACLOPRID 1 3.7341e+14 3.7341e+14 32.621 1.528e-08 ***
Residuals 888 1.0165e+16 1.1447e+13
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Cumplimiento de los supuestos del modelo
Aleatoriedad (Residuals vs Fitted)
A pesar de que los datos se mantienen muy agrupados del lado izquierdo de la gráfica conforme vamos moviendo el foco al lado izquierdo los datos comienzas a dispersarse lo cual indica que nuestros datos son aleatorios y nos tienen un comportamiento lineal, en esta gráfica nos hace incapié en las observaciones 630, 631 y 633, lo cual indica qu estás observaciones están un poco lejos de las demás, y tal vez valga la pena eliminarlas.
Distribución Normal (Normal Q-Q)
La segunda gráfica habla de la distribución normal de los residuos, como observamos en la gráfica los datos están bien distribuídos sobre todo del -2 al 2, los residuos fuera de estos valores empiezan a alejarse un poco pero de igual manera hace énfasis en las observaciones mencionadas anteriormente, lo cual hasta ahora nos indica que esas observaciones pueden ser un grave problema para nuestro modelo.
Homocedasticidad (Scale-Location)
Esta gráfica nos permite verificar el supuesto de varianza (homocedasticidad), es decir, con ella sabemos si los residuos se reparten equitativamente a lo largo de los rangos predictores.
A pesar de que los datos se agrupan a la linea, esta linea está lejos de ser una linea horizontal, para resolver esto pudiéramos transformar los datos y buscar que se cumpla con la homocedasticidad del modelo, sin embargo para fines de esta investigación no será necesario ir más allá. Sobre todo porque el resto de los gráficos nos muestran el cumplimiento de los demás supuestos.
Valores influyentes (Residuals vs Leverage)
En el último gráfico podemos identificar esas observaciones que realmente causarán un problema, ya que no todos los outliers pueden ser influyentes en nuestro modelo, se recomienda usar este gráfico para encontrar esos datos que realmente influyen en nuestro modelo.
Aquellas observaciones alejadas de la distancia cook seguramente nos darán problemas y se debe optar por eliminar esas observaciones, en la gráfica nos muestra que las observaciones 633, 631 y 85 son observaciones atípicas que pudieran influir de forma negativa nuestro modelo.

Todo este análisis de regresión múltiple es para identificar las características que afectan nuestro fenómeno, en este caso, el valor de producción (resultado de multiplicar el total de producción y el precio por libra), debido a este pequeño análisis vemos que efectivamente el uso especialmente de estos dos neónicotinoides.
Valores únicos del conjunto de datos
Los métodos de clasificación como K-nn, Naive Bayes y K-means buscan clasificar un fenómeno utilizando las características de cada observación.
Actualmente en este dataset los valores únicos de cada columna son extensos, excepto por la región, el resto de características tienen grandes números de valores únicos.
A menos que quisiéramos agrupar en tipo de región en base al resto de características, este dataset no puede ser utilizado para hacer agrupamiento por alguno de estos métodos, el clasificar por región no es significativo para esta investigación.
state numcol yieldpercol totalprod stocks priceperlb prodvalue
43 171 97 698 664 275 827
year StateName Region FIPS nCLOTHIANIDIN nIMIDACLOPRID nTHIAMETHOXAM
23 43 4 43 472 890 614
nACETAMIPRID nTHIACLOPRID nAllNeonic
421 181 887
Conclusiones
Tomando en cuenta la hipótesis planteada sobre la relación negativa que tiene el uso de insecticidas neónicos contra las colonias apícolas, analizando este conjunto de datos hemos logrando comprobar de diversas maneras que la hipótesis es aceptada.
El objetivo número uno sobre la desaparición de abejas no ha podido ser comprabado, el único dato que pudiera servir para comprar este objetivo es el número de colonias, sin embargo el número de colonias apícolas en el dataset a través de los años se mantiene entre los mismos valores, esto debido a que las colonias apícolas son contadas estén o no en funcionamiento, así que podemos apoyarnos en el valor total de producción, este dato permite darnos cuenta que la producción si diminuyó justo en los mismos años en que el uso de estos insecticidas aumentó.
Y a su vez el precio por libra de miel de abeja se ve afectado por el rendimiento y el total de producción de las colonias apícolas, por ende el precio se ve afectado de igual manera por el impacto que tiene el uso de estos insecticidas en los campos agrícolas y que posteriormente son polinizados por abejas al rededor de todo el mundo.
Aún se pueden realizar más investigación respecto al tema, actualmente Bayer se encuentra en juicio y tiene una fuerte defensa, no por nada es el gigante de las farmacéuticas, este tipo de insecticidas genera ganancias anuales de al rededor de 8,383 millones de euros. Esto implica que se debe luchar contra un monstruo enorme.
Sin embargo ya existen países con leyes estrictas que prohíben el uso de insecticidas neonicotinoides, el año pasado los 28 países de la unión europea se unieron en la prohibición de estos en busca de restaurar el daño fatal que se ha producido en la base de nuestra alimentación.
LS0tCnRpdGxlOiAiUmVwb3J0ZSBGaW5hbCAtIEVzdGFkw61zdGljYSIKYXV0aG9yOiAiSnVsaWV0YSBHLiBSb2Ryw61ndWV6IFJ1aXoiCmRhdGU6ICIxMC8xLzIwMTkiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCmBgYAoKIyMgSG9uZXliZWVzIGFuZCBOZW9uaWMgUGVzdGljaWRlcwoKIyMjIyMgQ3JlYWRvciBkZWwgZGF0YXNldDogKipLZXZpbiBabWl0aCoqCgojIyMjIyBGZWNoYSBkZSBwdWJsaWNhY2nDs246ICoqTWF5byBkZSAyMDE4KioKCiMjIyMjIEZ1ZW50ZTogaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9rZXZpbnptaXRoL2hvbmV5LXdpdGgtbmVvbmljLXBlc3RpY2lkZS9ob21lCgoKRXN0ZSBjb25qdW50byBkZSBkYXRvcyBlc3TDoSBpbnNwaXJhZG8gZW4gbGEgUHJvZHVjY2nDs24gZGUgbWllbCBkZSBhYmVqYSBlbiBsb3MgRXN0YWRvcyBVbmlkb3MgZGUgQW3DqXJpY2EsIGV4dGVuZGlkbyBoYXN0YSBlbCBwZXLDrW9kbyAxOTk4LTIwMTcuIEFkZW3DoXMsIGVzdMOhIGxhIHVuacOzbiBjb24gZWwgUHJveWVjdG8gZGUgU8OtbnRlc2lzIE5hY2lvbmFsIGRlIFBlc3RpY2lkYXMgZGUgVVNHUywgcXVlIHBlcm1pdGUgbGEgZXZhbHVhY2nDs24gZGUgbGFzIGNvbmV4aW9uZXMgZXN0YWTDrXN0aWNhcyBlbnRyZSBsYSBQcm9kdWNjacOzbiBkZSBNaWVsIHkgZWwgdXNvIGRlIHBlc3RpY2lkYXMgbmVvbmljb3Rpbm9pZGVzIChuZcOzbmljb3MpLgoKTG9zIG5lb25pY290aW5vaWRlcyBzb24gdW5hIGZhbWlsaWEgZGUgaW5zZWN0aWNpZGFzIHF1ZSBhY3TDumFuIGVuIGVsIHNpc3RlbWEgbmVydmlvc28gY2VudHJhbCBkZSBsb3MgaW5zZWN0b3MgeSwgY29uIG1lbm9yIHRveGljaWRhZCwgZW4gdmVydGVicmFkb3MgKGF2ZXMgeSBtYW3DrWZlcm9zKS4gTG9zIG5lb25pY290aW5vaWRlcyBlc3TDoW4gZW50cmUgbG9zIGluc2VjdGljaWRhcyBtw6FzIHVzYWRvcyBhIG5pdmVsIG11bmRpYWwuCgpZIHlhIHNlIGhhbiBjb21wcm9iYWRvIHN1cyBhZmVjY2lvbmVzIGVuIGVzcGVjaWVzIGNvbW8gYWJlamFzIHkgYWxndW5hcyBhdmVzLCBwb3IgZXNvIGVsIGludGVyw6lzIGVuIGVuYWxpemFyIGVzdGUgY29uanVudG8gZGUgZGF0b3MgeSBvYnNlcnZhciBlbCBjb21wb3J0YW1pZW50byBkZSBsYSBwcm9kdWNjacOzbiBhcMOtY29sYSBhIHRyYXbDqXMgZGUgbG9zIGHDsW9zIG1pZW50cmFzIGVsIHVzbyBkZSBlc3RlIHRpcG8gZGUgaW5zZWN0aWNpZGFzIGhhIGlkbyBhdW1lbnRhbmRvLgoKIyMjIyMgSGlww7N0ZXNpczogTG9zIGluc2VjdGljaWRhcyBuZW9uaWNvdGlub2lkZXMgZXN0w6FuIGZ1ZXJ0ZW1lbnRlIGxpZ2Fkb3MgYWwgY29sYXBzbyBkZSBjb2xvbmlhcyBhcMOtY29sYXMuCgojIyMjIyBPYmpldGl2b3M6CgoxLk9ic2VydmFyIGxhIHJlbGFjacOzbiBxdWUgdGllbmUgZWwgdXNvIGRlIGluc2VjdGljaWRhcyBkZSBlc3RlIHRpcG8gY29uIGxhIGRlc2FwYXJpY2nDs24gZGUgYWJlamFzLgoKMi5WZXJpZmljYXIgbGEgcmVsYWNpw7NuIHF1ZSBleGlzdGUgZW50cmUgbG9zIGHDsW9zIGVuIHF1ZSBzZSBjb21lbnrDsyBhIHV0aWxpemFyIGVzdGUgdGlwbyBkZSBpbnNlY3RpY2lkYXMgY29uIGxhIGRlc2FwYXJpY2nDs24gZGUgY29sb25pYXMgYXDDrWNvbGFzLgoKMy5Fc3RhYmxhY2VyIHVuYSByZWxhY2nDs24gZW50cmUgZWwgY29zdG8gZGUgbGEgcHJvZHVjY2nDs24gYXDDrWNvbGEgY29uIGVsIGRlc2NlbnNvIGVuIGNvbG9uaWFzIGFww61jb2xhcyB5IHN1IHByb2R1Y2Npw7NuLCByZXN1bHRhZG8gZGVsIHVzbyBleHBvbmVuY2lhbCBkZSBpbnNlY3RpY2lkYXMgbmXDs25pY29zLgoKIyMjRXhwbGljYWNpw7NuIGRlbCBkYXRhc2V0CgpFbCBkYXRhc2V0IGVzdMOhIGNvbmZvcm1hZG8gcG9yIDExMzIgb2JzZXJ2YWNpb25lcyBjYWRhIHVuYSBjb24gMTcgYXRyaWJ1dG9zIHNvYnJlIGVsIHVzbyBkZSBwZXN0aWNpZGFzIG5lw7NuaWNvcyB5IGxhIHJlbGFjacOzbiBjb24gbGEgcHJvZHVjY2nDs24gZGUgbWllbCBkZSBhYmVqYSBlbiBjYWRhIGVzdGFkbyBkZWwgcGHDrXMgZXN0YWRvdW5pZGVuc2UuCgpMb3MgYXRyaWJ1dG9zIHNvbiBsb3Mgc2lndWllbnRlczoKCiogICAgc3RhdGU6IGFwcmV2aWF0dXJhIGRlbCBlc3RhZG8gZGUgbG9zIEVzdGFkb3MgVW5pZG9zIGRvbmRlIHNlIHJlYWxpesOzIGxhIG9ic2VydmFjacOzbi4KCiogICAgbnVtY29sOiBuw7ptZXJvIGRlIGNvbG9uaWFzIHByb2R1Y3RvcmFzIGRlIG1pZWwuIExhcyBjb2xvbmlhcyBwcm9kdWN0b3JhcyBkZSBtaWVsIHNvbiBlbCBuw7ptZXJvIG3DoXhpbW8gZGUgY29sb25pYXMgZGUgbGFzIGN1YWxlcyBzZSBleHRyYWpvIG1pZWwgZHVyYW50ZSBlbCBhw7FvLiBFcyBwb3NpYmxlIHRvbWFyIG1pZWwgZGUgY29sb25pYXMgcXVlIG5vIHNvYnJldml2aWVyb24gdG9kbyBlbCBhw7FvLgoKKiAgICB5aWVsZHBlcmNvbDogcmVuZGltaWVudG8gZGUgbWllbCBwb3IgY29sb25pYSBlbiBsaWJyYXMuCgoqICAgIHRvdGFscHJvZDogcHJvZHVjY2nDs24gdG90YWwgKG51bWNvbCB4IHlpZWxkcGVyY29sKSBlbiBsaWJyYXMuCgoqICAgIHN0b2Nrczogc2UgcmVmaWVyZSBhIGxhcyBleGlzdGVuY2lhcyBlbiBwb2RlciBkZSBsb3MgcHJvZHVjdG9yZXMgZW4gbGlicmFzLgoKKiAgICBwcmljZXBlcmxiOiBzZSByZWZpZXJlIGFsIHByZWNpbyBwcm9tZWRpbyBwb3IgbGlicmEgYmFzYWRvIGVuIGxhcyB2ZW50YXMgZXhwYW5kaWRhcy4gTGEgdW5pZGFkIGVzIGVuIGTDs2xhcmVzLgoKKiAgICBwcm9kdmFsdWU6IHZhbG9yIGRlIHByb2R1Y2Npw7NuICh0b3RhbHByb2QgeCBwcmljZXBlcmxiKS4gTGEgdW5pZGFkIGVzIGVuIGTDs2xhcmVzLgoKKiAgICB5ZWFyOiBhw7FvIGVuIHF1ZSBzZSB0b23DsyBsYSBvYnNlcnZhY2nDs24uCgoqICAgIFN0YXRlTmFtZTogbm9tYnJlIGRlbCBlc3RhZG8gZGVsIHBhw61zIGVzdGFkb3VuaWRlbnNlLgoKKiAgICBSZWdpb246IHJlZ2nDs24gZGVsIHBhw61zLgoKRGUgbG9zIGRhdG9zIGRlIFVTR1M6CgoqICAgIG5DTE9USElBTklESU46IGxhIGNhbnRpZGFkIGVuIGtnIGRlIENMT1RISUFOSURJTiBhcGxpY2FkYS4KCiogICAgbklNSURBQ0xPUFJJRDogbGEgY2FudGlkYWQgZW4ga2cgZGUgSU1JREFDTE9QUklEIGFwbGljYWRhLgoKKiAgICBuVEhJQU1FVEhPWEFNOiBsYSBjYW50aWRhZCBlbiBrZyBkZSBUSElBTUVUSE9YQU0gYXBsaWNhZGEuCgoqICAgIG5BQ0VUQU1JUFJJRDogbGEgY2FudGlkYWQgZW4ga2cgZGUgQUNFVEFNSVBSSUQgYXBsaWNhZGEuCgoqICAgIG5USElBQ0xPUFJJRDogbGEgY2FudGlkYWQgZW4ga2cgZGUgVEhJQUNMT1BSSUQgYXBsaWNhZGEuCgoqICAgIG5BbGxOZW9uaWM6IGxhIGNhbnRpZGFkIGVuIGtnIGRlIHRvZG9zIGxvcyBuZcOzbmljb3MgYXBsaWNhZG9zID0gKG5DTE9USElBTklESU4gKyBuSU1JREFDTE9QUklEICsgblRISUFNRVRIT1hBTSArIG5BQ0VUQU1JUFJJRCArIG5USElBQ0xPUFJJRCkuCgojIyMjIFByaW1lcmFzIDUgb2JzZXJ2YWNpb25lcwpgYGB7ciwgZWNobz1GQUxTRX0KZGF0YXNldCA8LSByZWFkLmNzdigidkhvbmV5TmVvbmljX3YwMy5jc3YiKQoKaGVhZChkYXRhc2V0KQpgYGAKCgojIyMjIFRpcG8gZGUgZGF0b3MgZW4gY2FkYSBjb2x1bW5hCmBgYHtyLCBlY2hvPUZBTFNFfQpzdHIoZGF0YXNldCkKYGBgCgojIyMjIyBSZWR1Y2Npw7NuIGRlbCBkYXRhc2V0LCBzZSBlbGltaW5hbiBsYXMgb2JzZXJ2YWNpb25lcyBpbmNvbXBsZXRhcyBxdWUgdGllbmVuIGVuIGFsZ3VubyBkZSBsb3MgYXRyaWJ1dG9zIHVuIE5BLgoKT2JzZXJ2YW1vcyBsYSBjYW50aWRhZCBkZSB2YWxvciBmYWx0YW50ZXMgZW4gY2FkYSB1bmEgZGUgbGFzIGNvbHVtbmFzIGRlbCBkYXRhc2V0LCBxdWUgcmV1bHRhbiBzZXIgbG9zIGRhdG9zIGFjZXJjYSBkZWwgdXNvIGRlIGluc2VjdGljaWRhcywgcGFyYSBldml0YXIgcXVlIGxvcyBkYXRvcyBqdWVndWVuIGVuIG51ZXN0cmEgY29udHJhLCBzZSBwdWVkZW4gcmVhbGl6YXIgZGlmZXJlbnRlcyB0w6ljbmljYXMsIHVuYSBlcyByZWVtcGxhemFyIGVzb3MgZGF0b3MgY29uIGVsIHByb21lZGlvIGRlIGxhIGNvbHVtbmEgdSBvdHJhIG9wY2nDs24gZXMgcXVpdGFyIGVzYXMgb2JzZXJ2YWNpb25lcyBwYXJhIGV2aXRhciBjdXFsdWllciBkZXNhanVzdGUuCgpQb3IgYWhvcmEgb3B0YXJlbW9zIHBvciBxdWl0YXIgcG9yIGNvbXBsZXRvIGxhcyBvcHNlcnZhY2lvbmVzIHF1ZSB0ZW5nYW4gdW5hIGNhcmFjdGVyw61zdGljYSBmYWx0YW50ZS4KCmBgYHtyLCBlY2hvPUZBTFNFfQojT3V0cHV0IG9mIHRoZSBudW1iZXIgb2YgbWlzc2luZyB2YWx1ZXMgZnJvbSBlYWNoIGNvbHVtbgpzYXBwbHkoZGF0YXNldCwgZnVuY3Rpb24oeCkgc3VtKGlzLm5hKHgpKSkKCiNBIHZpc3VhbCB3YXkgZm9yIGNoZWNrIG1pc3NpbmcgZGF0YQpsaWJyYXJ5KFJjcHApCmxpYnJhcnkoQW1lbGlhKQptaXNzbWFwKGRhdGFzZXQsIG1haW4gPSAiVmFsb3JlcyBGYWx0YW50ZXMiLCBjb2wgPSBjKCJkYXJrZ3JlZW4iLCAid2hpdGUiKSkKYGBgCgpMbyBjdWFsIHJlZHVjZSBlbCBkYXRhc2V0IGEgc8OzbG8gODk1IG9ic2VydmFjaW9uZXMgY29uIDE3IGNhcmFjdGVyw61zdGljYXMuCgpgYGB7ciwgZWNobz1GQUxTRX0KZGF0YXNldCA8LSBkYXRhc2V0W2NvbXBsZXRlLmNhc2VzKGRhdGFzZXQpLF0KCnN0cihkYXRhc2V0KQpgYGAKCiMjI01lZGlkYXMgZGUgVGVuZGVuY2lhIENlbnRyYWwKClBvciBjYWRhIGF0cmlidXRvIHNlIHByZXNlbnRhcyBsYXMgbWVkaWRhcyBkZSB0ZW5kZW5jaWEgY2VudHJhbCBiw6FzaWNhczsgbcOtbmltbywgbcOheGltbywgcHJpbWVyIHkgdGVyY2VyIGN1YXJ0aWwsIG1lZGlhbmEgeSBwcm9tZWRpbyBkZSBsb3MgdmFsb3JlcyByZWNhYmFkb3MuCkVudHJlIGxhcyBjb3NhcyBhIHJlc2FsdGFyIGRlIGVzdGUgcmVzw7ptZW4gZGUgbcOpdHJpY2FzIHNvbiBsb3MgYcOxb3MgZW4gcXVlIGZ1ZXJvbiB0b21hZGFzIGxhcyBvYnNlcnZhY2lvbmVzIGRlIDE5OTQgaGFzdGEgMjAxNiwgZHVyYW50ZSBlc3RvcyBhw7FvcyBzZSBoYSBtZWRpZG8gcG9yIGVzdGFkbyBlbCBudW1lcm8gZGUgY29sb25pYXMgYXDDrWNvbGFzLCBzdSBwcm9kdWNjacOzbiB5IGNvc3RvcyBhc8OtIGNvbW8gZWwgdXNvIGRlIGxvcyBpbnNlY3RpY2lkYXMgbmXDs25pY29zLgoKRWwgcHJlY2lvIHBvciBsaWJyYSBkZSBtaWVsIGRlIGFiZWphIG9zY2lsYSBlbnRyZSBsb3MgMC40IGTDs2xhcmVzIGhhc3RhIDcuMDksIHBvc3Rlcmlvcm1lbnRlIGxhcyByYXpvbmVzIGRlIGVzdG8geSBlbCBjYW1iaW8gYSB0cmF2w6lzIGRlbCB0aWVtcG8sIGF1bnF1ZSBwb2RlbW9zIGluZmVyaXIgcXVlIGVsIGF1bWVudG8gc2UgaGEgZ2VuZXJhZG8gYSBlbiBsb3Mgw7psdGltb3MgYcOxb3MgcG9yIGxhIHNpdHVhY2nDs24gYWN0dWFsIGVjb27Ds21pY2EgZ2xvYmFsLiAKU2luIGVtYmFyZ28gc2Vyw6EgaW50ZXJlc2FudGUgdmVyIGxhIHJlbGFjacOzbiBxdWUgdGllbmUgZWwgdXNvIGRlIGluc2VjdGljaWRhcyBuZcOzbmljb3MgY29uIGVzdGUgYXVtZW50byBlbiBlbCBwcmVjaW8gZGUgbGEgbWllbCBkZSBhYmVqYS4KCgpgYGB7ciwgZWNobz1GQUxTRX0Kc3VtbWFyeShkYXRhc2V0KQpgYGAKCkVsIHJlbmRpbWllbnRvIG8gbGEgcHJvZHVjY2nDs24gZGUgbWllbCBwb3IgY29sb25pYXMgYXDDrWNvbGFzIGEgdHJhdsOpcyBkZWwgdGllbXBvIHNlIGhhIHZpc3RvIGNvbnNpZGVyYWJsZW1lbnRlIGFmZWN0YWRhLCBjb21vIHBvZGVtb3Mgb2JzZXJ2YXIgZW4gbGEgZ3LDoWZpY2EgYSBwYXJ0aXIgZGVsIDIwMTEgbGEgcHJvZHVjY2nDs24gZGlzbWludXnDsywgc2llbmRvZWwgYcOxbyAyMDEzIGVsIHF1ZSBtZW5vciBwcm9kdWNjacOzbiBoYSByZXBvcnRhZG8uIApgYGB7ciwgZWNobz1GQUxTRX0KYm94cGxvdChzcGxpdChkYXRhc2V0JHlpZWxkcGVyY29sLGRhdGFzZXQkeWVhciksIG5vdGNoPVRSVUUsIG1haW49IlJlbmRpbWllbnRvIHZzIFRpZW1wbyIsIHhsYWI9InllYXIiLCB5bGFiPSJ5aWVsZHBlcmNvbCIsY29sPShjKCJvbGl2ZWRyYWIzIiwib3JhbmdlcmVkMiIpKSkKYGBgCgpBIHBlc2FyIGRlIHF1ZSBsYSBncsOhZmljYSBkZWwgdG90YWwgZGUgcHJvZHVjY2nDs24gY29udHJhIGVsIHRpZW1wbyBubyBzZWEgdGFuIGV4cGxpY2F0aXZhIHBvciBsYSBjYW50aWRhZCBkZSBvdXRsaWVycyBxdWUgc2UgbXVlc3RyYW4sIHNlIHB1ZWRlIG9ic2VydmFyIGNsYXJhbWVudGUgcXVlIGEgcGFydGlyIGRlbCAyMDEwIGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuIGRpc21pbnV5w7MuCgpgYGB7ciwgZWNobz1GQUxTRX0Kc2V0IDwtIGRhdGFzZXRbZGF0YXNldCR5ZWFyID4gMTk5NCxdCgpib3hwbG90KHNwbGl0KHNldCR0b3RhbHByb2QsIHNldCR5ZWFyKSwgbm90Y2g9VFJVRSwgbWFpbj0iVG90YWwgZGUgUHJvZHVjY2lvbiB2cyBUaWVtcG8iLCB4bGFiPSJ5ZWFyIiwgeWxhYj0idG90YWxwcm9kIixjb2w9KGMoInBhbGVncmVlbjMiLCJtYXJvb24iKSkpCmBgYAoKQ3VhbmRvIG9ic2VydmFtb3MgbGEgc2lndWllbnRlIGdyw6FmaWNhIHJlc3BlY3RvIGEgbGEgYW50ZXJpb3Igbm9zIHBvZGVtb3MgZGFyIGN1ZW50YSBmYWNpbG1lbnRlIGRlIGxhIHJlbGFjacOzbiBxdWUgaGF5IGVudHJlIGVsIHVzbyBkZSBpbnNlY3RpY2lkYXMgcmVzcGVjdG8gYSBsYSBwcm9kdWNjacOzbiBkZSBtaWVsLCBlbiBsb3MgYcOxb3MgMjAxMiBhIDIwMTQgZnVlcm9uIGxvcyBhw7FvcyBjb24gbWF5b3IgdXNvIGRlIGluc2VjdGljaWRhcyBuZcOzbmljb3MgcXVlIGNvaW5jaWRlbiBqdXN0YW1lbnRlIGNvbiBsYSBncsOhZmljYSBhbnRlcmlvciBlbiBsb3MgYcOxb3MgY29uIG1lbm9yIHByb2R1Y2Npw7NuIGRlIG1pZWwsIHNpZW5kbyBkZSBudWV2byBlbCBhw7FvIDIwMTMgZWwgZMOzbmRlIGh1Ym8gdW4gc2FsdG8gY29uc2lkZXJhYmxlIGVuIGVsIHVzbyBkZSBpbnNlY3RpY2lkYXMgeSBsYSBkaXNtaW51Y2nDs24gZGUgbGEgcHJvZHVjacOzbiBhcMOtY29sYS4gCgpgYGB7ciwgZWNobz1GQUxTRX0KYm94cGxvdChzcGxpdChkYXRhc2V0JG5BbGxOZW9uaWMsIGRhdGFzZXQkeWVhciksIG5vdGNoPVRSVUUsIHhsYWI9InllYXIiLCB5bGFiPSJuQWxsTmVvbmljIiwgbWFpbj0iIEluc2VjdGljaWRhcyBOZW9uaWNvcyB2cyBUaWVtcG8iLCBjb2w9KGMoInJveWFsYmx1ZTIiLCJvcmFuZ2UiKSkpCmBgYAoKRGUgbGEgbWlzbWEgbWFuZXJhIG9ic2VydmVtb3MgY29tbyBlbCBwcmVjaW8gcG9yIGxpYnJhIGRlIG1pZWwgZGUgYWJlamEgYSB0cmF2w6lzIGRlIGxvcyBhw7FvcyBoYSBhdW1lbnRhZG8sIHNpZW5kbyBpZ3VhbCBlbCBhw7FvIDIwMTMgZWwgcXVlIGhhIHRlbmlkbyB1biBzYWx0byBjb25zaWRlcmFibGUgZW4gZWwgcHJlY2lvIHkgcG9zdGVyaW9tZW50ZSBzw7NsbyBoYSBjb250aW51YWRvIGEgbGEgYWx6YS4KCmBgYHtyLCBlY2hvPUZBTFNFfQpib3hwbG90KHNwbGl0KGRhdGFzZXQkcHJpY2VwZXJsYiwgZGF0YXNldCR5ZWFyKSwgbm90Y2g9VFJVRSwgeGxhYj0ieWVhciIsIHlsYWI9InByaWNlcGVybGIiLCBtYWluPSJQcmVjaW8gcG9yIGxpYnJhIHZzIFRpZW1wbyIsIGNvbD0oYygieWVsbG93Z3JlZW4iLCJwYWxlZ3JlZW4yIikpKQpgYGAKCkxvcyBuZW9uaWNvdGlub2lkZXMgc29uIHVuYSBjbGFzZSBkZSBpbnNlY3RpY2lkYXMgcXVlIHNvbiBxdcOtbWljYW1lbnRlIHNpbWlsYXJlcyBhIGxhIG5pY290aW5hLCBxdWUgc2UgaGEgdXRpbGl6YWRvIGNvbW8gcGVzdGljaWRhIGRlc2RlIGZpbmFsZXMgZGUgbGEgZMOpY2FkYSBkZSAxNzAwLiBMb3MgcXVlIG5vcyBhdGHDsWVuIGVuIGVzdGUgcmVwb3J0ZSBzb246CgoqIENsb3RoaWFuaWRpbiwgZXMgdW4gaW5zZWN0aWNpZGEgZGVzYXJyb2xsYWRvIHBvciBUYWtlZGEgQ2hlbWljYWwgSW5kdXN0cmllcyB5IEJheWVyIEFHLgoqIEltaWRhY2xvcHJpZCwgZXMgdW4gdGlwbyBkZSBpbnNlY3RpY2lkYSBuZXVyb2FjdGl2byBkaXNlw7FhZG8gYSBwYXJ0aXIgZGUgbGEgbmljb3RpbmEgZmFicmljYWRvIHBvciBCYXllciBBRy4KKiBUaWFtZXRveGFtIGVzIHVuIGluc2VjdGljaWRhIHNpc3TDqW1pY28gcXVlIGVzIGFic29yYmlkbyByw6FwaWRhbWVudGUgeSB0cmFuc3BvcnRhZG8gYSB0b2RhIGxhIHBsYW50YSBkb25kZSBhY3TDumEgY29tbyB1biBpbXBlZGltZW50byBhIGxhIGFsaW1lbnRhY2nDs24gZGUgaW5zZWN0b3Mgc29icmUgbGEgcGxhbnRhLCBkZXNhcnJvbGxhZG8gcG9yIFN5bmdlbnRhLgoqIEFjZXRhbWlwcmlkLCBzZSB0cmF0YSBkZSB1biBpbnNlY3RpY2lkYSBpbm9kb3JvIG5lb25pY290aW5vaWRlIHByb2R1Y2lkYSBiYWpvIGxvcyBub21icmVzIGNvbWVyY2lhbGVzIEFzc2FpbCwgeSAnQ2hpcGNvIHBvciBBdmVudGlzIENyb3BTY2llbmNlcy4KKiBUaWFjbG9wcmlkLCBkZXNhcnJvbGxhZG8gcG9yIEJheWVyIENyb3BTY2llbmNlIHBhcmEgZWwgY29udHJvbCBkZSB1bmEgdmFyaWVkYWQgZGUgaW5zZWN0b3MgY2h1cGFkb3JlcyB5IG1hc3RpY2Fkb3JlcywgcHJpbmNpcGFsbWVudGUgcHVsZ29uZXMgeSBtb3NjYXMgYmxhbmNhcy4KCkVsIG1vZG8gZGUgb3BlcmFjacOzbiBkZSBsb3MgbmVvbmljb3Rpbm9pZGVzIGVzIGltaXRhciBsYSBhY2Npw7NuIGRlIG5ldXJvdHJhbnNtaXNvciBhY2V0aWxjb2xpbmEgYmxvcXVlYW5kbyBsb3MgICByZWNlcHRvcmVzICAgZSAgIGludGVycnVtcGllbmRvICAgbGEgICB0cmFuc21pc2nDs24gICBkZSBpbXB1bHNvcyBkZSBlbnRyZSBsYXMgY8OpbHVsYXMgbmVydmlvc2FzLCBlcyBkZWNpciwgYWN0w7phbiBkZSBtb2RvIHNlbGVjdGl2byBzb2JyZSBlbCBzaXN0ZW1hIG5lcnZpb3NvIGNlbnRyYWwgZGUgbG9zIGluc2VjdG9zLCBwYXJhbGl6w6FuZG9sb3MgeSBwcm92b2NhbmRvIHN1IG11ZXJ0ZS4KCkxvcyBwbGFndWljaWRhcyBzaXN0w6ltaWNvcyBvIG5lb25pY290aW5vaWRlcyBzb24gYWJzb3JiaWRvcyBwb3IgbGEgcGxhbnRhLCB0cmFuc3BvcnTDoW5kb3NlIGEgdG9kb3MgbG9zIHRlamlkb3MgKGhvamFzLCBmbG9yZXMsIHJhw61jZXMgeSB0YWxsb3MsIGFzw60gY29tbyBwb2xlbiB5IG7DqWN0YXIpLiBTZSB1dGlsaXphbiBjYWRhIHZleiBtw6FzIGNvbW8gdW4gcHJvZmlsw6FjdGljbyBjb24gZWwgcXVlIHRyYXRhciBzdWVsb3MgbyBzZW1pbGxhcyBwYXJhIGV2aXRhciBsYSBwbGFnYXMgZW4gdmV6IGRlIGhhY2VyIHVuIHRyYXRhbWllbnRvIHPDs2xvIGN1YW5kbyBhcGFyZWNlIGVsIHByb2JsZW1hLiBTb24gY2FwYWNlcyBkZSBwZXJzaXN0aXIgeSBhY3VtdWxhcnNlLCBlbiBwYXJ0aWN1bGFyIGVuIGVsIHN1ZWxvLCBkdXJhbnRlIG1lc2VzIG8gYcOxb3MuIEVzdG8gYXVtZW50YSBzdSB0b3hpY2lkYWQgeSBsb3MgaGFjZSBtw6FzIHBlcmp1ZGljaWFsZXMgcGFyYSBlc3BlY2llcyBhIGxhcyBxdWUgbm8gdmFuIGRpcmlnaWRvcy4gRXN0b3MgcHJvZHVjdG9zIHNlIHV0aWxpemFuIGVuIG3DoXMgZGUgMTIwIHBhw61zZXMgeSBnZW5lcmFuIHVuIG1lcmNhZG8gZGUgMi42MDAgbWlsbG9uZXMgYW51YWxlcywgc2Vnw7puIGNpZnJhcyBkZSAyMDExIG9mcmVjaWRhcyBwb3IgZWwgVGFzayBGb3JjZSBvbiBTeXN0ZW1pYyBQZXN0aWNpZGVzLgoKRW4gbGEgZ3LDoWZpY2Egc2lndWllbnRlIHNlIHB1ZWRlIG9ic2VydmFyIGxhIGNhbnRpZGFkIG3DoXhpbWEgdXRpbGl6YWRvIHBvciBlc3RhZG8gZGUgY2FkYSB1bm8gZGUgZXN0b3MgaW5zZWN0aWNpZGFzLCBsYXMgY2FudGlkYWRlcyBzZSBwcmVzZW50YW4gZW4ga2lsb2dyYW1vcyB5IG5vcyBkYSB1bmEgaWRlYSBkZSBsYSBjYW50aWRhZCB0cmVtZW5kYSBxdWUgZXMgdXRpbGl6YWRhIGVuIG9jYXNpb25lcyBwb3IgbG9zIGFncmljdWx0b3JlcyBlc3RhZG91bmlkZW5zZXMuCmBgYHtyLCBlY2hvPUZBTFNFfQoKY291bnRzIDwtIGMobWF4KGRhdGFzZXQkbkNMT1RISUFOSURJTiksIG1heChkYXRhc2V0JG5JTUlEQUNMT1BSSUQpLCBtYXgoZGF0YXNldCRuVEhJQU1FVEhPWEFNKSwKICAgICAgICAgICAgICAgICAgICBtYXgoZGF0YXNldCRuQUNFVEFNSVBSSUQpLCBtYXgoZGF0YXNldCRuVEhJQUNMT1BSSUQpKQoKYmFycGxvdChjb3VudHMsIG1haW4gPSAiQ2FudGlkYWQgbcOheGltYSAoa2cpIHBvciB0aXBvIGRlIGluc2VjdGljaWRhIHV0aWxpemFkbyIsIHlsYWI9ImtnIiwgeGxhYiA9ICJDbG90aGlhbmlkaW4gIEltaWRhY2xvcHJpZCBUaWFtZXRveGFtIEFjZXRhbWlwcmlkIFRpYWNsb3ByaWQiLCBjb2w9KGMoImxpZ2h0Ymx1ZTQiLCJsaWdodGJsdWUzIiwgImxpZ2h0Ymx1ZTIiLCAibGlnaHRibHVlMSIsICJsaWdodGN5YW4yIikpLCBkZW5zaXR5ID0gMzApCmBgYAoKIyMjIENvcnJlbGFjacOzbiAKCiMjIyMjIENvcnJlbGFjacOzbiBlbnRyZSB0b2RhcyBsYXMgdmFyaWFibGVzIG51bcOpcmljYXMKCkVuIGVzdGEgZ3LDoWZpY2EgZGUgY29ycmVsYWNpw7NuIGVudHJlIGxhcyB2YXJpYWJsZXMgbnVtw6lyaWNhcyBkZWwgZGF0YXNldCBzZSBwdWVkZSBvYnNlcnZhciBsYXMgY29ycmVsYWNpb25lcyBxdWUgZXhpc3RlbiBlbnRyZSBlbGxhcy4gCgpMYXMgdmFyaWFibGVzIGNvbiBtYXlvciBjb3JyZWxhY2nDs24gc29uIGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuIGNvbnRyYSBlbCBuw7ptZXJvIGRlIGNvbG9uaWFzIGFww61jb2xhcywgZWwgdG90YWwgZGUgcHJvZHVjY2nDs24gY29udHJhIGxhIGNhbnRpZGFkIGRlIHN0b2NrLCBlbCB0b3RhbCBkZSBwcm9kdWNjacOzbiBjb250cmEgZWwgdmFsb3IgZGUgcHJvZHVjY2nDs24geSBlbCBwcmVjaW8gcG9yIGxpYnJhIGNvbnRyYSBsb3MgYcOxb3MuIEVzdGFzIHNvbiBsYXMgY29ycmVhbGNpb25lcyBtw6FzIHNpZ25pZmljYXRpdmFzLCBwZXJvIGV4aXN0ZSByZWxhY2lvbmVzIGVudHJlIHRvZGFzIGxhcyB2YXJpYWJsZXMgZGVsIGRhdGFzZXQsIGNvbW8gc2Ugb2JzZXJ2YSBlbiBsYSBncsOhZmljYS4KClRhbWJpw6luIHBvZGVtb3MgdmVyIHVuYSBjb3JyZWxhY2nDs24gbmVnYXRpdmEgZW50cmUgZWwgcHJlY2lvIHBvciBsaWJyYSB5IGVsIHJlbmRpbWllbnRvIHBvciBjb2xvbmlhLCBsbyBxdWUgZXN0byBzaWduaWZpY2EgZXMgcXVlIG1pZW50cmFzIHVuYSBhdW1lbnRhLCBsYSBvdHJhIGRpbWludXllLiBFc3RvIHJlc3VsdGEgbMOzZ2ljbyBwdWVzIGEgbWVub3IgcHJvZHVjY2nDs24gbG9zIHByZWNpb3MgdGllbmRlbiAgYSBlbGV2YXJzZS4gCgpBc8OtIGVzIGNvbW8gZXNwZXLDoWJhbW9zIGVuY29udHJhciBsYSBjb3JyZWxhY2nDs24gZW50cmUgZWwgdXNvIGRlIGluc2VjdGljaWRhcyBjb24gbGEgcHJvZHVjY2nDs24sIHNlIGVzcGVyYWJhIHVuYSBjb3JycmVsYWNpw7NuIHNpZ25pZmljYXRpdmEgeSBuZWdhdGl2YSwgc2luIGVtYmFyZ28gcG9yIGxhIGZvcm1hIGVuIHF1ZSBlc3TDoW4gZXN0cnVjdHVyYWRvcyBsb3MgZGF0b3Mgbm8gZW5jb250cmFtb3MgZXNhIGNhcmFjdGVyw61zdGljYSBxdWUgbm9zIGFwb3llIGNvbiBsYXMgcHJlbWlzYXMgcXVlIG1lbmNpb25hbW9zIGFudGVzIHNvYnJlIGxvcyBhw7FvcyBlbiBxdWUgbcOhcyBzZSB1dGlsaXphcm9uIGVzdGUgdGlwbyBkZSBpbnNlY3RpY2lkYXMgeSBsYSBiYWphIGNvbnNpZGVyYWJsZSBlbiBsYSBwcm9kdWNjacOzbiBkZSBtaWVsLgoKYGBge3IsIGVjaG89RkFMU0V9CmxpYnJhcnkoY29ycnBsb3QpCgp0ZW1wZGF0YXNldCA8LSBkYXRhLmZyYW1lKGRhdGFzZXQkbnVtY29sLCBkYXRhc2V0JHlpZWxkcGVyY29sLCBkYXRhc2V0JHRvdGFscHJvZCwgZGF0YXNldCRzdG9ja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCRwcmljZXBlcmxiLCBkYXRhc2V0JHByb2R2YWx1ZSwgZGF0YXNldCR5ZWFyLCBkYXRhc2V0JG5DTE9USElBTklESU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCRuSU1JREFDTE9QUklELCBkYXRhc2V0JG5USElBTUVUSE9YQU0sIGRhdGFzZXQkbkFDRVRBTUlQUklELAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQkblRISUFDTE9QUklELCBkYXRhc2V0JG5BbGxOZW9uaWMpCgp0ZW1wZGF0YXNldCA8LSBhcy5tYXRyaXgodGVtcGRhdGFzZXQpCgpjb3JkYXRhc2V0IDwtIGNvcih0ZW1wZGF0YXNldCkKCmNvcnJwbG90KGNvcmRhdGFzZXQsIG1ldGhvZCA9ICJjaXJjbGUiLCB0eXBlID0gImxvd2VyIiwgdGwuY29sPSJibGFjayIsIHRsLnNydD0xNSwKICAgICAgICAgIGFkZENvZWZhc1BlcmNlbnQgPSBUUlVFLCBzaWcubGV2ZWwgPSAwLjAxLCB3aW4uYXNwID0gMSkKYGBgCgojIyMjIyBFbiBidXNjYSBkZSBtZWpvcmVzIHJlc3VsdGFkb3M6CgpQYXJhIHRyYXRhciBkZSBlbmNvbnRyYXIgbWVqb3JlcyByZXN1bHRhZG9zIGVuIGxhIGNvcnJlbGFjacOzbiBkZWwgdXNvIGRlIGluc2VjdGljaWRhcyBjb24gZWwgcHJlY2lvIG8gbGEgcHJvZHVjY2nDs24gZGUgbWllbCwgaGFyZW1vcyB1biBmaWx0cm8gZW4gZWwgZGF0YXNldCBwYXJhIHF1aXRhciBsb3MgYcOxb3MgMjAxNCwgMjAxNSB5IDIwMTYsIGHDsW9zIGVuIHF1ZSBlbCB1c28gZGUgZXN0b3MgaW5zZWN0aWNpZGFzIGNvbWVuemFyb24gYSBzZXIgaW52ZXN0aWdhZG9zeSByZWR1amVyb24gc3UgYXBsaWNhY2nDs24uCgpTaW4gZW1iYXJnbyBsYSByZWxhY2nDs24gcXVlIG3DoXMgbm9zIGltcG9ydGFyw61hIHNlcsOtYSBlbCByZW5kaW1pZW50byBwb3IgY29sb25pYSBjb250cmEgbG9zIGRpZmVyZW50ZXMgdGlwb3MgZGUgaW5zZWN0aWNpZGFzIG5lb25pY290aW5vaWRlcyB5IHJlYWxtZW50ZSBubyBwb2RlbW9zIG9ic2VydmFyIHVuYSBjb3JyZWxhY2nDs24gc2lnbmlmaWNhdGl2YSwgc2luIGVtYmFyZ28gZXMgbmVjZXNhcmlvIHJlc2xhdGFyIHF1ZSBhdW5xdWUgc2VhIHBvY2EgbGEgY29ycmVsYWNpw7NuIGVzIHVuYSBjb3JyZWxhY2nDs24gbmVnYXRpdmEsIGxvIGN1YWwgc2lnbmlmaWNhIHVuIGRlY3JlY2ltaWVudG8uCgpPdHJhcyBjYXJhY3RlcsOtc3RpY2FzIHF1ZSBxdWl6w6FzIHB1ZWRhbiBkZWNpcm5vcyBhbGdvIGVzIGVsIHByZWNpbyBwb3IgbGlicmEgZGUgbWllbCBjb250cmEgbGEgY2FudGlkYWQgZGUgaW5zZWN0aWNpZGEgdXRpbGl6YWRvLCBlbiBsYSBxdWUgdmVtb3MgdW5hIGNvcnJlbGFjacOzbiBtw6FzIHNpZ25pZmljYXRpdmEgcXVlIGxhIGFudGVyaW9yLCBhw7puIG5vIG11eSBzaWduaWZpY2F0aXZhIHBhcmEgY29tcHJvYmFyIGFsZ28sIHBlcm8gZGViaWRvIGEgcXVlIGVzIHVuYSBjb3JyZWFsYWNpw7NuIHBvc2l0aXZhIG5vcyBoYWJsYSBkZWwgaW1wYWN0byBxdWUgdGllbmUgZWwgdXNvIGRlIG5lw7NuaWNvcyBhbCBlbGV2YXIgZWwgcHJlY2lvIGRlIGxhIG1pZWwuCgpFbiByZWFsaWRhZCBubyBlcyBtdWNoYSBsYSBkaWZlcmVuY2lhIGEgbGEgZ3LDoWZpY2EgYW50ZXJpb3IsIHBlcm8gcHJlY2lzYW1lbnRlIGVzbyBlcyBsbyBxdWUgcXVlcsOtYW1vcyBhbmFsaXphciwgcXVpdGFuZG8gZXNvcyBhw7FvcyBxdWUgY2FtYmlhbiBlbCBjb21wb3J0YW1pZW50byB5IGhheSB1biBjYW1iaW8gc3VzdGFuY2lhbCBzaXJ2ZSBwYXJhIGVuY29udHJhciBsbyBxdWUgZXN0YW1vcyBidXNjYW5kbywgYXVucXVlIG1lam9yIHZhbG9yZXMgZW4gbGEgcHJvZHVjY2nDs24geSBwcmVjaW8gZnVlcm9uIGVuY29udHJhZG9zLgoKYGBge3IsIGVjaG89RkFMU0V9CgpsaWJyYXJ5KGNvcnJwbG90KQoKZGF0YXllYXJmaWx0ZXIgPC0gZGF0YS5mcmFtZShkYXRhc2V0JG51bWNvbCwgZGF0YXNldCR5aWVsZHBlcmNvbCwgZGF0YXNldCR0b3RhbHByb2QsIGRhdGFzZXQkc3RvY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQkcHJpY2VwZXJsYiwgZGF0YXNldCRwcm9kdmFsdWUsIGRhdGFzZXQkeWVhciwgZGF0YXNldCRuQ0xPVEhJQU5JRElOLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQkbklNSURBQ0xPUFJJRCwgZGF0YXNldCRuVEhJQU1FVEhPWEFNLCBkYXRhc2V0JG5BQ0VUQU1JUFJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0JG5USElBQ0xPUFJJRCwgZGF0YXNldCRuQWxsTmVvbmljKQoKZGF0YXllYXJmaWx0ZXIgPC0gZGF0YXllYXJmaWx0ZXJbIGRhdGF5ZWFyZmlsdGVyJGRhdGFzZXQueWVhciA8IDIwMTQsIF0KCmRhdGF5ZWFyZmlsdGVyIDwtIGFzLm1hdHJpeChkYXRheWVhcmZpbHRlcikKCmNvcmRhdGFzZXQgPC0gY29yKGRhdGF5ZWFyZmlsdGVyKQoKY29ycnBsb3QoY29yZGF0YXNldCwgbWV0aG9kID0gImNpcmNsZSIsIHR5cGUgPSAibG93ZXIiLCB0bC5jb2w9ImJsYWNrIiwgdGwuc3J0PTE1LAogICAgICAgICAgYWRkQ29lZmFzUGVyY2VudCA9IFRSVUUsIHNpZy5sZXZlbCA9IDAuMDEsIHdpbi5hc3AgPSAxKQpgYGAKCkF1bnF1ZSBsYSBjb3JyZWxhY2nDs24gZW50cmUgZWwgdXNvIGRlIGluc2VjdGljaWRhcyB5IGVsIHZhbG9yIGRlIHByb2R1Y2Npw7NuIG5vIGVzIHNpZ25pZmljYXRpdmEsIGVzIG5lZ2F0aXZhLCBsbyBjdWFsIGltcGxpY2EgcXVlIGVsIHZhbG9yIGRlIHByb2R1Y2Npw7NuIGRpc21pbnV5ZSBjb25mb21lIGVsIHVzbyBkZSBuZcOzbmljb3MgYXVtZW50YS4KCmBgYHtyLCBlY2hvPUZBTFNFLCBlcnJvcj1GQUxTRX0KbGlicmFyeSgiZ2dwdWJyIikKZ2dzY2F0dGVyKG15ZGF0YWZpbHRlcmVkLCB5ID0gIm5JTUlEQUNMT1BSSUQiLCB4ID0gInlpZWxkcGVyY29sIiwgCiAgICAgICAgICBhZGQgPSAicmVnLmxpbmUiLCBjb25mLmludCA9IFRSVUUsIAogICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInBlYXJzb24iLAogICAgICAgICAgeGxhYiA9ICJSZW5kaW1pZW50byBwb3IgQ29sb25pYSIsIHlsYWIgPSAiVXNvIGxvcyBOZW9uaWNvcyIpCmBgYAoKWSB0YW1iacOpbiBlcyBpbXBvcnRhbnRlIG9ic2VydmFyIHF1ZSBlbCBwcmVjaW8gcG9yIGxpYnJhIGF1bWVudGEgbWllbnRyYXMgZWwgcmVuZGltaWVudG8gcG9yIGNvbG9uaWEgYXDDrWNvbGEgZGlzbWludXllLCBjb25jZXB0byBiw6FzaWNvIGRlIGVjb25vbcOtYSwgbWVub3MgcHJvZHVjdG8gLSBtYXlvciBkZW1hbmRhIC0gbWF5b3IgcHJlY2lvLgoKYGBge3IsIGVjaG89RkFMU0UsIGVycm9yPUZBTFNFfQpsaWJyYXJ5KCJnZ3B1YnIiKQpnZ3NjYXR0ZXIobXlkYXRhZmlsdGVyZWQsIHkgPSAicHJpY2VwZXJsYiIsIHggPSAieWllbGRwZXJjb2wiLCAKICAgICAgICAgIGFkZCA9ICJyZWcubGluZSIsIGNvbmYuaW50ID0gVFJVRSwgCiAgICAgICAgICBjb3IuY29lZiA9IFRSVUUsIGNvci5tZXRob2QgPSAicGVhcnNvbiIsCiAgICAgICAgICB4bGFiID0gIlJlbmRpbWllbnRvIHBvciBDb2xvbmlhIiwgeWxhYiA9ICJQcmVjaW8gcG9yIGxpYnJhIikKYGBgCgojIyMjIyBQcmVjaW8gcG9yIGxpYnJhIHZzLiBDYW50aWRhZCBkZSBpbnNlY3RpY2lkYSBuZW9jb3Rpbm9pZGVzCgpBIHBlc2FyIGRlIHNlciB1bmEgY29ycmVsYWNpw7NuIG5vIHNpZ25pZmljYXRpdmEgcG9yIHNlciBzw7NsbyBkZWwgMC40LCBlcyBpbXBvcnRhbnRlIG9ic2VydmFyIGNvbW8gc2UgY29tcG9ydGEgbGEgZ3LDoWZpY2EgaW5mZXJpb3IgaXpxdWllcmRhIGRvbmRlIGFsIHBhcmVjZXIgY29uZm9ybWUgYXVtZW50YSBlbCB1c28gZGUgaW5zZWN0aWNpZGFzIGF1bWVudGEgYSBzdSB2ZXogZWxwcmVjaW8gcG9yIGxpYnJhIGRlIHByb2R1Y2Npw7NuIGRlIG1pZWwuCmBgYHtyLCBlY2hvPUZBTFNFfQpsaWJyYXJ5KHh0cykKbGlicmFyeSh6b28pCmxpYnJhcnkoUGVyZm9ybWFuY2VBbmFseXRpY3MpCgoKZGF0YXllYXJmaWx0ZXIyIDwtIGRhdGEuZnJhbWUoZGF0YXNldCRudW1jb2wsIGRhdGFzZXQkeWllbGRwZXJjb2wsIGRhdGFzZXQkdG90YWxwcm9kLCBkYXRhc2V0JHN0b2NrcywKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0JHByaWNlcGVybGIsIGRhdGFzZXQkcHJvZHZhbHVlLCBkYXRhc2V0JHllYXIsIGRhdGFzZXQkbkNMT1RISUFOSURJTiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0JG5JTUlEQUNMT1BSSUQsIGRhdGFzZXQkblRISUFNRVRIT1hBTSwgZGF0YXNldCRuQUNFVEFNSVBSSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCRuVEhJQUNMT1BSSUQsIGRhdGFzZXQkbkFsbE5lb25pYykKCmRhdGF5ZWFyZmlsdGVyMiA8LSBkYXRheWVhcmZpbHRlcjJbIGRhdGF5ZWFyZmlsdGVyMiRkYXRhc2V0LnllYXIgPCAyMDE0LCBdCgp0ZW1wZGF0YTIgPC0gZGF0YS5mcmFtZShkYXRheWVhcmZpbHRlcjIkZGF0YXNldC5wcmljZXBlcmxiLCBkYXRheWVhcmZpbHRlcjIkZGF0YXNldC5uQWxsTmVvbmljKQoKY2hhcnQuQ29ycmVsYXRpb24odGVtcGRhdGEyLCBoaXN0b2dyYW0gPSBUUlVFLCBtZXRob2QgPSBjKCJwZWFyc29uIiwgImtlbmRhbGwiLCAic3BlYXJtYW4iKSkKYGBgCgpBaG9yYSBzaSBjb21wYXJhbW9zIGFtYmFzIGNhcmFjdGVyw61zdGljYXMgcmVzcGVjdG8gYSBzdSBjb3JyZWFsYWNpw7NuIGVudHJlIGVsbGFzIHkgbG9zIGHDsW9zIGVuIHF1ZSBmdWVyb24gdG9tYWRvcyBsb3MgZGF0b3Mgb2J0ZW5lbW9zIGxvcyBzaWd1aWVudGVzIHJlc3VsdGFkb3M6CgpgYGB7ciwgZWNobz1GQUxTRX0KZGF0YXllYXJmaWx0ZXIzIDwtIGRhdGEuZnJhbWUoZGF0YXNldCRudW1jb2wsIGRhdGFzZXQkeWllbGRwZXJjb2wsIGRhdGFzZXQkdG90YWxwcm9kLCBkYXRhc2V0JHN0b2NrcywKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0JHByaWNlcGVybGIsIGRhdGFzZXQkcHJvZHZhbHVlLCBkYXRhc2V0JHllYXIsIGRhdGFzZXQkbkNMT1RISUFOSURJTiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0JG5JTUlEQUNMT1BSSUQsIGRhdGFzZXQkblRISUFNRVRIT1hBTSwgZGF0YXNldCRuQUNFVEFNSVBSSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCRuVEhJQUNMT1BSSUQsIGRhdGFzZXQkbkFsbE5lb25pYykKCmRhdGF5ZWFyZmlsdGVyMyA8LSBkYXRheWVhcmZpbHRlcjNbIGRhdGF5ZWFyZmlsdGVyMyRkYXRhc2V0LnllYXIgPCAyMDE0LCBdCgp0ZW1wZGF0YTMgPC0gZGF0YS5mcmFtZShkYXRheWVhcmZpbHRlcjIkZGF0YXNldC5uQWxsTmVvbmljLCBkYXRheWVhcmZpbHRlcjMkZGF0YXNldC55ZWFyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXllYXJmaWx0ZXIzJGRhdGFzZXQucHJpY2VwZXJsYikKCgpjaGFydC5Db3JyZWxhdGlvbih0ZW1wZGF0YTMsIGhpc3RvZ3JhbSA9IFRSVUUsIG1ldGhvZCA9IGMoInBlYXJzb24iLCAia2VuZGFsbCIsICJzcGVhcm1hbiIpKQpgYGAKCkVzdG8gc2lndWllbmRvIGVsIGZpbHRybyBkZSBsb3MgYcOxb3MgZGVzZGUgMTk5NCBoYXN0YSAyMDEzLCBjb25mb3JtZSBlbCB1c28gZGUgaW5zZWN0aWNpZGFzIGZ1ZSBhdW1lbnRhbmRvLCBlbCBwcmVjaW8gcG9yIGxpYnJhIGRlIG1pZWwgaWd1YWxtZW50ZSBmdWUgYXVtZW50YW5kbyBlbCB1c28gZGUgaW5zZWN0aWNpZGEgZW4gbG9zIGVzdGFkb3Mgbm9ydGVhbWVyaWNhbm9zLgoKIyMjIyMgQ29ycmVsYWNpw7NuIGVudHJlIGxhcyB2YXJpYWJsZXMgbcOhcyByZWxhY2lvbmFkczsgc3RvY2tzLCBwcm9kdmFsdWUsIG51bWNvbCwgdG90YWxwcm9kOgoKRXN0YXMgY2FyYWN0ZXLDrXN0aWNhcyBiaWVuIHJlbGFjaW9uYWRhcyBub3MgcHVlZGVuIG1vZGVsYXIgZWwgY29tcG9ydGFtaWVudG8gZGUgbGFzIGNvbG9uaWFzIGFww61jb2xhcyBkZXNkZSBsYSBwZXJzcGVjdGl2YSBkZWwgcmVuZGltaWVudG8sIHNlIHBvZHLDrWFuIHV0aWxpemFyIHBhcmEgaW50ZW50YXIgcHJlZGVjaXIgbGEgcHJvZHVjY2nDs24gYSBmdXR1cm8gbyBpbmNsdXNvIGVsIHByZWNpbyBzaSBhZ3JlZ2Ftb3MgdW4gcG9jbyBtw6FzIGRlIGNhcmFjdGVyw61zdGljYXMuCgpTaW4gZW1iYXJnbyB0YW1iacOpbiBlcyBpbXBvcnRhbnRlIG5vdGFyIHF1ZSBsYSBjYXJhY3RlcsOtc3RpY2EgcXVlIG5vcyBkZWZpbmUgZWwgcmVuZGltaWVudG8gcG9yIGNvbG9uaWEgKHlpZWxkcGVyY29sKSBubyBlc3TDoSBjb3JyZWxhY2lvbmFkbyBuaSBhbCBzdG9jaywgbmkgYWwgdG90YWwgZGUgcHJvZHVjY2nDs24sIGVzdG8gcXVpesOhcyBzZSBkZWJhIGEgbGEgaW50ZXJ2ZW5zacOzbiBkZSBsYSB2YXJpYWJsZSBuw7ptZXJvIGRlIGNvbG9uaWFzIGFww61jb2xhcywgZW4gZWwgZGF0YXNldCBlc3RhIGNhcmFjdGVyw61zdGljYXMgc2UgbWFudGllbmUgY2FzaSBwb3IgbG9zIG1pc21vcyB2YWxvcmVzIHB1ZXMsIGEgcGVzYXIgZGUgcXVlIGxhcyBhYmVqYXMgZW4gbGEgY29sb25pYSBoYXlhbiBkZWphZG8gZGUgcHJvZHVjaXIgbWllbCB5L28gZXN0w6luIG11ZXJ0YXMsIGxhIGNvbG9uaWEgYXDDrWNvbGEgc2lndWUgY29udGFuZG8uCgpgYGB7ciwgZWNobz1GQUxTRX0KbGlicmFyeSh4dHMpCmxpYnJhcnkoem9vKQpsaWJyYXJ5KFBlcmZvcm1hbmNlQW5hbHl0aWNzKQp0ZW1wZGF0YTMgPC0gZGF0YS5mcmFtZShkYXRhc2V0JHN0b2NrcywgZGF0YXNldCRwcm9kdmFsdWUsIGRhdGFzZXQkbnVtY29sLCBkYXRhc2V0JHRvdGFscHJvZCkKCmNoYXJ0LkNvcnJlbGF0aW9uKHRlbXBkYXRhMywgaGlzdG9ncmFtID0gVFJVRSwgbWV0aG9kID0gYygicGVhcnNvbiIsICJrZW5kYWxsIiwgInNwZWFybWFuIikpCmBgYAojIyMjIyMgRXhwbGljYWNpw7NuIGRlIGNvcnJlbGFjacOzbiBjb24gbGFzIGNhcmFjdGVyw61zdGljYXMgdG90YWxwcm9kIHkgcHJvZHZhbHVlLgoKTGEgY29ycmVsYWNpw7NuIGRlIHBlYXJzb24gZXMgbGEgbcOhcyBjb23Dum4geSBzZSB1dGlsaXphIHBhcmEgc2FiZXIgcXVlIHRhbiByZWxhY2lvbmFkYXMgZXN0w6FuIGRvcyBhdHJpYnV0b3MgcXVlIGRlc2NyaWJlbiB1bmEgcG9ibGFjacOzbiwgYSB0cmF2w6lzIGRlbCB2YWxvciBkZSB0LCBsb3MgZ3JhZG9zIGRlIGxpYmVydGFkIHkgZWwgcC12YWx1ZSwgcG9kZW1vcyBhdmVyaWd1ciBxdWUgdGFudGEgY29uZmlhbnphIHRlbmVtb3MgZW4gcXVlIHVuYSBjYXJhY3RlcsOtc3RpY2Egbm9zIGRlc2NyaWJhIGxhIG90cmEsIGVuIGVzdGUgY2FzbyB0ZW5lbW9zIHVuIDk1IHBvcmNpZW50byBkZSBpbnRlcnZhbG8gZGUgY29uZmlhbnphIGNvbiB1bmEgY29ycmVsYWNpw7NuIGRlIDAuODgsIGxvIGN1YWwgZXMgYnVlbmEsIHlhIHF1ZSB0b21hbmRvIGVuIGN1ZW50YSBxdWUgbG9zIHZhbG9yZXMgZGUgY29ycmVsYWNpw7NuIGRlIHBlYXJzb24gdmFuIGRlc2RlIC0xIGEgMSwgc2llbmRvIDAgZWwgdmFsb3IgZGUgbnVsYSBjb3JyZWxhY2nDs24gZW50cmUgY2FyYWN0ZXLDrXN0aWNhcy4KClVzYW5kbyBlbCBjb2VmaWNpZW50ZSBkZSBkZXRlcm1pbmFjacOzbiAkcl4yJCBidXNjYW1vcyBzYWJlciBjdWFsIGVzIGxhIHByb3BvcmNpw7NuIGRlIGxhIHZhcmlhY2nDs24gdG90YWwgZW4gZWwgdmFsb3IgZGUgbGEgcHJvZHVjY2nDs24gcXVlIHB1ZWRlIHNlciBleHBsaWNhZGEgcG9yIGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuLCAkMC44ODI0MTQ2XjI9MC43Nzg2NTU2JCwgZXMgZGVjaXIgcXVlIGVsIDc3Ljg2JSBkZWwgdmFsb3IgZGUgcHJvZHVjY2nDs24gZXN0w6EgcmVsYWNpb25hZG8gY29uIGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuLgoKYGBge3IsIGVjaG89RkFMU0V9CmNvci50ZXN0KGRhdGFzZXQkdG90YWxwcm9kLCBkYXRhc2V0JHByb2R2YWx1ZSkKYGBgClN1bWFkbyBhIGVzdG8gc2kgZW4gYWxnw7puIG1vbWVudG8gc2UgdGllbmUgZHVkYSBzb2JyZSBzaSBjdW1wbGVuIGNvbiBsYXMgcmlndXJvc2FzIHByZW1pc2FzIHBhcmEgbGEgYXBsaWNhY2nDs24gZGVsIGNvZWZpY2llbnRlIGRlIGNvcnJlbGFjacOzbiBkZSBQZWFyc29uLCBzZSBkZWJlIG9idGFyIHBvciB1bmEgYWx0ZXJuYXRpdmEgbnAgcGFyYW3DqXRyaWNhLCBhIGNvbnRpbnVhY2nDs24gc2Ugb2JzZXJ2YSBsYSBjb3JyZWxhY2nDs24gZGUgc3BlYXJtYW4gZW50cmUgZWwgcHJlY2lvIHBvciBsaWJyYSBkZSBtaWVsIHkgZWwgYcOxby4gRGViaWRvIGEgbGEgY2xhc2lmaWNhY2nDs24gcG9yIHJhbmdvIGRlIGZlY2hhIGVzdGUgY29lZmljaWVudGUgZGUgY29ycmVsYWNpw7NuIGVzIG3DoXMgZWZpY2llbnRlIHBhcmEgY29ub2NlciBsYSBjb3JyZWxhY2nDs24gZW50cmUgZXN0YXMgZG9zIGNhcmFjdGVyw61zdGljYXMsIGlndWEgcXVlIGVsIGNvZWZpY2llbnRlIGRlIFBlYXJzb24gbG9zIHZhbG9yZXMgdmFuIGRlIC0xIGEgMSBzaWVuZG8gMCBzaWduaWZpY2FkbyBkZSBubyBjb3JyZWxhY2nDs24uCgpgYGB7ciwgZWNobz1GQUxTRSwgZXJyb3I9RkFMU0V9CmNvci50ZXN0KGRhdGFzZXQkcHJpY2VwZXJsYiwgZGF0YXNldCR5ZWFyLCBtZXRob2QgPSAic3BlYXJtYW4iKQpgYGAKCiMjIyBSZWdyZXNpw7NuIE3Dumx0aXBsZQoKQ29tbyBoZW1vcyB2aXN0byBlbiBsYSBzZWNjacOzbiBhdGVyaW9yIG51ZXN0cmFzIHZhcmlhYmxlcyBkZWwgZmVuw7NtZW5vIGVzdMOhbiByZWxhY2lvbmFkYXMsIHVuYXMgbcOhcyBxdWUgb3RyYXMsIHBlcm8gc8OtIHNlIGVuY3VlbnRyYW4gcmVsYWNpb25hZG9zLCBlbCBhbsOhbGlzaXMgZGUgcmVncmVzacOzbiBsaW5lYWwgdmVyaWZpY2EgcXVlIGxvcyBhdHJpYnV0b3Mgc2VhbiBjYXBhY2VzIGRlIHkgYnVzY2EgY29tbyByZXN1bHRhZG8gb2J0ZW5lciBpbmZlcmVuY2lhcyBhY2VyY2EgZGVsIGZlbsOzbWVubyB5IGNvbiBlbGxvIGVjb250cmFyIGxhIGVjdWFjacOzbiBkZSBwcmVkaWNjacOzbiBxdWUgbm9zIHBlcm1pdGEgZW5jb250cmFyIHVuIHZhbG9yIHByZWRpY3RvcmlvIHJlc3BlZWN0byBhbCBtb2RlbG8gcmVhbGl6YWRvLgoKUGFyYSBlc3RlIGVqZXJjaWNpbyB0b21hcmVtb3MgbGEgY2FyYWN0ZXLDrXN0aWNhIHByb2R1Y2Npw7NuIHRvdGFsICh0b3RhbHByb2QpIGNvbW8gbnVlc3RyYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSAocmVzcHVlc3RhKSwgcGVybyBkZWJpZG8gcXVlIHRlbmVtb3MgZGl2ZXJzYXMgdmFyaWFibGVzIHF1ZSBsYSBkZXNjcmliZW4gdXNhcmVtb3MgcmVncmVzacOzbiBtw7psdGlwbGUgcXVlIHBlcm1pdGUgdG9tYXIgZGlzdGludGFzIGNhcmFjdGVyw61zdGljYXMgaW5kZXBlbmRpZW50ZXMgcXVlIGRlc2NyaWJhbiBsYSByZXNwdWVzdGEuIAoKUGFyYSBlbGxvIGFuYWxpemFyZW1vcyBwcmltZXJhbWVudGUgcXXDqSB2YXJpYWJsZXMgc29uIHNpZ25pZmljYXRpdmFzIHBhcmEgZWwgbW9kZWxvIGRlIHByZWRpY2Npw7NuIGRlIGxhIHByb2R1Y2Npw7NuIHRvdGFsIGRlIG1pZWwgZGUgYWJlamEgZW4gZXN0YWRvc3VuaWRvcyBkZSBhbcOpcmljYS4KCmBgYHtyLCBlY2hvPUZBTFNFLCBlcnJvcj1GQUxTRX0KbXlkYXRhIDwtIGRhdGFzZXQKbXlkYXRhJEZJUFMgPC0gTlVMTApteWRhdGEkc3RhdGUgPC0gTlVMTApteWRhdGEkU3RhdGVOYW1lIDwtIE5VTEwKCmNvbnRyYXN0cyhteWRhdGEkUmVnaW9uKQoKcmVnMSA8LSBsbShwcm9kdmFsdWUgfiAuLGRhdGEgPSBteWRhdGEpCgpzdW1tYXJ5KHJlZzEpCmBgYApMb3MgY8OzZGlnb3MgZGUgc2lnbmlmaWNhbmNpYSBkYWRvcyBwb3IgbGEgY2FudGlkYWQgZGUgYXN0ZXLDrXNjb3MgZW4gY2FkYSB1bmEgZGUgbGFzIGNhcmFjdGVyw61zdGljYXMgbm9zIGRlbXVlc3RyYW4gcXVlIHZhcmlhYmxlcyBzaXJ2ZW4gcGFyYSBhbmFsaXphciBudWVzdHJvIGZlbsOzbWVubywgYXVucXVlIHNlYW4gc8OzbG8gZG9zIGRlIGxvcyBpbnNlY3RpY2lkYXMgbmXDs25pY29zIGxvcyBxdWUgc2UgbXVlc3RyYW4gY29uIG1heW9yIHNpZ25pZmljYW5jaWEgbm8gcXVpZXJlIGRlY2lyIHF1ZSBubyBlc3TDqW4gcmVsYWNpb25hZG9zIGNvbiBlbCBmZW7Ds21lbm8sIGhhY2llbmRvIHVuIGFuw6FsaXNpcyBwcmV2aW8gc2UgcHVlZGUgbm90YXIgcXVlIGxhIHByZXNlbmNpYSBkZSBlc3RvcyBkb3MgaW5zZWN0aWNpZGFzIChpbWlkYWNsb3ByaWQgeSB0aGlhbWV0aG94YW0pIHNvbiBsb3MgbcOhcyB1dGlsaXphZG9zIGFsIG1lbm9zIGVuIGVzdGEgb2JzZXJ2YWNpw7NuIHBvciBsb3EgdWUgZGViZW4gc2VyIGFncmVnYWRvcyBhbCBtb2RlbG8gcXVlIHNlcsOhIHV0aWxpemFkby4KCmBgYHtyLCBlY2hvPUZBTFNFLCBlcnJvcj1GQUxTRX0KbXlkYXRhIDwtIGRhdGFzZXQKbXlkYXRhJEZJUFMgPC0gTlVMTApteWRhdGEkc3RhdGUgPC0gTlVMTApteWRhdGEkU3RhdGVOYW1lIDwtIE5VTEwKCmNvbnRyYXN0cyhteWRhdGEkUmVnaW9uKQoKcmVnMSA8LSBsbShwcm9kdmFsdWUgfiBudW1jb2wrdG90YWxwcm9kK3N0b2Nrcyt5ZWFyK25USElBTUVUSE9YQU0rbklNSURBQ0xPUFJJRCxkYXRhID0gbXlkYXRhKQoKc3VtbWFyeShyZWcxKQpgYGAKClRlbmVtb3MgZW50b25jZXMgbnVlc3RybyBtb2RlbG8gY29uIGxhcyBjYXJhY3RlcsOtc3RpY2FzIG3DoXMgc2lnbmlmaWNhdGl2YXMgcGFyYSBleHBsaWNhciBlbCBjb21wb3J0YW1pZW50byBkZWwgdG90YWwgZGUgcHJvZHVjY2nDs24uIEVsIHZhbG9yIGRlICRNdWx0aXBsZSBSLVNxdWFyZWQkIG5vcyBpbmRpY2EgY3XDoWwgZXMgZWwgcG9yY2VudGFqZSBkZSBhanVzdGUgZGUgbG9zIGRhdG9zIGEgbGEgbGluZWEgZGUgcmVncmVzacOzbiBsaW5lYWwsIGVuIG51ZXN0cm8gY2FzbyBlcyBlbCA4NiUsIGVzIGRlY2lyLCBlbCA4NiUgZGUgbG9zIGRhdG9zIHNlIGFjZXJjYW4gYSBsYSBsw61uZWEgZGVsIG1vZGVsby4gU2Vnw7puIGVsIGNhc28gZGUgZXN0dWRpbyBlc3RvIHB1ZWRlIHNpZ25pZmljYXIgbXVjaGEgbyBwb2NhIGZpYWJpbGlkYWQgZGVsIG1vZGVsbywgcGFyYSBlc3RlIGNhc28gcGFydMOtY3VsYXIgZW4gcXVlIHPDs2xvIGJ1c2NhbW9zIGVuY29udHJhciByZXNwdWVzdGFzIGFjZXJjYSBkZSBsYSByZWxhY2nDs24gZGVsIHVzbyBkZSBpbnNlY3RpY2lkYXMgbmXDs25pY29zIGNvbiBsYSBwcm9kdWNjacOzbiBkZSBtaWVsIGVzdGFkb3VuaWRlbnNlIHRvbWFyZW1vcyBlc3RlIHZhbG9zIGNvbW8gc2lnbmlmaWNhdGl2byB5IHNlZ3VpcmVtb3MgYWRlbGFudGUgY29uIGVsIGFuw6FsaXNpcy4KCkVsIGFub3ZhIG5vcyByZWl0ZXJhIG51ZXN0cmEgaGlww7N0ZXNpcyBzb2JyZSBxdWUgw6lzdGFzIHZhcmlhYmxlcyB0aWVuZW4gdW5hIHByb2JhYmlsaWRhZCBkaWZlcmVudGUgZGUgMCB5IHF1ZSBzb24gYWx0YW1lbnRlIHNpZ25pZmljYXRpdmFzIHBhcmEgZGVzY3JpYmlyIGVsIGZlbsOzbWVuby4KCmBgYHtyLCBlY2hvPUZBTFNFLCBlcnJvcj1GQUxTRX0KYW5vdmEocmVnMSkKYGBgCgojIyMjIyBDdW1wbGltaWVudG8gZGUgbG9zIHN1cHVlc3RvcyBkZWwgbW9kZWxvCgojIyMjIyMgQWxlYXRvcmllZGFkIChSZXNpZHVhbHMgdnMgRml0dGVkKQpBIHBlc2FyIGRlIHF1ZSBsb3MgZGF0b3Mgc2UgbWFudGllbmVuIG11eSBhZ3J1cGFkb3MgZGVsIGxhZG8gaXpxdWllcmRvIGRlIGxhIGdyw6FmaWNhIGNvbmZvcm1lIHZhbW9zIG1vdmllbmRvIGVsIGZvY28gYWwgbGFkbyBpenF1aWVyZG8gbG9zIGRhdG9zIGNvbWllbnphcyBhIGRpc3BlcnNhcnNlIGxvIGN1YWwgaW5kaWNhIHF1ZSBudWVzdHJvcyBkYXRvcyBzb24gYWxlYXRvcmlvcyB5IG5vcyB0aWVuZW4gdW4gY29tcG9ydGFtaWVudG8gbGluZWFsLCBlbiBlc3RhIGdyw6FmaWNhIG5vcyBoYWNlIGluY2FwacOpIGVuIGxhcyBvYnNlcnZhY2lvbmVzIDYzMCwgNjMxIHkgNjMzLCBsbyBjdWFsIGluZGljYSBxdSBlc3TDoXMgb2JzZXJ2YWNpb25lcyBlc3TDoW4gdW4gcG9jbyBsZWpvcyBkZSBsYXMgZGVtw6FzLCB5IHRhbCB2ZXogdmFsZ2EgbGEgcGVuYSBlbGltaW5hcmxhcy4KCiMjIyMjIyBEaXN0cmlidWNpw7NuIE5vcm1hbCAoTm9ybWFsIFEtUSkKTGEgc2VndW5kYSBncsOhZmljYSBoYWJsYSBkZSBsYSBkaXN0cmlidWNpw7NuIG5vcm1hbCBkZSBsb3MgcmVzaWR1b3MsIGNvbW8gb2JzZXJ2YW1vcyBlbiBsYSBncsOhZmljYSBsb3MgZGF0b3MgZXN0w6FuIGJpZW4gZGlzdHJpYnXDrWRvcyBzb2JyZSB0b2RvIGRlbCAtMiBhbCAyLCBsb3MgcmVzaWR1b3MgZnVlcmEgZGUgZXN0b3MgdmFsb3JlcyBlbXBpZXphbiBhIGFsZWphcnNlIHVuIHBvY28gcGVybyBkZSBpZ3VhbCBtYW5lcmEgaGFjZSDDqW5mYXNpcyBlbiBsYXMgb2JzZXJ2YWNpb25lcyBtZW5jaW9uYWRhcyBhbnRlcmlvcm1lbnRlLCBsbyBjdWFsIGhhc3RhIGFob3JhIG5vcyBpbmRpY2EgcXVlIGVzYXMgb2JzZXJ2YWNpb25lcyBwdWVkZW4gc2VyIHVuIGdyYXZlIHByb2JsZW1hIHBhcmEgbnVlc3RybyBtb2RlbG8uCgojIyMjIyMgSG9tb2NlZGFzdGljaWRhZCAoU2NhbGUtTG9jYXRpb24pCkVzdGEgZ3LDoWZpY2Egbm9zIHBlcm1pdGUgdmVyaWZpY2FyIGVsIHN1cHVlc3RvIGRlIHZhcmlhbnphIChob21vY2VkYXN0aWNpZGFkKSwgZXMgZGVjaXIsIGNvbiBlbGxhIHNhYmVtb3Mgc2kgbG9zIHJlc2lkdW9zIHNlIHJlcGFydGVuIGVxdWl0YXRpdmFtZW50ZSBhIGxvIGxhcmdvIGRlIGxvcyByYW5nb3MgcHJlZGljdG9yZXMuCgpBIHBlc2FyIGRlIHF1ZSBsb3MgZGF0b3Mgc2UgYWdydXBhbiBhIGxhIGxpbmVhLCBlc3RhIGxpbmVhIGVzdMOhIGxlam9zIGRlIHNlciB1bmEgbGluZWEgaG9yaXpvbnRhbCwgcGFyYSByZXNvbHZlciBlc3RvIHB1ZGnDqXJhbW9zIHRyYW5zZm9ybWFyIGxvcyBkYXRvcyB5IGJ1c2NhciBxdWUgc2UgY3VtcGxhIGNvbiBsYSBob21vY2VkYXN0aWNpZGFkIGRlbCBtb2RlbG8sIHNpbiBlbWJhcmdvIHBhcmEgZmluZXMgZGUgZXN0YSBpbnZlc3RpZ2FjacOzbiBubyBzZXLDoSBuZWNlc2FyaW8gaXIgbcOhcyBhbGzDoS4gU29icmUgdG9kbyBwb3JxdWUgZWwgcmVzdG8gZGUgbG9zIGdyw6FmaWNvcyBub3MgbXVlc3RyYW4gZWwgY3VtcGxpbWllbnRvIGRlIGxvcyBkZW3DoXMgc3VwdWVzdG9zLgoKIyMjIyMjIFZhbG9yZXMgaW5mbHV5ZW50ZXMgKFJlc2lkdWFscyB2cyBMZXZlcmFnZSkKRW4gZWwgw7psdGltbyBncsOhZmljbyBwb2RlbW9zIGlkZW50aWZpY2FyIGVzYXMgb2JzZXJ2YWNpb25lcyBxdWUgcmVhbG1lbnRlIGNhdXNhcsOhbiB1biBwcm9ibGVtYSwgeWEgcXVlIG5vIHRvZG9zIGxvcyBvdXRsaWVycyBwdWVkZW4gc2VyIGluZmx1eWVudGVzIGVuIG51ZXN0cm8gbW9kZWxvLCBzZSByZWNvbWllbmRhIHVzYXIgZXN0ZSBncsOhZmljbyBwYXJhIGVuY29udHJhciBlc29zIGRhdG9zIHF1ZSByZWFsbWVudGUgaW5mbHV5ZW4gZW4gbnVlc3RybyBtb2RlbG8uCgpBcXVlbGxhcyBvYnNlcnZhY2lvbmVzIGFsZWphZGFzIGRlIGxhIGRpc3RhbmNpYSBjb29rIHNlZ3VyYW1lbnRlIG5vcyBkYXLDoW4gcHJvYmxlbWFzIHkgc2UgZGViZSBvcHRhciBwb3IgZWxpbWluYXIgZXNhcyBvYnNlcnZhY2lvbmVzLCBlbiBsYSBncsOhZmljYSBub3MgbXVlc3RyYSBxdWUgbGFzIG9ic2VydmFjaW9uZXMgNjMzLCA2MzEgeSA4NSBzb24gb2JzZXJ2YWNpb25lcyBhdMOtcGljYXMgcXVlIHB1ZGllcmFuIGluZmx1aXIgZGUgZm9ybWEgbmVnYXRpdmEgbnVlc3RybyBtb2RlbG8uCgpgYGB7ciwgZWNobz1GQUxTRSwgZXJyb3I9RkFMU0V9CnBhcihtZnJvdyA9IGMoMiwgMikpCnBsb3QocmVnMSkKYGBgCgpUb2RvIGVzdGUgYW7DoWxpc2lzIGRlIHJlZ3Jlc2nDs24gbcO6bHRpcGxlIGVzIHBhcmEgaWRlbnRpZmljYXIgbGFzIGNhcmFjdGVyw61zdGljYXMgcXVlIGFmZWN0YW4gbnVlc3RybyBmZW7Ds21lbm8sIGVuIGVzdGUgY2FzbywgZWwgdmFsb3IgZGUgcHJvZHVjY2nDs24gKHJlc3VsdGFkbyBkZSBtdWx0aXBsaWNhciBlbCB0b3RhbCBkZSBwcm9kdWNjacOzbiB5IGVsIHByZWNpbyBwb3IgbGlicmEpLCBkZWJpZG8gYSBlc3RlIHBlcXVlw7FvIGFuw6FsaXNpcyB2ZW1vcyBxdWUgZWZlY3RpdmFtZW50ZSBlbCB1c28gZXNwZWNpYWxtZW50ZSBkZSBlc3RvcyBkb3MgbmXDs25pY290aW5vaWRlcy4KCiMjIyBWYWxvcmVzIMO6bmljb3MgZGVsIGNvbmp1bnRvIGRlIGRhdG9zCkxvcyBtw6l0b2RvcyBkZSBjbGFzaWZpY2FjacOzbiBjb21vIEstbm4sIE5haXZlIEJheWVzIHkgSy1tZWFucyBidXNjYW4gY2xhc2lmaWNhciB1biBmZW7Ds21lbm8gdXRpbGl6YW5kbyBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBkZSBjYWRhIG9ic2VydmFjacOzbi4KCkFjdHVhbG1lbnRlIGVuIGVzdGUgZGF0YXNldCBsb3MgdmFsb3JlcyDDum5pY29zIGRlIGNhZGEgY29sdW1uYSBzb24gZXh0ZW5zb3MsIGV4Y2VwdG8gcG9yIGxhIHJlZ2nDs24sIGVsIHJlc3RvIGRlIGNhcmFjdGVyw61zdGljYXMgdGllbmVuIGdyYW5kZXMgbsO6bWVyb3MgZGUgdmFsb3JlcyDDum5pY29zLgoKQSBtZW5vcyBxdWUgcXVpc2nDqXJhbW9zIGFncnVwYXIgZW4gdGlwbyBkZSByZWdpw7NuIGVuIGJhc2UgYWwgcmVzdG8gZGUgY2FyYWN0ZXLDrXN0aWNhcywgZXN0ZSBkYXRhc2V0IG5vIHB1ZWRlIHNlciB1dGlsaXphZG8gcGFyYSBoYWNlciBhZ3J1cGFtaWVudG8gcG9yIGFsZ3VubyBkZSBlc3RvcyBtw6l0b2RvcywgZWwgY2xhc2lmaWNhciBwb3IgcmVnacOzbiBubyBlcyBzaWduaWZpY2F0aXZvIHBhcmEgZXN0YSBpbnZlc3RpZ2FjacOzbi4KCmBgYHtyLCBlY2hvPUZBTFNFLCBlcnJvcj1GQUxTRX0Kc2FwcGx5KGRhdGFzZXQsIGZ1bmN0aW9uKHgpIGxlbmd0aCh1bmlxdWUoeCkpKSAKYGBgCgojI0NvbmNsdXNpb25lcwoKVG9tYW5kbyBlbiBjdWVudGEgbGEgaGlww7N0ZXNpcyBwbGFudGVhZGEgc29icmUgbGEgcmVsYWNpw7NuIG5lZ2F0aXZhIHF1ZSB0aWVuZSBlbCB1c28gZGUgaW5zZWN0aWNpZGFzIG5lw7NuaWNvcyBjb250cmEgbGFzIGNvbG9uaWFzIGFww61jb2xhcywgYW5hbGl6YW5kbyBlc3RlIGNvbmp1bnRvIGRlIGRhdG9zIGhlbW9zIGxvZ3JhbmRvIGNvbXByb2JhciBkZSBkaXZlcnNhcyBtYW5lcmFzIHF1ZSBsYSBoaXDDs3Rlc2lzIGVzIGFjZXB0YWRhLgoKRWwgb2JqZXRpdm8gbsO6bWVybyB1bm8gc29icmUgbGEgZGVzYXBhcmljacOzbiBkZSBhYmVqYXMgbm8gaGEgcG9kaWRvIHNlciBjb21wcmFiYWRvLCBlbCDDum5pY28gZGF0byBxdWUgcHVkaWVyYSBzZXJ2aXIgcGFyYSBjb21wcmFyIGVzdGUgb2JqZXRpdm8gZXMgZWwgbsO6bWVybyBkZSBjb2xvbmlhcywgc2luIGVtYmFyZ28gZWwgbsO6bWVybyBkZSBjb2xvbmlhcyBhcMOtY29sYXMgZW4gZWwgZGF0YXNldCBhIHRyYXbDqXMgZGUgbG9zIGHDsW9zIHNlIG1hbnRpZW5lIGVudHJlIGxvcyBtaXNtb3MgdmFsb3JlcywgZXN0byBkZWJpZG8gYSBxdWUgbGFzIGNvbG9uaWFzIGFww61jb2xhcyBzb24gY29udGFkYXMgZXN0w6luIG8gbm8gZW4gZnVuY2lvbmFtaWVudG8sIGFzw60gcXVlIHBvZGVtb3MgYXBveWFybm9zIGVuIGVsIHZhbG9yIHRvdGFsIGRlIHByb2R1Y2Npw7NuLCBlc3RlIGRhdG8gcGVybWl0ZSBkYXJub3MgY3VlbnRhIHF1ZSBsYSBwcm9kdWNjacOzbiBzaSBkaW1pbnV5w7MganVzdG8gZW4gbG9zIG1pc21vcyBhw7FvcyBlbiBxdWUgZWwgdXNvIGRlIGVzdG9zIGluc2VjdGljaWRhcyBhdW1lbnTDsy4KClkgYSBzdSB2ZXogZWwgcHJlY2lvIHBvciBsaWJyYSBkZSBtaWVsIGRlIGFiZWphIHNlIHZlIGFmZWN0YWRvIHBvciBlbCByZW5kaW1pZW50byB5IGVsIHRvdGFsIGRlIHByb2R1Y2Npw7NuIGRlIGxhcyBjb2xvbmlhcyBhcMOtY29sYXMsIHBvciBlbmRlIGVsIHByZWNpbyBzZSB2ZSBhZmVjdGFkbyBkZSBpZ3VhbCBtYW5lcmEgcG9yIGVsIGltcGFjdG8gcXVlIHRpZW5lIGVsIHVzbyBkZSBlc3RvcyBpbnNlY3RpY2lkYXMgZW4gbG9zIGNhbXBvcyBhZ3LDrWNvbGFzIHkgcXVlIHBvc3Rlcmlvcm1lbnRlIHNvbiBwb2xpbml6YWRvcyBwb3IgYWJlamFzIGFsIHJlZGVkb3IgZGUgdG9kbyBlbCBtdW5kby4KCkHDum4gc2UgcHVlZGVuIHJlYWxpemFyIG3DoXMgaW52ZXN0aWdhY2nDs24gcmVzcGVjdG8gYWwgdGVtYSwgYWN0dWFsbWVudGUgQmF5ZXIgc2UgZW5jdWVudHJhIGVuIGp1aWNpbyB5IHRpZW5lIHVuYSBmdWVydGUgZGVmZW5zYSwgbm8gcG9yIG5hZGEgZXMgZWwgZ2lnYW50ZSBkZSBsYXMgZmFybWFjw6l1dGljYXMsIGVzdGUgdGlwbyBkZSBpbnNlY3RpY2lkYXMgZ2VuZXJhIGdhbmFuY2lhcyBhbnVhbGVzIGRlIGFsIHJlZGVkb3IgZGUgOCwzODMgbWlsbG9uZXMgZGUgZXVyb3MuIEVzdG8gaW1wbGljYSBxdWUgc2UgZGViZSBsdWNoYXIgY29udHJhIHVuIG1vbnN0cnVvIGVub3JtZS4KClNpbiBlbWJhcmdvIHlhIGV4aXN0ZW4gcGHDrXNlcyBjb24gbGV5ZXMgZXN0cmljdGFzIHF1ZSBwcm9ow61iZW4gZWwgdXNvIGRlIGluc2VjdGljaWRhcyBuZW9uaWNvdGlub2lkZXMsIGVsIGHDsW8gcGFzYWRvIGxvcyAyOCBwYcOtc2VzIGRlIGxhIHVuacOzbiBldXJvcGVhIHNlIHVuaWVyb24gZW4gbGEgcHJvaGliaWNpw7NuIGRlIGVzdG9zIGVuIGJ1c2NhIGRlIHJlc3RhdXJhciBlbCBkYcOxbyBmYXRhbCBxdWUgc2UgaGEgcHJvZHVjaWRvIGVuIGxhIGJhc2UgZGUgbnVlc3RyYSBhbGltZW50YWNpw7NuLgoKCiMjIFJlZmVyZW5jaWFzCgoqIGh0dHBzOi8vd3d3LmNyb3BzY2llbmNlLmJheWVyLmNsL25vdGljaWFzL2NvbXVuaWNhZG8uYXNwCiogaHR0cHM6Ly90aGVzd2lzc2JheS5jaC9wZGYvR2VudG9vbWVuJTIwTGlicmFyeS9NYXRocy9TdGF0aXN0aWNzL09SZWlsbHkuU3RhdGlzdGljcy5pbi5hLk51dHNoZWxsLkEuRGVza3RvcC5RdWljay5SZWZlcmVuY2UuQXVnLjIwMDgucGRmCiogaHR0cHM6Ly9lbHBhaXMuY29tL2VscGFpcy8yMDE4LzA0LzI3L2NpZW5jaWEvMTUyNDgyMDg4OV8zMjY2ODUuaHRtbAoqIGh0dHBzOi8vd3d3LnN0YXRtZXRob2RzLm5ldC9zdGF0cy8KKiBodHRwczovL3d3dy5iYXllci5teC8KKiBodHRwczovL3d3dy5zeW5nZW50YS5jb20vCipodHRwczovL3d3dy5rYWdnbGUuY29tLwoKCiMjIyBfX+KAnFNpIGxhIGFiZWphIGRlc2FwYXJlY2llcmEgZGVsIHBsYW5ldGEsIGFsIGhvbWJyZSBzb2xvIGxlIHF1ZWRhcsOtYW4gNCBhw7FvcyBkZSB2aWRh4oCdLiBFaW5zdGVpbl9fCgoK