Introduction and Research Question
According to the FBI, index crime in the United States includes violent crime and property crime. Violent crime consists of four criminal offenses: murder and non-negligent manslaughter, rape, robbery, and aggravated assault; property crime consists of burglary, larceny, motor vehicle theft, and arson. According to Pew Research Center, violent crime in the U.S. has fallen sharply over the past quarter century. Using the FBI numbers, the violent crime rate fell 48% between 1993 and 2016. In a survey in late 2016, 57% of registered voters said crime in the U.S. had gotten worse since 2008, even though BJS and FBI data show that violent and property crime rates declined by double-digit percentages during that span.The FBI’s data show big differences from state to state and city to city. In 2016, there were more than 600 violent crimes per 100,000 residents in Alaska, Nevada, New Mexico and Tennessee. By contrast, Maine, New Hampshire and Vermont had rates below 200 violent crimes per 100,000 residents. For this assignment, I used the FBI Crime Data 2016 data set to retrieve county-level information. The crime data originates from the U.S. Department of Justice- Federal Bureau of Investigation (FBI). FBI collects the data through the Uniform Crime Reporting (UCR) program and provides the volume of violent and property crimes as reported by law enforcement agencies that contributed data to the UCR program.The purpose of this analysis is to determine the differences in violent crimes among counties in the U.S. by mapping spatial data. I suspect states such as Alaska, Nevada and New Mexico to have the highest levels of violent crimes and Maine and New Hampshire to have low levels based on the research and statistics from Pew Research Center.
Importing and loading the data set
library(readr)
Crime_Data<-read_csv("C:\\users\\Sangita Roy\\Desktop\\crime_data1.csv")
head(Crime_Data)
Cleaning up the data set
library(magrittr)
library(dplyr)
Crime2<-Crime_Data%>%
rename(County=Geo_NAME,
Total_Crimes=SE_T003_001,
Total_Violent_Crimes=SE_T003_002,
Total_Property_Crimes=SE_T003_003)%>%
select(Geo_FIPS,Geo_STATE,Geo_NATION, County,Total_Crimes,Total_Violent_Crimes, Total_Property_Crimes)%>%
mutate(Percent_Violent=(Total_Violent_Crimes/Total_Crimes)*100)%>%
mutate(Geo_FIPS=as.integer(Geo_FIPS))
head(Crime2)
American Nations data set
am_nations <-read_csv("C:\\users\\Sangita Roy\\Desktop\\am_nations.csv")
head(am_nations)
Reading the map file
library(sf)
ct_map <- st_read("C:\\Users\\Sangita Roy\\Desktop\\tl_2016_us_county.shp", stringsAsFactors = FALSE)
Reading layer `tl_2016_us_county' from data source `C:\Users\Sangita Roy\Desktop\tl_2016_us_county.shp' using driver `ESRI Shapefile'
Simple feature collection with 3233 features and 17 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -179.2311 ymin: -14.60181 xmax: 179.8597 ymax: 71.44106
epsg (SRID): 4269
proj4string: +proj=longlat +datum=NAD83 +no_defs
names(ct_map)
[1] "STATEFP" "COUNTYFP" "COUNTYNS" "GEOID" "NAME" "NAMELSAD"
[7] "LSAD" "CLASSFP" "MTFCC" "CSAFP" "CBSAFP" "METDIVFP"
[13] "FUNCSTAT" "ALAND" "AWATER" "INTPTLAT" "INTPTLON" "geometry"
names(Crime_Data)
[1] "Geo_FIPS" "Geo_NAME" "Geo_QNAME" "Geo_NATION" "Geo_STATE"
[6] "Geo_COUNTY" "SE_T003_001" "SE_T003_002" "SE_T003_003"
Merging the three data sets
library(dplyr)
Crime2 <- Crime2 %>%
mutate(fips = Geo_FIPS, STATEFP=Geo_STATE)
ct_map <- ct_map %>%
mutate(fips = parse_integer(GEOID))
am_nations<- am_nations%>%
mutate(fips= fips_code)
comb_data <- ct_map %>%
left_join(Crime2, by = "fips", "STATEFP")
comb_data<- comb_data %>%
left_join(am_nations, by = "fips")
Mapping the percent of violent crimes
library(tmap)
tm_shape(comb_data) + tm_polygons("Percent_Violent")

Excluding Alaska and Hawaii
comb_data_sub <- comb_data %>%
filter(STATEFP.x != "02") %>%
filter(STATEFP.x != "15") %>%
filter(STATEFP.x != "60") %>%
filter(STATEFP.x != "66") %>%
filter(STATEFP.x != "69") %>%
filter(STATEFP.x != "72") %>%
filter(STATEFP.x != "78")
tm_shape(comb_data_sub, projection = 2163) + tm_polygons("Percent_Violent")

Changing color
comb_data_sub <- comb_data_sub %>%
mutate(redblue = Percent_Violent - mean(Crime2$Percent_Violent, na.rm=TRUE ))
tm_shape(comb_data_sub, projection = 2163) + tm_polygons("redblue", palette = "-RdBu")

Adding state borders
library(tmaptools)
us_states <- comb_data_sub %>%
aggregate_map(by = "STATEFP.x")
tm_shape(comb_data_sub, projection = 2163) + tm_polygons("redblue", palette = "-RdBu") +
tm_shape(us_states) + tm_borders(lwd = .36, col = "black", alpha = 1)

Highlighting the state line
tm_shape(comb_data_sub, projection = 2163) + tm_polygons("redblue", palette = "-RdBu", border.col = "grey", border.alpha = .4) +
tm_shape(us_states) + tm_borders(lwd = .36, col = "black", alpha = 1)

