Primera parte: Salinidad

Se estudiaron diversas caracteristicas del suelo para determinar su relación con la biomasa (gr) de una planta forrajera natural de la cual se obtuvieron 45 muestras en diferentes ambientes. Las diferentes características del suelo en que crecía la planta son pH, salinidad, zinc y potasio.

require(ggplot2)
Salinidad

Exploratorio Univariado de los Datos

summary(Salinidad$Biomasa)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  369.8   654.8   991.8  1082.2  1346.9  2337.3 
ggplot(Salinidad, aes(x=Biomasa))+geom_histogram(fill="yellow",col="black")+ggtitle("Biomasa Obtenida")+ylab("Frecuencia")+xlab("Biomasa")

Para el histograma de la biomasa obtenida se observa una amplia variabilidad en los datos obtenidos, desde 369.8 hasta 2337.3. La mayor cantidad de biomasa obtenida oscila entre 500 y 1500. Adicionalmente la mediana tiene un valor menor a la media, demostrando la asimetría positiva de la distribución.

summary(Salinidad$pH)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  3.200   3.450   4.450   4.609   5.350   7.450 
ggplot(Salinidad, aes(x=pH))+geom_histogram(fill="red",col="black")+ggtitle("Niveles de pH")+ylab("Frecuencia")+xlab("pH")

Como se logra observar en el histograma de los niveles de pH, se muestra una amplia variabilidad en los datos desde niveles bajos (3.2) hasta altos (7.45) y con una media y mediana similares demostrando la simetría de la distribución. Adicionalmente se observa que no se tomaron muestras en niveles de pH entre 5.7 a 6.8, por lo que son muy pocas las muestras en pH básico que se tomaron y mayores a pH ácido.

summary(Salinidad$Salinidad)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  24.00   27.00   30.00   30.27   33.00   38.00 
ggplot(Salinidad, aes(x=Salinidad,))+geom_bar(fill="blue",col="black")+ggtitle("Niveles de Salinidad")+ylab("Frecuencia")+xlab("Salinidad")

Como se logra observar en el histograma de los niveles de salinidad, al igual que la variable pH, también se muestra una amplia variabilidad en los datos desde 24 hasta 38. De igual manera, la media y mediana tienen valores similares demostrando la simetría de la distribución.

summary(Salinidad$Zinc)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.2105 13.9852 19.2420 17.8308 22.6758 31.2865 
ggplot(Salinidad, aes(x=Zinc,))+geom_histogram(fill="green",col="black")+ggtitle("Niveles de Zinc")+ylab("Frecuencia")+xlab("Zinc")

En el histograma de los niveles de Zinc también se logra observar una amplia variabilidad en los datos, tomando muestras desde cantidades mínimas de 0.2105 hasta 31.2865. Sin embargo, los valores de mediana y media son diferentes siendo la mediana mayor que la media, demostrando la asimetría negativa de la distribución.

summary(Salinidad$Potasio)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  350.7   527.0   773.3   797.4   954.1  1441.7 
ggplot(Salinidad, aes(x=Potasio,))+geom_histogram(fill="pink",col="black")+ggtitle("Niveles de Potasio")+ylab("Frecuencia")+xlab("Potasio")

Por último, se observa en el histograma de los niveles de potasio una amplia variabilidad al igual que las demás variables, desde valores de 350.7 hasta 1441.7. También se observa que los valores de mediana y media son diferentes, en este caso siendo la mediana menor que la media, demostrando la asimetría positiva de la distribución.

Exploratorio Bivariado de los Datos

ggplot(Salinidad, aes(x=pH, y=Biomasa))+geom_point(col="orange")

ggplot(Salinidad, aes(x=Salinidad, y=Biomasa))+geom_point(col="red")

ggplot(Salinidad, aes(x=Zinc, y=Biomasa))+geom_point(col="blue")

ggplot(Salinidad, aes(x=Potasio, y=Biomasa))+geom_point(col="green")

Conclusiones

La variable pH presenta una relación positiva y proporcional a la biomasa, lo que demuestra que a mayores niveles de pH (básico) habrá mayor biomasa de la planta forrajera.

