1. Total
data <- read.csv("dataforpylorigraph.csv", header = TRUE)
library(ggplot2)
library(grid)
data$birth.year_high <- as.numeric(data$birth.year_high)
#summary(data$birth.year_high)
data$total <- as.numeric(data$total)
#summary(data$total)
data$Author <- paste(data$Author..year.of.publication, ", ", 
                     data$Research.Year)
data$Study.No <- factor(data$Study.No, ordered = TRUE)
data$Author <- factor(data$Author,
                      levels=c("Asaka, 1992 ,  unknown",
                               "Kikuchi, 1998 ,  1996",
                               "Fujisawa, 1999 ,  1974",
                               "Fujisawa, 1999 ,  1984",
                               "Fujisawa, 1999 ,  1994",
                               "Ogihara, 2000 ,  1990",
                               "Yamagata, 2000 ,  1988",
                               "Kurosawa, 2000 ,  1995",
                               "Yamashita, 2001 ,  1995",
                               "Fukuda, 2001 ,  1986",
                               "Fukuda, 2001 ,  1998",
                               "Kinjo, 2002 ,  2000",
                               "Kato, 2003 ,  2003",
                               "Kato, 2004 ,  2004",
                               "Kikuchi, 2005 ,  1988",
                               "Kawade, 2005 ,  2000",
                               "Sasazuki, 2006 ,  1990",
                               "Shikata, 2008 ,  1988",
                               "Nakajima, 2010 ,  1998",
                               "Nakajima, 2010 ,  2005",
                               "Akamatsu, 2011 ,  2007",
                               "Akamatsu, 2011 ,  2008",
                               "Akamatsu, 2011 ,  2009",
                               "Toyoda, 2012 ,  2005",
                               "Tamura, 2012 ,  2009",
                               "Kikuchi, 2013 ,  1997",
                               "Kikuchi, 2013 ,  2003",
                               "Urita, 2013 ,  2002",
                               "Ueda, 2014 ,  2005",
                               "Hirayama, 2014 ,  2008",
                               "Okuda, 2014 ,  2010",
                               "Watanabe, 2015 ,  2010" ,
                               "Kamada, 2015 ,  2011",
                               "Shiotani, 2007  ,  2005",
                               "Yamaji, 2001 ,  1997", 
                               "Shibata, 2002 ,  1993",
                               "Youn, 1998 ,  1993", 
                               "Naito, 2008 ,  2002",
                               "Naito, 2008 ,  2003",
                               "Shimatani, 2005 ,  2000",
                               "Nobuta, 2004 ,  1996",
                               "Kumagai, 1998 ,  1986",
                               "Kumagai, 1998 ,  1994",
                               "Reploge, 1996 ,  1980",
                               "Fukao, 1993 ,  1985"))