Highlighting the state lines allows the us to see the differences in the percent of violent crimes among different counties and states more clearly. It is easier to locate the name of the state where there is low or high levels of violent crimes in the U.S. According to this spatial mapping of the 2016 FBI data set, the red indicates high levels of violent crimes whereas the light blue indicates low levels of violent crimes. The states which have high level of violent crimes include New York, Montana, South Dakota, Pennsylvania, New Hampshire, etc. The map is covered with a lot of light blue such as Texas, Washington, Maine, etc indicating low levels of violent crime. This spatial mapping confirms the research from Pew Research Center which stated that violent crimes has declined over the years. The states Pew mentioned with high and low levels of violent crimes also match with my findings.
Showing the 11 American Nations
library(tmap)
am_nations <- comb_data_sub %>%
aggregate_map(by = "AN_KEY")
tm_shape(comb_data_sub, projection = 2163) + tm_polygons("redblue", palette = "-RdBu", border.col = "grey", border.alpha = .4) +
tm_shape(am_nations) + tm_borders(lwd = .50, col = "black", alpha = 1)

Award-winning author, Colin Woodard identifies 11 distinct cultures that have historically divides the US. High level of violent crimes are in located in The Far West, New Netherland, and Yankeedom, according to the 11 American Nations. Nations with low levels of violent crimes include Greater Appalachia, Deep South, and El Norte.
Boundary lines are clearer
tm_shape(am_nations, projection = 2163) + tm_polygons(col = "MAP_COLORS") + tm_borders(lwd = .50, col = "black", alpha = 1)

Using tigris package to retrieve county-level spatial shapefiles
library(tigris)
options(tigris_class = "sf")
t_county <- counties(cb = TRUE)
names(t_county)
[1] "STATEFP" "COUNTYFP" "COUNTYNS" "AFFGEOID" "GEOID" "NAME"
[7] "LSAD" "ALAND" "AWATER" "geometry"
Merging the data sets
t_comb_data <- t_county %>%
mutate(fips = parse_integer(GEOID)) %>%
left_join(Crime2, by = "fips")
t_comb_data_sub <- t_comb_data %>%
filter(STATEFP.x != "02") %>%
filter(STATEFP.x != "15") %>%
filter(STATEFP.x != "60") %>%
filter(STATEFP.x != "66") %>%
filter(STATEFP.x != "69") %>%
filter(STATEFP.x != "72") %>%
filter(STATEFP.x != "78")
Non-Spatial Mapping
The ecological regression produced for this analysis demonstrates the relationship between the number of total crimes and the percent of violent crimes that occurs in the counties of the U.S. The ecological regression below gives the mean of total crimes and violent crimes for the counties. The regression evaluated is significant and the mean of total crimes is decreased by 0.009 for every percent increase of violent crimes in the counties. The issue with evaluating violent crime rate on a ecological level is that it cannot be evaluated on an individual level, which is also known as ecological fallacy.
Crime_er<- Crime2 %>%
group_by(STATEFP) %>%
summarise(mean_p = mean(Percent_Violent, na.rm = TRUE), mean_s = mean(Total_Crimes, na.rm = TRUE))
ecoobs <- lm(mean_p ~ mean_s, data = Crime_er)
summary(ecoobs)
Call:
lm(formula = mean_p ~ mean_s, data = Crime_er)
Residuals:
Min 1Q Median 3Q Max
-16.609 -6.182 -3.118 3.724 58.103
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 23.572648 3.625822 6.501 7.54e-08 ***
mean_s -0.009241 0.004484 -2.061 0.0455 *
---
Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 11.85 on 42 degrees of freedom
(2 observations deleted due to missingness)
Multiple R-squared: 0.09183, Adjusted R-squared: 0.07021
F-statistic: 4.247 on 1 and 42 DF, p-value: 0.04555
ggplot
The plot below, shows a statistical observation of the percent of violent crimes among the counties within its State. This is exhibits non-spatial data which is independent of all geometric considerations and is one dimensional.
library(lemon)
ggplot(data = Crime2, aes(x = STATEFP, y = Percent_Violent)) +
geom_point() +
coord_capped_cart(bottom='both', left='none') +
theme_light() + theme(panel.border=element_blank(), axis.line = element_line())

