Packages
library(dplyr)
Warning: package ‘dplyr’ was built under R version 4.3.3
Attaching package: ‘dplyr’
The following objects are masked from ‘package:raster’:
intersect, select, union
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
library(ggplot2)
library(ggh4x)#grafico
Attaching package: ‘ggh4x’
The following object is masked from ‘package:ggplot2’:
guide_axis_logticks
library(geobr) #pacote do ibge para polignos do BR
Registered S3 method overwritten by 'data.table':
method from
print.data.table
library(elevatr) #Haster de relevo br
elevatr v0.99.0 NOTE: Version 0.99.0 of 'elevatr' uses 'sf' and 'terra'. Use
of the 'sp', 'raster', and underlying 'rgdal' packages by 'elevatr' is being
deprecated; however, get_elev_raster continues to return a RasterLayer. This
will be dropped in future versions, so please plan accordingly.
library(sp) #Polignos de Sao Paulo
library(sf) #vinculado ao ggplot2
Warning: package ‘sf’ was built under R version 4.3.3Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(cowplot)#combinar varios graficos
library(ggspatial) #colocar rosa dos ventos
Warning: package ‘ggspatial’ was built under R version 4.3.3
Experimental site
Data
BRA2 = read_country()
Using year 2010
Downloading: 1.7 kB
Downloading: 1.7 kB
Downloading: 1.7 kB
Downloading: 1.7 kB
Downloading: 58 kB
Downloading: 58 kB
Downloading: 58 kB
Downloading: 58 kB
Downloading: 67 kB
Downloading: 67 kB
Downloading: 67 kB
Downloading: 67 kB
Downloading: 120 kB
Downloading: 120 kB
Downloading: 130 kB
Downloading: 130 kB
Downloading: 130 kB
Downloading: 130 kB
Downloading: 190 kB
Downloading: 190 kB
Downloading: 200 kB
Downloading: 200 kB
Downloading: 200 kB
Downloading: 200 kB
Downloading: 220 kB
Downloading: 220 kB
Downloading: 250 kB
Downloading: 250 kB
Downloading: 260 kB
Downloading: 260 kB
Downloading: 260 kB
Downloading: 260 kB
Downloading: 280 kB
Downloading: 280 kB
Downloading: 310 kB
Downloading: 310 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 330 kB
Downloading: 340 kB
Downloading: 340 kB
Downloading: 370 kB
Downloading: 370 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 390 kB
Downloading: 410 kB
Downloading: 410 kB
Downloading: 430 kB
Downloading: 430 kB
Downloading: 440 kB
Downloading: 440 kB
Downloading: 440 kB
Downloading: 440 kB
states = read_state()
Using year 2010
|
| | 0%
|
|==== | 4%
|
|======= | 7%
|
|=========== | 11%
|
|=============== | 15%
|
|================== | 19%
|
|====================== | 22%
|
|========================== | 26%
|
|============================= | 30%
|
|================================= | 33%
|
|===================================== | 37%
|
|======================================== | 41%
|
|============================================ | 44%
|
|================================================ | 48%
|
|=================================================== | 52%
|
|======================================================= | 56%
|
|=========================================================== | 59%
|
|============================================================== | 63%
|
|================================================================== | 67%
|
|====================================================================== | 70%
|
|========================================================================= | 74%
|
|============================================================================= | 78%
|
|================================================================================= | 81%
|
|==================================================================================== | 85%
|
|======================================================================================== | 89%
|
|============================================================================================ | 93%
|
|=============================================================================================== | 96%
|
|===================================================================================================| 100%
MT = read_state(code_state = 51)
Using year 2010
municipios=read_municipality()
Using year 2010
|
| | 0%
|
|==== | 4%
|
|======= | 7%
|
|=========== | 11%
|
|=============== | 15%
|
|================== | 19%
|
|====================== | 22%
|
|========================== | 26%
|
|============================= | 30%
|
|================================= | 33%
|
|===================================== | 37%
|
|======================================== | 41%
|
|============================================ | 44%
|
|================================================ | 48%
|
|=================================================== | 52%
|
|======================================================= | 56%
|
|=========================================================== | 59%
|
|============================================================== | 63%
|
|================================================================== | 67%
|
|====================================================================== | 70%
|
|========================================================================= | 74%
|
|============================================================================= | 78%
|
|================================================================================= | 81%
|
|==================================================================================== | 85%
|
|======================================================================================== | 89%
|
|============================================================================================ | 93%
|
|=============================================================================================== | 96%
|
|===================================================================================================| 100%
sinop = read_municipality(code_muni = 5107909)
Using year 2010
topo = get_elev_raster(sinop, z=8, clip='location')
Accessing raster elevation [-------------------------] 0%
Accessing raster elevation [-------------------------] 0%
Accessing raster elevation [=========================] 100%
Mosaicing & Projecting
Clipping DEM to locations
Note: Elevation units are in meters.
topo_df <- as.data.frame(raster::rasterToPoints(topo))
names(topo_df) = c("x", "y", "elevation")
#Ponto unico da area experimental ()
site= c("Experimental site")
lat=c(-11.860912)
lon=c(-55.622340)
ponto=data.frame(site,lat,lon)
# Coordenadas para poligono da área experimental
points = c("1", "2", "3", "4")
lat1 = c(-11.859849,-11.855377,-11.861069,-11.865607)
lon1 = c(-55.628855,-55.616294,-55.615740,-55.628003)
area = data.frame(points, lat1, lon1)
# Criar um objeto SpatialPolygons
polygon = Polygon(cbind(area$lon1, area$lat1))
polygons = Polygons(list(polygon), "area")
area_sp = SpatialPolygons(list(polygons), proj4string = CRS("+proj=longlat +datum=WGS84"))
# Converter para um objeto sf e mudar o datum para o mesmo do poligono de Pira
area_sf = st_as_sf(area_sp, coords = c("x", "y"), crs = st_crs(sinop))
area_sf = st_transform(area_sf, crs = st_crs(sinop))
area_sf
Simple feature collection with 1 feature and 0 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -55.62886 ymin: -11.86561 xmax: -55.61574 ymax: -11.85538
Geodetic CRS: SIRGAS 2000
geometry
1 POLYGON ((-55.62886 -11.859...
PaÃs
p1.1 = ggplot()+
geom_sf(data=BRA2, color="blacK", fill="white")+
geom_sf(data=states, color="blacK", fill="#d4de31")+
geom_sf(data=MT, color="blacK", fill="#42b258")+
geom_sf(data=sinop, color="blacK", fill="#232a6d")+
theme_light()+
labs(x="Longitude", y="Latitude")+
ylim(-33,+4)+xlim(-75,-35)
p1.1

p1.2 = p1.1+
theme(panel.background = element_rect(fill = "white"),
axis.text = element_text(angle = 10, hjust = 0.6),
axis.line = element_line(colour = "gray", size = 0.3, linetype = "solid"),
panel.grid.major = element_line(color = "transparent"),
panel.grid.minor = element_line(color = "transparent"),
legend.position = "NONE")+
guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5,title.vjust = 1.5))+
annotate(geom="text", y=+3, x=-41,label="Brazil", size=6, color="black")+
annotate(geom="text", y=-20, x=-67,label="Mato Grosso (MT)", size=4.5, color="black")
Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
Please use the `linewidth` argument instead.
p1.2

