#LIBRERIAS
library(ade4)
library(adespatial)
library(cluster)
library(clustsig)
library(fdth)
library(gclus)
library(ggplot2)
library(labdsv)
library(lattice)
library(PerformanceAnalytics)
library(RColorBrewer)
library(readxl)
library(vegan)
#Cargar bases de datos
biol <- read_excel("~/jose_cruz/Clases y evaluaciones/base de datos/diatomeas.xlsx",
sheet = "biol")
biol1 <- biol[-c(1,83,84)]
amb <- read_excel("~/jose_cruz/Clases y evaluaciones/base de datos/diatomeas.xlsx",
sheet = "amb")
amb.mod <- amb[-c(1,10,11)] # SIN CARACTERES
amb1 <- amb[-c(13:16),] #SE ELIMINA EL MES DE NOVIEMBRE
amb2 <- amb1[-c(1,10,11)]#SIN CARACTERES
amb.std.mod <- decostand(amb.mod,"standardize")
amb.std <- decostand(amb2,"standardize") # SIN NOVIEMBRE
#Transformacion de los datos
biol.hell <- decostand(biol1, "hell")
Hipótesis 1. La descarga de aguas servidas genera cambios en la
composición y diversidad de diatomeas, temporal y espacialmente
Si fuese posible determinar diferencias en la composición de
diatomeas, indique cuales son las especies que aportan en un 60% a la
diferencias detectadas. Apoye sus resultados con un análisis de
ordenación, dando prioridad a la representación gráfica de sus
resultados.
#espacialmente
simp_S <- simper(biol1, amb1$Sitio)
summary(simp_S)
#temporalmente
simp_T <- simper(biol1, amb1$Mes)
summary(simp_T)
Respuesta hipótesis 1:
La descarga de aguas servidas no genera cambios significativos en la
composición y diversidad de diatomeas entre los sitios de muestreo (p
> 0.05).
Por otro lado, la descarga de aguas servidas genera cambios
significativos en la composición y diversidad de diatomeas
temporalmente.
Entre agosto y febrero, las especies que aportan una diferencia del
60% son la 81, la 17, la 60 y la 6, sin embargo, las especies 17, y 6 no
resultaron estadísticamente significativas (p >0.05).
Entre los meses de agosto y junio, las especies que aportan una
diferencia del 60% son la 17, la 30, la 60, la 45, la 26, la 56, la 13,
la 6 y la 15, sin embargo, las especies 17, 30, 45, 13 y 6 no resultaron
estadísticamente significativas (p >0.05)
Finalmente, entre febrero y junio, las especies que aportan un 60% de
la diferencia entre meses son la 81, la 30, la 6 y la 17. Las especies
81 y 30 explican significativamente el 52.9% de la diferencia.
Para la representación gráfica, se procedió con un análisis de
ordenación DCA, para determinar si proceder con un CCA o un RDA. Los
valores de Axis length (< 4) demostraron que es más conveniente
proceder con un RDA.
#analisis de ordenacion
biol_dca <- decorana(biol.hell)
summary(biol_dca)
plot(biol_dca, scaling = 2, main = "DCA")

biol.rda <- rda(biol.hell ~ . , amb.std)
biol.rda
El análisis de RDA (figura 1) demuestra que la composición y la
diversidad de diatomeas no están fuertemente asociadas a ninguna de las
variables ambientales que se tomaron en cuenta, sin embargo el modelo
resultó estadísticamente significativo (F = 2.479; df = 8,3 ; p <
0.05, R2adj = 0.5182).
Figura 1.Comparación de la diversidad de diatomeas por análisis de
RDA:
plot(biol.rda)

