Se presenta un análisis preliminar de correlación de la Pérdida
Indeterminada Porcentual (%) de PSA para la Zafra 2023-2024 con
variables de Calidad de Caña obtenidas del Laboratorio.
Librerías
library(dplyr)
library(ggplot2)
library(lares)
library(ggpubr)
mapa_dispersion <- function(label_x,label_y) { # crea un mapa de dispersión Y vrs. X
ggplot(df, aes_string(x=label_x, y=label_y)) +
geom_point(
color="orange",
fill="#69b3a2",
shape=21,
alpha=0.5,
size=6,
stroke = 2
) +
geom_smooth(method=lm , color="blue", fill="#69b3a2", se=TRUE) +
ggtitle(paste(label_y,"vrs.",label_x)) +
xlab(label_x) + ylab(label_y)
}
Dataset de Pérdidas Indeterminadas
El conjunto de datos analizados contiene 47 variables de Calidad de
Caña. La variable objetivo es la Pérdida Indeterminada
Porcentual (%), que es la proporción de pérdida que
corresponde a la Pérdida Indeterminada (kg/t) respecto al Total de
Pérdidas (kg/t) desde el Core Sampler.
A continuación el detalle de las variables incluidas en el
análisis:
dataset_indeterminadas <- read.csv(file = 'c:/users/100346/OneDrive - Pantaleon. S.A/Desktop/DataScience/Perdidas Indeterminadas/Dataset_2023_2024_Dic.csv')
df <- dataset_indeterminadas[c(9,10,11,12,13,15,17,47,48,61,62,63,89,90,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,228)]
df
El dataset incluye los primeros 30 días de operación.
Función de Densidad: Pérdidas Indeterminadas (%)
distr(df,Pérdidas.indeterminadas)

La mayor cantidad de días muestran una pérdida entre el 5% y el 9%,
sin embargo existen días con pérdidas bastante elevadas, hasta un
13%.
distr(dataset_indeterminadas,Dia.Zafra,Pérdidas.indeterminadas)

La mayor parte de las pérdidas indeterminadas altas ocurren en la
primera semana de zafra.
Análisis de Correlación
Se comparan todas las variables con la variable objetivo de
Pérdida Indeterminada, y para cada una, se determina su
correlación, a un nivel de confianza del 95% (significancia 5%, p<=
0.05).
Entre ellas, se seleccionan las variables que muestran correlación
moderada a correlación fuerte (valores mayores a 0.5)
corr_var(df, # nombre del dataframe
Pérdidas.indeterminadas, # variable objetivo
max_pvalue = 0.05, # nivel de significancia para la región de rechazo en las pruebas de hipótesis
top = 30, # despliegue de las 30 variables más correlacionadas con la variable objetivo
plot = T
)
New names:

corr_var(df, # nombre del dataframe
Pérdidas.indeterminadas, # variable objetivo
max_pvalue = 0.05, # nivel de significancia para la región de rechazo en las pruebas de hipótesis
top = 30, # despliegue de las 30 variables más correlacionadas con la variable objetivo
plot = F
)
New names:
Se observan variables de Calidad de Caña que tienen
correlación fuerte a moderada con la Pérdida
Indeterminada (%), con valor absoluto de correlación mayor o igual a
0.5
Total de Caña Quemada
label_x <- "Total.de.caña.quemada..t..4737"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Existe una correlación inversa con la cantidad de caña quemada,
probablemente relacionada a la cantidad de trash reducida que la caña
quemada trae respecto a la cosecha en verde.
Trash Total
label_x <- "Trash.Total..5878"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

La correlación positiva del trash total en la pérdida
indeterminada es congruente con el resultado anterior con caña quemada:
mayor trash, mayor pérdida.
Caña Quemada antes de 36 horas
label_x <- "Caña.quemada.antes.de.36.h..t..4738"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Esta variable se relaciona con la frescura de la caña. En
general, mayor cantidad de caña “fresca”, menor pérdida.
Trash de Caña Mecanizada
label_x <- "Trash.de.caña.mecanizada..Kg..6054"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Asociado al trash, se muestra la sensibilidad de la pérdida
relacionada al trash proveniente de la cosecha mecanizada
Hojas de Maleza en Trash
label_x <- "Hojas.maleza.trash..4495"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

