We import the data from the official page of the dataset.

Example 1.1: Munich Rent Index

munich_rent_url <- "https://www.uni-goettingen.de/de/document/download/64c29c1b1fccb142cfa8f29a942a9e05.raw/rent99.raw"

munich_rent_index <- read.table(
  url(munich_rent_url),
  header = 1,
  colClasses = c(
    "numeric", "numeric", "numeric",
    "numeric", "factor", "factor",
    "factor", "factor", "factor"
  )
)

# Convert to logical
munich_rent_index$bath <- munich_rent_index$bath == 1
munich_rent_index$kitchen <- munich_rent_index$kitchen == 1
munich_rent_index$cheating <- munich_rent_index$cheating == 1
summary(munich_rent_index)
      rent            rentsqm             area            yearc      location
 Min.   :  40.51   Min.   : 0.4158   Min.   : 20.00   Min.   :1918   1:1794  
 1st Qu.: 322.03   1st Qu.: 5.2610   1st Qu.: 51.00   1st Qu.:1939   2:1210  
 Median : 426.97   Median : 6.9802   Median : 65.00   Median :1959   3:  78  
 Mean   : 459.44   Mean   : 7.1113   Mean   : 67.37   Mean   :1956           
 3rd Qu.: 559.36   3rd Qu.: 8.8408   3rd Qu.: 81.00   3rd Qu.:1972           
 Max.   :1843.38   Max.   :17.7216   Max.   :160.00   Max.   :1997           
                                                                             
    bath          kitchen         cheating          district   
 Mode :logical   Mode :logical   Mode :logical   411    :  53  
 FALSE:2891      FALSE:2951      FALSE:321       623    :  53  
 TRUE :191       TRUE :131       TRUE :2761      350    :  49  
                                                 563    :  49  
                                                 711    :  42  
                                                 360    :  38  
                                                 (Other):2798  

For future use, this code is going to be available in an R script in import_data/munich_rent_index.R.

Example 2.2: Malnutrition in Zambia

zambia_url <- "https://www.uni-goettingen.de/de/document/download/d90a2d7b26c4504ab6630cf36cbae2fa.raw/zambia_height92.raw"

malnutrition_zambia <- read.table(
  url(zambia_url),
  header = 1,
  colClasses = c(
    "numeric", "factor", "numeric",
    "integer", "numeric", "numeric",
    "numeric", "factor", "factor",
    "factor", "factor", "factor"
  )
)

# Convert to logical
malnutrition_zambia$m_work <- malnutrition_zambia$m_work == 1
summary(malnutrition_zambia)
     zscore       c_gender   c_breastf         c_age         m_agebirth   
 Min.   :-600.0   0:2254   Min.   : 0.00   Min.   : 0.00   Min.   :13.17  
 1st Qu.:-257.0   1:2167   1st Qu.: 1.00   1st Qu.:12.00   1st Qu.:21.08  
 Median :-171.0            Median :14.00   Median :26.00   Median :25.33  
 Mean   :-171.2            Mean   :11.12   Mean   :27.12   Mean   :26.40  
 3rd Qu.: -86.0            3rd Qu.:19.00   3rd Qu.:42.00   3rd Qu.:31.08  
 Max.   : 503.0            Max.   :46.00   Max.   :59.00   Max.   :48.67  
                                                                          
    m_height         m_bmi       m_education   m_work           district   
 Min.   :134.0   Min.   :13.15   1: 822      Mode :logical   98     : 488  
 1st Qu.:154.0   1st Qu.:19.75   2:2756      FALSE:1978      61     : 270  
 Median :158.1   Median :21.46   3: 767      TRUE :2443      53     : 235  
 Mean   :158.1   Mean   :22.00   4:  76                      97     : 156  
 3rd Qu.:162.0   3rd Qu.:23.57                               94     : 153  
 Max.   :185.0   Max.   :39.29                               66     : 128  
                                                             (Other):2991  
     region    time    
 2      :967   1:4421  
 8      :659           
 5      :609           
 6      :430           
 3      :410           
 4      :394           
 (Other):952           

Code for import in import_data/malnutrition_zambia.R.

Example 1.3: Patent Opposition

patent_url <- "https://www.uni-goettingen.de/de/document/download/66eb4eb0bc0e8f6acf1d02ddf683f077.raw/patentdata.raw"

patent_opposition <- read.table(
  url(patent_url),
  header = 1,
  colClasses = c(
    "factor", "factor", "factor",
    "factor", "factor", "integer",
    "integer", "integer", "integer"
  )
)
# Convert to logical
patent_opposition$biopharm <- patent_opposition$biopharm == 1
patent_opposition$ustwin <- patent_opposition$ustwin == 1
patent_opposition$patus <- patent_opposition$patus == 1
patent_opposition$patgsgr <- patent_opposition$patgsgr == 1
summary(patent_opposition)
 opp       biopharm         ustwin          patus          patgsgr       
 0:2847   Mode :logical   Mode :logical   Mode :logical   Mode :logical  
 1:2019   FALSE:2710      FALSE:1905      FALSE:3224      FALSE:3723     
          TRUE :2156      TRUE :2961      TRUE :1642      TRUE :1143     
                                                                         
                                                                         
                                                                         
      year           ncit          ncountry         nclaims      
 Min.   :1980   Min.   : 0.00   Min.   : 1.000   Min.   :  1.00  
 1st Qu.:1989   1st Qu.: 0.00   1st Qu.: 4.000   1st Qu.:  7.00  
 Median :1992   Median : 1.00   Median : 7.000   Median : 10.00  
 Mean   :1991   Mean   : 1.64   Mean   : 7.796   Mean   : 13.13  
 3rd Qu.:1994   3rd Qu.: 2.00   3rd Qu.:11.000   3rd Qu.: 16.00  
 Max.   :1997   Max.   :40.00   Max.   :17.000   Max.   :355.00  