data1 <- subset(data, !is.na(total))
graph1 <- ggplot(data1, aes(x = birth.year_high, 
                  y = total,
                  color = Author)) + 
  geom_line(linetype = "dashed") + 
  geom_point() + 
  scale_x_continuous(breaks = seq(1900, 2005, 5)) + 
  scale_y_continuous(breaks = seq(0,100,5)) +
  scale_colour_manual(name = "Author,\nPublish year,\nStudy year",
                      values = c("#8A2BE2", "#A52A2A", "#FFFFFF", 
                                 "#8B8878", "#66CDAA", "#CD9B1D", 
                                 "#838B8B", "#7FFF00", "#483D8B",
                                 "#0000CD", "#262626", "#CDB38B", 
                                 "#6B8E23", "#FFC1C1", "#8B8B00", 
                                 "#EE9A49", "#7EC0EE", "#8B6914", 
                                 "#104E8B", "#B4EEB4", "#EEE685", 
                                 "#FFF0F5", "#CDC1C5", "#ADD8E6", 
                                 "#68838B", "#F08080", "#00FA9A", 
                                 "#48D1CC", "#C71585", "#FF83FA", 
                                 "#36648B", "#00868B", "#8B864E", 
                                 "#D3D3D3", "#CDCDB4", "#EE4000", 
                                 "#FF83FA", "#EEE8AA", "#7CCD7C", 
                                 "#BBFFFF", "#96CDCD", "#EE0000", 
                                 "#FF3E96", "#B8860B"), 
                      limits=c("Kikuchi, 1998 ,  1996",
                               "Fujisawa, 1999 ,  1974",
                               "Fujisawa, 1999 ,  1984",
                               "Fujisawa, 1999 ,  1994",
                               "Ogihara, 2000 ,  1990",
                               "Yamagata, 2000 ,  1988",
                               "Kurosawa, 2000 ,  1995",
                               "Yamashita, 2001 ,  1995",
                               "Fukuda, 2001 ,  1986",
                               "Fukuda, 2001 ,  1998",
                               "Kinjo, 2002 ,  2000",
                               "Kato, 2003 ,  2003",
                               "Kato, 2004 ,  2004",
                               "Kikuchi, 2005 ,  1988",
                               "Kawade, 2005 ,  2000",
                               "Sasazuki, 2006 ,  1990",
                               "Nakajima, 2010 ,  1998",
                               "Nakajima, 2010 ,  2005",
                               "Akamatsu, 2011 ,  2007",
                               "Akamatsu, 2011 ,  2008",
                               "Akamatsu, 2011 ,  2009",
                               "Toyoda, 2012 ,  2005",
                               "Tamura, 2012 ,  2009",
                               "Kikuchi, 2013 ,  1997",
                               "Kikuchi, 2013 ,  2003",
                               "Urita, 2013 ,  2002",
                               "Ueda, 2014 ,  2005",
                               "Hirayama, 2014 ,  2008",
                               "Okuda, 2014 ,  2010",
                               "Watanabe, 2015 ,  2010" ,
                               "Kamada, 2015 ,  2011", 
                               "Shiotani, 2007  ,  2005",
                               "Yamaji, 2001 ,  1997", 
                               "Shibata, 2002 ,  1993",
                               "Youn, 1998 ,  1993", 
                               "Naito, 2008 ,  2002",
                               "Naito, 2008 ,  2003",
                               "Shimatani, 2005 ,  2000",
                               "Nobuta, 2004 ,  1996",
                               "Kumagai, 1998 ,  1986",
                               "Kumagai, 1998 ,  1994",
                               "Reploge, 1996 ,  1980",
                               "Fukao, 1993 ,  1985",
                               "loess"), 
                      labels = c("Kikuchi,1998,1996",
                                 "Fujisawa,1999,1974",
                                 "Fujisawa,1999,1984",
                                 "Fujisawa,1999,1994",
                                 "Ogihara,2000,1990",
                                 "Yamagata,2000,1988",
                                 "Kurosawa,2000,1995",
                                 "Yamashita,2001,1995",
                                 "Fukuda,2001,1986",
                                 "Fukuda,2001,1998",
                                 "Kinjo,2002,2000",
                                 "Kato,2003,2003",
                                 "Kato,2004,2004",
                                 "Kikuchi,2005,1988",
                                 "Kawade,2005,2000",
                                 "Sasazuki,2006,1990",
                                 "Nakajima,2010,1998",
                                 "Nakajima,2010,2005",
                                 "Akamatsu,2011,2007",
                                 "Akamatsu,2011,2008",
                                 "Akamatsu,2011,2009",
                                 "Toyoda,2012,2005",
                                 "Tamura,2012,2009",
                                 "Kikuchi,2013,1997",
                                 "Kikuchi,2013,2003",
                                 "Urita,2013,2002",
                                 "Ueda,2014,2005",
                                 "Hirayama,2014,2008",
                                 "Okuda,2014,2010",
                                 "Watanabe,2015,2010" ,
                                 "Kamada,2015,2011", 
                                 "Shiotani, 2007  ,  2005",
                                 "Yamaji,2001,1997", 
                                 "Shibata,2002,1993",
                                 "Youn,1998,1993", 
                                 "Naito,2008,2002",
                                 "Naito,2008,2003",
                                 "Shimatani,2005,2000",
                                 "Nobuta,2004,1996",
                                 "Kumagai,1998,1986",
                                 "Kumagai,1998,1994",
                                 "Reploge,1996,1980",
                                 "Fukao,1993,1985",
                                 "LOWESS LINE")) + 
  ylab("Prevalence of H.pylori in Japanese (%)") + 
  xlab("Birth Year") + 
  geom_smooth(aes(colour = "loess"), method = "loess") + 
  theme_bw() +   
  theme(legend.position = "bottom", 
        axis.text.x = element_text(size = rel(1.5)), 
        axis.text.y = element_text(size = rel(1.5)), 
        axis.title.x = element_text(size = rel(1.5)), 
        axis.title.y = element_text(size = rel(1.5)), 
        legend.text = element_text(size = rel(1.1)), 
        legend.title = element_text(size = rel(1.1))) + 
  annotate("segment", x = 1929, xend = 1938.4,
           y = 20.36, yend = 44.36,
           colour = "red", size = 1.2,
           arrow=arrow(length = unit(0.15,"inches"))) + 
  annotate("segment", x = 1919, xend = 1928.4, 
           y = 40.3, yend = 51.3, 
           colour = "red", size = 1.2, 
           arrow = arrow(length = unit(0.15, "inches"))) + 
  annotate("text", x=1929, y=19, label = "Ueda, 2014, 2005",
           fontface = "italic", size = 5) + 
  annotate("text", x=1919, y=39, label = "Watanabe, 2015, 2010",
           fontface = "italic", size = 5)
graph1

require(rCharts)
h1 <- hPlot(x = "birth.year_high", y = "total",
            data = data1,
            type = c("bubble"), #"spline"
            group = c("Author"),
            size = "n_total"
       )
h1$title(text = "Prevalence of <i>H.pylori</i> in Japanese", align = "center")
h1$chart(zoomType = "xy")
h1$yAxis(min=0, max = 100, 
         title = list(text = "Persentage (%)"), tickInterval= 10, 
         scalable = TRUE)
h1$xAxis(title = list(text = "Birth year (1906 - 2003)")) #, 
         #formatter = "function () {
         #return Highcharts.numberFormat(this.value, 0, '', '');} // Remove the thousands sep?")