La variable Zinc presenta una relación negativa e inversamente proporcional a la biomasa, demostrando que es bajos niveles de Zinc en el suelo contribuyen a un aumento de la biomasa de la planta forrajera.

Por último, las variables potasio y salinidad presentan una dispersión muy alta de los datos por lo que no se evidencia una correlación en cuanto a la biomasa.

Segunda parte: Moluscos

En el siguiente análisis se estudiaron las relaciones entre dos tipos de moluscos que fueron sometidos a distintas concentraciones de agua de mar y el consumo de oxigeno según la proporción de O2 por unidad de peso seco del molusco.

BD_moluscos
BD_moluscos$c_agua=as.factor(BD_moluscos$c_agua)

Exploratorio Univariado de los Datos

ggplot(BD_moluscos,aes(x=c_agua, fill=c_agua))+geom_bar()+ggtitle("Agua de Mar")+ylab("Cantidad")+xlab("Porcentaje de agua de mar")+scale_fill_discrete("Porcentaje")

ggplot(BD_moluscos,aes(x=molusco, fill=molusco))+geom_bar()+ggtitle("Tipo de Molusco")+ylab("Cantidad")+xlab("Molusco")+scale_fill_discrete("Tipo de Molusco")

Se observa en ambos diagramas de barras un diseño balanceado, debido a que utilizaronlas mismas cantidades de moluscos de ambos tipos (A y B) y de los porcentajes de agua (50,75 y 100).

summary(BD_moluscos)
 c_agua     molusco              cons_o      
 50 :16   Length:48          Min.   : 1.800  
 75 :16   Class :character   1st Qu.: 6.312  
 100:16   Mode  :character   Median : 9.700  
                             Mean   : 9.305  
                             3rd Qu.:11.232  
                             Max.   :18.800  
ggplot(BD_moluscos,aes(x=cons_o))+geom_histogram(fill="orange",col="black" )+ggtitle("Consumo de Oxigeno")+ylab("Frecuencia")+xlab("Oxigeno")

Se observa en el histograma una variabilidad alta en cuanto al consumo de oxigeno, desde una cantidad de 1.80 hasta 18.80 cuyos valores de media y mediana (9.305 y 9.700 respectivamente) indican la simetria de su distribución.

Exploratorio Bivariado de los Datos

tapply(BD_moluscos$cons_o, BD_moluscos$c_agua,mean,na.rm=TRUE)
      50       75      100 
12.25062  6.99250  8.67125 
tapply(BD_moluscos$cons_o, BD_moluscos$molusco, mean,na.rm=TRUE)
        A         B 
10.000417  8.609167 
ggplot(BD_moluscos, aes(x=c_agua, y=cons_o, fill=molusco))+geom_boxplot()+ylab("Consumo de Oxigeno")+xlab("Porcentaje de agua de mar")+scale_fill_discrete("Tipo de Molusco")

Conclusión

Como se logra observar, en primer lugar el consumo de oxigeno es mayor a un porcentaje de agua de mar del 50% con una media de 12.25062, seguido del 100% con una media de 8.67125 y por último al 75% con una media de 6.99250. En cuanto al tipo de molusco se observa que el molusco tipo “A” tiene un mayor consumo de oxigeno a porcentajes de agua de mar al 75% y 100%, mientras que al 50% es el molusco de tipo “B” el que presenta mayor concentración de oxigeno y adicionalmente es el tipo de molusco que presenta mayor variación en cuanto al consumo de oxigeno en los 3 porcentajes de agua de mar.