R code in import_data/patent_opposition.R.

Example 1.4: Forest Health Status

forest_url <- "https://www.uni-goettingen.de/de/document/download/f5ef58e05aff8b6546dcf993aa73a480.raw/beach.raw"

forest_health_status <- read.table(
  url(forest_url),
  header = 1,
  colClasses = c(
    "factor", "numeric", "factor",
    "numeric", "numeric", "numeric",
    "numeric", "numeric", "numeric",
    "numeric", "numeric", "factor",
    "factor", "factor", "factor",
    "factor"
  ),
  na.strings = "."
)
summary(forest_health_status)
       id            year       defol            x               y        
 1      :  22   Min.   :1983   0   :1116   Min.   : 0.70   Min.   :0.400  
 10     :  22   1st Qu.:1988   12.5: 435   1st Qu.: 3.70   1st Qu.:2.100  
 11     :  22   Median :1994   25  : 126   Median : 8.10   Median :3.000  
 12     :  22   Mean   :1994   37.5:  68   Mean   : 7.46   Mean   :3.306  
 13     :  22   3rd Qu.:1999   50  :  29   3rd Qu.:10.50   3rd Qu.:4.100  
 14     :  22   Max.   :2004   62.5:  16   Max.   :16.10   Max.   :9.000  
 (Other):1664                  75  :   6                                  
      age           canopyd         gradient          alt          depth      
 Min.   :  7.0   Min.   :  0.0   Min.   : 0.00   Min.   :250   Min.   : 9.00  
 1st Qu.: 65.0   1st Qu.: 70.0   1st Qu.: 6.00   1st Qu.:340   1st Qu.:16.00  
 Median :112.0   Median : 90.0   Median :14.00   Median :390   Median :23.00  
 Mean   :106.1   Mean   : 77.3   Mean   :15.45   Mean   :387   Mean   :24.64  
 3rd Qu.:148.0   3rd Qu.:100.0   3rd Qu.:21.00   3rd Qu.:440   3rd Qu.:31.00  
 Max.   :234.0   Max.   :100.0   Max.   :46.00   Max.   :480   Max.   :51.00  
                                                                              
       ph        watermoisture alkali      humus     type    fert    
 Min.   :3.280   1:198         1:352   1      :512   0:902   0:1453  
 1st Qu.:4.100   2:990         2:991   0      :463   1:894   1: 343  
 Median :4.250   3:608         3:308   2      :388                   
 Mean   :4.295                 4:145   3      :266                   
 3rd Qu.:4.440                         4      :118                   
 Max.   :6.050                         5      : 37                   
 NA's   :3                             (Other): 12                   

R code in import_data/forest_health_status.R.

Example 1.5: Munich Rent Index - Univariate Distributions

par(mfrow = c(2, 2))

ylab <- 'estimated density'
hist(munich_rent_index$rent, freq=FALSE, xlab = 'net rent in Euro', ylab = ylab)
lines(density(munich_rent_index$rent), col = "red", lwd = 2)

hist(munich_rent_index$rentsqm, freq=FALSE, xlab = 'net rent per sqm in Euro', ylab = ylab)
lines(density(munich_rent_index$rentsqm), col = "red", lwd = 2)

hist(munich_rent_index$area, freq=FALSE, xlab = 'area ub sqm', ylab = ylab)
lines(density(munich_rent_index$area), col = "red", lwd = 2)

hist(munich_rent_index$yearc, freq=FALSE, xlab = 'year of construction', ylab = ylab)
lines(density(munich_rent_index$yearc), col = "red", lwd = 2)

Example 1.6: Malnutrition in Zambia - Univariate Distributions

par(mfrow = c(3, 2))

ylab <- 'estimated density'
hist(malnutrition_zambia$zscore, freq=FALSE, xlab = 'child\'s Z-score', ylab = ylab)
lines(density(malnutrition_zambia$zscore), col = "red", lwd = 2)

hist(malnutrition_zambia$c_breastf, freq=FALSE, xlab = 'duration of breast feeding in month', ylab = ylab)
lines(density(malnutrition_zambia$c_breastf), col = "red", lwd = 2)

hist(malnutrition_zambia$c_age, freq=FALSE, xlab = 'child\'s age in months', ylab = ylab)
lines(density(malnutrition_zambia$c_age), col = "red", lwd = 2)

hist(malnutrition_zambia$m_agebirth, freq=FALSE, xlab = 'mother\'s age at birth', ylab = ylab)
lines(density(malnutrition_zambia$m_agebirth), col = "red", lwd = 2)