El rango de indeterminadas observado asociado con la
cantidad de hojas es notoriamente más significativo
que con el resto de componentes trash como lalas, mamones, corcho,
tierra, etc.
Caña Mecanizada
label_x <- "Caña.mecanizada..t..4735"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Desde la perspectiva de pérdida indeterminada, la cantidad de
caña proveniente de cosecha mecánica está inversamente correlacionada.
Normalmente la caña mecanizada tiende a tener mayores porcentajes de
fibra, lo que se asocia a mayores pérdidas en bagazo. Esto, a su vez,
reduce la porción indeterminada de la pérdida, pues aumenta la porción
determinada.
Cachaza en Caña
label_x <- "Cachaza.en.caña..1680"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Existe una correlación positiva entre la cantidad de
cachaza en caña y la pérdida indeterminada. Esto puede
indicar que, aunque el aumento en la cachaza pueda aumentar la porción
determinada de la pérdida, al parecer existe otro factor a investigar
que puede degradar la sacarosa en el proceso, y que no puede observarse
en las otras pérdidas determinadas. Se investigarán factores posibles,
(e.g. actividad microbiana) asociada a la cantidad de cachaza que pueda
generar mayores pérdidas en el proceso adelante.
Pureza del Jugo Primario
label_x <- "Pureza.Jugo.primario..2099"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

En general, mayores valores de pureza en el jugo primario están
asociados a mayores valores de pérdida.
Cepas Trash
label_x <- "Cepas.trash..4500"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Trash Caña Mecanizada Quemada
label_x <- "Trash.caña.mecanizada.quemada..4914"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Piedra en Caña
label_x <- "Piedra.en.caña...Kg.1000.t..4926"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Aunque menos notable, el peso de piedras en la caña también está
correlacionado directamente con la pérdida indeterminada. Esto
probablemente al afectar la eficiencia de capacidad industrial, cuya
correlación fue ya encontrada.
Tiempo Quema Molienda
label_x <- "Tiempo.Medio.Quema.a.Molienda..h..4776"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Esta variable también está relacionada a la frescura de la
caña.
Caña acorchada
label_x <- "Caña.acorchada..4499"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Caña Podrida
label_x <- "Caña.podrida.masa..Kg..4488"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Caña Quemada antes de 36 h
label_x <- "Caña.quemada.antes.de.36.h..4739"
label_y <- "Pérdidas.indeterminadas"
mapa_dispersion(label_x,label_y)

Pureza del Jugo Core
label_x <- "Pureza.Jugo.del.core"
mapa_dispersion(label_x,label_y)