LS0tDQp0aXRsZTogIlBhcmNpYWwgMSINCmF1dGhvcjogIkplYW4gS2FybG8gRGVsZ2FkbyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIyBQcmltZXJhIHBhcnRlOiBTYWxpbmlkYWQNCg0KU2UgZXN0dWRpYXJvbiBkaXZlcnNhcyBjYXJhY3RlcmlzdGljYXMgZGVsIHN1ZWxvIHBhcmEgZGV0ZXJtaW5hciBzdSByZWxhY2nDs24gY29uIGxhIGJpb21hc2EgKGdyKSBkZSB1bmEgcGxhbnRhIGZvcnJhamVyYSBuYXR1cmFsIGRlIGxhIGN1YWwgc2Ugb2J0dXZpZXJvbiA0NSBtdWVzdHJhcyBlbiBkaWZlcmVudGVzIGFtYmllbnRlcy4gTGFzIGRpZmVyZW50ZXMgY2FyYWN0ZXLDrXN0aWNhcyBkZWwgc3VlbG8gZW4gcXVlIGNyZWPDrWEgbGEgcGxhbnRhIHNvbiBwSCwgc2FsaW5pZGFkLCB6aW5jIHkgcG90YXNpby4NCmBgYHtyIENhcmdhIGRlIGRhdG9zIGRlICJTYWxpbmlkYWQifQ0KcmVxdWlyZShnZ3Bsb3QyKQ0KU2FsaW5pZGFkDQpgYGANCiMjIEV4cGxvcmF0b3JpbyBVbml2YXJpYWRvIGRlIGxvcyBEYXRvcw0KYGBge3J9DQpzdW1tYXJ5KFNhbGluaWRhZCRCaW9tYXNhKQ0KZ2dwbG90KFNhbGluaWRhZCwgYWVzKHg9QmlvbWFzYSkpK2dlb21faGlzdG9ncmFtKGZpbGw9InllbGxvdyIsY29sPSJibGFjayIpK2dndGl0bGUoIkJpb21hc2EgT2J0ZW5pZGEiKSt5bGFiKCJGcmVjdWVuY2lhIikreGxhYigiQmlvbWFzYSIpDQpgYGANClBhcmEgZWwgaGlzdG9ncmFtYSBkZSBsYSBiaW9tYXNhIG9idGVuaWRhIHNlIG9ic2VydmEgdW5hIGFtcGxpYSB2YXJpYWJpbGlkYWQgZW4gbG9zIGRhdG9zIG9idGVuaWRvcywgZGVzZGUgMzY5LjggaGFzdGEgMjMzNy4zLiBMYSBtYXlvciBjYW50aWRhZCBkZSBiaW9tYXNhIG9idGVuaWRhIG9zY2lsYSBlbnRyZSA1MDAgeSAxNTAwLiBBZGljaW9uYWxtZW50ZSBsYSBtZWRpYW5hIHRpZW5lIHVuIHZhbG9yIG1lbm9yIGEgbGEgbWVkaWEsIGRlbW9zdHJhbmRvIGxhIGFzaW1ldHLDrWEgcG9zaXRpdmEgZGUgbGEgZGlzdHJpYnVjacOzbi4NCmBgYHtyIEV4cGxvcmF0b3JpbyBVbml2YXJpYWRvIGRlIGxvcyBEYXRvcywgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUUsIHBhZ2VkLnByaW50PVRSVUV9DQpzdW1tYXJ5KFNhbGluaWRhZCRwSCkNCmdncGxvdChTYWxpbmlkYWQsIGFlcyh4PXBIKSkrZ2VvbV9oaXN0b2dyYW0oZmlsbD0icmVkIixjb2w9ImJsYWNrIikrZ2d0aXRsZSgiTml2ZWxlcyBkZSBwSCIpK3lsYWIoIkZyZWN1ZW5jaWEiKSt4bGFiKCJwSCIpDQpgYGANCkNvbW8gc2UgbG9ncmEgb2JzZXJ2YXIgZW4gZWwgaGlzdG9ncmFtYSBkZSBsb3Mgbml2ZWxlcyBkZSBwSCwgc2UgbXVlc3RyYSB1bmEgYW1wbGlhIHZhcmlhYmlsaWRhZCBlbiBsb3MgZGF0b3MgZGVzZGUgbml2ZWxlcyBiYWpvcyAoMy4yKSBoYXN0YSBhbHRvcyAoNy40NSkgeSBjb24gdW5hIG1lZGlhIHkgbWVkaWFuYSBzaW1pbGFyZXMgZGVtb3N0cmFuZG8gbGEgc2ltZXRyw61hIGRlIGxhIGRpc3RyaWJ1Y2nDs24uIEFkaWNpb25hbG1lbnRlIHNlIG9ic2VydmEgcXVlIG5vIHNlIHRvbWFyb24gbXVlc3RyYXMgZW4gbml2ZWxlcyBkZSBwSCBlbnRyZSA1LjcgYSA2LjgsIHBvciBsbyBxdWUgc29uIG11eSBwb2NhcyBsYXMgbXVlc3RyYXMgZW4gcEggYsOhc2ljbyBxdWUgc2UgdG9tYXJvbiB5IG1heW9yZXMgYSBwSCDDoWNpZG8uDQpgYGB7cn0NCnN1bW1hcnkoU2FsaW5pZGFkJFNhbGluaWRhZCkNCmdncGxvdChTYWxpbmlkYWQsIGFlcyh4PVNhbGluaWRhZCwpKStnZW9tX2JhcihmaWxsPSJibHVlIixjb2w9ImJsYWNrIikrZ2d0aXRsZSgiTml2ZWxlcyBkZSBTYWxpbmlkYWQiKSt5bGFiKCJGcmVjdWVuY2lhIikreGxhYigiU2FsaW5pZGFkIikNCmBgYA0KQ29tbyBzZSBsb2dyYSBvYnNlcnZhciBlbiBlbCBoaXN0b2dyYW1hIGRlIGxvcyBuaXZlbGVzIGRlIHNhbGluaWRhZCwgYWwgaWd1YWwgcXVlIGxhIHZhcmlhYmxlIHBILCB0YW1iacOpbiBzZSBtdWVzdHJhIHVuYSBhbXBsaWEgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcyBkZXNkZSAyNCBoYXN0YSAzOC4gRGUgaWd1YWwgbWFuZXJhLCBsYSBtZWRpYSB5IG1lZGlhbmEgdGllbmVuIHZhbG9yZXMgc2ltaWxhcmVzIGRlbW9zdHJhbmRvIGxhIHNpbWV0csOtYSBkZSBsYSBkaXN0cmlidWNpw7NuLg0KYGBge3J9DQpzdW1tYXJ5KFNhbGluaWRhZCRaaW5jKQ0KZ2dwbG90KFNhbGluaWRhZCwgYWVzKHg9WmluYywpKStnZW9tX2hpc3RvZ3JhbShmaWxsPSJncmVlbiIsY29sPSJibGFjayIpK2dndGl0bGUoIk5pdmVsZXMgZGUgWmluYyIpK3lsYWIoIkZyZWN1ZW5jaWEiKSt4bGFiKCJaaW5jIikNCmBgYA0KRW4gZWwgaGlzdG9ncmFtYSBkZSBsb3Mgbml2ZWxlcyBkZSBaaW5jIHRhbWJpw6luIHNlIGxvZ3JhIG9ic2VydmFyIHVuYSBhbXBsaWEgdmFyaWFiaWxpZGFkIGVuIGxvcyBkYXRvcywgdG9tYW5kbyBtdWVzdHJhcyBkZXNkZSBjYW50aWRhZGVzIG3DrW5pbWFzIGRlIDAuMjEwNSBoYXN0YSAzMS4yODY1LiBTaW4gZW1iYXJnbywgbG9zIHZhbG9yZXMgZGUgbWVkaWFuYSB5IG1lZGlhIHNvbiBkaWZlcmVudGVzIHNpZW5kbyBsYSBtZWRpYW5hIG1heW9yIHF1ZSBsYSBtZWRpYSwgZGVtb3N0cmFuZG8gbGEgYXNpbWV0csOtYSBuZWdhdGl2YSBkZSBsYSBkaXN0cmlidWNpw7NuLg0KYGBge3J9DQpzdW1tYXJ5KFNhbGluaWRhZCRQb3Rhc2lvKQ0KZ2dwbG90KFNhbGluaWRhZCwgYWVzKHg9UG90YXNpbywpKStnZW9tX2hpc3RvZ3JhbShmaWxsPSJwaW5rIixjb2w9ImJsYWNrIikrZ2d0aXRsZSgiTml2ZWxlcyBkZSBQb3Rhc2lvIikreWxhYigiRnJlY3VlbmNpYSIpK3hsYWIoIlBvdGFzaW8iKQ0KYGBgDQpQb3Igw7psdGltbywgc2Ugb2JzZXJ2YSBlbiBlbCBoaXN0b2dyYW1hIGRlIGxvcyBuaXZlbGVzIGRlIHBvdGFzaW8gdW5hIGFtcGxpYSB2YXJpYWJpbGlkYWQgYWwgaWd1YWwgcXVlIGxhcyBkZW3DoXMgdmFyaWFibGVzLCBkZXNkZSB2YWxvcmVzIGRlIDM1MC43IGhhc3RhIDE0NDEuNy4gVGFtYmnDqW4gc2Ugb2JzZXJ2YSBxdWUgbG9zIHZhbG9yZXMgZGUgbWVkaWFuYSB5IG1lZGlhIHNvbiBkaWZlcmVudGVzLCBlbiBlc3RlIGNhc28gc2llbmRvIGxhIG1lZGlhbmEgbWVub3IgcXVlIGxhIG1lZGlhLCBkZW1vc3RyYW5kbyBsYSBhc2ltZXRyw61hIHBvc2l0aXZhIGRlIGxhIGRpc3RyaWJ1Y2nDs24uDQoNCiMjIEV4cGxvcmF0b3JpbyBCaXZhcmlhZG8gZGUgbG9zIERhdG9zDQpgYGB7ciBFeHBsb3JhdG9yaW8gQml2YXJpYWRvIGRlIGxvcyBEYXRvc30NCmdncGxvdChTYWxpbmlkYWQsIGFlcyh4PXBILCB5PUJpb21hc2EpKStnZW9tX3BvaW50KGNvbD0ib3JhbmdlIikNCmdncGxvdChTYWxpbmlkYWQsIGFlcyh4PVNhbGluaWRhZCwgeT1CaW9tYXNhKSkrZ2VvbV9wb2ludChjb2w9InJlZCIpDQpnZ3Bsb3QoU2FsaW5pZGFkLCBhZXMoeD1aaW5jLCB5PUJpb21hc2EpKStnZW9tX3BvaW50KGNvbD0iYmx1ZSIpDQpnZ3Bsb3QoU2FsaW5pZGFkLCBhZXMoeD1Qb3Rhc2lvLCB5PUJpb21hc2EpKStnZW9tX3BvaW50KGNvbD0iZ3JlZW4iKQ0KYGBgDQojIyBDb25jbHVzaW9uZXMNCkxhIHZhcmlhYmxlIHBIIHByZXNlbnRhIHVuYSByZWxhY2nDs24gcG9zaXRpdmEgeSBwcm9wb3JjaW9uYWwgYSBsYSBiaW9tYXNhLCBsbyBxdWUgZGVtdWVzdHJhIHF1ZSBhIG1heW9yZXMgbml2ZWxlcyBkZSBwSCAoYsOhc2ljbykgaGFicsOhIG1heW9yIGJpb21hc2EgZGUgbGEgcGxhbnRhIGZvcnJhamVyYS4NCg0KTGEgdmFyaWFibGUgWmluYyBwcmVzZW50YSB1bmEgcmVsYWNpw7NuIG5lZ2F0aXZhIGUgaW52ZXJzYW1lbnRlIHByb3BvcmNpb25hbCBhIGxhIGJpb21hc2EsIGRlbW9zdHJhbmRvIHF1ZSBlcyBiYWpvcyBuaXZlbGVzIGRlIFppbmMgZW4gZWwgc3VlbG8gY29udHJpYnV5ZW4gYSB1biBhdW1lbnRvIGRlIGxhIGJpb21hc2EgZGUgbGEgcGxhbnRhIGZvcnJhamVyYS4NCg0KUG9yIMO6bHRpbW8sIGxhcyB2YXJpYWJsZXMgcG90YXNpbyB5IHNhbGluaWRhZCBwcmVzZW50YW4gdW5hIGRpc3BlcnNpw7NuIG11eSBhbHRhIGRlIGxvcyBkYXRvcyBwb3IgbG8gcXVlIG5vIHNlIGV2aWRlbmNpYSB1bmEgY29ycmVsYWNpw7NuIGVuIGN1YW50byBhIGxhIGJpb21hc2EuDQoNCiMjIFNlZ3VuZGEgcGFydGU6IE1vbHVzY29zIA0KDQpFbiBlbCBzaWd1aWVudGUgYW7DoWxpc2lzIHNlIGVzdHVkaWFyb24gbGFzIHJlbGFjaW9uZXMgZW50cmUgZG9zIHRpcG9zIGRlIG1vbHVzY29zIHF1ZSBmdWVyb24gc29tZXRpZG9zIGEgZGlzdGludGFzIGNvbmNlbnRyYWNpb25lcyBkZSBhZ3VhIGRlIG1hciB5IGVsIGNvbnN1bW8gZGUgb3hpZ2VubyBzZWfDum4gbGEgcHJvcG9yY2nDs24gZGUgTzIgcG9yIHVuaWRhZCBkZSBwZXNvIHNlY28gZGVsIG1vbHVzY28uDQpgYGB7ciBDYXJnYSBkZSBkYXRvcyBkZSAiTW9sdXNjb3MifQ0KQkRfbW9sdXNjb3MNCkJEX21vbHVzY29zJGNfYWd1YT1hcy5mYWN0b3IoQkRfbW9sdXNjb3MkY19hZ3VhKQ0KYGBgDQojIyBFeHBsb3JhdG9yaW8gVW5pdmFyaWFkbyBkZSBsb3MgRGF0b3MNCmBgYHtyIEV4cGxvcmF0b3JpbyBVbml2YXJpYWRvIGRlIGxvcyBEYXRvcyAyfQ0KZ2dwbG90KEJEX21vbHVzY29zLGFlcyh4PWNfYWd1YSwgZmlsbD1jX2FndWEpKStnZW9tX2JhcigpK2dndGl0bGUoIkFndWEgZGUgTWFyIikreWxhYigiQ2FudGlkYWQiKSt4bGFiKCJQb3JjZW50YWplIGRlIGFndWEgZGUgbWFyIikrc2NhbGVfZmlsbF9kaXNjcmV0ZSgiUG9yY2VudGFqZSIpDQpnZ3Bsb3QoQkRfbW9sdXNjb3MsYWVzKHg9bW9sdXNjbywgZmlsbD1tb2x1c2NvKSkrZ2VvbV9iYXIoKStnZ3RpdGxlKCJUaXBvIGRlIE1vbHVzY28iKSt5bGFiKCJDYW50aWRhZCIpK3hsYWIoIk1vbHVzY28iKStzY2FsZV9maWxsX2Rpc2NyZXRlKCJUaXBvIGRlIE1vbHVzY28iKQ0KYGBgDQpTZSBvYnNlcnZhIGVuIGFtYm9zIGRpYWdyYW1hcyBkZSBiYXJyYXMgdW4gZGlzZcOxbyBiYWxhbmNlYWRvLCBkZWJpZG8gYSBxdWUgdXRpbGl6YXJvbmxhcyBtaXNtYXMgY2FudGlkYWRlcyBkZSBtb2x1c2NvcyBkZSBhbWJvcyB0aXBvcyAoQSB5IEIpIHkgZGUgbG9zIHBvcmNlbnRhamVzIGRlIGFndWEgKDUwLDc1IHkgMTAwKS4NCmBgYHtyfQ0Kc3VtbWFyeShCRF9tb2x1c2NvcykNCmdncGxvdChCRF9tb2x1c2NvcyxhZXMoeD1jb25zX28pKStnZW9tX2hpc3RvZ3JhbShmaWxsPSJvcmFuZ2UiLGNvbD0iYmxhY2siICkrZ2d0aXRsZSgiQ29uc3VtbyBkZSBPeGlnZW5vIikreWxhYigiRnJlY3VlbmNpYSIpK3hsYWIoIk94aWdlbm8iKQ0KYGBgDQpTZSBvYnNlcnZhIGVuIGVsIGhpc3RvZ3JhbWEgdW5hIHZhcmlhYmlsaWRhZCBhbHRhIGVuIGN1YW50byBhbCBjb25zdW1vIGRlIG94aWdlbm8sIGRlc2RlIHVuYSBjYW50aWRhZCBkZSAxLjgwIGhhc3RhIDE4LjgwIGN1eW9zIHZhbG9yZXMgZGUgbWVkaWEgeSBtZWRpYW5hICg5LjMwNSB5IDkuNzAwIHJlc3BlY3RpdmFtZW50ZSkgaW5kaWNhbiBsYSBzaW1ldHJpYSBkZSBzdSBkaXN0cmlidWNpw7NuLg0KDQojIyBFeHBsb3JhdG9yaW8gQml2YXJpYWRvIGRlIGxvcyBEYXRvcw0KYGBge3IgRXhwbG9yYXRvcmlvIEJpdmFyaWFkbyBkZSBsb3MgRGF0b3MgMn0NCnRhcHBseShCRF9tb2x1c2NvcyRjb25zX28sIEJEX21vbHVzY29zJGNfYWd1YSxtZWFuLG5hLnJtPVRSVUUpDQp0YXBwbHkoQkRfbW9sdXNjb3MkY29uc19vLCBCRF9tb2x1c2NvcyRtb2x1c2NvLCBtZWFuLG5hLnJtPVRSVUUpDQpnZ3Bsb3QoQkRfbW9sdXNjb3MsIGFlcyh4PWNfYWd1YSwgeT1jb25zX28sIGZpbGw9bW9sdXNjbykpK2dlb21fYm94cGxvdCgpK3lsYWIoIkNvbnN1bW8gZGUgT3hpZ2VubyIpK3hsYWIoIlBvcmNlbnRhamUgZGUgYWd1YSBkZSBtYXIiKStzY2FsZV9maWxsX2Rpc2NyZXRlKCJUaXBvIGRlIE1vbHVzY28iKQ0KYGBgDQojIyBDb25jbHVzacOzbg0KDQpDb21vIHNlIGxvZ3JhIG9ic2VydmFyLCBlbiBwcmltZXIgbHVnYXIgZWwgY29uc3VtbyBkZSBveGlnZW5vIGVzIG1heW9yIGEgdW4gcG9yY2VudGFqZSBkZSBhZ3VhIGRlIG1hciBkZWwgNTAlIGNvbiB1bmEgbWVkaWEgZGUgMTIuMjUwNjIsIHNlZ3VpZG8gZGVsIDEwMCUgY29uIHVuYSBtZWRpYSBkZSA4LjY3MTI1IHkgcG9yIMO6bHRpbW8gYWwgNzUlIGNvbiB1bmEgbWVkaWEgZGUgNi45OTI1MC4gRW4gY3VhbnRvIGFsIHRpcG8gZGUgbW9sdXNjbyBzZSBvYnNlcnZhIHF1ZSBlbCBtb2x1c2NvIHRpcG8gIkEiIHRpZW5lIHVuIG1heW9yIGNvbnN1bW8gZGUgb3hpZ2VubyBhIHBvcmNlbnRhamVzIGRlIGFndWEgZGUgbWFyIGFsIDc1JSB5IDEwMCUsIG1pZW50cmFzIHF1ZSBhbCA1MCUgZXMgZWwgbW9sdXNjbyBkZSB0aXBvICJCIiBlbCBxdWUgcHJlc2VudGEgbWF5b3IgY29uY2VudHJhY2nDs24gZGUgb3hpZ2VubyB5IGFkaWNpb25hbG1lbnRlIGVzIGVsIHRpcG8gZGUgbW9sdXNjbyBxdWUgcHJlc2VudGEgbWF5b3IgdmFyaWFjacOzbiBlbiBjdWFudG8gYWwgY29uc3VtbyBkZSBveGlnZW5vIGVuIGxvcyAzIHBvcmNlbnRhamVzIGRlIGFndWEgZGUgbWFyLg0K