hist(malnutrition_zambia$m_height, freq=FALSE, xlab = 'mother\'s height in cm', ylab = ylab)
lines(density(malnutrition_zambia$m_height), col = "red", lwd = 2)

hist(malnutrition_zambia$m_bmi, freq=FALSE, xlab = 'mother\'s BMI', ylab = ylab)
lines(density(malnutrition_zambia$m_bmi), col = "red", lwd = 2)

Example 1.7: Munich Rent Index - Scatter Plots

par(mfrow = c(2, 2))

plot(
  x = munich_rent_index$area,
  y = munich_rent_index$rent,
  xlab = "area in sqm",
  ylab = "net rent in Euro"
)

plot(
  x = munich_rent_index$area,
  y = munich_rent_index$rentsqm,
  xlab = "area in sqm",
  ylab = "net rent per sqm in Euro"
)

plot(
  x = munich_rent_index$yearc,
  y = munich_rent_index$rent,
  xlab = "year of construction",
  ylab = "net rent in Euro"
)

plot(
  x = munich_rent_index$yearc,
  y = munich_rent_index$rentsqm,
  xlab = "year of construction",
  ylab = "net rent per sqm in Euro"
)

Example 1.8: Munich Rent Index - Clusttered Scatter Plots

par(mfrow = c(2, 2))

boxplot(
  rent ~ area,
  data = munich_rent_index,
  xlab = "area in sqm",
  ylab = "net rent in Euro",
  xaxt = "n"
)

boxplot(
  rentsqm ~ area,
  data = munich_rent_index,
  xlab = "area in sqm",
  ylab = "net rent per sqm in Euro",
  xaxt = "n"
)

boxplot(
  rent ~ yearc,
  data = munich_rent_index,
  xlab = "year of construction",
  ylab = "net rent in Euro",
  xaxt = "n"
)

boxplot(
  rentsqm ~ yearc,
  data = munich_rent_index,
  xlab = "year of construction",
  ylab = "net rent per sqm in Euro",
  xaxt = "n"
)

Example 1.9: Munich Rent Index - Categorical Explanatory Variables

par(mfrow = c(1, 2))

boxplot(
  rentsqm ~ location,
  data = munich_rent_index,
  xlab = '',
  ylab = 'net rennt per sqm',
  names = c('average', 'good', 'top')
)

plot(density(subset(munich_rent_index, location == 1)$rentsqm), xlab = 'net rent per sqm', ylab = 'estimated density', lwd = 2)
lines(density(subset(munich_rent_index, location == 2)$rentsqm), col = "green", lwd= 2)
lines(density(subset(munich_rent_index, location == 3)$rentsqm), col = "red", lwd= 2)

legend(
  "topright",
  legend = c('average', 'good', 'top'),
  col = c('black', 'green', 'red'),
  lwd = 2
)

Example 1.10: Malnutrition in Zambia - Graphical Association Analysis

par(mfrow = c(1, 2))

plot(
  x = malnutrition_zambia$c_age,
  y = malnutrition_zambia$zscore,
  xlab = "child's age in month",
  ylab = "Z-score"
)

boxplot(
  zscore ~ c_age,
  data = malnutrition_zambia,
  xlab = "child's age in month",
  ylab = "Z-score",
  xaxt = "n"
)

par(mfrow = c(3, 2))

boxplot(
  zscore ~ c_breastf,
  data = malnutrition_zambia,
  xlab = "duration of breastfeeding in months",
  ylab = "average Z-score",
  xaxt = "n"
)

malnutrition_zambia$bmi_group <- cut(
  malnutrition_zambia$m_bmi,
  breaks = seq(
    min(malnutrition_zambia$m_bmi),
    max(malnutrition_zambia$m_bmi),
    length.out = 101
  ),
  include.lowest = TRUE
)

boxplot(
  zscore ~ bmi_group,
  data = malnutrition_zambia,
  xlab = "mother's BMI",
  ylab = "average Z-score",
  xaxt = "n"
)

malnutrition_zambia$age_group <- cut(
  malnutrition_zambia$m_agebirth,
  breaks = seq(
    min(malnutrition_zambia$m_agebirth),
    max(malnutrition_zambia$m_agebirth),
    length.out = 101
  ),
  include.lowest = TRUE
)

boxplot(
  zscore ~ age_group,
  data = malnutrition_zambia,
  xlab = "mother's age in years",
  ylab = "average Z-score",
  xaxt = "n"
)

malnutrition_zambia$height_group <- cut(
  malnutrition_zambia$m_height,
  breaks = seq(
    min(malnutrition_zambia$m_height),
    max(malnutrition_zambia$m_height),
    length.out = 101
  ),
  include.lowest = TRUE
)

boxplot(
  zscore ~ height_group,
  data = malnutrition_zambia,
  xlab = "mother's height in cm",
  ylab = "average Z-score",
  xaxt = "n"
)

boxplot(
  zscore ~ m_education,
  data = malnutrition_zambia,
  xlab = 'mother\'s level of education',
  ylab = 'Z-score',
  names = c('none', 'primary', 'secondary', 'higher')
)