Estado
p2.1 = ggplot()+
geom_sf(data=MT, color="blacK", fill="#42b258")+
geom_raster(data = topo_df, aes(x = x, y = y, fill = elevation))+
scale_fill_gradient(low = "#d4de31", high = "#232a6d", name = "Topography (m)")+
geom_sf(data=sinop, color="blacK", fill="transparent")+
theme_light()+
labs(x="Longitude", y="Latitude")
p2.1

p2.2 = p2.1+
theme(panel.background = element_rect(fill = "white"),
axis.text = element_text(angle = 10, hjust = 0.6),
axis.line = element_line(colour = "gray", size = 0.3, linetype = "solid"),
panel.grid.major = element_line(color = "transparent"),
panel.grid.minor = element_line(color = "transparent"),
legend.position = "NONE")+
guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5,title.vjust = 1.5))+
annotate(geom="text", y=-19.4, x=-56,label="MT, Brazil", size=6, color="black")
p2.2
save_plot("P2.2.pdf", p2.2, ncol = 1, nrow = 1)

Cidade
p3.1 = ggplot()+
geom_raster(data = topo_df, aes(x = x, y = y, fill = elevation))+
geom_sf(data=sinop, color="blacK", fill="transparent")+
geom_point(data= ponto, aes(x=lon, y=lat, color=site),shape = 1, size = 7, color = "red", fill = "white")+
scale_fill_gradient(low = "#d4de31", high = "#42b258", name = "Topography (m)")+
labs(x="Longitude", y="Latitude")
#ylim(-22.9,-22.48)+xlim(-48.09,-47.495)
p3.1