h1$legend(title = list(text = "Author, publish year, study year"))
#h1$series(name = "LOWESS LINE", regression = TRUE, type = "loess")
h1$set(height = 700)
h1$exporting(enabled = T)
h1$show('inline', include_assets = TRUE, standalone = TRUE)
library(plotly)
g <- ggplot(data=data1) +   
  geom_point(mapping=aes(x = birth.year_high,
                         y = total, colour = Author, 
                         size = n_total)) +  
  geom_line(mapping = aes(x = birth.year_high, 
                          y = total, colour = Author), linetype = "dashed") + 
  scale_x_continuous(breaks = seq(1900, 2005, 5)) + 
  scale_y_continuous(breaks = seq(0,100,5)) +
  scale_colour_manual(name = "Author,\nPublish year,\nStudy year",
                      values = c("#8A2BE2", "#A52A2A", "#FFFFFF", 
                                 "#8B8878", "#66CDAA", "#CD9B1D", 
                                 "#838B8B", "#7FFF00", "#483D8B",
                                 "#0000CD", "#262626", "#CDB38B", 
                                 "#6B8E23", "#FFC1C1", "#8B8B00", 
                                 "#EE9A49", "#7EC0EE", "#8B6914", 
                                 "#104E8B", "#B4EEB4", "#EEE685", 
                                 "#FFF0F5", "#CDC1C5", "#ADD8E6", 
                                 "#68838B", "#F08080", "#00FA9A", 
                                 "#48D1CC", "#C71585", "#FF83FA", 
                                 "#36648B", "#00868B", "#8B864E", 
                                 "#D3D3D3", "#CDCDB4", "#EE4000", 
                                 "#FF83FA", "#EEE8AA", "#7CCD7C", 
                                 "#BBFFFF", "#96CDCD", "#EE0000", 
                                 "#FF3E96", "#B8860B"), 
                      limits=c("Kikuchi, 1998 ,  1996",
                               "Fujisawa, 1999 ,  1974",
                               "Fujisawa, 1999 ,  1984",
                               "Fujisawa, 1999 ,  1994",
                               "Ogihara, 2000 ,  1990",
                               "Yamagata, 2000 ,  1988",
                               "Kurosawa, 2000 ,  1995",
                               "Yamashita, 2001 ,  1995",
                               "Fukuda, 2001 ,  1986",
                               "Fukuda, 2001 ,  1998",
                               "Kinjo, 2002 ,  2000",
                               "Kato, 2003 ,  2003",
                               "Kato, 2004 ,  2004",
                               "Kikuchi, 2005 ,  1988",
                               "Kawade, 2005 ,  2000",
                               "Sasazuki, 2006 ,  1990",
                               "Nakajima, 2010 ,  1998",
                               "Nakajima, 2010 ,  2005",
                               "Akamatsu, 2011 ,  2007",
                               "Akamatsu, 2011 ,  2008",
                               "Akamatsu, 2011 ,  2009",
                               "Toyoda, 2012 ,  2005",
                               "Tamura, 2012 ,  2009",
                               "Kikuchi, 2013 ,  1997",
                               "Kikuchi, 2013 ,  2003",
                               "Urita, 2013 ,  2002",
                               "Ueda, 2014 ,  2005",
                               "Hirayama, 2014 ,  2008",
                               "Okuda, 2014 ,  2010",
                               "Watanabe, 2015 ,  2010" ,
                               "Kamada, 2015 ,  2011", 
                               "Shiotani, 2007  ,  2005",
                               "Yamaji, 2001 ,  1997", 
                               "Shibata, 2002 ,  1993",
                               "Youn, 1998 ,  1993", 
                               "Naito, 2008 ,  2002",
                               "Naito, 2008 ,  2003",
                               "Shimatani, 2005 ,  2000",
                               "Nobuta, 2004 ,  1996",
                               "Kumagai, 1998 ,  1986",
                               "Kumagai, 1998 ,  1994",
                               "Reploge, 1996 ,  1980",
                               "Fukao, 1993 ,  1985",
                               "loess"), 
                      labels = c("Kikuchi,1998,1996",
                                 "Fujisawa,1999,1974",
                                 "Fujisawa,1999,1984",
                                 "Fujisawa,1999,1994",
                                 "Ogihara,2000,1990",
                                 "Yamagata,2000,1988",
                                 "Kurosawa,2000,1995",
                                 "Yamashita,2001,1995",
                                 "Fukuda,2001,1986",
                                 "Fukuda,2001,1998",
                                 "Kinjo,2002,2000",
                                 "Kato,2003,2003",
                                 "Kato,2004,2004",
                                 "Kikuchi,2005,1988",
                                 "Kawade,2005,2000",
                                 "Sasazuki,2006,1990",
                                 "Nakajima,2010,1998",
                                 "Nakajima,2010,2005",
                                 "Akamatsu,2011,2007",
                                 "Akamatsu,2011,2008",
                                 "Akamatsu,2011,2009",
                                 "Toyoda,2012,2005",
                                 "Tamura,2012,2009",
                                 "Kikuchi,2013,1997",
                                 "Kikuchi,2013,2003",
                                 "Urita,2013,2002",
                                 "Ueda,2014,2005",
                                 "Hirayama,2014,2008",
                                 "Okuda,2014,2010",
                                 "Watanabe,2015,2010" ,
                                 "Kamada,2015,2011", 
                                 "Shiotani, 2007  ,  2005",
                                 "Yamaji,2001,1997", 
                                 "Shibata,2002,1993",
                                 "Youn,1998,1993", 
                                 "Naito,2008,2002",
                                 "Naito,2008,2003",
                                 "Shimatani,2005,2000",
                                 "Nobuta,2004,1996",
                                 "Kumagai,1998,1986",
                                 "Kumagai,1998,1994",
                                 "Reploge,1996,1980",
                                 "Fukao,1993,1985",
                                 "LOWESS LINE")) + 
  ylab("Prevalence of <i>H.pylori</i> in Japanese (%)") + 
  xlab("Birth Year") + 
  geom_smooth(mapping = aes(x = birth.year_high, 
                            y = total,colour = "loess"), method = "loess") + 
  theme_bw() +
  theme(               legend.position="none",
                       axis.text.x = element_text(size = rel(1.3)), 
                       axis.text.y = element_text(size = rel(1.3)), 
                       axis.title.x = element_text(size = rel(1.5)), 
                       axis.title.y = element_text(size = rel(1.3)))
#ggplotly(g)
layout(ggplotly(g), legend=list(orientation = "h")) 
  1. 男女別
source("function for multiplot by ggplot.R")
data_sex <- subset(data, !is.na(men))