Conclusion
Mapping spatial data enabled me to visualize the locations and areas with high and low violent crimes more accurately and apply to the 11 American Nations. The maps confirmed that the percent of violent crimes has declined in 2016 as there was not much red in the maps to indicate high levels of violent crimes among the counties in different states. However, it is important to note that most crimes are not reported to police, and most reported crimes are not solved. In its annual survey, BJS asks victims of crime whether they reported that crime to police. In 2016, only 42% of the violent crime tracked by BJS was reported to police. There are a variety of reasons crime might not be reported, including a feeling that police “would not or could not do anything to help” or that the crime is “a personal issue or too trivial to report,” according to BJS.
Spatial vs. Non-Spatial
Spatial data is data that define a location on the surface of the Earth. These are in the form of graphic primitives that are usually either points, lines, polygons or pixels. Spatial data includes location, shape, size and orientation. The differences in violent crime rate among counties in the U.S. can be seen through location, shape and borderlines of the map in terms of which areas have high or low violent crime rates. On the other hand, non-spatial data is related to a specific, precisely defines location. In other words, non-spatial data is that information which is independent of all geometric considerations and are numbers, characters or logical type. The fundamental difference between the two is that spatial data are generally multi-dimensional and auto-correlated whereas non-spatial data are generally one-dimension and independent. For large number of locations, the scope of data can be used to understand the name of the location having the highest or lowest violent-crime rate of all locations in my data set. Representation can be mapped using different colors to identify hot spots as per requirements.Spatial mapping is more appealing to the eye because the visualization is more clear with state lines and borders whereas non-spatial mapping is more of statistical numbers that can be intricate and confusing to interpret accurately.
Pg 32 of Lecture #10
“cb=TRUE” is the default geometry used by tidycensus and subset ID for the desired metros with a resolution of 1:500k. If I change it to “cb=FALSE”, it defaults to FALSE (the most detailed TIGER/Line File). An additional 8 variables appeared:
- “CLASSFP”"
- “MTFCC”
- “CSAFP”
- “METDIVP”
- “FUNCSTAT”
- “INTPLAT”
- “INTPLON”
References
Gramlich, John. “5 Facts about Crime in the U.S.” Pew Research Center, 30 Jan. 2018, www.pewresearch.org/fact-tank/2018/01/30/5-facts-about-crime-in-the-u-s/#.
LS0tDQp0aXRsZTogIiMqKk1hcHBpbmcgU3BhdGlhbCBEYXRhKioiDQphdXRob3I6ICJTYW5naXRhIFJveSINCmRhdGU6ICJBcHJpbCAyMiwgMjAxOCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIyMqKkludHJvZHVjdGlvbiBhbmQgUmVzZWFyY2ggUXVlc3Rpb24qKg0KQWNjb3JkaW5nIHRvIHRoZSBGQkksIGluZGV4IGNyaW1lIGluIHRoZSBVbml0ZWQgU3RhdGVzIGluY2x1ZGVzIHZpb2xlbnQgY3JpbWUgYW5kIHByb3BlcnR5IGNyaW1lLiBWaW9sZW50IGNyaW1lIGNvbnNpc3RzIG9mIGZvdXIgY3JpbWluYWwgb2ZmZW5zZXM6IG11cmRlciBhbmQgbm9uLW5lZ2xpZ2VudCBtYW5zbGF1Z2h0ZXIsIHJhcGUsIHJvYmJlcnksIGFuZCBhZ2dyYXZhdGVkIGFzc2F1bHQ7IHByb3BlcnR5IGNyaW1lIGNvbnNpc3RzIG9mIGJ1cmdsYXJ5LCBsYXJjZW55LCBtb3RvciB2ZWhpY2xlIHRoZWZ0LCBhbmQgYXJzb24uIEFjY29yZGluZyB0byBQZXcgUmVzZWFyY2ggQ2VudGVyLCB2aW9sZW50IGNyaW1lIGluIHRoZSBVLlMuIGhhcyBmYWxsZW4gc2hhcnBseSBvdmVyIHRoZSBwYXN0IHF1YXJ0ZXIgY2VudHVyeS4gVXNpbmcgdGhlIEZCSSBudW1iZXJzLCB0aGUgdmlvbGVudCBjcmltZSByYXRlIGZlbGwgNDglIGJldHdlZW4gMTk5MyBhbmQgMjAxNi4gSW4gYSBzdXJ2ZXkgaW4gbGF0ZSAyMDE2LCA1NyUgb2YgcmVnaXN0ZXJlZCB2b3RlcnMgc2FpZCBjcmltZSBpbiB0aGUgVS5TLiBoYWQgZ290dGVuIHdvcnNlIHNpbmNlIDIwMDgsIGV2ZW4gdGhvdWdoIEJKUyBhbmQgRkJJIGRhdGEgc2hvdyB0aGF0IHZpb2xlbnQgYW5kIHByb3BlcnR5IGNyaW1lIHJhdGVzIGRlY2xpbmVkIGJ5IGRvdWJsZS1kaWdpdCBwZXJjZW50YWdlcyBkdXJpbmcgdGhhdCBzcGFuLlRoZSBGQkkncyBkYXRhIHNob3cgYmlnIGRpZmZlcmVuY2VzIGZyb20gc3RhdGUgdG8gc3RhdGUgYW5kIGNpdHkgdG8gY2l0eS4gSW4gMjAxNiwgdGhlcmUgd2VyZSBtb3JlIHRoYW4gNjAwIHZpb2xlbnQgY3JpbWVzIHBlciAxMDAsMDAwIHJlc2lkZW50cyBpbiBBbGFza2EsIE5ldmFkYSwgTmV3IE1leGljbyBhbmQgVGVubmVzc2VlLiBCeSBjb250cmFzdCwgTWFpbmUsIE5ldyBIYW1wc2hpcmUgYW5kIFZlcm1vbnQgaGFkIHJhdGVzIGJlbG93IDIwMCB2aW9sZW50IGNyaW1lcyBwZXIgMTAwLDAwMCByZXNpZGVudHMuIA0KRm9yIHRoaXMgYXNzaWdubWVudCwgSSB1c2VkIHRoZSBGQkkgQ3JpbWUgRGF0YSAyMDE2IGRhdGEgc2V0IHRvIHJldHJpZXZlIGNvdW50eS1sZXZlbCBpbmZvcm1hdGlvbi4gVGhlIGNyaW1lIGRhdGEgb3JpZ2luYXRlcyBmcm9tIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgSnVzdGljZS0gRmVkZXJhbCBCdXJlYXUgb2YgSW52ZXN0aWdhdGlvbiAoRkJJKS4gRkJJIGNvbGxlY3RzIHRoZSBkYXRhIHRocm91Z2ggdGhlIFVuaWZvcm0gQ3JpbWUgUmVwb3J0aW5nIChVQ1IpIHByb2dyYW0gYW5kIHByb3ZpZGVzIHRoZSB2b2x1bWUgb2YgdmlvbGVudCBhbmQgcHJvcGVydHkgY3JpbWVzIGFzIHJlcG9ydGVkIGJ5IGxhdyBlbmZvcmNlbWVudCBhZ2VuY2llcyB0aGF0IGNvbnRyaWJ1dGVkIGRhdGEgdG8gdGhlIFVDUiBwcm9ncmFtLlRoZSBwdXJwb3NlIG9mIHRoaXMgYW5hbHlzaXMgaXMgdG8gZGV0ZXJtaW5lIHRoZSBkaWZmZXJlbmNlcyBpbiB2aW9sZW50IGNyaW1lcyBhbW9uZyBjb3VudGllcyBpbiB0aGUgVS5TLiBieSBtYXBwaW5nIHNwYXRpYWwgZGF0YS4gSSBzdXNwZWN0IHN0YXRlcyBzdWNoIGFzIEFsYXNrYSwgTmV2YWRhIGFuZCBOZXcgTWV4aWNvIHRvIGhhdmUgdGhlIGhpZ2hlc3QgbGV2ZWxzIG9mIHZpb2xlbnQgY3JpbWVzIGFuZCBNYWluZSBhbmQgTmV3IEhhbXBzaGlyZSB0byBoYXZlIGxvdyBsZXZlbHMgYmFzZWQgb24gdGhlIHJlc2VhcmNoIGFuZCBzdGF0aXN0aWNzIGZyb20gUGV3IFJlc2VhcmNoIENlbnRlci4NCg0KDQojIyNJbXBvcnRpbmcgYW5kIGxvYWRpbmcgdGhlIGRhdGEgc2V0DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShyZWFkcikNCg0KQ3JpbWVfRGF0YTwtcmVhZF9jc3YoIkM6XFx1c2Vyc1xcU2FuZ2l0YSBSb3lcXERlc2t0b3BcXGNyaW1lX2RhdGExLmNzdiIpDQpoZWFkKENyaW1lX0RhdGEpDQpgYGANCg0KIyMjQ2xlYW5pbmcgdXAgdGhlIGRhdGEgc2V0DQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoZHBseXIpDQpDcmltZTI8LUNyaW1lX0RhdGElPiUNCiAgcmVuYW1lKENvdW50eT1HZW9fTkFNRSwNCiAgICAgICBUb3RhbF9DcmltZXM9U0VfVDAwM18wMDEsDQogICAgICAgVG90YWxfVmlvbGVudF9DcmltZXM9U0VfVDAwM18wMDIsDQogICAgICAgVG90YWxfUHJvcGVydHlfQ3JpbWVzPVNFX1QwMDNfMDAzKSU+JQ0KICBzZWxlY3QoR2VvX0ZJUFMsR2VvX1NUQVRFLEdlb19OQVRJT04sIENvdW50eSxUb3RhbF9DcmltZXMsVG90YWxfVmlvbGVudF9DcmltZXMsIFRvdGFsX1Byb3BlcnR5X0NyaW1lcyklPiUNCiAgbXV0YXRlKFBlcmNlbnRfVmlvbGVudD0oVG90YWxfVmlvbGVudF9DcmltZXMvVG90YWxfQ3JpbWVzKSoxMDApJT4lDQogIG11dGF0ZShHZW9fRklQUz1hcy5pbnRlZ2VyKEdlb19GSVBTKSkNCmhlYWQoQ3JpbWUyKQ0KYGBgDQoNCiMjI0FtZXJpY2FuIE5hdGlvbnMgZGF0YSBzZXQNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQphbV9uYXRpb25zIDwtcmVhZF9jc3YoIkM6XFx1c2Vyc1xcU2FuZ2l0YSBSb3lcXERlc2t0b3BcXGFtX25hdGlvbnMuY3N2IikNCmhlYWQoYW1fbmF0aW9ucykNCmBgYA0KDQojIyNSZWFkaW5nIHRoZSBtYXAgZmlsZQ0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoc2YpDQpjdF9tYXAgPC0gc3RfcmVhZCgiQzpcXFVzZXJzXFxTYW5naXRhIFJveVxcRGVza3RvcFxcdGxfMjAxNl91c19jb3VudHkuc2hwIiwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KYGBgDQoNCmBgYHtyfQ0KbmFtZXMoY3RfbWFwKQ0KYGBgDQoNCmBgYHtyfQ0KbmFtZXMoQ3JpbWVfRGF0YSkNCmBgYA0KDQojIyNNZXJnaW5nIHRoZSB0aHJlZSBkYXRhIHNldHMNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCkNyaW1lMiA8LSBDcmltZTIgJT4lIA0KICBtdXRhdGUoZmlwcyA9IEdlb19GSVBTLCBTVEFURUZQPUdlb19TVEFURSkNCmN0X21hcCA8LSBjdF9tYXAgJT4lIA0KICBtdXRhdGUoZmlwcyA9IHBhcnNlX2ludGVnZXIoR0VPSUQpKQ0KYW1fbmF0aW9uczwtIGFtX25hdGlvbnMlPiUNCm11dGF0ZShmaXBzPSBmaXBzX2NvZGUpDQoNCmNvbWJfZGF0YSA8LSBjdF9tYXAgJT4lIA0KICBsZWZ0X2pvaW4oQ3JpbWUyLCBieSA9ICJmaXBzIiwgIlNUQVRFRlAiKQ0KDQpjb21iX2RhdGE8LSBjb21iX2RhdGEgJT4lIA0KICBsZWZ0X2pvaW4oYW1fbmF0aW9ucywgYnkgPSAiZmlwcyIpDQpgYGANCg0KIyMjTWFwcGluZyB0aGUgcGVyY2VudCBvZiB2aW9sZW50IGNyaW1lcyANCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRtYXApDQp0bV9zaGFwZShjb21iX2RhdGEpICsgdG1fcG9seWdvbnMoIlBlcmNlbnRfVmlvbGVudCIpDQpgYGANCg0KIyMjRXhjbHVkaW5nIEFsYXNrYSBhbmQgSGF3YWlpDQpgYGB7cn0NCmNvbWJfZGF0YV9zdWIgPC0gY29tYl9kYXRhICU+JSANCiAgZmlsdGVyKFNUQVRFRlAueCAhPSAiMDIiKSAlPiUgDQogIGZpbHRlcihTVEFURUZQLnggIT0gIjE1IikgJT4lIA0KICBmaWx0ZXIoU1RBVEVGUC54ICE9ICI2MCIpICU+JSANCiAgZmlsdGVyKFNUQVRFRlAueCAhPSAiNjYiKSAlPiUgDQogIGZpbHRlcihTVEFURUZQLnggIT0gIjY5IikgJT4lIA0KICBmaWx0ZXIoU1RBVEVGUC54ICE9ICI3MiIpICU+JSANCiAgZmlsdGVyKFNUQVRFRlAueCAhPSAiNzgiKQ0KYGBgDQoNCg0KYGBge3J9DQp0bV9zaGFwZShjb21iX2RhdGFfc3ViLCBwcm9qZWN0aW9uID0gMjE2MykgKyB0bV9wb2x5Z29ucygiUGVyY2VudF9WaW9sZW50IikNCmBgYA0KDQojIyNDaGFuZ2luZyBjb2xvcg0KYGBge3J9DQpjb21iX2RhdGFfc3ViIDwtIGNvbWJfZGF0YV9zdWIgJT4lIA0KbXV0YXRlKHJlZGJsdWUgPSBQZXJjZW50X1Zpb2xlbnQgLSBtZWFuKENyaW1lMiRQZXJjZW50X1Zpb2xlbnQsIG5hLnJtPVRSVUUgKSkNCmBgYA0KDQoNCmBgYHtyfQ0KdG1fc2hhcGUoY29tYl9kYXRhX3N1YiwgcHJvamVjdGlvbiA9IDIxNjMpICsgdG1fcG9seWdvbnMoInJlZGJsdWUiLCBwYWxldHRlID0gIi1SZEJ1IikNCmBgYA0KDQojIyNBZGRpbmcgc3RhdGUgYm9yZGVycw0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodG1hcHRvb2xzKQ0KdXNfc3RhdGVzIDwtIGNvbWJfZGF0YV9zdWIgJT4lIA0KICBhZ2dyZWdhdGVfbWFwKGJ5ID0gIlNUQVRFRlAueCIpDQpgYGANCg0KYGBge3J9DQp0bV9zaGFwZShjb21iX2RhdGFfc3ViLCBwcm9qZWN0aW9uID0gMjE2MykgKyB0bV9wb2x5Z29ucygicmVkYmx1ZSIsIHBhbGV0dGUgPSAiLVJkQnUiKSArIA0KICB0bV9zaGFwZSh1c19zdGF0ZXMpICsgdG1fYm9yZGVycyhsd2QgPSAuMzYsIGNvbCA9ICJibGFjayIsIGFscGhhID0gMSkNCmBgYA0KDQojIyNIaWdobGlnaHRpbmcgdGhlIHN0YXRlIGxpbmUNCmBgYHtyfQ0KdG1fc2hhcGUoY29tYl9kYXRhX3N1YiwgcHJvamVjdGlvbiA9IDIxNjMpICsgdG1fcG9seWdvbnMoInJlZGJsdWUiLCBwYWxldHRlID0gIi1SZEJ1IiwgYm9yZGVyLmNvbCA9ICJncmV5IiwgYm9yZGVyLmFscGhhID0gLjQpICsgDQogIHRtX3NoYXBlKHVzX3N0YXRlcykgKyB0bV9ib3JkZXJzKGx3ZCA9IC4zNiwgY29sID0gImJsYWNrIiwgYWxwaGEgPSAxKQ0KYGBgDQpIaWdobGlnaHRpbmcgdGhlIHN0YXRlIGxpbmVzIGFsbG93cyB0aGUgdXMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgcGVyY2VudCBvZiB2aW9sZW50IGNyaW1lcyBhbW9uZyBkaWZmZXJlbnQgY291bnRpZXMgYW5kIHN0YXRlcyBtb3JlIGNsZWFybHkuIEl0IGlzIGVhc2llciB0byBsb2NhdGUgdGhlIG5hbWUgb2YgdGhlIHN0YXRlIHdoZXJlIHRoZXJlIGlzIGxvdyBvciBoaWdoIGxldmVscyBvZiB2aW9sZW50IGNyaW1lcyBpbiB0aGUgVS5TLiBBY2NvcmRpbmcgdG8gdGhpcyBzcGF0aWFsIG1hcHBpbmcgb2YgdGhlIDIwMTYgRkJJIGRhdGEgc2V0LCB0aGUgcmVkIGluZGljYXRlcyBoaWdoIGxldmVscyBvZiB2aW9sZW50IGNyaW1lcyB3aGVyZWFzIHRoZSBsaWdodCBibHVlIGluZGljYXRlcyBsb3cgbGV2ZWxzIG9mIHZpb2xlbnQgY3JpbWVzLiBUaGUgc3RhdGVzIHdoaWNoIGhhdmUgaGlnaCBsZXZlbCBvZiB2aW9sZW50IGNyaW1lcyBpbmNsdWRlIE5ldyBZb3JrLCBNb250YW5hLCBTb3V0aCBEYWtvdGEsIFBlbm5zeWx2YW5pYSwgTmV3IEhhbXBzaGlyZSwgZXRjLiBUaGUgbWFwIGlzIGNvdmVyZWQgd2l0aCBhIGxvdCBvZiBsaWdodCBibHVlIHN1Y2ggYXMgVGV4YXMsIFdhc2hpbmd0b24sIE1haW5lLCBldGMgaW5kaWNhdGluZyBsb3cgbGV2ZWxzIG9mIHZpb2xlbnQgY3JpbWUuIFRoaXMgc3BhdGlhbCBtYXBwaW5nIGNvbmZpcm1zIHRoZSByZXNlYXJjaCBmcm9tIFBldyBSZXNlYXJjaCBDZW50ZXIgd2hpY2ggc3RhdGVkIHRoYXQgdmlvbGVudCBjcmltZXMgaGFzIGRlY2xpbmVkIG92ZXIgdGhlIHllYXJzLiBUaGUgc3RhdGVzIFBldyBtZW50aW9uZWQgd2l0aCBoaWdoIGFuZCBsb3cgbGV2ZWxzIG9mIHZpb2xlbnQgY3JpbWVzIGFsc28gbWF0Y2ggd2l0aCBteSBmaW5kaW5ncy4NCg0KDQojIyNTaG93aW5nIHRoZSAxMSBBbWVyaWNhbiBOYXRpb25zDQpgYGB7cn0NCmxpYnJhcnkodG1hcCkNCmFtX25hdGlvbnMgPC0gY29tYl9kYXRhX3N1YiAlPiUgDQogIGFnZ3JlZ2F0ZV9tYXAoYnkgPSAiQU5fS0VZIikNCmBgYA0KDQpgYGB7cn0NCnRtX3NoYXBlKGNvbWJfZGF0YV9zdWIsIHByb2plY3Rpb24gPSAyMTYzKSArIHRtX3BvbHlnb25zKCJyZWRibHVlIiwgcGFsZXR0ZSA9ICItUmRCdSIsIGJvcmRlci5jb2wgPSAiZ3JleSIsIGJvcmRlci5hbHBoYSA9IC40KSArIA0KICB0bV9zaGFwZShhbV9uYXRpb25zKSArIHRtX2JvcmRlcnMobHdkID0gLjUwLCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpDQpgYGANCkF3YXJkLXdpbm5pbmcgYXV0aG9yLCBDb2xpbiBXb29kYXJkIGlkZW50aWZpZXMgMTEgZGlzdGluY3QgY3VsdHVyZXMgdGhhdCBoYXZlIGhpc3RvcmljYWxseSBkaXZpZGVzIHRoZSBVUy4gSGlnaCBsZXZlbCBvZiB2aW9sZW50IGNyaW1lcyBhcmUgaW4gbG9jYXRlZCBpbiBUaGUgRmFyIFdlc3QsIE5ldyBOZXRoZXJsYW5kLCBhbmQgWWFua2VlZG9tLCBhY2NvcmRpbmcgdG8gdGhlIDExIEFtZXJpY2FuIE5hdGlvbnMuIE5hdGlvbnMgd2l0aCBsb3cgbGV2ZWxzIG9mIHZpb2xlbnQgY3JpbWVzIGluY2x1ZGUgR3JlYXRlciBBcHBhbGFjaGlhLCBEZWVwIFNvdXRoLCBhbmQgRWwgTm9ydGUuDQoNCiMjI0JvdW5kYXJ5IGxpbmVzIGFyZSBjbGVhcmVyDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdG1fc2hhcGUoYW1fbmF0aW9ucywgcHJvamVjdGlvbiA9IDIxNjMpICsgdG1fcG9seWdvbnMoY29sID0gIk1BUF9DT0xPUlMiKSArIHRtX2JvcmRlcnMobHdkID0gLjUwLCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpDQpgYGANCg0KDQojIyNVc2luZyB0aWdyaXMgcGFja2FnZSB0byByZXRyaWV2ZSBjb3VudHktbGV2ZWwgc3BhdGlhbCBzaGFwZWZpbGVzDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSh0aWdyaXMpDQpvcHRpb25zKHRpZ3Jpc19jbGFzcyA9ICJzZiIpDQp0X2NvdW50eSA8LSBjb3VudGllcyhjYiA9IFRSVUUpDQpuYW1lcyh0X2NvdW50eSkNCmBgYA0KDQoNCiMjI01lcmdpbmcgdGhlIGRhdGEgc2V0cw0KYGBge3J9DQp0X2NvbWJfZGF0YSA8LSB0X2NvdW50eSAlPiUgDQogIG11dGF0ZShmaXBzID0gcGFyc2VfaW50ZWdlcihHRU9JRCkpICU+JSANCiAgbGVmdF9qb2luKENyaW1lMiwgYnkgPSAiZmlwcyIpDQpgYGANCg0KYGBge3J9DQp0X2NvbWJfZGF0YV9zdWIgPC0gdF9jb21iX2RhdGEgJT4lIA0KICBmaWx0ZXIoU1RBVEVGUC54ICE9ICIwMiIpICU+JSANCiAgZmlsdGVyKFNUQVRFRlAueCAhPSAiMTUiKSAlPiUgDQogIGZpbHRlcihTVEFURUZQLnggIT0gIjYwIikgJT4lIA0KICBmaWx0ZXIoU1RBVEVGUC54ICE9ICI2NiIpICU+JSANCiAgZmlsdGVyKFNUQVRFRlAueCAhPSAiNjkiKSAlPiUgDQogIGZpbHRlcihTVEFURUZQLnggIT0gIjcyIikgJT4lIA0KICBmaWx0ZXIoU1RBVEVGUC54ICE9ICI3OCIpDQpgYGANCg0KIyMjTWFwcGluZyBjb3VudHktbGV2ZWwgaW5mb3JtYXRpb24gdXNpbmcgdGhlIHRtYXAgcGFja2FnZQ0KYGBge3J9DQpsaWJyYXJ5KHRtYXB0b29scykNCnVzX3N0YXRlcyA8LSB0X2NvbWJfZGF0YV9zdWIgJT4lIA0KICBhZ2dyZWdhdGVfbWFwKGJ5ID0gIlNUQVRFRlAueCIpDQphbV9uYXRpb25zIDwtIHRfY29tYl9kYXRhX3N1YiAlPiUgDQogIGFnZ3JlZ2F0ZV9tYXAoYnkgPSAiU1RBVEVGUC54IikNCnRfY29tYl9kYXRhX3N1YiA8LSB0X2NvbWJfZGF0YV9zdWIgJT4lIA0KIG11dGF0ZShyZWRibHVlID0gUGVyY2VudF9WaW9sZW50IC0gbWVhbihDcmltZTIkUGVyY2VudF9WaW9sZW50LCBuYS5ybT1UUlVFICkpDQpgYGANCg0KYGBge3J9DQp0bV9zaGFwZSh0X2NvbWJfZGF0YV9zdWIsIHByb2plY3Rpb24gPSAyMTYzKSArIHRtX3BvbHlnb25zKCJyZWRibHVlIiwgcGFsZXR0ZSA9ICItUmRCdSIsIGJvcmRlci5jb2wgPSAiZ3JleSIsIGJvcmRlci5hbHBoYSA9IC40KSArIA0KICB0bV9zaGFwZShhbV9uYXRpb25zKSArIHRtX2JvcmRlcnMobHdkID0gLjUwLCBjb2wgPSAiYmxhY2siLCBhbHBoYSA9IDEpDQpgYGANCg0KIyMjTm9uLVNwYXRpYWwgTWFwcGluZw0KVGhlIGVjb2xvZ2ljYWwgcmVncmVzc2lvbiBwcm9kdWNlZCBmb3IgdGhpcyBhbmFseXNpcyBkZW1vbnN0cmF0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgdG90YWwgY3JpbWVzIGFuZCB0aGUgcGVyY2VudCBvZiB2aW9sZW50IGNyaW1lcyB0aGF0IG9jY3VycyBpbiB0aGUgY291bnRpZXMgb2YgdGhlIFUuUy4gVGhlIGVjb2xvZ2ljYWwgcmVncmVzc2lvbiBiZWxvdyBnaXZlcyB0aGUgbWVhbiBvZiB0b3RhbCBjcmltZXMgYW5kIHZpb2xlbnQgY3JpbWVzIGZvciB0aGUgY291bnRpZXMuIFRoZSByZWdyZXNzaW9uIGV2YWx1YXRlZCBpcyBzaWduaWZpY2FudCBhbmQgdGhlIG1lYW4gb2YgdG90YWwgY3JpbWVzIGlzIGRlY3JlYXNlZCBieSAwLjAwOSBmb3IgZXZlcnkgcGVyY2VudCBpbmNyZWFzZSBvZiB2aW9sZW50IGNyaW1lcyBpbiB0aGUgY291bnRpZXMuIFRoZSBpc3N1ZSB3aXRoIGV2YWx1YXRpbmcgdmlvbGVudCBjcmltZSByYXRlIG9uIGEgZWNvbG9naWNhbCBsZXZlbCBpcyB0aGF0IGl0IGNhbm5vdCBiZSBldmFsdWF0ZWQgb24gYW4gaW5kaXZpZHVhbCBsZXZlbCwgd2hpY2ggaXMgYWxzbyBrbm93biBhcyBlY29sb2dpY2FsIGZhbGxhY3kuDQpgYGB7cn0NCkNyaW1lX2VyPC0gQ3JpbWUyICU+JSANCiAgZ3JvdXBfYnkoU1RBVEVGUCkgJT4lIA0KICBzdW1tYXJpc2UobWVhbl9wID0gbWVhbihQZXJjZW50X1Zpb2xlbnQsIG5hLnJtID0gVFJVRSksIG1lYW5fcyA9IG1lYW4oVG90YWxfQ3JpbWVzLCBuYS5ybSA9IFRSVUUpKQ0KDQplY29vYnMgPC0gbG0obWVhbl9wIH4gbWVhbl9zLCBkYXRhID0gQ3JpbWVfZXIpDQpzdW1tYXJ5KGVjb29icykNCmBgYA0KDQojIyNnZ3Bsb3QNClRoZSBwbG90IGJlbG93LCBzaG93cyBhIHN0YXRpc3RpY2FsIG9ic2VydmF0aW9uIG9mIHRoZSBwZXJjZW50IG9mIHZpb2xlbnQgY3JpbWVzIGFtb25nIHRoZSBjb3VudGllcyB3aXRoaW4gaXRzIFN0YXRlLiBUaGlzIGlzIGV4aGliaXRzIG5vbi1zcGF0aWFsIGRhdGEgIHdoaWNoIGlzIGluZGVwZW5kZW50IG9mIGFsbCBnZW9tZXRyaWMgY29uc2lkZXJhdGlvbnMgYW5kIGlzIG9uZSBkaW1lbnNpb25hbC4gDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShsZW1vbikNCmdncGxvdChkYXRhID0gQ3JpbWUyLCBhZXMoeCA9IFNUQVRFRlAsIHkgPSBQZXJjZW50X1Zpb2xlbnQpKSArDQogICAgZ2VvbV9wb2ludCgpICsNCiAgY29vcmRfY2FwcGVkX2NhcnQoYm90dG9tPSdib3RoJywgbGVmdD0nbm9uZScpICsNCiAgdGhlbWVfbGlnaHQoKSArIHRoZW1lKHBhbmVsLmJvcmRlcj1lbGVtZW50X2JsYW5rKCksIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZSgpKQ0KYGBgDQoNCg0KIyMjQ29uY2x1c2lvbg0KTWFwcGluZyBzcGF0aWFsIGRhdGEgZW5hYmxlZCBtZSB0byB2aXN1YWxpemUgdGhlIGxvY2F0aW9ucyBhbmQgYXJlYXMgd2l0aCBoaWdoIGFuZCBsb3cgdmlvbGVudCBjcmltZXMgbW9yZSBhY2N1cmF0ZWx5IGFuZCBhcHBseSB0byB0aGUgMTEgQW1lcmljYW4gTmF0aW9ucy4gVGhlIG1hcHMgY29uZmlybWVkIHRoYXQgdGhlIHBlcmNlbnQgb2YgdmlvbGVudCBjcmltZXMgaGFzIGRlY2xpbmVkIGluIDIwMTYgYXMgdGhlcmUgd2FzIG5vdCBtdWNoIHJlZCBpbiB0aGUgbWFwcyB0byBpbmRpY2F0ZSBoaWdoIGxldmVscyBvZiB2aW9sZW50IGNyaW1lcyBhbW9uZyB0aGUgY291bnRpZXMgaW4gZGlmZmVyZW50IHN0YXRlcy4gSG93ZXZlciwgaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBtb3N0IGNyaW1lcyBhcmUgbm90IHJlcG9ydGVkIHRvIHBvbGljZSwgYW5kIG1vc3QgcmVwb3J0ZWQgY3JpbWVzIGFyZSBub3Qgc29sdmVkLiBJbiBpdHMgYW5udWFsIHN1cnZleSwgQkpTIGFza3MgdmljdGltcyBvZiBjcmltZSB3aGV0aGVyIHRoZXkgcmVwb3J0ZWQgdGhhdCBjcmltZSB0byBwb2xpY2UuIEluIDIwMTYsIG9ubHkgNDIlIG9mIHRoZSB2aW9sZW50IGNyaW1lIHRyYWNrZWQgYnkgQkpTIHdhcyByZXBvcnRlZCB0byBwb2xpY2UuIFRoZXJlIGFyZSBhIHZhcmlldHkgb2YgcmVhc29ucyBjcmltZSBtaWdodCBub3QgYmUgcmVwb3J0ZWQsIGluY2x1ZGluZyBhIGZlZWxpbmcgdGhhdCBwb2xpY2UgIndvdWxkIG5vdCBvciBjb3VsZCBub3QgZG8gYW55dGhpbmcgdG8gaGVscCIgb3IgdGhhdCB0aGUgY3JpbWUgaXMgImEgcGVyc29uYWwgaXNzdWUgb3IgdG9vIHRyaXZpYWwgdG8gcmVwb3J0LCIgYWNjb3JkaW5nIHRvIEJKUy4NCg0KIyMjU3BhdGlhbCB2cy4gTm9uLVNwYXRpYWwNClNwYXRpYWwgZGF0YSBpcyBkYXRhIHRoYXQgZGVmaW5lIGEgbG9jYXRpb24gb24gdGhlIHN1cmZhY2Ugb2YgdGhlIEVhcnRoLiBUaGVzZSBhcmUgaW4gdGhlIGZvcm0gb2YgZ3JhcGhpYyBwcmltaXRpdmVzIHRoYXQgYXJlIHVzdWFsbHkgZWl0aGVyIHBvaW50cywgbGluZXMsIHBvbHlnb25zIG9yIHBpeGVscy4gU3BhdGlhbCBkYXRhIGluY2x1ZGVzIGxvY2F0aW9uLCBzaGFwZSwgc2l6ZSBhbmQgb3JpZW50YXRpb24uIFRoZSBkaWZmZXJlbmNlcyBpbiB2aW9sZW50IGNyaW1lIHJhdGUgYW1vbmcgY291bnRpZXMgaW4gdGhlIFUuUy4gY2FuIGJlIHNlZW4gdGhyb3VnaCBsb2NhdGlvbiwgc2hhcGUgYW5kIGJvcmRlcmxpbmVzIG9mIHRoZSBtYXAgaW4gdGVybXMgb2Ygd2hpY2ggYXJlYXMgaGF2ZSBoaWdoIG9yIGxvdyB2aW9sZW50IGNyaW1lIHJhdGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgbm9uLXNwYXRpYWwgZGF0YSBpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMsIHByZWNpc2VseSBkZWZpbmVzIGxvY2F0aW9uLiBJbiBvdGhlciB3b3Jkcywgbm9uLXNwYXRpYWwgZGF0YSBpcyB0aGF0IGluZm9ybWF0aW9uIHdoaWNoIGlzIGluZGVwZW5kZW50IG9mIGFsbCBnZW9tZXRyaWMgY29uc2lkZXJhdGlvbnMgYW5kIGFyZSBudW1iZXJzLCBjaGFyYWN0ZXJzIG9yIGxvZ2ljYWwgdHlwZS4gVGhlIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGlzIHRoYXQgc3BhdGlhbCBkYXRhIGFyZSBnZW5lcmFsbHkgbXVsdGktZGltZW5zaW9uYWwgYW5kIGF1dG8tY29ycmVsYXRlZCB3aGVyZWFzIG5vbi1zcGF0aWFsIGRhdGEgYXJlIGdlbmVyYWxseSBvbmUtZGltZW5zaW9uIGFuZCBpbmRlcGVuZGVudC4gRm9yIGxhcmdlIG51bWJlciBvZiBsb2NhdGlvbnMsIHRoZSBzY29wZSBvZiBkYXRhIGNhbiBiZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIG5hbWUgb2YgdGhlIGxvY2F0aW9uIGhhdmluZyB0aGUgaGlnaGVzdCBvciBsb3dlc3QgdmlvbGVudC1jcmltZSByYXRlIG9mIGFsbCBsb2NhdGlvbnMgaW4gbXkgZGF0YSBzZXQuIFJlcHJlc2VudGF0aW9uIGNhbiBiZSBtYXBwZWQgdXNpbmcgZGlmZmVyZW50IGNvbG9ycyB0byBpZGVudGlmeSBob3Qgc3BvdHMgYXMgcGVyIHJlcXVpcmVtZW50cy5TcGF0aWFsIG1hcHBpbmcgaXMgbW9yZSBhcHBlYWxpbmcgdG8gdGhlIGV5ZSBiZWNhdXNlIHRoZSB2aXN1YWxpemF0aW9uIGlzIG1vcmUgY2xlYXIgd2l0aCBzdGF0ZSBsaW5lcyBhbmQgYm9yZGVycyB3aGVyZWFzIG5vbi1zcGF0aWFsIG1hcHBpbmcgaXMgbW9yZSBvZiBzdGF0aXN0aWNhbCBudW1iZXJzIHRoYXQgY2FuIGJlIGludHJpY2F0ZSBhbmQgY29uZnVzaW5nIHRvIGludGVycHJldCBhY2N1cmF0ZWx5Lg0KDQojIyNQZyAzMiBvZiBMZWN0dXJlICMxMA0KImNiPVRSVUUiIGlzIHRoZSBkZWZhdWx0IGdlb21ldHJ5IHVzZWQgYnkgdGlkeWNlbnN1cyBhbmQgc3Vic2V0IElEIGZvciB0aGUgZGVzaXJlZCBtZXRyb3Mgd2l0aCBhIHJlc29sdXRpb24gb2YgMTo1MDBrLiBJZiBJIGNoYW5nZSBpdCB0byAiY2I9RkFMU0UiLCBpdCBkZWZhdWx0cyB0byBGQUxTRSAodGhlIG1vc3QgZGV0YWlsZWQgVElHRVIvTGluZSBGaWxlKS4gQW4gYWRkaXRpb25hbCA4IHZhcmlhYmxlcyBhcHBlYXJlZDoNCg0KKyAiQ0xBU1NGUCIiDQorICJNVEZDQyINCisgIkNTQUZQIg0KKyAiTUVURElWUCINCisgIkZVTkNTVEFUIg0KKyAiSU5UUExBVCINCisgIklOVFBMT04iDQoNCiMjIyoqUmVmZXJlbmNlcyoqDQpHcmFtbGljaCwgSm9obi4gIjUgRmFjdHMgYWJvdXQgQ3JpbWUgaW4gdGhlIFUuUy4iIFBldyBSZXNlYXJjaCBDZW50ZXIsIDMwIEphbi4gMjAxOCwgd3d3LnBld3Jlc2VhcmNoLm9yZy9mYWN0LXRhbmsvMjAxOC8wMS8zMC81LWZhY3RzLWFib3V0LWNyaW1lLWluLXRoZS11LXMvIy4NCg==