p3.2 = p3.1 +
theme(
panel.background = element_rect(fill = "transparent", colour = "grey", size = 0.4),
axis.line = element_line(colour = "grey", size = 0.4, linetype = "solid"),
axis.text = element_text(angle = 10, hjust = 0.6),
panel.grid.major = element_line(color = "transparent"),
panel.grid.minor = element_line(color = "transparent"),
legend.position = c(0.83, 0.15),
legend.direction = "vertical",
legend.background = element_rect(fill = "transparent", size = 0.2, linetype = "solid", colour = "grey"),
legend.text = element_text(size = 6, hjust = 1),
legend.title = element_text(size = 7),
legend.key.size = unit(0.3, "cm")) +
guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5, title.vjust = 1.5)) +
annotate(geom = "text", y = -11.23, x = -55.7, label = "Sinop, MT", size = 5, color = "black") +
annotation_north_arrow(location = "tr", # canto superior direito
which_north = "true",
pad_x = unit(0.2, "cm"),
pad_y = unit(0.2, "cm"),
style = north_arrow_fancy_orienteering())
Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
Please use the `linewidth` argument instead.Warning: A numeric `legend.position` argument in `theme()` was deprecated in ggplot2 3.5.0.
Please use the `legend.position.inside` argument of `theme()` instead.
p3.2

Experimental site
p4.1 = ggplot()+
geom_sf(data=sinop, color="blacK", fill="transparent")+
geom_raster(data = topo_df_clipped, aes(x = x, y = y, fill = elevation))+
scale_fill_gradient(low = "#d4de31", high = "#42b258", name = "Topography (m)")+
labs(x="Longitude", y="Latitude")+
geom_sf(data = area_sf, color = "black", fill="transparent", size = 1.5)+
ylim(-11.868,-11.855)+xlim(-55.635,-55.612)
p4.1

p4.2=p4.1+ theme(
panel.background = element_rect(fill = "transparent", colour = "grey",size = 0.4),
axis.line = element_line(colour = "grey", size = 0.4, linetype = "solid"),
axis.text = element_text(angle = 10, hjust = 0.6),
panel.grid.major = element_line(color = "transparent"),
panel.grid.minor = element_line(color = "transparent"),
legend.position = c(0.85, 0.25),
legend.direction = "vertical",
legend.background = element_rect(fill = "transparent",size=0.4, linetype="solid",colour ="grey"),
legend.text = element_text(angle = 30, hjust = 0.5))+
guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5,title.vjust = 1.5))+
annotate(geom="text", y=-11.856, x=-55.630,label="Experimental site", size=4.5, color="black")
p4.2