(R2 <- RsquareAdj(biol.rda)$r.squared)
(R2adj <- RsquareAdj(biol.rda)$adj.r.squared)
Hipótesis 2. La descarga de aguas servidas genera cambios en los
parámetros fisicoquímicos del agua.
Utilice la técnica de clúster para verificar si existen patrones de
similitud temporales o espaciales en la composición de parámetros
fisicoquímicos. Muestre sus resultados utilizando gráficas y complemente
con los análisis estadísticos necesarios para justificar la conformación
del clúster. Registre el proceso estadístico que utilizó para sus
análisis.
#transformacion de datos
amb.hell.bray <- vegdist(amb.std.mod, "euclidean")
#Cluster metodo single
cluster_single <- hclust(amb.hell.bray, method = "single")
cluster_single
plot(cluster_single)
#Cluster metodo COMPLETE
cluster_complete <- hclust(amb.hell.bray, method = "complete")
cluster_complete
plot(cluster_complete)
#Cluster metodo Average
cluster_average <- hclust(amb.hell.bray, method = "average")
cluster_average
plot(cluster_average)
#Analisis del mejor modelo por la tecnica de cofenetica
coph_single <- cophenetic(cluster_single)
cor(coph_single, amb.hell.bray) #0.8757353
coph_complete <- cophenetic(cluster_complete)
cor(coph_complete, amb.hell.bray) #0.8900852
coph_average <- cophenetic(cluster_average)
cor(coph_average, amb.hell.bray) #0.8931573, mejor modelo
simprof.average <- simprof(amb.std.mod, method.cluster = "average", method.distance = "euclidean")
Respuesta hipótesis 2:
Procediendo con una técnica de clúster se compararon los valores
cofeneticos para los modelos “single” “complete” y average”, los cuales
resultaron 0.8757353, 0.8900852 y 0.8931573 respectivamente. Dado lo
anterior, se decide proceder con el método “average” por presentar un
mayor valor de cofenetica (figura 2).
Figura 2. Dendograma de variables ambientales por clúster (método
average)
plot(cluster_average)

El simprof (figura 3) demuestra significativamente que hay cierto
grado de similitud entre las variables fisico-quimicas de los cuatro
sitios durante el mes de Agosto (muestreo de 1 a 4). Durante el mes de
febrero (muestreos de 5 a 8) se puede apreciar una diferencia
significativa entre los sitios ubicados antes y despues de la descarga y
lo mismo aplica al mes de Junio (muestreos de 9 a 12). Por ultimo, el
mes de noviembre explica que no hay diferencia entre los cuatro sitios
independientemente de la posicion si antes o despues de la descarga.
Figura 3. Agrupación de variables ambientales por metodo simprof
simprof.plot(simprof.average)
'dendrogram' with 2 branches and 16 members total, at height 4.744403