Men <- ggplot(data_sex, aes(x = birth.year_high, 
                  y = men,
                  color = Author)) + 
  geom_line(linetype = "dashed", size = 1.2) + 
  geom_point() +
  scale_x_continuous(breaks = seq(1900, 2005, 5)) + 
  scale_y_continuous(limits=c(0,100),breaks = seq(0,100,5))+
  scale_colour_manual(name = "",
                      values = c("#6495ED", "#FF8C00", 
                                 "#556B2F", "#7AC5CD", 
                                 "#458B00", "#8B7D6B", "#CD2626"), 
                      limits=c("Kikuchi, 1998 ,  1996",
                               "Ogihara, 2000 ,  1990",
                               "Yamagata, 2000 ,  1988",
                               "Kikuchi, 2005 ,  1988",
                               "Tamura, 2012 ,  2009",
                               "Hirayama, 2014 ,  2008",
                               "loess"), 
                      labels = c("Kikuchi,1998,1996",
                                 "Ogihara,2000,1990",
                                 "Yamagata,2000,1988",
                                 "Kikuchi,2005,1988",
                                 "Tamura,2012,2009",
                                 "Hirayama,2014,2008",
                                 "LOWESS LINE")) + 
  ylab("Prevalence of H.pylori in Japanese men (%)") + 
  xlab("Birth Year") + 
  geom_smooth(aes(colour = "loess"), method = "loess") + 
  theme_bw()+
  theme(legend.position = "bottom", 
        axis.text.x = element_text(size = rel(1.3)), 
        axis.text.y = element_text(size = rel(1.5)), 
        axis.title.x = element_text(size = rel(1.5)), 
        axis.title.y = element_text(size = rel(1.5)), 
        legend.text = element_text(size = rel(1.2))) 

Women <- ggplot(data_sex, aes(x = birth.year_high, 
                              y = women,
                              color = Author)) + 
  geom_line(linetype = "dashed", size = 1.2) + 
  geom_point() + 
  scale_x_continuous(breaks = seq(1900, 2005, 5)) + 
  scale_y_continuous(limits=c(0,100),breaks = seq(0,100,5))+
  scale_colour_manual(name = "",
                      values = c("#CD00CD", "#CDC9A5", 
                                 "#90EE90", "#191970", 
                                 "#668B8B", "#EE5C42", "#CD2626"), 
                      limits=c("Kikuchi, 1998 ,  1996",
                               "Ogihara, 2000 ,  1990",
                               "Yamagata, 2000 ,  1988",
                               "Kikuchi, 2005 ,  1988",
                               "Tamura, 2012 ,  2009",
                               "Hirayama, 2014 ,  2008",
                               "loess"), 
                      labels = c("Kikuchi,1998,1996",
                                 "Ogihara,2000,1990",
                                 "Yamagata,2000,1988",
                                 "Kikuchi,2005,1988",
                                 "Tamura,2012,2009",
                                 "Hirayama,2014,2008",
                                 "LOWESS LINE")) + 
  ylab("Prevalence of H.pylori in Japanese women (%)") + 
  xlab("Birth Year") + 
  geom_smooth(aes(colour = "loess"), method = "loess") + 
  theme_bw()+ 
  theme(legend.position = "bottom", 
        axis.text.x = element_text(size = rel(1.3)), 
        axis.text.y = element_text(size = rel(1.5)), 
        axis.title.x = element_text(size = rel(1.5)), 
        axis.title.y = element_text(size = rel(1.5)), 
        legend.text = element_text(size = rel(1.2)))