LS0tDQp0aXRsZTogIkdyYXBoaWNhbCBhYnN0cmFjdCAtIEFseWNlIg0KYXV0aG9yOiAiVmFnbmVyIE92YW5pIg0KZGF0ZTogIjIzLzA0LzIwMjUiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2RlcHRoOiAyDQogICAgdGhlbWU6IHVuaXRlZA0KLS0tDQoNCioqKg0KDQojIF8qKlBhY2thZ2VzKipfDQoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2doNHgpI2dyYWZpY28NCmxpYnJhcnkoZ2VvYnIpICNwYWNvdGUgZG8gaWJnZSBwYXJhIHBvbGlnbm9zIGRvIEJSDQpsaWJyYXJ5KGVsZXZhdHIpICNIYXN0ZXIgZGUgcmVsZXZvIGJyDQpsaWJyYXJ5KHNwKSAjUG9saWdub3MgZGUgU2FvIFBhdWxvDQpsaWJyYXJ5KHNmKSAjdmluY3VsYWRvIGFvIGdncGxvdDINCmxpYnJhcnkoY293cGxvdCkjY29tYmluYXIgdmFyaW9zIGdyYWZpY29zDQpsaWJyYXJ5KGdnc3BhdGlhbCkgI2NvbG9jYXIgcm9zYSBkb3MgdmVudG9zDQpgYGANCg0KDQojIF8qKkV4cGVyaW1lbnRhbCBzaXRlKipfDQoNCiMjIF8qKkRhdGEqKl8NCg0KYGBge3J9DQpCUkEyID0gcmVhZF9jb3VudHJ5KCkNCg0Kc3RhdGVzID0gcmVhZF9zdGF0ZSgpDQoNCk1UID0gcmVhZF9zdGF0ZShjb2RlX3N0YXRlID0gNTEpDQoNCm11bmljaXBpb3M9cmVhZF9tdW5pY2lwYWxpdHkoKQ0KDQpzaW5vcCA9IHJlYWRfbXVuaWNpcGFsaXR5KGNvZGVfbXVuaSA9IDUxMDc5MDkpDQoNCnRvcG8gPSBnZXRfZWxldl9yYXN0ZXIoc2lub3AsIHo9OCwgY2xpcD0nbG9jYXRpb24nKSANCnRvcG9fZGYgPC0gYXMuZGF0YS5mcmFtZShyYXN0ZXI6OnJhc3RlclRvUG9pbnRzKHRvcG8pKQ0KbmFtZXModG9wb19kZikgPSBjKCJ4IiwgInkiLCAiZWxldmF0aW9uIikNCg0KI1BvbnRvIHVuaWNvIGRhIGFyZWEgZXhwZXJpbWVudGFsICgpDQpzaXRlPSBjKCJFeHBlcmltZW50YWwgc2l0ZSIpDQpsYXQ9YygtMTEuODYwOTEyKQ0KbG9uPWMoLTU1LjYyMjM0MCkNCnBvbnRvPWRhdGEuZnJhbWUoc2l0ZSxsYXQsbG9uKQ0KDQojIENvb3JkZW5hZGFzIHBhcmEgcG9saWdvbm8gZGEgw6FyZWEgZXhwZXJpbWVudGFsDQpwb2ludHMgPSBjKCIxIiwgIjIiLCAiMyIsICI0IikNCmxhdDEgPSBjKC0xMS44NTk4NDksLTExLjg1NTM3NywtMTEuODYxMDY5LC0xMS44NjU2MDcpDQpsb24xID0gYygtNTUuNjI4ODU1LC01NS42MTYyOTQsLTU1LjYxNTc0MCwtNTUuNjI4MDAzKQ0KYXJlYSA9IGRhdGEuZnJhbWUocG9pbnRzLCBsYXQxLCBsb24xKQ0KDQojIENyaWFyIHVtIG9iamV0byBTcGF0aWFsUG9seWdvbnMNCnBvbHlnb24gPSBQb2x5Z29uKGNiaW5kKGFyZWEkbG9uMSwgYXJlYSRsYXQxKSkNCnBvbHlnb25zID0gUG9seWdvbnMobGlzdChwb2x5Z29uKSwgImFyZWEiKQ0KYXJlYV9zcCA9IFNwYXRpYWxQb2x5Z29ucyhsaXN0KHBvbHlnb25zKSwgcHJvajRzdHJpbmcgPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0IikpDQoNCiMgQ29udmVydGVyIHBhcmEgdW0gb2JqZXRvIHNmIGUgbXVkYXIgbyBkYXR1bSBwYXJhIG8gbWVzbW8gZG8gcG9saWdvbm8gZGUgUGlyYQ0KYXJlYV9zZiA9IHN0X2FzX3NmKGFyZWFfc3AsIGNvb3JkcyA9IGMoIngiLCAieSIpLCBjcnMgPSBzdF9jcnMoc2lub3ApKQ0KYXJlYV9zZiA9IHN0X3RyYW5zZm9ybShhcmVhX3NmLCBjcnMgPSBzdF9jcnMoc2lub3ApKQ0KYXJlYV9zZg0KYGBgDQojIyBfKipQYcOtcyoqXw0KDQpgYGB7cn0NCnAxLjEgPSBnZ3Bsb3QoKSsNCiAgZ2VvbV9zZihkYXRhPUJSQTIsIGNvbG9yPSJibGFjSyIsIGZpbGw9IndoaXRlIikrDQogIGdlb21fc2YoZGF0YT1zdGF0ZXMsIGNvbG9yPSJibGFjSyIsIGZpbGw9IiNkNGRlMzEiKSsNCiAgZ2VvbV9zZihkYXRhPU1ULCBjb2xvcj0iYmxhY0siLCBmaWxsPSIjNDJiMjU4IikrDQogIGdlb21fc2YoZGF0YT1zaW5vcCwgY29sb3I9ImJsYWNLIiwgZmlsbD0iIzIzMmE2ZCIpKw0KICB0aGVtZV9saWdodCgpKw0KICBsYWJzKHg9IkxvbmdpdHVkZSIsIHk9IkxhdGl0dWRlIikrDQogIHlsaW0oLTMzLCs0KSt4bGltKC03NSwtMzUpDQpwMS4xDQpwMS4yID0gcDEuMSsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDEwLCBoanVzdCA9IDAuNiksDQogIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiZ3JheSIsIHNpemUgPSAwLjMsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwNCiAgbGVnZW5kLnBvc2l0aW9uID0gIk5PTkUiKSsgIA0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlLnBvc2l0aW9uID0gInRvcCIsIHRpdGxlLmhqdXN0ID0gMC41LHRpdGxlLnZqdXN0ID0gMS41KSkrDQogIGFubm90YXRlKGdlb209InRleHQiLCB5PSszLCB4PS00MSxsYWJlbD0iQnJhemlsIiwgc2l6ZT02LCBjb2xvcj0iYmxhY2siKSsNCiAgYW5ub3RhdGUoZ2VvbT0idGV4dCIsIHk9LTIwLCB4PS02NyxsYWJlbD0iTWF0byBHcm9zc28gKE1UKSIsIHNpemU9NC41LCBjb2xvcj0iYmxhY2siKQ0KcDEuMg0KYGBgDQoNCiMjIF8qKkVzdGFkbyoqXw0KDQpgYGB7cn0NCnAyLjEgPSBnZ3Bsb3QoKSsNCiAgZ2VvbV9zZihkYXRhPU1ULCBjb2xvcj0iYmxhY0siLCBmaWxsPSIjNDJiMjU4IikrDQogIGdlb21fcmFzdGVyKGRhdGEgPSB0b3BvX2RmLCBhZXMoeCA9IHgsIHkgPSB5LCBmaWxsID0gZWxldmF0aW9uKSkrDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gIiNkNGRlMzEiLCBoaWdoID0gIiMyMzJhNmQiLCBuYW1lID0gIlRvcG9ncmFwaHkgKG0pIikrDQogIGdlb21fc2YoZGF0YT1zaW5vcCwgY29sb3I9ImJsYWNLIiwgZmlsbD0idHJhbnNwYXJlbnQiKSsNCiAgdGhlbWVfbGlnaHQoKSsNCiAgbGFicyh4PSJMb25naXR1ZGUiLCB5PSJMYXRpdHVkZSIpDQpwMi4xDQpwMi4yID0gcDIuMSsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDEwLCBoanVzdCA9IDAuNiksDQogIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiZ3JheSIsIHNpemUgPSAwLjMsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwNCiAgbGVnZW5kLnBvc2l0aW9uID0gIk5PTkUiKSsgIA0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlLnBvc2l0aW9uID0gInRvcCIsIHRpdGxlLmhqdXN0ID0gMC41LHRpdGxlLnZqdXN0ID0gMS41KSkrDQogIGFubm90YXRlKGdlb209InRleHQiLCB5PS0xOS40LCB4PS01NixsYWJlbD0iTVQsIEJyYXppbCIsIHNpemU9NiwgY29sb3I9ImJsYWNrIikNCnAyLjINCnNhdmVfcGxvdCgiUDIuMi5wZGYiLCBwMi4yLCBuY29sID0gMSwgbnJvdyA9IDEpDQpgYGANCg0KIyMgXyoqQ2lkYWRlKipfDQoNCmBgYHtyfQ0KcDMuMSA9IGdncGxvdCgpKw0KICBnZW9tX3Jhc3RlcihkYXRhID0gdG9wb19kZiwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IGVsZXZhdGlvbikpKw0KICBnZW9tX3NmKGRhdGE9c2lub3AsIGNvbG9yPSJibGFjSyIsIGZpbGw9InRyYW5zcGFyZW50IikrDQogIGdlb21fcG9pbnQoZGF0YT0gcG9udG8sIGFlcyh4PWxvbiwgeT1sYXQsIGNvbG9yPXNpdGUpLHNoYXBlID0gMSwgc2l6ZSA9IDcsIGNvbG9yID0gInJlZCIsIGZpbGwgPSAid2hpdGUiKSsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiI2Q0ZGUzMSIsIGhpZ2ggPSAiIzQyYjI1OCIsIG5hbWUgPSAiVG9wb2dyYXBoeSAobSkiKSsNCiAgbGFicyh4PSJMb25naXR1ZGUiLCB5PSJMYXRpdHVkZSIpDQogICN5bGltKC0yMi45LC0yMi40OCkreGxpbSgtNDguMDksLTQ3LjQ5NSkNCnAzLjENCnAzLjIgPSBwMy4xICsgDQogIHRoZW1lKA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0cmFuc3BhcmVudCIsIGNvbG91ciA9ICJncmV5Iiwgc2l6ZSA9IDAuNCksDQogICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJncmV5Iiwgc2l6ZSA9IDAuNCwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoYW5nbGUgPSAxMCwgaGp1c3QgPSAwLjYpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwgDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ0cmFuc3BhcmVudCIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC44MywgMC4xNSksICANCiAgICBsZWdlbmQuZGlyZWN0aW9uID0gInZlcnRpY2FsIiwNCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50Iiwgc2l6ZSA9IDAuMiwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvdXIgPSAiZ3JleSIpLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2LCBoanVzdCA9IDEpLCANCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDcpLCAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC4zLCAiY20iKSkgKyAgDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgdGl0bGUuaGp1c3QgPSAwLjUsIHRpdGxlLnZqdXN0ID0gMS41KSkgKw0KICBhbm5vdGF0ZShnZW9tID0gInRleHQiLCB5ID0gLTExLjIzLCB4ID0gLTU1LjcsIGxhYmVsID0gIlNpbm9wLCBNVCIsIHNpemUgPSA1LCBjb2xvciA9ICJibGFjayIpICsNCiAgYW5ub3RhdGlvbl9ub3J0aF9hcnJvdyhsb2NhdGlvbiA9ICJ0ciIsICAjIGNhbnRvIHN1cGVyaW9yIGRpcmVpdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaF9ub3J0aCA9ICJ0cnVlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfeCA9IHVuaXQoMC4yLCAiY20iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfeSA9IHVuaXQoMC4yLCAiY20iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IG5vcnRoX2Fycm93X2ZhbmN5X29yaWVudGVlcmluZygpKQ0KcDMuMg0KYGBgDQoNCiMjIF8qKkV4cGVyaW1lbnRhbCBzaXRlKipfDQoNCmBgYHtyfQ0KcDQuMSA9IGdncGxvdCgpKw0KICBnZW9tX3NmKGRhdGE9c2lub3AsIGNvbG9yPSJibGFjSyIsIGZpbGw9InRyYW5zcGFyZW50IikrDQogIGdlb21fcmFzdGVyKGRhdGEgPSB0b3BvX2RmX2NsaXBwZWQsIGFlcyh4ID0geCwgeSA9IHksIGZpbGwgPSBlbGV2YXRpb24pKSsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiI2Q0ZGUzMSIsIGhpZ2ggPSAiIzQyYjI1OCIsIG5hbWUgPSAiVG9wb2dyYXBoeSAobSkiKSsNCiAgbGFicyh4PSJMb25naXR1ZGUiLCB5PSJMYXRpdHVkZSIpKw0KICAgZ2VvbV9zZihkYXRhID0gYXJlYV9zZiwgY29sb3IgPSAiYmxhY2siLCBmaWxsPSJ0cmFuc3BhcmVudCIsIHNpemUgPSAxLjUpKw0KICB5bGltKC0xMS44NjgsLTExLjg1NSkreGxpbSgtNTUuNjM1LC01NS42MTIpDQpwNC4xDQoNCnA0LjI9cDQuMSsgdGhlbWUoDQogIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0cmFuc3BhcmVudCIsIGNvbG91ciA9ICJncmV5IixzaXplID0gMC40KSwNCiAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJncmV5Iiwgc2l6ZSA9IDAuNCwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMTAsIGhqdXN0ID0gMC42KSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ0cmFuc3BhcmVudCIpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ0cmFuc3BhcmVudCIpLA0KICBsZWdlbmQucG9zaXRpb24gPSBjKDAuODUsIDAuMjUpLCAgDQogIGxlZ2VuZC5kaXJlY3Rpb24gPSAidmVydGljYWwiLA0KICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IixzaXplPTAuNCwgbGluZXR5cGU9InNvbGlkIixjb2xvdXIgPSJncmV5IiksDQogIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMC41KSkrICANCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvcmJhcih0aXRsZS5wb3NpdGlvbiA9ICJ0b3AiLCB0aXRsZS5oanVzdCA9IDAuNSx0aXRsZS52anVzdCA9IDEuNSkpKw0KICBhbm5vdGF0ZShnZW9tPSJ0ZXh0IiwgeT0tMTEuODU2LCB4PS01NS42MzAsbGFiZWw9IkV4cGVyaW1lbnRhbCBzaXRlIiwgc2l6ZT00LjUsIGNvbG9yPSJibGFjayIpDQpwNC4yDQpgYGANCg0K