LS0tCnRpdGxlOiAiSW50cm9kdWN0aW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpXZSBpbXBvcnQgdGhlIGRhdGEgZnJvbSB0aGUgW29mZmljaWFsIHBhZ2Ugb2YgdGhlIGRhdGFzZXRdKGh0dHBzOi8vd3d3LnVuaS1nb2V0dGluZ2VuLmRlL2VuLzU1MTYyNS5odG1sKS4KCiMjIEV4YW1wbGUgMS4xOiBNdW5pY2ggUmVudCBJbmRleAoKYGBge3J9Cm11bmljaF9yZW50X3VybCA8LSAiaHR0cHM6Ly93d3cudW5pLWdvZXR0aW5nZW4uZGUvZGUvZG9jdW1lbnQvZG93bmxvYWQvNjRjMjljMWIxZmNjYjE0MmNmYThmMjlhOTQyYTllMDUucmF3L3JlbnQ5OS5yYXciCgptdW5pY2hfcmVudF9pbmRleCA8LSByZWFkLnRhYmxlKAogIHVybChtdW5pY2hfcmVudF91cmwpLAogIGhlYWRlciA9IDEsCiAgY29sQ2xhc3NlcyA9IGMoCiAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLAogICAgIm51bWVyaWMiLCAiZmFjdG9yIiwgImZhY3RvciIsCiAgICAiZmFjdG9yIiwgImZhY3RvciIsICJmYWN0b3IiCiAgKQopCgojIENvbnZlcnQgdG8gbG9naWNhbAptdW5pY2hfcmVudF9pbmRleCRiYXRoIDwtIG11bmljaF9yZW50X2luZGV4JGJhdGggPT0gMQptdW5pY2hfcmVudF9pbmRleCRraXRjaGVuIDwtIG11bmljaF9yZW50X2luZGV4JGtpdGNoZW4gPT0gMQptdW5pY2hfcmVudF9pbmRleCRjaGVhdGluZyA8LSBtdW5pY2hfcmVudF9pbmRleCRjaGVhdGluZyA9PSAxCnN1bW1hcnkobXVuaWNoX3JlbnRfaW5kZXgpCmBgYAoKRm9yIGZ1dHVyZSB1c2UsIHRoaXMgY29kZSBpcyBnb2luZyB0byBiZSBhdmFpbGFibGUgaW4gYW4gUiBzY3JpcHQgaW4gW2BpbXBvcnRfZGF0YS9tdW5pY2hfcmVudF9pbmRleC5SYF0oaW1wb3J0X2RhdGEvbXVuaWNoX3JlbnRfaW5kZXguUikuCgojIEV4YW1wbGUgMi4yOiBNYWxudXRyaXRpb24gaW4gWmFtYmlhCgpgYGB7cn0KemFtYmlhX3VybCA8LSAiaHR0cHM6Ly93d3cudW5pLWdvZXR0aW5nZW4uZGUvZGUvZG9jdW1lbnQvZG93bmxvYWQvZDkwYTJkN2IyNmM0NTA0YWI2NjMwY2YzNmNiYWUyZmEucmF3L3phbWJpYV9oZWlnaHQ5Mi5yYXciCgptYWxudXRyaXRpb25femFtYmlhIDwtIHJlYWQudGFibGUoCiAgdXJsKHphbWJpYV91cmwpLAogIGhlYWRlciA9IDEsCiAgY29sQ2xhc3NlcyA9IGMoCiAgICAibnVtZXJpYyIsICJmYWN0b3IiLCAibnVtZXJpYyIsCiAgICAiaW50ZWdlciIsICJudW1lcmljIiwgIm51bWVyaWMiLAogICAgIm51bWVyaWMiLCAiZmFjdG9yIiwgImZhY3RvciIsCiAgICAiZmFjdG9yIiwgImZhY3RvciIsICJmYWN0b3IiCiAgKQopCgojIENvbnZlcnQgdG8gbG9naWNhbAptYWxudXRyaXRpb25femFtYmlhJG1fd29yayA8LSBtYWxudXRyaXRpb25femFtYmlhJG1fd29yayA9PSAxCnN1bW1hcnkobWFsbnV0cml0aW9uX3phbWJpYSkKYGBgCgpDb2RlIGZvciBpbXBvcnQgaW4gW2BpbXBvcnRfZGF0YS9tYWxudXRyaXRpb25femFtYmlhLlJgXShpbXBvcnRfZGF0YS9tYWxudXRyaXRpb25femFtYmlhLlIpLgoKIyMgRXhhbXBsZSAxLjM6IFBhdGVudCBPcHBvc2l0aW9uCgpgYGB7cn0KcGF0ZW50X3VybCA8LSAiaHR0cHM6Ly93d3cudW5pLWdvZXR0aW5nZW4uZGUvZGUvZG9jdW1lbnQvZG93bmxvYWQvNjZlYjRlYjBiYzBlOGY2YWNmMWQwMmRkZjY4M2YwNzcucmF3L3BhdGVudGRhdGEucmF3IgoKcGF0ZW50X29wcG9zaXRpb24gPC0gcmVhZC50YWJsZSgKICB1cmwocGF0ZW50X3VybCksCiAgaGVhZGVyID0gMSwKICBjb2xDbGFzc2VzID0gYygKICAgICJmYWN0b3IiLCAiZmFjdG9yIiwgImZhY3RvciIsCiAgICAiZmFjdG9yIiwgImZhY3RvciIsICJpbnRlZ2VyIiwKICAgICJpbnRlZ2VyIiwgImludGVnZXIiLCAiaW50ZWdlciIKICApCikKIyBDb252ZXJ0IHRvIGxvZ2ljYWwKcGF0ZW50X29wcG9zaXRpb24kYmlvcGhhcm0gPC0gcGF0ZW50X29wcG9zaXRpb24kYmlvcGhhcm0gPT0gMQpwYXRlbnRfb3Bwb3NpdGlvbiR1c3R3aW4gPC0gcGF0ZW50X29wcG9zaXRpb24kdXN0d2luID09IDEKcGF0ZW50X29wcG9zaXRpb24kcGF0dXMgPC0gcGF0ZW50X29wcG9zaXRpb24kcGF0dXMgPT0gMQpwYXRlbnRfb3Bwb3NpdGlvbiRwYXRnc2dyIDwtIHBhdGVudF9vcHBvc2l0aW9uJHBhdGdzZ3IgPT0gMQpzdW1tYXJ5KHBhdGVudF9vcHBvc2l0aW9uKQpgYGAKClIgY29kZSBpbiBbYGltcG9ydF9kYXRhL3BhdGVudF9vcHBvc2l0aW9uLlJgXShpbXBvcnRfZGF0YS9wYXRlbnRfb3Bwb3NpdGlvbi5SKS4gCgojIyBFeGFtcGxlIDEuNDogRm9yZXN0IEhlYWx0aCBTdGF0dXMKCmBgYHtyfQpmb3Jlc3RfdXJsIDwtICJodHRwczovL3d3dy51bmktZ29ldHRpbmdlbi5kZS9kZS9kb2N1bWVudC9kb3dubG9hZC9mNWVmNThlMDVhZmY4YjY1NDZkY2Y5OTNhYTczYTQ4MC5yYXcvYmVhY2gucmF3IgoKZm9yZXN0X2hlYWx0aF9zdGF0dXMgPC0gcmVhZC50YWJsZSgKICB1cmwoZm9yZXN0X3VybCksCiAgaGVhZGVyID0gMSwKICBjb2xDbGFzc2VzID0gYygKICAgICJmYWN0b3IiLCAibnVtZXJpYyIsICJmYWN0b3IiLAogICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwKICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsCiAgICAibnVtZXJpYyIsICJudW1lcmljIiwgImZhY3RvciIsCiAgICAiZmFjdG9yIiwgImZhY3RvciIsICJmYWN0b3IiLAogICAgImZhY3RvciIKICApLAogIG5hLnN0cmluZ3MgPSAiLiIKKQpzdW1tYXJ5KGZvcmVzdF9oZWFsdGhfc3RhdHVzKQpgYGAKClIgY29kZSBpbiBbYGltcG9ydF9kYXRhL2ZvcmVzdF9oZWFsdGhfc3RhdHVzLlJgXShpbXBvcnRfZGF0YS9mb3Jlc3RfaGVhbHRoX3N0YXR1cy5SKS4KCiMjIEV4YW1wbGUgMS41OiBNdW5pY2ggUmVudCBJbmRleCAtIFVuaXZhcmlhdGUgRGlzdHJpYnV0aW9ucwoKYGBge3IsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04LCBmaWcuYWxpZ249J2NlbnRlcid9CnBhcihtZnJvdyA9IGMoMiwgMikpCgp5bGFiIDwtICdlc3RpbWF0ZWQgZGVuc2l0eScKaGlzdChtdW5pY2hfcmVudF9pbmRleCRyZW50LCBmcmVxPUZBTFNFLCB4bGFiID0gJ25ldCByZW50IGluIEV1cm8nLCB5bGFiID0geWxhYikKbGluZXMoZGVuc2l0eShtdW5pY2hfcmVudF9pbmRleCRyZW50KSwgY29sID0gInJlZCIsIGx3ZCA9IDIpCgpoaXN0KG11bmljaF9yZW50X2luZGV4JHJlbnRzcW0sIGZyZXE9RkFMU0UsIHhsYWIgPSAnbmV0IHJlbnQgcGVyIHNxbSBpbiBFdXJvJywgeWxhYiA9IHlsYWIpCmxpbmVzKGRlbnNpdHkobXVuaWNoX3JlbnRfaW5kZXgkcmVudHNxbSksIGNvbCA9ICJyZWQiLCBsd2QgPSAyKQoKaGlzdChtdW5pY2hfcmVudF9pbmRleCRhcmVhLCBmcmVxPUZBTFNFLCB4bGFiID0gJ2FyZWEgdWIgc3FtJywgeWxhYiA9IHlsYWIpCmxpbmVzKGRlbnNpdHkobXVuaWNoX3JlbnRfaW5kZXgkYXJlYSksIGNvbCA9ICJyZWQiLCBsd2QgPSAyKQoKaGlzdChtdW5pY2hfcmVudF9pbmRleCR5ZWFyYywgZnJlcT1GQUxTRSwgeGxhYiA9ICd5ZWFyIG9mIGNvbnN0cnVjdGlvbicsIHlsYWIgPSB5bGFiKQpsaW5lcyhkZW5zaXR5KG11bmljaF9yZW50X2luZGV4JHllYXJjKSwgY29sID0gInJlZCIsIGx3ZCA9IDIpCmBgYAoKIyMgRXhhbXBsZSAxLjY6IE1hbG51dHJpdGlvbiBpbiBaYW1iaWEgLSBVbml2YXJpYXRlIERpc3RyaWJ1dGlvbnMKCmBgYHtyLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9MTIsIGZpZy5hbGlnbj0nY2VudGVyJ30KcGFyKG1mcm93ID0gYygzLCAyKSkKCnlsYWIgPC0gJ2VzdGltYXRlZCBkZW5zaXR5JwpoaXN0KG1hbG51dHJpdGlvbl96YW1iaWEkenNjb3JlLCBmcmVxPUZBTFNFLCB4bGFiID0gJ2NoaWxkXCdzIFotc2NvcmUnLCB5bGFiID0geWxhYikKbGluZXMoZGVuc2l0eShtYWxudXRyaXRpb25femFtYmlhJHpzY29yZSksIGNvbCA9ICJyZWQiLCBsd2QgPSAyKQoKaGlzdChtYWxudXRyaXRpb25femFtYmlhJGNfYnJlYXN0ZiwgZnJlcT1GQUxTRSwgeGxhYiA9ICdkdXJhdGlvbiBvZiBicmVhc3QgZmVlZGluZyBpbiBtb250aCcsIHlsYWIgPSB5bGFiKQpsaW5lcyhkZW5zaXR5KG1hbG51dHJpdGlvbl96YW1iaWEkY19icmVhc3RmKSwgY29sID0gInJlZCIsIGx3ZCA9IDIpCgpoaXN0KG1hbG51dHJpdGlvbl96YW1iaWEkY19hZ2UsIGZyZXE9RkFMU0UsIHhsYWIgPSAnY2hpbGRcJ3MgYWdlIGluIG1vbnRocycsIHlsYWIgPSB5bGFiKQpsaW5lcyhkZW5zaXR5KG1hbG51dHJpdGlvbl96YW1iaWEkY19hZ2UpLCBjb2wgPSAicmVkIiwgbHdkID0gMikKCmhpc3QobWFsbnV0cml0aW9uX3phbWJpYSRtX2FnZWJpcnRoLCBmcmVxPUZBTFNFLCB4bGFiID0gJ21vdGhlclwncyBhZ2UgYXQgYmlydGgnLCB5bGFiID0geWxhYikKbGluZXMoZGVuc2l0eShtYWxudXRyaXRpb25femFtYmlhJG1fYWdlYmlydGgpLCBjb2wgPSAicmVkIiwgbHdkID0gMikKCmhpc3QobWFsbnV0cml0aW9uX3phbWJpYSRtX2hlaWdodCwgZnJlcT1GQUxTRSwgeGxhYiA9ICdtb3RoZXJcJ3MgaGVpZ2h0IGluIGNtJywgeWxhYiA9IHlsYWIpCmxpbmVzKGRlbnNpdHkobWFsbnV0cml0aW9uX3phbWJpYSRtX2hlaWdodCksIGNvbCA9ICJyZWQiLCBsd2QgPSAyKQoKaGlzdChtYWxudXRyaXRpb25femFtYmlhJG1fYm1pLCBmcmVxPUZBTFNFLCB4bGFiID0gJ21vdGhlclwncyBCTUknLCB5bGFiID0geWxhYikKbGluZXMoZGVuc2l0eShtYWxudXRyaXRpb25femFtYmlhJG1fYm1pKSwgY29sID0gInJlZCIsIGx3ZCA9IDIpCmBgYAoKIyMgRXhhbXBsZSAxLjc6IE11bmljaCBSZW50IEluZGV4IC0gU2NhdHRlciBQbG90cwoKYGBge3IsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04LCBmaWcuYWxpZ249J2NlbnRlcid9CnBhcihtZnJvdyA9IGMoMiwgMikpCgpwbG90KAogIHggPSBtdW5pY2hfcmVudF9pbmRleCRhcmVhLAogIHkgPSBtdW5pY2hfcmVudF9pbmRleCRyZW50LAogIHhsYWIgPSAiYXJlYSBpbiBzcW0iLAogIHlsYWIgPSAibmV0IHJlbnQgaW4gRXVybyIKKQoKcGxvdCgKICB4ID0gbXVuaWNoX3JlbnRfaW5kZXgkYXJlYSwKICB5ID0gbXVuaWNoX3JlbnRfaW5kZXgkcmVudHNxbSwKICB4bGFiID0gImFyZWEgaW4gc3FtIiwKICB5bGFiID0gIm5ldCByZW50IHBlciBzcW0gaW4gRXVybyIKKQoKcGxvdCgKICB4ID0gbXVuaWNoX3JlbnRfaW5kZXgkeWVhcmMsCiAgeSA9IG11bmljaF9yZW50X2luZGV4JHJlbnQsCiAgeGxhYiA9ICJ5ZWFyIG9mIGNvbnN0cnVjdGlvbiIsCiAgeWxhYiA9ICJuZXQgcmVudCBpbiBFdXJvIgopCgpwbG90KAogIHggPSBtdW5pY2hfcmVudF9pbmRleCR5ZWFyYywKICB5ID0gbXVuaWNoX3JlbnRfaW5kZXgkcmVudHNxbSwKICB4bGFiID0gInllYXIgb2YgY29uc3RydWN0aW9uIiwKICB5bGFiID0gIm5ldCByZW50IHBlciBzcW0gaW4gRXVybyIKKQpgYGAKCiMjIEV4YW1wbGUgMS44OiBNdW5pY2ggUmVudCBJbmRleCAtIENsdXN0dGVyZWQgU2NhdHRlciBQbG90cwoKYGBge3IsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04LCBmaWcuYWxpZ249J2NlbnRlcid9CnBhcihtZnJvdyA9IGMoMiwgMikpCgpib3hwbG90KAogIHJlbnQgfiBhcmVhLAogIGRhdGEgPSBtdW5pY2hfcmVudF9pbmRleCwKICB4bGFiID0gImFyZWEgaW4gc3FtIiwKICB5bGFiID0gIm5ldCByZW50IGluIEV1cm8iLAogIHhheHQgPSAibiIKKQoKYm94cGxvdCgKICByZW50c3FtIH4gYXJlYSwKICBkYXRhID0gbXVuaWNoX3JlbnRfaW5kZXgsCiAgeGxhYiA9ICJhcmVhIGluIHNxbSIsCiAgeWxhYiA9ICJuZXQgcmVudCBwZXIgc3FtIGluIEV1cm8iLAogIHhheHQgPSAibiIKKQoKYm94cGxvdCgKICByZW50IH4geWVhcmMsCiAgZGF0YSA9IG11bmljaF9yZW50X2luZGV4LAogIHhsYWIgPSAieWVhciBvZiBjb25zdHJ1Y3Rpb24iLAogIHlsYWIgPSAibmV0IHJlbnQgaW4gRXVybyIsCiAgeGF4dCA9ICJuIgopCgpib3hwbG90KAogIHJlbnRzcW0gfiB5ZWFyYywKICBkYXRhID0gbXVuaWNoX3JlbnRfaW5kZXgsCiAgeGxhYiA9ICJ5ZWFyIG9mIGNvbnN0cnVjdGlvbiIsCiAgeWxhYiA9ICJuZXQgcmVudCBwZXIgc3FtIGluIEV1cm8iLAogIHhheHQgPSAibiIKKQpgYGAKCiMjIEV4YW1wbGUgMS45OiBNdW5pY2ggUmVudCBJbmRleCAtIENhdGVnb3JpY2FsIEV4cGxhbmF0b3J5IFZhcmlhYmxlcwoKYGBge3IsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD00LCBmaWcuYWxpZ249J2NlbnRlcid9CnBhcihtZnJvdyA9IGMoMSwgMikpCgpib3hwbG90KAogIHJlbnRzcW0gfiBsb2NhdGlvbiwKICBkYXRhID0gbXVuaWNoX3JlbnRfaW5kZXgsCiAgeGxhYiA9ICcnLAogIHlsYWIgPSAnbmV0IHJlbm50IHBlciBzcW0nLAogIG5hbWVzID0gYygnYXZlcmFnZScsICdnb29kJywgJ3RvcCcpCikKCnBsb3QoZGVuc2l0eShzdWJzZXQobXVuaWNoX3JlbnRfaW5kZXgsIGxvY2F0aW9uID09IDEpJHJlbnRzcW0pLCB4bGFiID0gJ25ldCByZW50IHBlciBzcW0nLCB5bGFiID0gJ2VzdGltYXRlZCBkZW5zaXR5JywgbHdkID0gMikKbGluZXMoZGVuc2l0eShzdWJzZXQobXVuaWNoX3JlbnRfaW5kZXgsIGxvY2F0aW9uID09IDIpJHJlbnRzcW0pLCBjb2wgPSAiZ3JlZW4iLCBsd2Q9IDIpCmxpbmVzKGRlbnNpdHkoc3Vic2V0KG11bmljaF9yZW50X2luZGV4LCBsb2NhdGlvbiA9PSAzKSRyZW50c3FtKSwgY29sID0gInJlZCIsIGx3ZD0gMikKCmxlZ2VuZCgKICAidG9wcmlnaHQiLAogIGxlZ2VuZCA9IGMoJ2F2ZXJhZ2UnLCAnZ29vZCcsICd0b3AnKSwKICBjb2wgPSBjKCdibGFjaycsICdncmVlbicsICdyZWQnKSwKICBsd2QgPSAyCikKYGBgCgojIyBFeGFtcGxlIDEuMTA6IE1hbG51dHJpdGlvbiBpbiBaYW1iaWEgLSBHcmFwaGljYWwgQXNzb2NpYXRpb24gQW5hbHlzaXMKCmBgYHtyLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9NCwgZmlnLmFsaWduPSdjZW50ZXInfQpwYXIobWZyb3cgPSBjKDEsIDIpKQoKcGxvdCgKICB4ID0gbWFsbnV0cml0aW9uX3phbWJpYSRjX2FnZSwKICB5ID0gbWFsbnV0cml0aW9uX3phbWJpYSR6c2NvcmUsCiAgeGxhYiA9ICJjaGlsZCdzIGFnZSBpbiBtb250aCIsCiAgeWxhYiA9ICJaLXNjb3JlIgopCgpib3hwbG90KAogIHpzY29yZSB+IGNfYWdlLAogIGRhdGEgPSBtYWxudXRyaXRpb25femFtYmlhLAogIHhsYWIgPSAiY2hpbGQncyBhZ2UgaW4gbW9udGgiLAogIHlsYWIgPSAiWi1zY29yZSIsCiAgeGF4dCA9ICJuIgopCmBgYAoKYGBge3IsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD0xMiwgZmlnLmFsaWduPSdjZW50ZXInfQpwYXIobWZyb3cgPSBjKDMsIDIpKQoKYm94cGxvdCgKICB6c2NvcmUgfiBjX2JyZWFzdGYsCiAgZGF0YSA9IG1hbG51dHJpdGlvbl96YW1iaWEsCiAgeGxhYiA9ICJkdXJhdGlvbiBvZiBicmVhc3RmZWVkaW5nIGluIG1vbnRocyIsCiAgeWxhYiA9ICJhdmVyYWdlIFotc2NvcmUiLAogIHhheHQgPSAibiIKKQoKbWFsbnV0cml0aW9uX3phbWJpYSRibWlfZ3JvdXAgPC0gY3V0KAogIG1hbG51dHJpdGlvbl96YW1iaWEkbV9ibWksCiAgYnJlYWtzID0gc2VxKAogICAgbWluKG1hbG51dHJpdGlvbl96YW1iaWEkbV9ibWkpLAogICAgbWF4KG1hbG51dHJpdGlvbl96YW1iaWEkbV9ibWkpLAogICAgbGVuZ3RoLm91dCA9IDEwMQogICksCiAgaW5jbHVkZS5sb3dlc3QgPSBUUlVFCikKCmJveHBsb3QoCiAgenNjb3JlIH4gYm1pX2dyb3VwLAogIGRhdGEgPSBtYWxudXRyaXRpb25femFtYmlhLAogIHhsYWIgPSAibW90aGVyJ3MgQk1JIiwKICB5bGFiID0gImF2ZXJhZ2UgWi1zY29yZSIsCiAgeGF4dCA9ICJuIgopCgptYWxudXRyaXRpb25femFtYmlhJGFnZV9ncm91cCA8LSBjdXQoCiAgbWFsbnV0cml0aW9uX3phbWJpYSRtX2FnZWJpcnRoLAogIGJyZWFrcyA9IHNlcSgKICAgIG1pbihtYWxudXRyaXRpb25femFtYmlhJG1fYWdlYmlydGgpLAogICAgbWF4KG1hbG51dHJpdGlvbl96YW1iaWEkbV9hZ2ViaXJ0aCksCiAgICBsZW5ndGgub3V0ID0gMTAxCiAgKSwKICBpbmNsdWRlLmxvd2VzdCA9IFRSVUUKKQoKYm94cGxvdCgKICB6c2NvcmUgfiBhZ2VfZ3JvdXAsCiAgZGF0YSA9IG1hbG51dHJpdGlvbl96YW1iaWEsCiAgeGxhYiA9ICJtb3RoZXIncyBhZ2UgaW4geWVhcnMiLAogIHlsYWIgPSAiYXZlcmFnZSBaLXNjb3JlIiwKICB4YXh0ID0gIm4iCikKCm1hbG51dHJpdGlvbl96YW1iaWEkaGVpZ2h0X2dyb3VwIDwtIGN1dCgKICBtYWxudXRyaXRpb25femFtYmlhJG1faGVpZ2h0LAogIGJyZWFrcyA9IHNlcSgKICAgIG1pbihtYWxudXRyaXRpb25femFtYmlhJG1faGVpZ2h0KSwKICAgIG1heChtYWxudXRyaXRpb25femFtYmlhJG1faGVpZ2h0KSwKICAgIGxlbmd0aC5vdXQgPSAxMDEKICApLAogIGluY2x1ZGUubG93ZXN0ID0gVFJVRQopCgpib3hwbG90KAogIHpzY29yZSB+IGhlaWdodF9ncm91cCwKICBkYXRhID0gbWFsbnV0cml0aW9uX3phbWJpYSwKICB4bGFiID0gIm1vdGhlcidzIGhlaWdodCBpbiBjbSIsCiAgeWxhYiA9ICJhdmVyYWdlIFotc2NvcmUiLAogIHhheHQgPSAibiIKKQoKYm94cGxvdCgKICB6c2NvcmUgfiBtX2VkdWNhdGlvbiwKICBkYXRhID0gbWFsbnV0cml0aW9uX3phbWJpYSwKICB4bGFiID0gJ21vdGhlclwncyBsZXZlbCBvZiBlZHVjYXRpb24nLAogIHlsYWIgPSAnWi1zY29yZScsCiAgbmFtZXMgPSBjKCdub25lJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2hpZ2hlcicpCikKYGBgCg==