multiplot(Men, Women, cols = 2)
LS0tCnRpdGxlOiAiZ3JhcGggZm9yICpILnB5bG9yaSogaW4gSmFwYW5lc2UiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KMS4gVG90YWwKYGBge3IsIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMn0KZGF0YSA8LSByZWFkLmNzdigiZGF0YWZvcnB5bG9yaWdyYXBoLmNzdiIsIGhlYWRlciA9IFRSVUUpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShncmlkKQpkYXRhJGJpcnRoLnllYXJfaGlnaCA8LSBhcy5udW1lcmljKGRhdGEkYmlydGgueWVhcl9oaWdoKQojc3VtbWFyeShkYXRhJGJpcnRoLnllYXJfaGlnaCkKZGF0YSR0b3RhbCA8LSBhcy5udW1lcmljKGRhdGEkdG90YWwpCiNzdW1tYXJ5KGRhdGEkdG90YWwpCmRhdGEkQXV0aG9yIDwtIHBhc3RlKGRhdGEkQXV0aG9yLi55ZWFyLm9mLnB1YmxpY2F0aW9uLCAiLCAiLCAKICAgICAgICAgICAgICAgICAgICAgZGF0YSRSZXNlYXJjaC5ZZWFyKQpkYXRhJFN0dWR5Lk5vIDwtIGZhY3RvcihkYXRhJFN0dWR5Lk5vLCBvcmRlcmVkID0gVFJVRSkKZGF0YSRBdXRob3IgPC0gZmFjdG9yKGRhdGEkQXV0aG9yLAogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzPWMoIkFzYWthLCAxOTkyICwgIHVua25vd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDE5OTggLCAgMTk5NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsIDE5OTkgLCAgMTk3NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsIDE5OTkgLCAgMTk4NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsIDE5OTkgLCAgMTk5NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwgMjAwMCAsICAxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hZ2F0YSwgMjAwMCAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLdXJvc2F3YSwgMjAwMCAsICAxOTk1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hc2hpdGEsIDIwMDEgLCAgMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrdWRhLCAyMDAxICwgIDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwgMjAwMSAsICAxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaW5qbywgMjAwMiAsICAyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYXRvLCAyMDAzICwgIDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sIDIwMDQgLCAgMjAwNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAwNSAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYXdhZGUsIDIwMDUgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2FzYXp1a2ksIDIwMDYgLCAgMTk5MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpa2F0YSwgMjAwOCAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3lvZGEsIDIwMTIgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFtdXJhLCAyMDEyICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMTMgLCAgMTk5NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAxMyAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVcml0YSwgMjAxMyAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVZWRhLCAyMDE0ICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLCAyMDE0ICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9rdWRhLCAyMDE0ICwgIDIwMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGFuYWJlLCAyMDE1ICwgIDIwMTAiICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW1hZGEsIDIwMTUgLCAgMjAxMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpb3RhbmksIDIwMDcgICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFqaSwgMjAwMSAsICAxOTk3IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpYmF0YSwgMjAwMiAsICAxOTkzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuLCAxOTk4ICwgIDE5OTMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGltYXRhbmksIDIwMDUgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9idXRhLCAyMDA0ICwgIDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksIDE5OTggLCAgMTk4NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwgMTk5OCAsICAxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBsb2dlLCAxOTk2ICwgIDE5ODAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a2FvLCAxOTkzICwgIDE5ODUiKSkKCgpkYXRhMSA8LSBzdWJzZXQoZGF0YSwgIWlzLm5hKHRvdGFsKSkKCmdyYXBoMSA8LSBnZ3Bsb3QoZGF0YTEsIGFlcyh4ID0gYmlydGgueWVhcl9oaWdoLCAKICAgICAgICAgICAgICAgICAgeSA9IHRvdGFsLAogICAgICAgICAgICAgICAgICBjb2xvciA9IEF1dGhvcikpICsgCiAgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRhc2hlZCIpICsgCiAgZ2VvbV9wb2ludCgpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxOTAwLCAyMDA1LCA1KSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsMTAwLDUpKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbChuYW1lID0gIkF1dGhvcixcblB1Ymxpc2ggeWVhcixcblN0dWR5IHllYXIiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzhBMkJFMiIsICIjQTUyQTJBIiwgIiNGRkZGRkYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM4Qjg4NzgiLCAiIzY2Q0RBQSIsICIjQ0Q5QjFEIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjODM4QjhCIiwgIiM3RkZGMDAiLCAiIzQ4M0Q4QiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMDAwMENEIiwgIiMyNjI2MjYiLCAiI0NEQjM4QiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzZCOEUyMyIsICIjRkZDMUMxIiwgIiM4QjhCMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNFRTlBNDkiLCAiIzdFQzBFRSIsICIjOEI2OTE0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMTA0RThCIiwgIiNCNEVFQjQiLCAiI0VFRTY4NSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0ZGRjBGNSIsICIjQ0RDMUM1IiwgIiNBREQ4RTYiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM2ODgzOEIiLCAiI0YwODA4MCIsICIjMDBGQTlBIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNDhEMUNDIiwgIiNDNzE1ODUiLCAiI0ZGODNGQSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzM2NjQ4QiIsICIjMDA4NjhCIiwgIiM4Qjg2NEUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNEM0QzRDMiLCAiI0NEQ0RCNCIsICIjRUU0MDAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRkY4M0ZBIiwgIiNFRUU4QUEiLCAiIzdDQ0Q3QyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0JCRkZGRiIsICIjOTZDRENEIiwgIiNFRTAwMDAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNGRjNFOTYiLCAiI0I4ODYwQiIpLCAKICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cz1jKCJLaWt1Y2hpLCAxOTk4ICwgIDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLCAxOTk5ICwgIDE5NzQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLCAxOTk5ICwgIDE5ODQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLCAxOTk5ICwgIDE5OTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9naWhhcmEsIDIwMDAgLCAgMTk5MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWdhdGEsIDIwMDAgLCAgMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3Vyb3Nhd2EsIDIwMDAgLCAgMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYXNoaXRhLCAyMDAxICwgIDE5OTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwgMjAwMSAsICAxOTg2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWt1ZGEsIDIwMDEgLCAgMTk5OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2luam8sIDIwMDIgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywgMjAwMyAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYXRvLCAyMDA0ICwgIDIwMDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMDUgLCAgMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F3YWRlLCAyMDA1ICwgIDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhc2F6dWtpLCAyMDA2ICwgIDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLCAyMDEwICwgIDE5OTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLCAyMDEwICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LCAyMDExICwgIDIwMDciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LCAyMDExICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LCAyMDExICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRveW9kYSwgMjAxMiAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYW11cmEsIDIwMTIgLCAgMjAwOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAxMyAsICAxOTk3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLCAyMDEzICwgIDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVyaXRhLCAyMDEzICwgIDIwMDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVlZGEsIDIwMTQgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGlyYXlhbWEsIDIwMTQgLCAgMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2t1ZGEsIDIwMTQgLCAgMjAxMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2F0YW5hYmUsIDIwMTUgLCAgMjAxMCIgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthbWFkYSwgMjAxNSAsICAyMDExIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpb3RhbmksIDIwMDcgICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFqaSwgMjAwMSAsICAxOTk3IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpYmF0YSwgMjAwMiAsICAxOTkzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuLCAxOTk4ICwgIDE5OTMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywgMjAwOCAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGltYXRhbmksIDIwMDUgLCAgMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9idXRhLCAyMDA0ICwgIDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksIDE5OTggLCAgMTk4NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwgMTk5OCAsICAxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXBsb2dlLCAxOTk2ICwgIDE5ODAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a2FvLCAxOTkzICwgIDE5ODUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZXNzIiksIAogICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2lrdWNoaSwxOTk4LDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsMTk5OSwxOTc0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLDE5OTksMTk4NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwxOTk5LDE5OTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwyMDAwLDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWdhdGEsMjAwMCwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1cm9zYXdhLDIwMDAsMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hc2hpdGEsMjAwMSwxOTk1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwyMDAxLDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrdWRhLDIwMDEsMTk5OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaW5qbywyMDAyLDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywyMDAzLDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywyMDA0LDIwMDQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwyMDA1LDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F3YWRlLDIwMDUsMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXNhenVraSwyMDA2LDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFrYWppbWEsMjAxMCwxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLDIwMTAsMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwyMDExLDIwMDciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWthbWF0c3UsMjAxMSwyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LDIwMTEsMjAwOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3lvZGEsMjAxMiwyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhbXVyYSwyMDEyLDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwyMDEzLDE5OTciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwyMDEzLDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXJpdGEsMjAxMywyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVlZGEsMjAxNCwyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLDIwMTQsMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPa3VkYSwyMDE0LDIwMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2F0YW5hYmUsMjAxNSwyMDEwIiAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW1hZGEsMjAxNSwyMDExIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGlvdGFuaSwgMjAwNyAgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hamksMjAwMSwxOTk3IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGliYXRhLDIwMDIsMTk5MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3VuLDE5OTgsMTk5MyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFpdG8sMjAwOCwyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5haXRvLDIwMDgsMjAwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGltYXRhbmksMjAwNSwyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vYnV0YSwyMDA0LDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwxOTk4LDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS3VtYWdhaSwxOTk4LDE5OTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwbG9nZSwxOTk2LDE5ODAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrYW8sMTk5MywxOTg1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxPV0VTUyBMSU5FIikpICsgCiAgeWxhYigiUHJldmFsZW5jZSBvZiBILnB5bG9yaSBpbiBKYXBhbmVzZSAoJSkiKSArIAogIHhsYWIoIkJpcnRoIFllYXIiKSArIAogIGdlb21fc21vb3RoKGFlcyhjb2xvdXIgPSAibG9lc3MiKSwgbWV0aG9kID0gImxvZXNzIikgKyAKICB0aGVtZV9idygpICsgICAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuMSkpLCAKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjEpKSkgKyAKICBhbm5vdGF0ZSgic2VnbWVudCIsIHggPSAxOTI5LCB4ZW5kID0gMTkzOC40LAogICAgICAgICAgIHkgPSAyMC4zNiwgeWVuZCA9IDQ0LjM2LAogICAgICAgICAgIGNvbG91ciA9ICJyZWQiLCBzaXplID0gMS4yLAogICAgICAgICAgIGFycm93PWFycm93KGxlbmd0aCA9IHVuaXQoMC4xNSwiaW5jaGVzIikpKSArIAogIGFubm90YXRlKCJzZWdtZW50IiwgeCA9IDE5MTksIHhlbmQgPSAxOTI4LjQsIAogICAgICAgICAgIHkgPSA0MC4zLCB5ZW5kID0gNTEuMywgCiAgICAgICAgICAgY29sb3VyID0gInJlZCIsIHNpemUgPSAxLjIsIAogICAgICAgICAgIGFycm93ID0gYXJyb3cobGVuZ3RoID0gdW5pdCgwLjE1LCAiaW5jaGVzIikpKSArIAogIGFubm90YXRlKCJ0ZXh0IiwgeD0xOTI5LCB5PTE5LCBsYWJlbCA9ICJVZWRhLCAyMDE0LCAyMDA1IiwKICAgICAgICAgICBmb250ZmFjZSA9ICJpdGFsaWMiLCBzaXplID0gNSkgKyAKICBhbm5vdGF0ZSgidGV4dCIsIHg9MTkxOSwgeT0zOSwgbGFiZWwgPSAiV2F0YW5hYmUsIDIwMTUsIDIwMTAiLAogICAgICAgICAgIGZvbnRmYWNlID0gIml0YWxpYyIsIHNpemUgPSA1KQpncmFwaDEKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEyLCByZXN1bHRzID0gJ2FzaXMnLCBjb21tZW50ID0gTkEsIGNhY2hlID0gRiwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcmVxdWlyZShyQ2hhcnRzKQpoMSA8LSBoUGxvdCh4ID0gImJpcnRoLnllYXJfaGlnaCIsIHkgPSAidG90YWwiLAogICAgICAgICAgICBkYXRhID0gZGF0YTEsCiAgICAgICAgICAgIHR5cGUgPSBjKCJidWJibGUiKSwgIyJzcGxpbmUiCiAgICAgICAgICAgIGdyb3VwID0gYygiQXV0aG9yIiksCiAgICAgICAgICAgIHNpemUgPSAibl90b3RhbCIKICAgICAgICkKaDEkdGl0bGUodGV4dCA9ICJQcmV2YWxlbmNlIG9mIDxpPkgucHlsb3JpPC9pPiBpbiBKYXBhbmVzZSIsIGFsaWduID0gImNlbnRlciIpCmgxJGNoYXJ0KHpvb21UeXBlID0gInh5IikKaDEkeUF4aXMobWluPTAsIG1heCA9IDEwMCwgCiAgICAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBlcnNlbnRhZ2UgKCUpIiksIHRpY2tJbnRlcnZhbD0gMTAsIAogICAgICAgICBzY2FsYWJsZSA9IFRSVUUpCmgxJHhBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIkJpcnRoIHllYXIgKDE5MDYgLSAyMDAzKSIpKSAjLCAKICAgICAgICAgI2Zvcm1hdHRlciA9ICJmdW5jdGlvbiAoKSB7CiAgICAgICAgICNyZXR1cm4gSGlnaGNoYXJ0cy5udW1iZXJGb3JtYXQodGhpcy52YWx1ZSwgMCwgJycsICcnKTt9IC8vIFJlbW92ZSB0aGUgdGhvdXNhbmRzIHNlcD8iKQpoMSRsZWdlbmQodGl0bGUgPSBsaXN0KHRleHQgPSAiQXV0aG9yLCBwdWJsaXNoIHllYXIsIHN0dWR5IHllYXIiKSkKI2gxJHNlcmllcyhuYW1lID0gIkxPV0VTUyBMSU5FIiwgcmVncmVzc2lvbiA9IFRSVUUsIHR5cGUgPSAibG9lc3MiKQpoMSRzZXQoaGVpZ2h0ID0gNzAwKQoKaDEkZXhwb3J0aW5nKGVuYWJsZWQgPSBUKQoKaDEkc2hvdygnaW5saW5lJywgaW5jbHVkZV9hc3NldHMgPSBUUlVFLCBzdGFuZGFsb25lID0gVFJVRSkKCmBgYAoKCgpgYGB7ciwgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTE0LCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHBsb3RseSkKZyA8LSBnZ3Bsb3QoZGF0YT1kYXRhMSkgKyAgIAogIGdlb21fcG9pbnQobWFwcGluZz1hZXMoeCA9IGJpcnRoLnllYXJfaGlnaCwKICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB0b3RhbCwgY29sb3VyID0gQXV0aG9yLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBuX3RvdGFsKSkgKyAgCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGJpcnRoLnllYXJfaGlnaCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHRvdGFsLCBjb2xvdXIgPSBBdXRob3IpLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTkwMCwgMjAwNSwgNSkpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDEwMCw1KSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwobmFtZSA9ICJBdXRob3IsXG5QdWJsaXNoIHllYXIsXG5TdHVkeSB5ZWFyIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiM4QTJCRTIiLCAiI0E1MkEyQSIsICIjRkZGRkZGIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjOEI4ODc4IiwgIiM2NkNEQUEiLCAiI0NEOUIxRCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzgzOEI4QiIsICIjN0ZGRjAwIiwgIiM0ODNEOEIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzAwMDBDRCIsICIjMjYyNjI2IiwgIiNDREIzOEIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM2QjhFMjMiLCAiI0ZGQzFDMSIsICIjOEI4QjAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRUU5QTQ5IiwgIiM3RUMwRUUiLCAiIzhCNjkxNCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzEwNEU4QiIsICIjQjRFRUI0IiwgIiNFRUU2ODUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNGRkYwRjUiLCAiI0NEQzFDNSIsICIjQUREOEU2IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNjg4MzhCIiwgIiNGMDgwODAiLCAiIzAwRkE5QSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzQ4RDFDQyIsICIjQzcxNTg1IiwgIiNGRjgzRkEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMzNjY0OEIiLCAiIzAwODY4QiIsICIjOEI4NjRFIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRDNEM0QzIiwgIiNDRENEQjQiLCAiI0VFNDAwMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI0ZGODNGQSIsICIjRUVFOEFBIiwgIiM3Q0NEN0MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNCQkZGRkYiLCAiIzk2Q0RDRCIsICIjRUUwMDAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjRkYzRTk2IiwgIiNCODg2MEIiKSwgCiAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM9YygiS2lrdWNoaSwgMTk5OCAsICAxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwgMTk5OSAsICAxOTc0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwgMTk5OSAsICAxOTg0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwgMTk5OSAsICAxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPZ2loYXJhLCAyMDAwICwgIDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLCAyMDAwICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1cm9zYXdhLCAyMDAwICwgIDE5OTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFzaGl0YSwgMjAwMSAsICAxOTk1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWt1ZGEsIDIwMDEgLCAgMTk4NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVrdWRhLCAyMDAxICwgIDE5OTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpbmpvLCAyMDAyICwgIDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sIDIwMDMgLCAgMjAwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2F0bywgMjAwNCAsICAyMDA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLCAyMDA1ICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthd2FkZSwgMjAwNSAsICAyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYXNhenVraSwgMjAwNiAsICAxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAxOTk4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwgMjAxMCAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwgMjAxMSAsICAyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3lvZGEsIDIwMTIgLCAgMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFtdXJhLCAyMDEyICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMTMgLCAgMTk5NyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2lrdWNoaSwgMjAxMyAsICAyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVcml0YSwgMjAxMyAsICAyMDAyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVZWRhLCAyMDE0ICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLCAyMDE0ICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9rdWRhLCAyMDE0ICwgIDIwMTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGFuYWJlLCAyMDE1ICwgIDIwMTAiICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW1hZGEsIDIwMTUgLCAgMjAxMSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNoaW90YW5pLCAyMDA3ICAsICAyMDA1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hamksIDIwMDEgLCAgMTk5NyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNoaWJhdGEsIDIwMDIgLCAgMTk5MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91biwgMTk5OCAsICAxOTkzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFpdG8sIDIwMDggLCAgMjAwMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFpdG8sIDIwMDggLCAgMjAwMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpbWF0YW5pLCAyMDA1ICwgIDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vYnV0YSwgMjAwNCAsICAxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLdW1hZ2FpLCAxOTk4ICwgIDE5ODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksIDE5OTggLCAgMTk5NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwbG9nZSwgMTk5NiAsICAxOTgwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWthbywgMTk5MyAsICAxOTg1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2VzcyIpLCAKICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktpa3VjaGksMTk5OCwxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1amlzYXdhLDE5OTksMTk3NCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWppc2F3YSwxOTk5LDE5ODQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnVqaXNhd2EsMTk5OSwxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9naWhhcmEsMjAwMCwxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLDIwMDAsMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLdXJvc2F3YSwyMDAwLDE5OTUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYXNoaXRhLDIwMDEsMTk5NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGdWt1ZGEsMjAwMSwxOTg2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a3VkYSwyMDAxLDE5OTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2luam8sMjAwMiwyMDAwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sMjAwMywyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthdG8sMjAwNCwyMDA0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAwNSwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthd2FkZSwyMDA1LDIwMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2FzYXp1a2ksMjAwNiwxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ha2FqaW1hLDIwMTAsMTk5OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWthamltYSwyMDEwLDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWthbWF0c3UsMjAxMSwyMDA3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFrYW1hdHN1LDIwMTEsMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBa2FtYXRzdSwyMDExLDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG95b2RhLDIwMTIsMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYW11cmEsMjAxMiwyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAxMywxOTk3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAxMywyMDAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVyaXRhLDIwMTMsMjAwMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVZWRhLDIwMTQsMjAwNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIaXJheWFtYSwyMDE0LDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2t1ZGEsMjAxNCwyMDEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldhdGFuYWJlLDIwMTUsMjAxMCIgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2FtYWRhLDIwMTUsMjAxMSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpb3RhbmksIDIwMDcgICwgIDIwMDUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWppLDIwMDEsMTk5NyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpYmF0YSwyMDAyLDE5OTMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91biwxOTk4LDE5OTMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5haXRvLDIwMDgsMjAwMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWl0bywyMDA4LDIwMDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hpbWF0YW5pLDIwMDUsMjAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2J1dGEsMjAwNCwxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksMTk5OCwxOTg2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkt1bWFnYWksMTk5OCwxOTk0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcGxvZ2UsMTk5NiwxOTgwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1a2FvLDE5OTMsMTk4NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT1dFU1MgTElORSIpKSArIAogIHlsYWIoIlByZXZhbGVuY2Ugb2YgPGk+SC5weWxvcmk8L2k+IGluIEphcGFuZXNlICglKSIpICsgCiAgeGxhYigiQmlydGggWWVhciIpICsgCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gYmlydGgueWVhcl9oaWdoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB0b3RhbCxjb2xvdXIgPSAibG9lc3MiKSwgbWV0aG9kID0gImxvZXNzIikgKyAKICB0aGVtZV9idygpICsKICB0aGVtZSggICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249Im5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS4zKSksIAogICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS4zKSksIAogICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICAgICAgICAgICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjMpKSkKI2dncGxvdGx5KGcpCgpsYXlvdXQoZ2dwbG90bHkoZyksIGxlZ2VuZD1saXN0KG9yaWVudGF0aW9uID0gImgiKSkgCgpgYGAKCgoyLiDnlLflpbPliKUKYGBge3IsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTE2fQpzb3VyY2UoImZ1bmN0aW9uIGZvciBtdWx0aXBsb3QgYnkgZ2dwbG90LlIiKQpkYXRhX3NleCA8LSBzdWJzZXQoZGF0YSwgIWlzLm5hKG1lbikpCgpNZW4gPC0gZ2dwbG90KGRhdGFfc2V4LCBhZXMoeCA9IGJpcnRoLnllYXJfaGlnaCwgCiAgICAgICAgICAgICAgICAgIHkgPSBtZW4sCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gQXV0aG9yKSkgKyAKICBnZW9tX2xpbmUobGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDEuMikgKyAKICBnZW9tX3BvaW50KCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTkwMCwgMjAwNSwgNSkpICsgCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cz1jKDAsMTAwKSxicmVha3MgPSBzZXEoMCwxMDAsNSkpKwogIHNjYWxlX2NvbG91cl9tYW51YWwobmFtZSA9ICIiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzY0OTVFRCIsICIjRkY4QzAwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNTU2QjJGIiwgIiM3QUM1Q0QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM0NThCMDAiLCAiIzhCN0Q2QiIsICIjQ0QyNjI2IiksIAogICAgICAgICAgICAgICAgICAgICAgbGltaXRzPWMoIktpa3VjaGksIDE5OTggLCAgMTk5NiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwgMjAwMCAsICAxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZYW1hZ2F0YSwgMjAwMCAsICAxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLCAyMDA1ICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhbXVyYSwgMjAxMiAsICAyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIaXJheWFtYSwgMjAxNCAsICAyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2VzcyIpLCAKICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktpa3VjaGksMTk5OCwxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9naWhhcmEsMjAwMCwxOTkwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLDIwMDAsMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLaWt1Y2hpLDIwMDUsMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYW11cmEsMjAxMiwyMDA5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLDIwMTQsMjAwOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMT1dFU1MgTElORSIpKSArIAogIHlsYWIoIlByZXZhbGVuY2Ugb2YgSC5weWxvcmkgaW4gSmFwYW5lc2UgbWVuICglKSIpICsgCiAgeGxhYigiQmlydGggWWVhciIpICsgCiAgZ2VvbV9zbW9vdGgoYWVzKGNvbG91ciA9ICJsb2VzcyIpLCBtZXRob2QgPSAibG9lc3MiKSArIAogIHRoZW1lX2J3KCkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS4zKSksIAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjIpKSkgCgpXb21lbiA8LSBnZ3Bsb3QoZGF0YV9zZXgsIGFlcyh4ID0gYmlydGgueWVhcl9oaWdoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHdvbWVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IEF1dGhvcikpICsgCiAgZ2VvbV9saW5lKGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAxLjIpICsgCiAgZ2VvbV9wb2ludCgpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgxOTAwLCAyMDA1LCA1KSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzPWMoMCwxMDApLGJyZWFrcyA9IHNlcSgwLDEwMCw1KSkrCiAgc2NhbGVfY29sb3VyX21hbnVhbChuYW1lID0gIiIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjQ0QwMENEIiwgIiNDREM5QTUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM5MEVFOTAiLCAiIzE5MTk3MCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzY2OEI4QiIsICIjRUU1QzQyIiwgIiNDRDI2MjYiKSwgCiAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM9YygiS2lrdWNoaSwgMTk5OCAsICAxOTk2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPZ2loYXJhLCAyMDAwICwgIDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIllhbWFnYXRhLCAyMDAwICwgIDE5ODgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksIDIwMDUgLCAgMTk4OCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFtdXJhLCAyMDEyICwgIDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpcmF5YW1hLCAyMDE0ICwgIDIwMDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZXNzIiksIAogICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2lrdWNoaSwxOTk4LDE5OTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT2dpaGFyYSwyMDAwLDE5OTAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWWFtYWdhdGEsMjAwMCwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktpa3VjaGksMjAwNSwxOTg4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhbXVyYSwyMDEyLDIwMDkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGlyYXlhbWEsMjAxNCwyMDA4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxPV0VTUyBMSU5FIikpICsgCiAgeWxhYigiUHJldmFsZW5jZSBvZiBILnB5bG9yaSBpbiBKYXBhbmVzZSB3b21lbiAoJSkiKSArIAogIHhsYWIoIkJpcnRoIFllYXIiKSArIAogIGdlb21fc21vb3RoKGFlcyhjb2xvdXIgPSAibG9lc3MiKSwgbWV0aG9kID0gImxvZXNzIikgKyAKICB0aGVtZV9idygpKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwgCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjMpKSwgCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IHJlbCgxLjUpKSwgCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMS41KSksIAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuNSkpLCAKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDEuMikpKQoKCm11bHRpcGxvdChNZW4sIFdvbWVuLCBjb2xzID0gMikKCmBgYAoKCg==