Hipótesis 3 Los parámetros físico químicos varían entre los sitios y
fechas de muestreo en el área de estudio
Considere sus análisis al 95% y resuelva anotando la nomenclatura
estadística formal.
adonis2(amb.mod ~ Sitio, amb) #no hay diferencia
adonis2(amb.mod ~ Mes, amb) #hay diferencia
Respuestas hipótesis tres: Según la prueba de Análisis de varianza
usando matrices de distancia(Adonis), se determinó que existen
diferencias estadísticamente significativas que indican que los
parámetros fisicoquímicos varían entre las fechas de muestreo en el área
de estudio (F = 49.135; df = 3,15 ; p < 0.05), no obstante, no
existen diferencias estadísticamente significativas que indiquen un
cambio en los parámetros fisicoquímicos con los sitios de muestreo (F =
0.1973; df 3,15 ; p > 0.05)
LS0tDQp0aXRsZTogIkVzdHVkaW8gZGUgY2FzbyAxOiBNYXJpcGF6LFNhc2hhLCBKYW1pZSwgUmFmYWVsIHkgSm9zZSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KI0xJQlJFUklBUw0KbGlicmFyeShhZGU0KQ0KbGlicmFyeShhZGVzcGF0aWFsKQ0KbGlicmFyeShjbHVzdGVyKQ0KbGlicmFyeShjbHVzdHNpZykNCmxpYnJhcnkoZmR0aCkNCmxpYnJhcnkoZ2NsdXMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGxhYmRzdikNCmxpYnJhcnkobGF0dGljZSkNCmxpYnJhcnkoUGVyZm9ybWFuY2VBbmFseXRpY3MpDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh2ZWdhbikNCmBgYA0KDQpgYGB7cn0NCiNDYXJnYXIgYmFzZXMgZGUgZGF0b3MNCg0KYmlvbCA8LSByZWFkX2V4Y2VsKCJ+L2pvc2VfY3J1ei9DbGFzZXMgeSBldmFsdWFjaW9uZXMvYmFzZSBkZSBkYXRvcy9kaWF0b21lYXMueGxzeCIsIA0KICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gImJpb2wiKQ0KDQpiaW9sMSA8LSBiaW9sWy1jKDEsODMsODQpXQ0KDQphbWIgPC0gcmVhZF9leGNlbCgifi9qb3NlX2NydXovQ2xhc2VzIHkgZXZhbHVhY2lvbmVzL2Jhc2UgZGUgZGF0b3MvZGlhdG9tZWFzLnhsc3giLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gImFtYiIpDQoNCmFtYi5tb2QgPC0gYW1iWy1jKDEsMTAsMTEpXSAjIFNJTiBDQVJBQ1RFUkVTDQphbWIxIDwtIGFtYlstYygxMzoxNiksXSAjU0UgRUxJTUlOQSBFTCBNRVMgREUgTk9WSUVNQlJFDQphbWIyIDwtIGFtYjFbLWMoMSwxMCwxMSldI1NJTiBDQVJBQ1RFUkVTDQoNCmFtYi5zdGQubW9kIDwtIGRlY29zdGFuZChhbWIubW9kLCJzdGFuZGFyZGl6ZSIpDQphbWIuc3RkIDwtIGRlY29zdGFuZChhbWIyLCJzdGFuZGFyZGl6ZSIpICMgU0lOIE5PVklFTUJSRQ0KDQojVHJhbnNmb3JtYWNpb24gZGUgbG9zIGRhdG9zDQpiaW9sLmhlbGwgPC0gZGVjb3N0YW5kKGJpb2wxLCAiaGVsbCIpDQoNCmBgYA0KDQpIaXDDs3Rlc2lzIDEuIExhIGRlc2NhcmdhIGRlIGFndWFzIHNlcnZpZGFzIGdlbmVyYSBjYW1iaW9zIGVuIGxhIGNvbXBvc2ljacOzbiB5IGRpdmVyc2lkYWQgZGUgZGlhdG9tZWFzLCB0ZW1wb3JhbCB5IGVzcGFjaWFsbWVudGUNCg0KU2kgZnVlc2UgcG9zaWJsZSBkZXRlcm1pbmFyIGRpZmVyZW5jaWFzIGVuIGxhIGNvbXBvc2ljacOzbiBkZSBkaWF0b21lYXMsIGluZGlxdWUgY3VhbGVzIHNvbiBsYXMgZXNwZWNpZXMgcXVlIGFwb3J0YW4gZW4gdW4gNjAlIGEgbGEgZGlmZXJlbmNpYXMgZGV0ZWN0YWRhcy4gQXBveWUgc3VzIHJlc3VsdGFkb3MgY29uIHVuIGFuw6FsaXNpcyBkZSBvcmRlbmFjacOzbiwgZGFuZG8gcHJpb3JpZGFkIGEgbGEgcmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhIGRlIHN1cyByZXN1bHRhZG9zLg0KDQoNCmBgYHtyfQ0KI2VzcGFjaWFsbWVudGUNCnNpbXBfUyA8LSBzaW1wZXIoYmlvbDEsIGFtYjEkU2l0aW8pDQpzdW1tYXJ5KHNpbXBfUykNCg0KYGBgDQoNCg0KYGBge3J9DQojdGVtcG9yYWxtZW50ZQ0Kc2ltcF9UIDwtIHNpbXBlcihiaW9sMSwgYW1iMSRNZXMpDQpzdW1tYXJ5KHNpbXBfVCkNCmBgYA0KDQpSZXNwdWVzdGEgaGlww7N0ZXNpcyAxOg0KDQpMYSBkZXNjYXJnYSBkZSBhZ3VhcyBzZXJ2aWRhcyBubyBnZW5lcmEgY2FtYmlvcyBzaWduaWZpY2F0aXZvcyBlbiBsYSBjb21wb3NpY2nDs24geSBkaXZlcnNpZGFkIGRlIGRpYXRvbWVhcyBlbnRyZSBsb3Mgc2l0aW9zIGRlIG11ZXN0cmVvIChwID4gMC4wNSkuDQoNClBvciBvdHJvIGxhZG8sIGxhIGRlc2NhcmdhIGRlIGFndWFzIHNlcnZpZGFzIGdlbmVyYSBjYW1iaW9zIHNpZ25pZmljYXRpdm9zIGVuIGxhIGNvbXBvc2ljacOzbiB5IGRpdmVyc2lkYWQgZGUgZGlhdG9tZWFzIHRlbXBvcmFsbWVudGUuDQoNCkVudHJlIGFnb3N0byB5IGZlYnJlcm8sIGxhcyBlc3BlY2llcyBxdWUgYXBvcnRhbiB1bmEgZGlmZXJlbmNpYSBkZWwgNjAlIHNvbiBsYSA4MSwgbGEgMTcsIGxhIDYwIHkgbGEgNiwgc2luIGVtYmFyZ28sIGxhcyBlc3BlY2llcyAxNywgeSA2IG5vIHJlc3VsdGFyb24gZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgKHAgPjAuMDUpLg0KDQpFbnRyZSBsb3MgbWVzZXMgZGUgYWdvc3RvIHkganVuaW8sIGxhcyBlc3BlY2llcyBxdWUgYXBvcnRhbiB1bmEgZGlmZXJlbmNpYSBkZWwgNjAlIHNvbiBsYSAxNywgbGEgMzAsIGxhIDYwLCBsYSA0NSwgbGEgMjYsIGxhIDU2LCBsYSAxMywgbGEgNiB5IGxhIDE1LCBzaW4gZW1iYXJnbywgbGFzIGVzcGVjaWVzIDE3LCAzMCwgNDUsIDEzIHkgNiBubyByZXN1bHRhcm9uIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdmFzIChwID4wLjA1KQ0KDQpGaW5hbG1lbnRlLCBlbnRyZSBmZWJyZXJvIHkganVuaW8sIGxhcyBlc3BlY2llcyBxdWUgYXBvcnRhbiB1biA2MCUgZGUgbGEgZGlmZXJlbmNpYSBlbnRyZSBtZXNlcyBzb24gbGEgODEsIGxhIDMwLCBsYSA2IHkgbGEgMTcuIExhcyBlc3BlY2llcyA4MSB5IDMwIGV4cGxpY2FuIHNpZ25pZmljYXRpdmFtZW50ZSBlbCA1Mi45JSBkZSBsYSBkaWZlcmVuY2lhLg0KDQoNClBhcmEgbGEgcmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhLCBzZSBwcm9jZWRpw7MgY29uIHVuIGFuw6FsaXNpcyBkZSBvcmRlbmFjacOzbiBEQ0EsIHBhcmEgZGV0ZXJtaW5hciBzaSBwcm9jZWRlciBjb24gdW4gQ0NBIG8gdW4gUkRBLiBMb3MgdmFsb3JlcyBkZSBBeGlzIGxlbmd0aCAoPCA0KSBkZW1vc3RyYXJvbiBxdWUgZXMgbcOhcyBjb252ZW5pZW50ZSBwcm9jZWRlciBjb24gdW4gUkRBLg0KDQpgYGB7cn0NCiNhbmFsaXNpcyBkZSBvcmRlbmFjaW9uDQpiaW9sX2RjYSA8LSBkZWNvcmFuYShiaW9sLmhlbGwpDQpzdW1tYXJ5KGJpb2xfZGNhKQ0KDQpgYGANCg0KYGBge3J9DQpwbG90KGJpb2xfZGNhLCBzY2FsaW5nID0gMiwgbWFpbiA9ICJEQ0EiKQ0KYGBgDQoNCmBgYHtyfQ0KYmlvbC5yZGEgPC0gcmRhKGJpb2wuaGVsbCB+IC4gLCBhbWIuc3RkKQ0KYmlvbC5yZGENCmBgYA0KDQpFbCBhbsOhbGlzaXMgZGUgUkRBIChmaWd1cmEgMSkgZGVtdWVzdHJhIHF1ZSBsYSBjb21wb3NpY2nDs24geSBsYSBkaXZlcnNpZGFkIGRlIGRpYXRvbWVhcyBubyBlc3TDoW4gZnVlcnRlbWVudGUgYXNvY2lhZGFzIGEgbmluZ3VuYSBkZSBsYXMgdmFyaWFibGVzIGFtYmllbnRhbGVzIHF1ZSBzZSB0b21hcm9uIGVuIGN1ZW50YSwgc2luIGVtYmFyZ28gZWwgbW9kZWxvIHJlc3VsdMOzIGVzdGFkw61zdGljYW1lbnRlIHNpZ25pZmljYXRpdm8gKEYgPSAyLjQ3OTsgZGYgPSA4LDMgOyBwIDwgMC4wNSwgUjJhZGogPSAwLjUxODIpLg0KDQoNCkZpZ3VyYSAxLkNvbXBhcmFjacOzbiBkZSBsYSBkaXZlcnNpZGFkIGRlIGRpYXRvbWVhcyBwb3IgYW7DoWxpc2lzIGRlIFJEQToNCmBgYHtyfQ0KcGxvdChiaW9sLnJkYSkNCmBgYA0KDQpgYGB7cn0NCihSMiA8LSBSc3F1YXJlQWRqKGJpb2wucmRhKSRyLnNxdWFyZWQpDQooUjJhZGogPC0gUnNxdWFyZUFkaihiaW9sLnJkYSkkYWRqLnIuc3F1YXJlZCkNCg0KYGBgDQoNCkhpcMOzdGVzaXMgMi4gTGEgZGVzY2FyZ2EgZGUgYWd1YXMgc2VydmlkYXMgZ2VuZXJhIGNhbWJpb3MgZW4gbG9zIHBhcsOhbWV0cm9zIGZpc2ljb3F1w61taWNvcyBkZWwgYWd1YS4NCg0KVXRpbGljZSBsYSB0w6ljbmljYSBkZSBjbMO6c3RlciBwYXJhIHZlcmlmaWNhciBzaSBleGlzdGVuIHBhdHJvbmVzIGRlIHNpbWlsaXR1ZCB0ZW1wb3JhbGVzIG8gZXNwYWNpYWxlcyBlbiBsYSBjb21wb3NpY2nDs24gZGUgcGFyw6FtZXRyb3MgZmlzaWNvcXXDrW1pY29zLiBNdWVzdHJlIHN1cyByZXN1bHRhZG9zIHV0aWxpemFuZG8gZ3LDoWZpY2FzIHkgY29tcGxlbWVudGUgY29uIGxvcyBhbsOhbGlzaXMgZXN0YWTDrXN0aWNvcyBuZWNlc2FyaW9zIHBhcmEganVzdGlmaWNhciBsYSBjb25mb3JtYWNpw7NuIGRlbCBjbMO6c3Rlci4gUmVnaXN0cmUgZWwgcHJvY2VzbyBlc3RhZMOtc3RpY28gcXVlIHV0aWxpesOzIHBhcmEgc3VzIGFuw6FsaXNpcy4NCg0KYGBge3J9DQojdHJhbnNmb3JtYWNpb24gZGUgZGF0b3MNCmFtYi5oZWxsLmJyYXkgPC0gdmVnZGlzdChhbWIuc3RkLm1vZCwgImV1Y2xpZGVhbiIpDQpgYGANCg0KYGBge3J9DQojQ2x1c3RlciBtZXRvZG8gc2luZ2xlDQpjbHVzdGVyX3NpbmdsZSA8LSBoY2x1c3QoYW1iLmhlbGwuYnJheSwgbWV0aG9kID0gInNpbmdsZSIpDQpjbHVzdGVyX3NpbmdsZQ0KcGxvdChjbHVzdGVyX3NpbmdsZSkNCmBgYA0KDQpgYGB7cn0NCiNDbHVzdGVyIG1ldG9kbyBDT01QTEVURQ0KY2x1c3Rlcl9jb21wbGV0ZSA8LSBoY2x1c3QoYW1iLmhlbGwuYnJheSwgbWV0aG9kID0gImNvbXBsZXRlIikNCmNsdXN0ZXJfY29tcGxldGUNCnBsb3QoY2x1c3Rlcl9jb21wbGV0ZSkNCg0KYGBgDQoNCmBgYHtyfQ0KI0NsdXN0ZXIgbWV0b2RvIEF2ZXJhZ2UNCg0KY2x1c3Rlcl9hdmVyYWdlIDwtIGhjbHVzdChhbWIuaGVsbC5icmF5LCBtZXRob2QgPSAiYXZlcmFnZSIpDQpjbHVzdGVyX2F2ZXJhZ2UNCnBsb3QoY2x1c3Rlcl9hdmVyYWdlKQ0KDQpgYGANCg0KDQpgYGB7cn0NCiNBbmFsaXNpcyBkZWwgbWVqb3IgbW9kZWxvIHBvciBsYSB0ZWNuaWNhIGRlIGNvZmVuZXRpY2ENCmNvcGhfc2luZ2xlIDwtICBjb3BoZW5ldGljKGNsdXN0ZXJfc2luZ2xlKQ0KY29yKGNvcGhfc2luZ2xlLCBhbWIuaGVsbC5icmF5KSAjMC44NzU3MzUzDQoNCmNvcGhfY29tcGxldGUgPC0gIGNvcGhlbmV0aWMoY2x1c3Rlcl9jb21wbGV0ZSkNCmNvcihjb3BoX2NvbXBsZXRlLCBhbWIuaGVsbC5icmF5KSAjMC44OTAwODUyDQoNCmNvcGhfYXZlcmFnZSA8LSAgY29waGVuZXRpYyhjbHVzdGVyX2F2ZXJhZ2UpDQpjb3IoY29waF9hdmVyYWdlLCBhbWIuaGVsbC5icmF5KSAgIzAuODkzMTU3MywgbWVqb3IgbW9kZWxvDQoNCmBgYA0KDQpgYGB7cn0NCnNpbXByb2YuYXZlcmFnZSA8LSBzaW1wcm9mKGFtYi5zdGQubW9kLCBtZXRob2QuY2x1c3RlciA9ICJhdmVyYWdlIiwgbWV0aG9kLmRpc3RhbmNlID0gImV1Y2xpZGVhbiIpDQpgYGANCg0KUmVzcHVlc3RhIGhpcMOzdGVzaXMgMjoNCg0KUHJvY2VkaWVuZG8gY29uIHVuYSB0w6ljbmljYSBkZSBjbMO6c3RlciBzZSBjb21wYXJhcm9uIGxvcyB2YWxvcmVzIGNvZmVuZXRpY29zIHBhcmEgbG9zIG1vZGVsb3MgInNpbmdsZSIgImNvbXBsZXRlIiB5IGF2ZXJhZ2UiLCBsb3MgY3VhbGVzIHJlc3VsdGFyb24gMC44NzU3MzUzLCAwLjg5MDA4NTIgeSAwLjg5MzE1NzMgcmVzcGVjdGl2YW1lbnRlLiBEYWRvIGxvIGFudGVyaW9yLCBzZSBkZWNpZGUgcHJvY2VkZXIgY29uIGVsIG3DqXRvZG8gImF2ZXJhZ2UiIHBvciBwcmVzZW50YXIgdW4gbWF5b3IgdmFsb3IgZGUgY29mZW5ldGljYSAoZmlndXJhIDIpLiANCg0KRmlndXJhIDIuIERlbmRvZ3JhbWEgZGUgdmFyaWFibGVzIGFtYmllbnRhbGVzIHBvciBjbMO6c3RlciAobcOpdG9kbyBhdmVyYWdlKQ0KDQpgYGB7cn0NCnBsb3QoY2x1c3Rlcl9hdmVyYWdlKQ0KYGBgDQoNCkVsIHNpbXByb2YgKGZpZ3VyYSAzKSBkZW11ZXN0cmEgc2lnbmlmaWNhdGl2YW1lbnRlIHF1ZSBoYXkgY2llcnRvIGdyYWRvIGRlIHNpbWlsaXR1ZCBlbnRyZSBsYXMgdmFyaWFibGVzIGZpc2ljby1xdWltaWNhcyBkZSBsb3MgY3VhdHJvIHNpdGlvcyBkdXJhbnRlIGVsIG1lcyBkZSBBZ29zdG8gKG11ZXN0cmVvIGRlIDEgYSA0KS4gRHVyYW50ZSBlbCBtZXMgZGUgZmVicmVybyAobXVlc3RyZW9zIGRlIDUgYSA4KSBzZSBwdWVkZSBhcHJlY2lhciB1bmEgZGlmZXJlbmNpYSBzaWduaWZpY2F0aXZhIGVudHJlIGxvcyBzaXRpb3MgdWJpY2Fkb3MgYW50ZXMgeSBkZXNwdWVzIGRlIGxhIGRlc2NhcmdhIHkgbG8gbWlzbW8gYXBsaWNhIGFsIG1lcyBkZSBKdW5pbyAobXVlc3RyZW9zIGRlIDkgYSAxMikuIFBvciB1bHRpbW8sIGVsIG1lcyBkZSBub3ZpZW1icmUgZXhwbGljYSBxdWUgbm8gaGF5IGRpZmVyZW5jaWEgZW50cmUgbG9zIGN1YXRybyBzaXRpb3MgaW5kZXBlbmRpZW50ZW1lbnRlIGRlIGxhIHBvc2ljaW9uIHNpIGFudGVzIG8gZGVzcHVlcyBkZSBsYSBkZXNjYXJnYS4NCg0KRmlndXJhIDMuIEFncnVwYWNpw7NuIGRlIHZhcmlhYmxlcyBhbWJpZW50YWxlcyBwb3IgbWV0b2RvIHNpbXByb2YNCg0KYGBge3J9DQpzaW1wcm9mLnBsb3Qoc2ltcHJvZi5hdmVyYWdlKQ0KYGBgDQoNCg0KSGlww7N0ZXNpcyAzIExvcyBwYXLDoW1ldHJvcyBmw61zaWNvIHF1w61taWNvcyB2YXLDrWFuIGVudHJlIGxvcyBzaXRpb3MgeSBmZWNoYXMgZGUgbXVlc3RyZW8gZW4gZWwgw6FyZWEgZGUgZXN0dWRpbw0KDQpDb25zaWRlcmUgc3VzIGFuw6FsaXNpcyBhbCA5NSUgeSByZXN1ZWx2YSBhbm90YW5kbyBsYSBub21lbmNsYXR1cmEgZXN0YWTDrXN0aWNhIGZvcm1hbC4NCg0KYGBge3J9DQphZG9uaXMyKGFtYi5tb2QgfiBTaXRpbywgYW1iKSAjbm8gaGF5IGRpZmVyZW5jaWENCmFkb25pczIoYW1iLm1vZCB+IE1lcywgYW1iKSAjaGF5IGRpZmVyZW5jaWENCg0KYGBgDQoNClJlc3B1ZXN0YXMgaGlww7N0ZXNpcyB0cmVzOiBTZWfDum4gbGEgcHJ1ZWJhIGRlIEFuw6FsaXNpcyBkZSB2YXJpYW56YSB1c2FuZG8gbWF0cmljZXMgZGUgZGlzdGFuY2lhKEFkb25pcyksIHNlIGRldGVybWluw7MgcXVlIGV4aXN0ZW4gZGlmZXJlbmNpYXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgcXVlIGluZGljYW4gcXVlIGxvcyBwYXLDoW1ldHJvcyBmaXNpY29xdcOtbWljb3MgdmFyw61hbiBlbnRyZSBsYXMgZmVjaGFzIGRlIG11ZXN0cmVvIGVuIGVsIMOhcmVhIGRlIGVzdHVkaW8gKEYgPSA0OS4xMzU7IGRmID0gMywxNSA7IHAgPCAwLjA1KSwgbm8gb2JzdGFudGUsIG5vIGV4aXN0ZW4gZGlmZXJlbmNpYXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgcXVlIGluZGlxdWVuIHVuIGNhbWJpbyBlbiBsb3MgcGFyw6FtZXRyb3MgZmlzaWNvcXXDrW1pY29zIGNvbiBsb3Mgc2l0aW9zIGRlIG11ZXN0cmVvIChGID0gMC4xOTczOyBkZiAzLDE1IDsgcCA+IDAuMDUpDQoNCg0K