Las direcciones de correlación de las variables de calidad de caña
coinciden con el patrón visto anteriormente: mayor Trash correlacionado
a mayor pérdida, menor frescura correlacionada a mayor pérdida, etc.
Existe una variable de Cachaza en Caña cuya relación con la pérdida no
es lo que intuitivamente se esperaría. Esto requiere mayor
investigación.
LS0tDQp0aXRsZTogIkFuw6FsaXNpcyBQw6lyZGlkYXMgSW5kZXRlcm1pbmFkYXMgUFNBIDIwMjQgKFByaW1lcm9zIDMwIETDrWFzIGRlIFphZnJhKSBWYXJpYWJsZXMgQ2FsaWRhZCBkZSBDYcOxYSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNClNlIHByZXNlbnRhIHVuIGFuw6FsaXNpcyBwcmVsaW1pbmFyIGRlIGNvcnJlbGFjacOzbiBkZSBsYSBQw6lyZGlkYSBJbmRldGVybWluYWRhIFBvcmNlbnR1YWwgKCUpIGRlIFBTQSBwYXJhIGxhIFphZnJhIDIwMjMtMjAyNCBjb24gdmFyaWFibGVzIGRlIENhbGlkYWQgZGUgQ2HDsWEgb2J0ZW5pZGFzIGRlbCBMYWJvcmF0b3Jpby4NCg0KIyMjIExpYnJlcsOtYXMNCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShsYXJlcykNCmxpYnJhcnkoZ2dwdWJyKQ0KYGBgDQoNCmBgYHtyfQ0KbWFwYV9kaXNwZXJzaW9uIDwtIGZ1bmN0aW9uKGxhYmVsX3gsbGFiZWxfeSkgeyAjIGNyZWEgdW4gbWFwYSBkZSBkaXNwZXJzacOzbiBZIHZycy4gWA0KICBnZ3Bsb3QoZGYsIGFlc19zdHJpbmcoeD1sYWJlbF94LCB5PWxhYmVsX3kpKSArIA0KICAgIGdlb21fcG9pbnQoDQogICAgICAgIGNvbG9yPSJvcmFuZ2UiLA0KICAgICAgICBmaWxsPSIjNjliM2EyIiwNCiAgICAgICAgc2hhcGU9MjEsDQogICAgICAgIGFscGhhPTAuNSwNCiAgICAgICAgc2l6ZT02LA0KICAgICAgICBzdHJva2UgPSAyDQogICAgICAgICkgKw0KICAgIGdlb21fc21vb3RoKG1ldGhvZD1sbSAsIGNvbG9yPSJibHVlIiwgZmlsbD0iIzY5YjNhMiIsIHNlPVRSVUUpICsNCiBnZ3RpdGxlKHBhc3RlKGxhYmVsX3ksInZycy4iLGxhYmVsX3gpKSArDQogIHhsYWIobGFiZWxfeCkgKyB5bGFiKGxhYmVsX3kpDQp9DQpgYGANCg0KDQojIyMgRGF0YXNldCBkZSBQw6lyZGlkYXMgSW5kZXRlcm1pbmFkYXMNCg0KRWwgY29uanVudG8gZGUgZGF0b3MgYW5hbGl6YWRvcyBjb250aWVuZSA0NyB2YXJpYWJsZXMgZGUgQ2FsaWRhZCBkZSBDYcOxYS4gTGEgdmFyaWFibGUgb2JqZXRpdm8gZXMgbGEgKipQw6lyZGlkYSBJbmRldGVybWluYWRhIFBvcmNlbnR1YWwgKCUpKiosIHF1ZSBlcyAqbGEgcHJvcG9yY2nDs24gZGUgcMOpcmRpZGEgcXVlIGNvcnJlc3BvbmRlIGEgbGEgUMOpcmRpZGEgSW5kZXRlcm1pbmFkYSAoa2cvdCkgcmVzcGVjdG8gYWwgVG90YWwgZGUgUMOpcmRpZGFzIChrZy90KSBkZXNkZSBlbCBDb3JlIFNhbXBsZXIqLg0KDQpBIGNvbnRpbnVhY2nDs24gZWwgZGV0YWxsZSBkZSBsYXMgdmFyaWFibGVzIGluY2x1aWRhcyBlbiBlbCBhbsOhbGlzaXM6DQoNCmBgYHtyfQ0KZGF0YXNldF9pbmRldGVybWluYWRhcyA8LSByZWFkLmNzdihmaWxlID0gJ2M6L3VzZXJzLzEwMDM0Ni9PbmVEcml2ZSAtIFBhbnRhbGVvbi4gUy5BL0Rlc2t0b3AvRGF0YVNjaWVuY2UvUGVyZGlkYXMgSW5kZXRlcm1pbmFkYXMvRGF0YXNldF8yMDIzXzIwMjRfRGljLmNzdicpDQpkZiA8LSBkYXRhc2V0X2luZGV0ZXJtaW5hZGFzW2MoOSwxMCwxMSwxMiwxMywxNSwxNyw0Nyw0OCw2MSw2Miw2Myw4OSw5MCwxMjYsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwyMjgpXQ0KZGYNCmBgYA0KDQpFbCBkYXRhc2V0IGluY2x1eWUgbG9zIHByaW1lcm9zIDMwIGTDrWFzIGRlIG9wZXJhY2nDs24uDQoNCiMjIyBGdW5jacOzbiBkZSBEZW5zaWRhZDogUMOpcmRpZGFzIEluZGV0ZXJtaW5hZGFzICglKQ0KDQpgYGB7cn0NCmRpc3RyKGRmLFDDqXJkaWRhcy5pbmRldGVybWluYWRhcykNCmBgYA0KTGEgbWF5b3IgY2FudGlkYWQgZGUgZMOtYXMgbXVlc3RyYW4gdW5hIHDDqXJkaWRhIGVudHJlIGVsIDUlIHkgZWwgOSUsIHNpbiBlbWJhcmdvIGV4aXN0ZW4gZMOtYXMgY29uIHDDqXJkaWRhcyBiYXN0YW50ZSBlbGV2YWRhcywgaGFzdGEgdW4gMTMlLg0KDQoNCmBgYHtyfQ0KZGlzdHIoZGF0YXNldF9pbmRldGVybWluYWRhcyxEaWEuWmFmcmEsUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzKQ0KYGBgDQpMYSBtYXlvciBwYXJ0ZSBkZSBsYXMgcMOpcmRpZGFzIGluZGV0ZXJtaW5hZGFzIGFsdGFzIG9jdXJyZW4gZW4gbGEgcHJpbWVyYSBzZW1hbmEgZGUgemFmcmEuDQoNCg0KIyMjIEFuw6FsaXNpcyBkZSBDb3JyZWxhY2nDs24NClNlIGNvbXBhcmFuIHRvZGFzIGxhcyB2YXJpYWJsZXMgY29uIGxhIHZhcmlhYmxlIG9iamV0aXZvIGRlICpQw6lyZGlkYSBJbmRldGVybWluYWRhKiwgeSBwYXJhIGNhZGEgdW5hLCBzZSBkZXRlcm1pbmEgc3UgY29ycmVsYWNpw7NuLCBhIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZWwgOTUlIChzaWduaWZpY2FuY2lhIDUlLCBwPD0gMC4wNSkuDQoNCkVudHJlIGVsbGFzLCBzZSBzZWxlY2Npb25hbiBsYXMgdmFyaWFibGVzIHF1ZSBtdWVzdHJhbiBjb3JyZWxhY2nDs24gbW9kZXJhZGEgYSBjb3JyZWxhY2nDs24gZnVlcnRlICh2YWxvcmVzIG1heW9yZXMgYSAwLjUpDQoNCmBgYHtyfQ0KY29ycl92YXIoZGYsICMgbm9tYnJlIGRlbCBkYXRhZnJhbWUNCiAgUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzLCAjIHZhcmlhYmxlIG9iamV0aXZvDQogIG1heF9wdmFsdWUgPSAwLjA1LCAjIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgcGFyYSBsYSByZWdpw7NuIGRlIHJlY2hhem8gZW4gbGFzIHBydWViYXMgZGUgaGlww7N0ZXNpcw0KICB0b3AgPSAzMCwgIyBkZXNwbGllZ3VlIGRlIGxhcyAzMCB2YXJpYWJsZXMgbcOhcyBjb3JyZWxhY2lvbmFkYXMgY29uIGxhIHZhcmlhYmxlIG9iamV0aXZvDQogIHBsb3QgPSBUDQopDQpgYGANCg0KYGBge3J9DQpjb3JyX3ZhcihkZiwgIyBub21icmUgZGVsIGRhdGFmcmFtZQ0KICBQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMsICMgdmFyaWFibGUgb2JqZXRpdm8NCiAgbWF4X3B2YWx1ZSA9IDAuMDUsICMgbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSBwYXJhIGxhIHJlZ2nDs24gZGUgcmVjaGF6byBlbiBsYXMgcHJ1ZWJhcyBkZSBoaXDDs3Rlc2lzDQogIHRvcCA9IDMwLCAjIGRlc3BsaWVndWUgZGUgbGFzIDMwIHZhcmlhYmxlcyBtw6FzIGNvcnJlbGFjaW9uYWRhcyBjb24gbGEgdmFyaWFibGUgb2JqZXRpdm8NCiAgcGxvdCA9IEYNCikNCmBgYA0KDQpTZSBvYnNlcnZhbiB2YXJpYWJsZXMgZGUgQ2FsaWRhZCBkZSBDYcOxYSBxdWUgdGllbmVuICoqKmNvcnJlbGFjacOzbiBmdWVydGUgYSBtb2RlcmFkYSoqKiBjb24gbGEgUMOpcmRpZGEgSW5kZXRlcm1pbmFkYSAoJSksIGNvbiB2YWxvciBhYnNvbHV0byBkZSBjb3JyZWxhY2nDs24gbWF5b3IgbyBpZ3VhbCBhIDAuNQ0KDQojIyMgVG90YWwgZGUgQ2HDsWEgUXVlbWFkYQ0KYGBge3J9DQoNCmxhYmVsX3ggPC0gIlRvdGFsLmRlLmNhw7FhLnF1ZW1hZGEuLnQuLjQ3MzciDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQoNCmBgYA0KDQoqRXhpc3RlIHVuYSBjb3JyZWxhY2nDs24gaW52ZXJzYSBjb24gbGEgY2FudGlkYWQgZGUgY2HDsWEgcXVlbWFkYSwgcHJvYmFibGVtZW50ZSByZWxhY2lvbmFkYSBhIGxhIGNhbnRpZGFkIGRlIHRyYXNoIHJlZHVjaWRhIHF1ZSBsYSBjYcOxYSBxdWVtYWRhIHRyYWUgcmVzcGVjdG8gYSBsYSBjb3NlY2hhIGVuIHZlcmRlKi4NCg0KIyMjIFRyYXNoIFRvdGFsDQpgYGB7cn0NCmxhYmVsX3ggPC0gIlRyYXNoLlRvdGFsLi41ODc4Ig0KbGFiZWxfeSA8LSAiUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzIg0KDQptYXBhX2Rpc3BlcnNpb24obGFiZWxfeCxsYWJlbF95KQ0KYGBgDQoNCipMYSBjb3JyZWxhY2nDs24gcG9zaXRpdmEgZGVsIHRyYXNoIHRvdGFsIGVuIGxhIHDDqXJkaWRhIGluZGV0ZXJtaW5hZGEgZXMgY29uZ3J1ZW50ZSBjb24gZWwgcmVzdWx0YWRvIGFudGVyaW9yIGNvbiBjYcOxYSBxdWVtYWRhOiBtYXlvciB0cmFzaCwgbWF5b3IgcMOpcmRpZGEuKg0KDQojIyMgQ2HDsWEgUXVlbWFkYSBhbnRlcyBkZSAzNiBob3Jhcw0KYGBge3J9DQpsYWJlbF94IDwtICJDYcOxYS5xdWVtYWRhLmFudGVzLmRlLjM2LmguLnQuLjQ3MzgiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KKkVzdGEgdmFyaWFibGUgc2UgcmVsYWNpb25hIGNvbiBsYSBmcmVzY3VyYSBkZSBsYSBjYcOxYS4gRW4gZ2VuZXJhbCwgbWF5b3IgY2FudGlkYWQgZGUgY2HDsWEgImZyZXNjYSIsIG1lbm9yIHDDqXJkaWRhLioNCg0KIyMjIFRyYXNoIGRlIENhw7FhIE1lY2FuaXphZGENCmBgYHtyfQ0KbGFiZWxfeCA8LSAiVHJhc2guZGUuY2HDsWEubWVjYW5pemFkYS4uS2cuLjYwNTQiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCipBc29jaWFkbyBhbCB0cmFzaCwgc2UgbXVlc3RyYSBsYSBzZW5zaWJpbGlkYWQgZGUgbGEgcMOpcmRpZGEgcmVsYWNpb25hZGEgYWwgdHJhc2ggcHJvdmVuaWVudGUgZGUgbGEgY29zZWNoYSBtZWNhbml6YWRhKg0KDQojIyMgSG9qYXMgZGUgTWFsZXphIGVuIFRyYXNoDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkhvamFzLm1hbGV6YS50cmFzaC4uNDQ5NSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQoqRWwgcmFuZ28gZGUgaW5kZXRlcm1pbmFkYXMgb2JzZXJ2YWRvIGFzb2NpYWRvIGNvbiBsYSogKipjYW50aWRhZCBkZSBob2phcyoqICplcyBub3RvcmlhbWVudGUgbcOhcyBzaWduaWZpY2F0aXZvIHF1ZSBjb24gZWwgcmVzdG8gZGUgY29tcG9uZW50ZXMgdHJhc2ggY29tbyBsYWxhcywgbWFtb25lcywgY29yY2hvLCB0aWVycmEsIGV0Yy4qDQoNCiMjIyBDYcOxYSBNZWNhbml6YWRhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkNhw7FhLm1lY2FuaXphZGEuLnQuLjQ3MzUiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KKkRlc2RlIGxhIHBlcnNwZWN0aXZhIGRlIHDDqXJkaWRhIGluZGV0ZXJtaW5hZGEsIGxhIGNhbnRpZGFkIGRlIGNhw7FhIHByb3ZlbmllbnRlIGRlIGNvc2VjaGEgbWVjw6FuaWNhIGVzdMOhIGludmVyc2FtZW50ZSBjb3JyZWxhY2lvbmFkYS4gTm9ybWFsbWVudGUgbGEgY2HDsWEgbWVjYW5pemFkYSB0aWVuZGUgYSB0ZW5lciBtYXlvcmVzIHBvcmNlbnRhamVzIGRlIGZpYnJhLCBsbyBxdWUgc2UgYXNvY2lhIGEgbWF5b3JlcyBww6lyZGlkYXMgZW4gYmFnYXpvLiBFc3RvLCBhIHN1IHZleiwgcmVkdWNlIGxhIHBvcmNpw7NuIGluZGV0ZXJtaW5hZGEgZGUgbGEgcMOpcmRpZGEsIHB1ZXMgYXVtZW50YSBsYSBwb3JjacOzbiBkZXRlcm1pbmFkYS4qDQoNCiMjIyBDYWNoYXphIGVuIENhw7FhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkNhY2hhemEuZW4uY2HDsWEuLjE2ODAiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KKkV4aXN0ZSB1bmEqICoqY29ycmVsYWNpw7NuIHBvc2l0aXZhIGVudHJlIGxhIGNhbnRpZGFkIGRlIGNhY2hhemEgZW4gY2HDsWEgeSBsYSBww6lyZGlkYSBpbmRldGVybWluYWRhLioqICpFc3RvIHB1ZWRlIGluZGljYXIgcXVlLCBhdW5xdWUgZWwgYXVtZW50byBlbiBsYSBjYWNoYXphIHB1ZWRhIGF1bWVudGFyIGxhIHBvcmNpw7NuIGRldGVybWluYWRhIGRlIGxhIHDDqXJkaWRhLCBhbCBwYXJlY2VyIGV4aXN0ZSBvdHJvIGZhY3RvciBhIGludmVzdGlnYXIgcXVlIHB1ZWRlIGRlZ3JhZGFyIGxhIHNhY2Fyb3NhIGVuIGVsIHByb2Nlc28sIHkgcXVlIG5vIHB1ZWRlIG9ic2VydmFyc2UgZW4gbGFzIG90cmFzIHDDqXJkaWRhcyBkZXRlcm1pbmFkYXMuIFNlIGludmVzdGlnYXLDoW4gZmFjdG9yZXMgcG9zaWJsZXMsIChlLmcuIGFjdGl2aWRhZCBtaWNyb2JpYW5hKSBhc29jaWFkYSBhIGxhIGNhbnRpZGFkIGRlIGNhY2hhemEgcXVlIHB1ZWRhIGdlbmVyYXIgbWF5b3JlcyBww6lyZGlkYXMgZW4gZWwgcHJvY2VzbyBhZGVsYW50ZS4qDQoNCg0KIyMjIFB1cmV6YSBkZWwgSnVnbyBQcmltYXJpbw0KYGBge3J9DQpsYWJlbF94IDwtICJQdXJlemEuSnVnby5wcmltYXJpby4uMjA5OSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQoqRW4gZ2VuZXJhbCwgbWF5b3JlcyB2YWxvcmVzIGRlIHB1cmV6YSBlbiBlbCBqdWdvIHByaW1hcmlvIGVzdMOhbiBhc29jaWFkb3MgYSBtYXlvcmVzIHZhbG9yZXMgZGUgcMOpcmRpZGEuKg0KDQojIyMgQ2VwYXMgVHJhc2gNCmBgYHtyfQ0KbGFiZWxfeCA8LSAiQ2VwYXMudHJhc2guLjQ1MDAiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KIyMjIFRyYXNoIENhw7FhIE1lY2FuaXphZGEgUXVlbWFkYQ0KYGBge3J9DQpsYWJlbF94IDwtICJUcmFzaC5jYcOxYS5tZWNhbml6YWRhLnF1ZW1hZGEuLjQ5MTQiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCg0KDQojIyMgUGllZHJhIGVuIENhw7FhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIlBpZWRyYS5lbi5jYcOxYS4uLktnLjEwMDAudC4uNDkyNiINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KKkF1bnF1ZSBtZW5vcyBub3RhYmxlLCBlbCBwZXNvIGRlIHBpZWRyYXMgZW4gbGEgY2HDsWEgdGFtYmnDqW4gZXN0w6EgY29ycmVsYWNpb25hZG8gZGlyZWN0YW1lbnRlIGNvbiBsYSBww6lyZGlkYSBpbmRldGVybWluYWRhLiBFc3RvIHByb2JhYmxlbWVudGUgYWwgYWZlY3RhciBsYSBlZmljaWVuY2lhIGRlIGNhcGFjaWRhZCBpbmR1c3RyaWFsLCBjdXlhIGNvcnJlbGFjacOzbiBmdWUgeWEgZW5jb250cmFkYS4qDQoNCiMjIyBUaWVtcG8gUXVlbWEgTW9saWVuZGENCmBgYHtyfQ0KbGFiZWxfeCA8LSAiVGllbXBvLk1lZGlvLlF1ZW1hLmEuTW9saWVuZGEuLmguLjQ3NzYiDQpsYWJlbF95IDwtICJQw6lyZGlkYXMuaW5kZXRlcm1pbmFkYXMiDQoNCm1hcGFfZGlzcGVyc2lvbihsYWJlbF94LGxhYmVsX3kpDQpgYGANCipFc3RhIHZhcmlhYmxlIHRhbWJpw6luIGVzdMOhIHJlbGFjaW9uYWRhIGEgbGEgZnJlc2N1cmEgZGUgbGEgY2HDsWEuKg0KDQojIyMgQ2HDsWEgYWNvcmNoYWRhDQpgYGB7cn0NCmxhYmVsX3ggPC0gIkNhw7FhLmFjb3JjaGFkYS4uNDQ5OSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQojIyMgQ2HDsWEgUG9kcmlkYQ0KYGBge3J9DQpsYWJlbF94IDwtICJDYcOxYS5wb2RyaWRhLm1hc2EuLktnLi40NDg4Ig0KbGFiZWxfeSA8LSAiUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzIg0KDQptYXBhX2Rpc3BlcnNpb24obGFiZWxfeCxsYWJlbF95KQ0KYGBgDQoNCiMjIyBDYcOxYSBRdWVtYWRhIGFudGVzIGRlIDM2IGgNCmBgYHtyfQ0KbGFiZWxfeCA8LSAiQ2HDsWEucXVlbWFkYS5hbnRlcy5kZS4zNi5oLi40NzM5Ig0KbGFiZWxfeSA8LSAiUMOpcmRpZGFzLmluZGV0ZXJtaW5hZGFzIg0KDQptYXBhX2Rpc3BlcnNpb24obGFiZWxfeCxsYWJlbF95KQ0KYGBgDQoNCiMjIyBQdXJlemEgZGVsIEp1Z28gQ29yZQ0KYGBge3J9DQpsYWJlbF94IDwtICJQdXJlemEuSnVnby5kZWwuY29yZSINCmxhYmVsX3kgPC0gIlDDqXJkaWRhcy5pbmRldGVybWluYWRhcyINCg0KbWFwYV9kaXNwZXJzaW9uKGxhYmVsX3gsbGFiZWxfeSkNCmBgYA0KDQpMYXMgZGlyZWNjaW9uZXMgZGUgY29ycmVsYWNpw7NuIGRlIGxhcyB2YXJpYWJsZXMgZGUgY2FsaWRhZCBkZSBjYcOxYSBjb2luY2lkZW4gY29uIGVsIHBhdHLDs24gdmlzdG8gYW50ZXJpb3JtZW50ZTogbWF5b3IgVHJhc2ggY29ycmVsYWNpb25hZG8gYSBtYXlvciBww6lyZGlkYSwgbWVub3IgZnJlc2N1cmEgY29ycmVsYWNpb25hZGEgYSBtYXlvciBww6lyZGlkYSwgZXRjLiBFeGlzdGUgdW5hIHZhcmlhYmxlIGRlIENhY2hhemEgZW4gQ2HDsWEgY3V5YSByZWxhY2nDs24gY29uIGxhIHDDqXJkaWRhIG5vIGVzIGxvIHF1ZSBpbnR1aXRpdmFtZW50ZSBzZSBlc3BlcmFyw61hLiBFc3RvIHJlcXVpZXJlIG1heW9yIGludmVzdGlnYWNpw7NuLiANCg0K