This website is a replication package for the paper “Exposure to Asylum Seekers and Changing Support for the Radical Right: A Natural Experiment in the Netherlands” by Tolsma, Laméris, and Savelkoul (n.d.). It contains R code to replicate all Tables in the manuscript.

Use the top menu to navigate to the section of interest. The section replicates the Main Tables of the manuscript.

To copy the code click the button in the upper right corner of the code-chunks.


Data

All data and scripts can be found on Github


Contact

Questions can be addressed to the first author of the corresponding article, Jochem Tolsma.


Additional dataprep

We start with a datafile in long format we obtained after performing our dataprep, see here.

  • We delete observations of respondents where respondents were not allowed to vote or did not give an answer.
  • We delete observations with missing values on zipcode information.
  • We delete respondents with only one observation.
  • We construct the dichotomous dependent variable.
  • We construct the multinomial dependent variable.
  • We decided to perform additional robustness checks and need to match more raw data on crisis ASC.
rm(list = ls())

library(haven)

dataset <- read_stata("data/evazc v22122017.dta")

# dependent variable. delete not allowed to vote
table(dataset$vote, useNA = "always")
sum(table(dataset$vote, useNA = "always"))
dataset <- dataset[dataset$vote != 16, ]
dataset <- dataset[dataset$vote != 17, ]
# add 'VNL' to other party
dataset$vote[dataset$vote == 12] <- 18
#'1'='vvd', '2'='pvda', '3'='pvv', '4'='cda', '5'='sp'
#'6'='d66', '7'='gl', '8'='cu', '9'='sgp', '10'='dier'
#'11'='50plus', '12'='vnl','13='blanco','14'='dontknow','15='no vote', '18'='other'
# define dichotomous dependent variable
dataset$y_pvv <- ifelse(dataset$vote == 3, 1, 0)
# define multinomial dependent variable
dataset$vote_rwsp <- NA
dataset$vote_rwsp[dataset$vote == 2 | dataset$vote == 6 | dataset$vote == 7 | dataset$vote == 8 | dataset$vote == 
    10 | dataset$vote == 11 | dataset$vote == 12 | dataset$vote == 18] <- 0  #other
dataset$vote_rwsp[dataset$vote == 1 | dataset$vote == 4 | dataset$vote == 9] <- 1  # right-wing
dataset$vote_rwsp[dataset$vote == 5] <- 2  # anti-establishment 
dataset$vote_rwsp[dataset$vote == 13 | dataset$vote == 14 | dataset$vote == 15] <- 3  #demobilized
dataset$vote_rwsp[dataset$vote == 3] <- 4
# 1: right-wing; 2: anti-establishment; 3: demobilized; 0: other; 4: PVV

# delete respondents with missing data on zipcode
sum(is.na(dataset$pc4))
dataset <- dataset[!is.na(dataset$pc4), ]

# delete respondents with only one observation.
dataset$one <- 1
test <- aggregate(dataset$one, by = list(dataset$PanelistIdQuestion), FUN = sum)
names(test) <- c("PanelistIdQuestion", "ncases")
dataset <- merge(dataset, test)
table(dataset$ncases)
dataset <- dataset[dataset$ncases != 1, ]

# recode tijd/time variable
table(dataset$tijd, useNA = "always")
dataset$tijd <- dataset$tijd - 1

# capacity of ASC s1 is regular, s2=temporary, s3=crisis, s123=total
dataset$s1pc4 <- ifelse(dataset$tijd == 0, dataset$s1cap_pc4t1rel, dataset$s1cap_pc4t2rel)
dataset$s2pc4 <- ifelse(dataset$tijd == 0, dataset$s2cap_pc4t1rel, dataset$s2cap_pc4t2rel)
dataset$s3pc4 <- ifelse(dataset$tijd == 0, dataset$s3cap_pc4t1rel, dataset$s3cap_pc4t2rel)
dataset$s123pc4 <- dataset$s1pc4 + dataset$s2pc4 + dataset$s3pc4

# compute variables for hybrid model: within individual means (between vars) and deviations from mean
# (within vars).
test <- aggregate(dataset[, c("contactnw", "threat", "s123pc4", "s1pc4", "s2pc4", "s3pc4", "y_pvv", "vote_rwsp")], 
    by = list(dataset$PanelistIdQuestion), FUN = mean)
names(test) <- c("PanelistIdQuestion", "contactnw_mean", "threat_mean", "s123pc4_mean", "s1pc4_mean", 
    "s2pc4_mean", "s3pc4_mean", "y_pvv_mean", "vote_rwsp_mean")
dataset <- merge(dataset, test)
dataset$contactnw_afw = dataset$contactnw - dataset$contactnw_mean
dataset$threat_afw = dataset$threat - dataset$threat_mean
dataset$s123pc4_afw = dataset$s123pc4 - dataset$s123pc4_mean
dataset$s1pc4_afw = dataset$s1pc4 - dataset$s1pc4_mean
dataset$s2pc4_afw = dataset$s2pc4 - dataset$s2pc4_mean
dataset$s3pc4_afw = dataset$s3pc4 - dataset$s3pc4_mean

# create filter vars for analyses: fe is fixed effects, fem is fixed effects multinomial
dataset$sel_fe = (dataset$y_pvv != dataset$y_pvv_mean)
dataset$sel_fem = (dataset$vote_rwsp != dataset$vote_rwsp_mean)
dataset$sel_s123pc4 = (dataset$s123pc4 != dataset$s123pc4_mean)

# match additional data on crisis ASC these data have been added in a later phase
duur <- read.csv2("data/Adressen alle AZCs_17022017.csv")
names(duur)
duur <- duur[, c("PC4", "Soort", "Cap_Gem", "Duur.tot.4.11")]
names(duur) <- c("pc4", "soort", "cap", "duur")
duur <- duur[duur$soort == 3, ]
sort(unique(duur$pc4[duur$cap > 0]))

# we are multiplying length of stay with number of AS
duur$s3_altop <- duur$duur * duur$cap
duur2 <- aggregate(duur[, c("cap", "duur", "s3_altop")], by = list(duur$pc4), FUN = sum)
duur2
names(duur2)[1] <- c("pc4")

dataset <- merge(dataset, duur2, all.x = T)
dataset$duur[is.na(dataset$duur)] <- 0
dataset$s3_altop[is.na(dataset$s3_altop)] <- 0
dataset$cap[is.na(dataset$cap)] <- 0

# asylum seekers in crisis centers per 1000 inhabitants weighted by length of stay
dataset$s3_altop2 <- 1000 * dataset$s3_altop/(dataset$inw2014_pc4 * dataset$pauto2014_pc4)
dataset$cap2 <- 1000 * dataset$cap/(dataset$inw2014_pc4 * dataset$pauto2014_pc4)
dataset$s3_altop <- 1000 * dataset$s3_altop/dataset$inw2014_pc4
dataset$cap <- 1000 * dataset$cap/dataset$inw2014_pc4

Table 1

Fixed effects sample

library(psych)
require(DT)

dataset_sel <- dataset[dataset$sel_fe == 1, ]
# table(dataset_sel$y_pvv, dataset_sel$tijd)
prop.table(table(dataset_sel$y_pvv, dataset_sel$tijd), margin = 2)

# describeBy(dataset_sel[,c('s123pc4', 's1pc4', 's2pc4', 's3pc4', 'threat', 'contactnw',
# 's123pc4_afw', 's1pc4_afw', 's2pc4_afw', 's3pc4_afw', 'threat_afw', 'contactnw_afw')],
# group=dataset_sel$tijd)


test <- describeBy(dataset_sel[, c("s123pc4", "s1pc4", "s2pc4", "s3pc4", "threat", "contactnw", "s123pc4_afw", 
    "s1pc4_afw", "s2pc4_afw", "s3pc4_afw", "threat_afw", "contactnw_afw")], group = dataset_sel$tijd)
# kable(round(test[[1]],2), caption='Time 1')
#>    
#>             0         1
#>   0 0.7588193 0.2411807
#>   1 0.2411807 0.7588193
  • respondents in FE sample: 1389
  • zipcodes in FE sample: 1002
  • respondents experiencing change in FE sample: 116
  • zipcodes experiencing change in FE sample: 81

hybrid model sample

table(dataset$y_pvv, dataset$tijd)
prop.table(table(dataset$y_pvv, dataset$tijd), margin = 2)

describeBy(dataset[, c("s123pc4", "s1pc4", "s2pc4", "s3pc4", "threat", "contactnw", "s123pc4_afw", "s1pc4_afw", 
    "s2pc4_afw", "s3pc4_afw", "threat_afw", "contactnw_afw")], group = dataset$tijd)


print("respondents in hybrid sample")
length(unique(dataset$PanelistIdQuestion))

print("zipcodes in FE sample")
length(unique(dataset$pc4))

print("respondents experiencing change in FE sample")
length(unique(dataset$PanelistIdQuestion[dataset$s123pc4 != dataset$s123pc4_mean]))

print("zipcodes experiencing change in FE sample")
length(unique(dataset$pc4[dataset$s123pc4 != dataset$s123pc4_mean]))
#>    
#>         0     1
#>   0 15949 15230
#>   1  3200  3919
#>    
#>             0         1
#>   0 0.8328894 0.7953418
#>   1 0.1671106 0.2046582
#> 
#>  Descriptive statistics by group 
#> group: 0
#>               vars     n  mean    sd median trimmed  mad     min    max  range   skew kurtosis   se
#> s123pc4          1 19149  1.74 15.62      0    0.00 0.00    0.00 690.65 690.65  14.62   340.58 0.11
#> s1pc4            2 19149  1.65 15.44      0    0.00 0.00    0.00 690.65 690.65  15.07   357.57 0.11
#> s2pc4            3 19149  0.09  2.48      0    0.00 0.00    0.00  71.38  71.38  28.22   794.82 0.02
#> s3pc4            4 19149  0.00  0.00      0    0.00 0.00    0.00   0.00   0.00    NaN      NaN 0.00
#> threat           5 19149  1.89  1.36      2    1.86 1.48    0.00   4.00   4.00   0.18    -1.15 0.01
#> contactnw        6 19149  2.48  2.11      2    2.37 2.97    0.00   6.00   6.00   0.18    -1.40 0.02
#> s123pc4_afw      7 19149 -1.04  8.23      0    0.00 0.00 -251.42  15.64 267.06 -17.56   409.53 0.06
#> s1pc4_afw        8 19149 -0.20  5.26      0    0.00 0.00 -251.42  15.64 267.06 -41.62  1938.93 0.04
#> s2pc4_afw        9 19149 -0.39  5.70      0    0.00 0.00 -125.14   0.00 125.14 -18.81   378.23 0.04
#> s3pc4_afw       10 19149 -0.46  2.90      0    0.00 0.00 -141.51   0.00 141.51 -17.55   607.67 0.02
#> threat_afw      11 19149 -0.05  0.52      0   -0.04 0.74   -2.00   2.00   4.00  -0.04     1.25 0.00
#> contactnw_afw   12 19149 -0.05  1.00      0   -0.04 0.74   -3.00   3.00   6.00  -0.05     1.26 0.01
#> --------------------------------------------------------------------------- 
#> group: 1
#>               vars     n mean    sd median trimmed  mad    min    max  range  skew kurtosis   se
#> s123pc4          1 19149 3.81 23.15      0    0.00 0.00   0.00 689.21 689.21 12.04   209.26 0.17
#> s1pc4            2 19149 2.04 19.31      0    0.00 0.00   0.00 689.21 689.21 16.77   392.10 0.14
#> s2pc4            3 19149 0.86 11.71      0    0.00 0.00   0.00 250.29 250.29 17.66   340.44 0.08
#> s3pc4            4 19149 0.92  5.80      0    0.00 0.00   0.00 283.02 283.02 17.55   607.67 0.04
#> threat           5 19149 1.98  1.33      2    1.98 1.48   0.00   4.00   4.00  0.08    -1.11 0.01
#> contactnw        6 19149 2.58  2.15      2    2.48 2.97   0.00   6.00   6.00  0.10    -1.45 0.02
#> s123pc4_afw      7 19149 1.04  8.23      0    0.00 0.00 -15.64 251.42 267.06 17.56   409.53 0.06
#> s1pc4_afw        8 19149 0.20  5.26      0    0.00 0.00 -15.64 251.42 267.06 41.62  1938.93 0.04
#> s2pc4_afw        9 19149 0.39  5.70      0    0.00 0.00   0.00 125.14 125.14 18.81   378.23 0.04
#> s3pc4_afw       10 19149 0.46  2.90      0    0.00 0.00   0.00 141.51 141.51 17.55   607.67 0.02
#> threat_afw      11 19149 0.05  0.52      0    0.04 0.74  -2.00   2.00   4.00  0.04     1.25 0.00
#> contactnw_afw   12 19149 0.05  1.00      0    0.04 0.74  -3.00   3.00   6.00  0.05     1.26 0.01
#> [1] "respondents in hybrid sample"
#> [1] 19149
#> [1] "zipcodes in FE sample"
#> [1] 3039
#> [1] "respondents experiencing change in FE sample"
#> [1] 1491
#> [1] "zipcodes experiencing change in FE sample"
#> [1] 175

Table 2

require(survival)
ev_sel <- dataset_sel
m1 <- clogit(y_pvv ~ s123pc4 + tijd + strata(PanelistIdQuestion), data = ev_sel)
summary(m1)

# via different estimation of fixed effects model (a first difference design) only select
# y_observation at timepoint 2
ev_sel2 <- ev_sel[ev_sel$tijd == 1, ]
# need to multiply _afw with 2 (thus becomes t2-t1, instead of t2 - mean(t2,t1)
ev_sel2$s123pc4_afw <- 2 * ev_sel2$s123pc4_afw
ev_sel2$s1pc4_afw <- 2 * ev_sel2$s1pc4_afw
ev_sel2$s2pc4_afw <- 2 * ev_sel2$s2pc4_afw
ev_sel2$s3pc4_afw <- 2 * ev_sel2$s3pc4_afw
ev_sel2$threat_afw <- 2 * ev_sel2$threat_afw
ev_sel2$contactnw_afw <- 2 * ev_sel2$contactnw_afw

m1_alt1 <- glm(y_pvv ~ s123pc4_afw, data = ev_sel2, family = binomial)
m1_alt2 <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw, data = ev_sel2, family = binomial)
m1_alt3 <- glm(y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + contactnw_afw + threat_afw, data = ev_sel2, 
    family = binomial)

model 1

#> 
#> Call:
#> glm(formula = y_pvv ~ s123pc4_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.3876   0.5200   0.7521   0.7521   0.9127  
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)  1.11803    0.06373  17.543   <2e-16 ***
#> s123pc4_afw  0.02166    0.01165   1.859    0.063 .  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1528.8  on 1387  degrees of freedom
#> AIC: 1532.8
#> 
#> Number of Fisher Scoring iterations: 5

model 2

#> 
#> Call:
#> glm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw, family = binomial, 
#>     data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -1.9985   0.4944   0.7539   0.7539   0.8090  
#> 
#> Coefficients:
#>             Estimate Std. Error z value Pr(>|z|)    
#> (Intercept) 1.112850   0.063957  17.400   <2e-16 ***
#> s1pc4_afw   0.007758   0.013869   0.559   0.5759    
#> s2pc4_afw   0.056311   0.062301   0.904   0.3661    
#> s3pc4_afw   0.027981   0.016846   1.661   0.0967 .  
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1527.5  on 1385  degrees of freedom
#> AIC: 1535.5
#> 
#> Number of Fisher Scoring iterations: 7

model 3

#> 
#> Call:
#> glm(formula = y_pvv ~ s1pc4_afw + s2pc4_afw + s3pc4_afw + contactnw_afw + 
#>     threat_afw, family = binomial, data = ev_sel2)
#> 
#> Deviance Residuals: 
#>     Min       1Q   Median       3Q      Max  
#> -2.1981   0.4287   0.6897   0.7635   1.1680  
#> 
#> Coefficients:
#>               Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)   1.083612   0.064778  16.728  < 2e-16 ***
#> s1pc4_afw     0.008048   0.014410   0.558    0.577    
#> s2pc4_afw     0.061377   0.066976   0.916    0.359    
#> s3pc4_afw     0.029132   0.017235   1.690    0.091 .  
#> contactnw_afw 0.034130   0.029358   1.163    0.245    
#> threat_afw    0.265371   0.058514   4.535 5.76e-06 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> (Dispersion parameter for binomial family taken to be 1)
#> 
#>     Null deviance: 1534.7  on 1388  degrees of freedom
#> Residual deviance: 1504.4  on 1383  degrees of freedom
#> AIC: 1516.4
#> 
#> Number of Fisher Scoring iterations: 7

Table 3

require(sandwich)
require(lmtest)
ev <- dataset

## hybrid model because we include ethnic density of NB and SES of NB need to remove missing values.

# sum(is.na(ev$pnwal2014_pc4))
ev_sel4 <- ev[!is.na(ev$pnwal2014_pc4), ]
# lost 90 respondents

ev_sel4 <- ev_sel4[!(ev_sel4$woz2012_pc4 == 0), ]
# lost 22 respondents
ev_sel4 <- ev_sel4[!is.na(ev_sel4$woz2012_pc4), ]
# lost 3 respondents

# center variables!
ev_sel4$age_c <- ev_sel4$age - mean(ev_sel4$age)
ev_sel4$educ_c <- ev_sel4$educ - mean(ev_sel4$educ)
ev_sel4$pnwal2014_pc4_c <- ev_sel4$pnwal2014_pc4 - mean(ev_sel4$pnwal2014_pc4)
ev_sel4$woz2012_pc4_c <- ev_sel4$woz2012_pc4 - mean(ev_sel4$woz2012_pc4)

# run models
m1h <- glm(y_pvv ~ tijd + s123pc4_afw + s123pc4_mean + gender + age_c + educ_c + pnwal2014_pc4_c + woz2012_pc4_c, 
    data = ev_sel4, family = binomial)
m2h <- glm(y_pvv ~ tijd + s1pc4_afw + s2pc4_afw + s3pc4_afw + s1pc4_mean + s2pc4_mean + s3pc4_mean + 
    gender + age_c + educ_c + pnwal2014_pc4_c + woz2012_pc4_c, data = ev_sel4, family = binomial)
m3h <- glm(y_pvv ~ tijd + s1pc4_afw + s2pc4_afw + s3pc4_afw + s1pc4_mean + s2pc4_mean + s3pc4_mean + 
    threat_mean + contactnw_mean + gender + age_c + educ_c + pnwal2014_pc4_c + woz2012_pc4_c, data = ev_sel4, 
    family = binomial)
m4h <- glm(y_pvv ~ tijd + s1pc4_afw * pnwal2014_pc4_c + s2pc4_afw * pnwal2014_pc4_c + s3pc4_afw * pnwal2014_pc4_c + 
    s1pc4_mean + s2pc4_mean + s3pc4_mean + threat_mean + contactnw_mean + gender + age_c + educ_c + woz2012_pc4_c, 
    data = ev_sel4, family = binomial)


# summary(m1h) summary(m2h) summary(m3h) coeftest(m1h, vcov = vcovCL(m1h, cluster = ~
# PanelistIdQuestion)) coeftest(m2h, vcov = vcovCL(m2h, cluster = ~ PanelistIdQuestion))
# coeftest(m3h, vcov = vcovCL(m3h, cluster = ~ PanelistIdQuestion))

model 1

#> 
#> z test of coefficients:
#> 
#>                 Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)       -2.126      0.040 -52.973   <2e-16 ***
#> tijd               0.258      0.014  19.077   <2e-16 ***
#> s123pc4_afw        0.001      0.001   1.665    0.096 .  
#> s123pc4_mean       0.000      0.001   0.019    0.985    
#> gender             0.581      0.043  13.396   <2e-16 ***
#> age_c             -0.014      0.002  -8.946   <2e-16 ***
#> educ_c            -0.154      0.006 -27.170   <2e-16 ***
#> pnwal2014_pc4_c    0.772      0.239   3.233    0.001 ***
#> woz2012_pc4_c      0.000      0.000  -0.515    0.607    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

model 2

#> 
#> z test of coefficients:
#> 
#>                 Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)       -2.128      0.040 -52.866   <2e-16 ***
#> tijd               0.256      0.014  18.852   <2e-16 ***
#> s1pc4_afw          0.001      0.001   0.949    0.343    
#> s2pc4_afw          0.001      0.001   0.732    0.464    
#> s3pc4_afw          0.003      0.002   1.535    0.125    
#> s1pc4_mean         0.000      0.001  -0.040    0.968    
#> s2pc4_mean        -0.001      0.003  -0.156    0.876    
#> s3pc4_mean         0.005      0.006   0.838    0.402    
#> gender             0.582      0.043  13.402   <2e-16 ***
#> age_c             -0.014      0.002  -8.955   <2e-16 ***
#> educ_c            -0.154      0.006 -27.165   <2e-16 ***
#> pnwal2014_pc4_c    0.775      0.239   3.246    0.001 ***
#> woz2012_pc4_c      0.000      0.000  -0.527    0.598    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

model 3

#> 
#> z test of coefficients:
#> 
#>                 Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)       -5.324      0.084 -63.717   <2e-16 ***
#> tijd               0.361      0.019  18.927   <2e-16 ***
#> s1pc4_afw          0.002      0.002   0.894    0.371    
#> s2pc4_afw          0.001      0.001   0.657    0.511    
#> s3pc4_afw          0.005      0.003   1.601    0.109    
#> s1pc4_mean         0.000      0.001   0.366    0.715    
#> s2pc4_mean         0.002      0.003   0.436    0.663    
#> s3pc4_mean         0.007      0.007   1.114    0.265    
#> threat_mean        1.416      0.023  61.905   <2e-16 ***
#> contactnw_mean    -0.056      0.011  -4.933   <2e-16 ***
#> gender             0.234      0.050   4.695   <2e-16 ***
#> age_c             -0.013      0.002  -6.953   <2e-16 ***
#> educ_c            -0.074      0.007 -11.085   <2e-16 ***
#> pnwal2014_pc4_c   -1.670      0.295  -5.661   <2e-16 ***
#> woz2012_pc4_c      0.000      0.000  -1.127    0.260    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model 4: no interaction with ethnic density

#> 
#> z test of coefficients:
#> 
#>                           Estimate Std. Error z value Pr(>|z|)    
#> (Intercept)                 -5.323      0.084 -63.712   <2e-16 ***
#> tijd                         0.360      0.019  18.885   <2e-16 ***
#> s1pc4_afw                    0.002      0.002   1.034    0.301    
#> pnwal2014_pc4_c             -1.672      0.295  -5.668   <2e-16 ***
#> s2pc4_afw                    0.001      0.002   0.748    0.454    
#> s3pc4_afw                    0.005      0.003   1.600    0.110    
#> s1pc4_mean                   0.000      0.001   0.335    0.738    
#> s2pc4_mean                   0.002      0.003   0.435    0.663    
#> s3pc4_mean                   0.007      0.007   1.135    0.256    
#> threat_mean                  1.416      0.023  61.904   <2e-16 ***
#> contactnw_mean              -0.056      0.011  -4.934   <2e-16 ***
#> gender                       0.234      0.050   4.694   <2e-16 ***
#> age_c                       -0.013      0.002  -6.951   <2e-16 ***
#> educ_c                      -0.074      0.007 -11.087   <2e-16 ***
#> woz2012_pc4_c                0.000      0.000  -1.128    0.260    
#> s1pc4_afw:pnwal2014_pc4_c    0.019      0.033   0.587    0.557    
#> pnwal2014_pc4_c:s2pc4_afw    0.013      0.031   0.422    0.673    
#> pnwal2014_pc4_c:s3pc4_afw    0.024      0.052   0.466    0.641    
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Note 3 in manuscript

  • In the manuscript we state that the treatment is not related to pretreatment PVV support.
  • In note 3 we state that treatment is not related to an increase in contact or threat.

We first define a treatment variable: 1 (YES, increase in asylum seekers); 0 (NO, no increase in asylum seekers)

# show that treatment is not related to changes in threat and contact in fixed effect sample. note 3
# in revised manuscript.  only select y_observation at timepoint 2
ev_sel2 <- dataset_sel[dataset_sel$tijd == 1, ]
ev_sel2$treatment <- ev_sel2$s123pc4_afw > 0
mean(ev_sel2$contactnw_afw)
#> [1] 0.1285097
by(ev_sel2$contactnw_afw, ev_sel2$treatment, function(x) sd(x))
#> ev_sel2$treatment: FALSE
#> [1] 1.08223
#> --------------------------------------------------------------------------- 
#> ev_sel2$treatment: TRUE
#> [1] 1.095071
with(ev_sel2, t.test(contactnw_afw ~ treatment))
#> 
#>  Welch Two Sample t-test
#> 
#> data:  contactnw_afw by treatment
#> t = 2.2851, df = 129.37, p-value = 0.02394
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  0.03319162 0.46156370
#> sample estimates:
#> mean in group FALSE  mean in group TRUE 
#>           0.1482786          -0.0990991
# treated group decrease in contact. untreated group increase in contact. difference in difference is
# significant.

mean(ev_sel2$threat_afw)
#> [1] 0.08243341
by(ev_sel2$threat_afw, ev_sel2$treatment, function(x) sd(x))
#> ev_sel2$treatment: FALSE
#> [1] 0.5565433
#> --------------------------------------------------------------------------- 
#> ev_sel2$treatment: TRUE
#> [1] 0.5852402
with(ev_sel2, t.test(threat_afw ~ treatment))
#> 
#>  Welch Two Sample t-test
#> 
#> data:  threat_afw by treatment
#> t = 0.53467, df = 127.89, p-value = 0.5938
#> alternative hypothesis: true difference in means is not equal to 0
#> 95 percent confidence interval:
#>  -0.08330397  0.14499242
#> sample estimates:
#> mean in group FALSE  mean in group TRUE 
#>          0.08489828          0.05405405
# treated group increase in threat. untreated (less) increase in threat. difference in difference is
# not significant.

Tolsma, Jochem, Joran Laméris, and Michael Savelkoul. n.d. “Exposure to Asylum Seekers and Changing Support for the Radical Right: A Natural Experiment in the Netherlands.” PLOS ONE - (-): –. https://journals.plos.org/plosone/.

LS0tDQp0aXRsZTogIkV4cG9zdXJlIHRvIEFzeWx1bSBTZWVrZXJzIg0KYXV0aG9yOiAnW0pvY2hlbSBUb2xzbWFdKGh0dHBzOi8vd3d3LmpvY2hlbXRvbHNtYS5ubCkgLSBSYWRib3VkIFVuaXZlcnNpdHksIHRoZSBOZXRoZXJsYW5kcycNCmJpYmxpb2dyYXBoeTogcmVmZXJlbmNlcy5iaWINCmRhdGU6ICJMYXN0IGNvbXBpbGVkIG9uIGByIGZvcm1hdChTeXMudGltZSgpLCAnJUIsICVZJylgIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6ICB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KLS0tDQoNCmBgYHtyLCBnbG9iYWxzZXR0aW5ncywgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpvcHRzX2NodW5rJHNldCh0aWR5Lm9wdHM9bGlzdCh3aWR0aC5jdXRvZmY9MTAwKSx0aWR5PVRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLGNvbW1lbnQgPSAiIz4iLCBjYWNoZT1UUlVFLCBjbGFzcy5zb3VyY2U9YygidGVzdCIpLCBjbGFzcy5vdXRwdXQ9YygidGVzdDIiKSkNCm9wdGlvbnMod2lkdGggPSAxMDApDQpyZ2w6OnNldHVwS25pdHIoKQ0KDQoNCmNvbG9yaXplIDwtIGZ1bmN0aW9uKHgsIGNvbG9yKSB7DQogIGlmIChrbml0cjo6aXNfbGF0ZXhfb3V0cHV0KCkpIHsNCiAgICBzcHJpbnRmKCJcXHRleHRjb2xvcnslc317JXN9IiwgY29sb3IsIHgpDQogIH0gZWxzZSBpZiAoa25pdHI6OmlzX2h0bWxfb3V0cHV0KCkpIHsNCiAgICBzcHJpbnRmKCI8c3BhbiBzdHlsZT0nY29sb3I6ICVzOyc+JXM8L3NwYW4+IiwgY29sb3IsIA0KICAgICAgeCkNCiAgfSBlbHNlIHgNCn0NCg0KYGBgDQoNCmBgYHtyIGtsaXBweSwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCd0b3AnLCAncmlnaHQnKSkNCiNrbGlwcHk6OmtsaXBweShjb2xvciA9ICdkYXJrcmVkJykNCiNrbGlwcHk6OmtsaXBweSh0b29sdGlwX21lc3NhZ2UgPSAnQ2xpY2sgdG8gY29weScsIHRvb2x0aXBfc3VjY2VzcyA9ICdEb25lJykNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KcHJlLnRlc3Qgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgb3ZlcmZsb3cteDogYXV0bzsNCiAgbWFyZ2luOiAwcHg7DQp9DQoNCnByZS50ZXN0MiB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KICBvdmVyZmxvdy15OiBhdXRvOw0KICBvdmVyZmxvdy14OiBhdXRvOw0KICBtYXJnaW46IDBweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUNCn0NCg0KDQpoMSwgLmgxLCBoMiwgLmgyLCBoMywgLmgzIHsNCiAgICBtYXJnaW4tdG9wOiAyNHB4Ow0KfQ0KDQoNCmBgYA0KDQotLS0tDQoNClRoaXMgd2Vic2l0ZSBpcyBhIHJlcGxpY2F0aW9uIHBhY2thZ2UgZm9yIHRoZSBwYXBlciAiRXhwb3N1cmUgdG8gQXN5bHVtIFNlZWtlcnMgYW5kIENoYW5naW5nIFN1cHBvcnQgZm9yIHRoZSBSYWRpY2FsIFJpZ2h0OiBBIE5hdHVyYWwgRXhwZXJpbWVudCBpbiB0aGUgTmV0aGVybGFuZHMiIGJ5IEBUb2xzbWEyMDIwLiBJdCBjb250YWlucyBSIGNvZGUgdG8gcmVwbGljYXRlIGFsbCBUYWJsZXMgaW4gdGhlIG1hbnVzY3JpcHQuIA0KDQpVc2UgdGhlIHRvcCBtZW51IHRvIG5hdmlnYXRlIHRvIHRoZSBzZWN0aW9uIG9mIGludGVyZXN0LiBUaGUgc2VjdGlvbiByZXBsaWNhdGVzIHRoZSAqKk1haW4gVGFibGVzKiogb2YgdGhlIG1hbnVzY3JpcHQuIA0KDQpUbyBjb3B5IHRoZSBjb2RlIGNsaWNrIHRoZSBidXR0b24gaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lciBvZiB0aGUgY29kZS1jaHVua3MuIA0KDQoNCi0tLS0NCg0KIyMgRGF0YQ0KQWxsIGRhdGEgYW5kIHNjcmlwdHMgY2FuIGJlIGZvdW5kIG9uIFtHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9Kb2NoZW1Ub2xzbWEvRXhwb3N1cmVBU0MyMDIwKQ0KDQotLS0tDQoNCiMjIENvbnRhY3QNClF1ZXN0aW9ucyBjYW4gYmUgYWRkcmVzc2VkIHRvIHRoZSBmaXJzdCBhdXRob3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgYXJ0aWNsZSwgW0pvY2hlbSBUb2xzbWFdKG1haWx0bzpqLnRvbHNtYUBydS5ubCkuIA0KDQotLS0tICANCg0KIyMgQWRkaXRpb25hbCBkYXRhcHJlcCAgDQoNCldlIHN0YXJ0IHdpdGggYSBkYXRhZmlsZSBpbiBsb25nIGZvcm1hdCB3ZSBvYnRhaW5lZCBhZnRlciBwZXJmb3JtaW5nIG91ciBkYXRhcHJlcCwgc2VlIFtoZXJlXShkYXRhL2V2YXpjIHYyMjEyMjAxNy5kdGEpLiAgDQoNCi0gV2UgZGVsZXRlIG9ic2VydmF0aW9ucyBvZiByZXNwb25kZW50cyB3aGVyZSByZXNwb25kZW50cyB3ZXJlIG5vdCBhbGxvd2VkIHRvIHZvdGUgb3IgZGlkIG5vdCBnaXZlIGFuIGFuc3dlci4gIA0KLSBXZSBkZWxldGUgb2JzZXJ2YXRpb25zIHdpdGggbWlzc2luZyB2YWx1ZXMgb24gemlwY29kZSBpbmZvcm1hdGlvbi4gIA0KLSBXZSBkZWxldGUgcmVzcG9uZGVudHMgd2l0aCBvbmx5IG9uZSBvYnNlcnZhdGlvbi4gIA0KLSBXZSBjb25zdHJ1Y3QgdGhlIGRpY2hvdG9tb3VzIGRlcGVuZGVudCB2YXJpYWJsZS4gIA0KLSBXZSBjb25zdHJ1Y3QgdGhlIG11bHRpbm9taWFsIGRlcGVuZGVudCB2YXJpYWJsZS4gDQotIFdlIGRlY2lkZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHJvYnVzdG5lc3MgY2hlY2tzIGFuZCBuZWVkIHRvIG1hdGNoIG1vcmUgcmF3IGRhdGEgb24gY3Jpc2lzIEFTQy4gDQoNCg0KYGBge3IsIHJlc3VsdHM9J2hpZGUnLCBjbGFzcy5zb3VyY2U9YygidGVzdCIpfQ0Kcm0obGlzdD1scygpKQ0KDQpsaWJyYXJ5KGhhdmVuKQ0KDQpkYXRhc2V0IDwtIHJlYWRfc3RhdGEoImRhdGEvZXZhemMgdjIyMTIyMDE3LmR0YSIpDQoNCiNkZXBlbmRlbnQgdmFyaWFibGUuDQojZGVsZXRlIG5vdCBhbGxvd2VkIHRvIHZvdGUNCnRhYmxlKGRhdGFzZXQkdm90ZSwgdXNlTkEgPSAiYWx3YXlzIikNCnN1bSh0YWJsZShkYXRhc2V0JHZvdGUsIHVzZU5BID0gImFsd2F5cyIpKQ0KZGF0YXNldCA8LSBkYXRhc2V0W2RhdGFzZXQkdm90ZSE9MTYsXQ0KZGF0YXNldCA8LSBkYXRhc2V0W2RhdGFzZXQkdm90ZSE9MTcsXQ0KI2FkZCAnVk5MJyB0byBvdGhlciBwYXJ0eQ0KZGF0YXNldCR2b3RlW2RhdGFzZXQkdm90ZT09MTJdIDwtIDE4DQojIjEiPSJ2dmQiLCAiMiI9InB2ZGEiLCAiMyI9InB2diIsICI0Ij0iY2RhIiwgIjUiPSJzcCINCiMiNiI9ImQ2NiIsICI3Ij0iZ2wiLCAiOCI9ImN1IiwgIjkiPSJzZ3AiLCAiMTAiPSJkaWVyIg0KIyIxMSI9IjUwcGx1cyIsICIxMiI9InZubCIsIjEzPSJibGFuY28iLCIxNCI9ImRvbnRrbm93IiwiMTU9Im5vIHZvdGUiLCAiMTgiPSJvdGhlciINCiNkZWZpbmUgZGljaG90b21vdXMgZGVwZW5kZW50IHZhcmlhYmxlDQpkYXRhc2V0JHlfcHZ2IDwtIGlmZWxzZShkYXRhc2V0JHZvdGU9PTMsIDEsIDApDQojZGVmaW5lIG11bHRpbm9taWFsIGRlcGVuZGVudCB2YXJpYWJsZQ0KZGF0YXNldCR2b3RlX3J3c3AgPC0gTkENCmRhdGFzZXQkdm90ZV9yd3NwW2RhdGFzZXQkdm90ZT09MiB8IGRhdGFzZXQkdm90ZT09NiB8IGRhdGFzZXQkdm90ZT09NyB8IGRhdGFzZXQkdm90ZT09OCB8IGRhdGFzZXQkdm90ZT09MTAgfCBkYXRhc2V0JHZvdGU9PTExIHwgZGF0YXNldCR2b3RlPT0xMiB8IGRhdGFzZXQkdm90ZT09MThdIDwtIDAgI290aGVyDQpkYXRhc2V0JHZvdGVfcndzcFtkYXRhc2V0JHZvdGU9PTEgfCBkYXRhc2V0JHZvdGU9PTQgfCBkYXRhc2V0JHZvdGU9PTldIDwtIDEgIyByaWdodC13aW5nDQpkYXRhc2V0JHZvdGVfcndzcFtkYXRhc2V0JHZvdGU9PTVdIDwtIDIgIyBhbnRpLWVzdGFibGlzaG1lbnQgDQpkYXRhc2V0JHZvdGVfcndzcFtkYXRhc2V0JHZvdGU9PTEzIHwgZGF0YXNldCR2b3RlPT0xNCB8IGRhdGFzZXQkdm90ZT09MTVdIDwtIDMgI2RlbW9iaWxpemVkDQpkYXRhc2V0JHZvdGVfcndzcFtkYXRhc2V0JHZvdGU9PTNdIDwtIDQNCiMgMTogcmlnaHQtd2luZzsgMjogYW50aS1lc3RhYmxpc2htZW50OyAzOiBkZW1vYmlsaXplZDsgMDogb3RoZXI7IDQ6IFBWVg0KDQojZGVsZXRlIHJlc3BvbmRlbnRzIHdpdGggbWlzc2luZyBkYXRhIG9uIHppcGNvZGUNCnN1bShpcy5uYShkYXRhc2V0JHBjNCkpDQpkYXRhc2V0IDwtIGRhdGFzZXRbIWlzLm5hKGRhdGFzZXQkcGM0KSxdDQoNCiNkZWxldGUgcmVzcG9uZGVudHMgd2l0aCBvbmx5IG9uZSBvYnNlcnZhdGlvbi4NCmRhdGFzZXQkb25lIDwtIDEgDQp0ZXN0IDwtIGFnZ3JlZ2F0ZShkYXRhc2V0JG9uZSwgYnk9bGlzdChkYXRhc2V0JFBhbmVsaXN0SWRRdWVzdGlvbiksIEZVTj1zdW0pDQpuYW1lcyh0ZXN0KSA8LSBjKCJQYW5lbGlzdElkUXVlc3Rpb24iLCAibmNhc2VzIikNCmRhdGFzZXQgPC0gbWVyZ2UoZGF0YXNldCwgdGVzdCkNCnRhYmxlKGRhdGFzZXQkbmNhc2VzKQ0KZGF0YXNldCA8LSBkYXRhc2V0W2RhdGFzZXQkbmNhc2VzIT0xLF0NCg0KI3JlY29kZSB0aWpkL3RpbWUgdmFyaWFibGUNCnRhYmxlKGRhdGFzZXQkdGlqZCwgdXNlTkEgPSAiYWx3YXlzIikNCmRhdGFzZXQkdGlqZCA8LSBkYXRhc2V0JHRpamQgLSAxDQoNCiNjYXBhY2l0eSBvZiBBU0MNCiNzMSBpcyByZWd1bGFyLCBzMj10ZW1wb3JhcnksIHMzPWNyaXNpcywgczEyMz10b3RhbA0KZGF0YXNldCRzMXBjNCA8LSBpZmVsc2UoZGF0YXNldCR0aWpkPT0wLCBkYXRhc2V0JHMxY2FwX3BjNHQxcmVsLGRhdGFzZXQkczFjYXBfcGM0dDJyZWwpDQpkYXRhc2V0JHMycGM0IDwtIGlmZWxzZShkYXRhc2V0JHRpamQ9PTAsIGRhdGFzZXQkczJjYXBfcGM0dDFyZWwsZGF0YXNldCRzMmNhcF9wYzR0MnJlbCkNCmRhdGFzZXQkczNwYzQgPC0gaWZlbHNlKGRhdGFzZXQkdGlqZD09MCwgZGF0YXNldCRzM2NhcF9wYzR0MXJlbCxkYXRhc2V0JHMzY2FwX3BjNHQycmVsKQ0KZGF0YXNldCRzMTIzcGM0IDwtIGRhdGFzZXQkczFwYzQgKyBkYXRhc2V0JHMycGM0ICsgZGF0YXNldCRzM3BjNA0KDQojY29tcHV0ZSB2YXJpYWJsZXMgZm9yIGh5YnJpZCBtb2RlbDogd2l0aGluIGluZGl2aWR1YWwgbWVhbnMgKGJldHdlZW4gdmFycykgYW5kIGRldmlhdGlvbnMgZnJvbSBtZWFuICh3aXRoaW4gdmFycykuIA0KdGVzdCA8LSBhZ2dyZWdhdGUoZGF0YXNldFssYygiY29udGFjdG53IiwgInRocmVhdCIsICJzMTIzcGM0IiwgInMxcGM0IiwgInMycGM0IiwgInMzcGM0IiwgInlfcHZ2IiwgInZvdGVfcndzcCIgKV0sIGJ5PWxpc3QoZGF0YXNldCRQYW5lbGlzdElkUXVlc3Rpb24pLCBGVU49bWVhbikNCm5hbWVzKHRlc3QpIDwtIGMoIlBhbmVsaXN0SWRRdWVzdGlvbiIsICJjb250YWN0bndfbWVhbiIsICJ0aHJlYXRfbWVhbiIsICAgICJzMTIzcGM0X21lYW4iICwgICJzMXBjNF9tZWFuIiAsICAgICJzMnBjNF9tZWFuIiAsICAgICJzM3BjNF9tZWFuIiAsICAgICJ5X3B2dl9tZWFuIiwgInZvdGVfcndzcF9tZWFuIikNCmRhdGFzZXQgPC0gbWVyZ2UoZGF0YXNldCwgdGVzdCkNCmRhdGFzZXQkY29udGFjdG53X2FmdyA9IGRhdGFzZXQkY29udGFjdG53IC0gZGF0YXNldCRjb250YWN0bndfbWVhbg0KZGF0YXNldCR0aHJlYXRfYWZ3ID0gZGF0YXNldCR0aHJlYXQgLSBkYXRhc2V0JHRocmVhdF9tZWFuDQpkYXRhc2V0JHMxMjNwYzRfYWZ3ID0gZGF0YXNldCRzMTIzcGM0IC0gZGF0YXNldCRzMTIzcGM0X21lYW4NCmRhdGFzZXQkczFwYzRfYWZ3ID0gZGF0YXNldCRzMXBjNCAtIGRhdGFzZXQkczFwYzRfbWVhbg0KZGF0YXNldCRzMnBjNF9hZncgPSBkYXRhc2V0JHMycGM0IC0gZGF0YXNldCRzMnBjNF9tZWFuDQpkYXRhc2V0JHMzcGM0X2FmdyA9IGRhdGFzZXQkczNwYzQgLSBkYXRhc2V0JHMzcGM0X21lYW4NCg0KI2NyZWF0ZSBmaWx0ZXIgdmFycyBmb3IgYW5hbHlzZXM6IGZlIGlzIGZpeGVkIGVmZmVjdHMsIGZlbSBpcyBmaXhlZCBlZmZlY3RzIG11bHRpbm9taWFsDQpkYXRhc2V0JHNlbF9mZSA9IChkYXRhc2V0JHlfcHZ2ICE9IGRhdGFzZXQkeV9wdnZfbWVhbikNCmRhdGFzZXQkc2VsX2ZlbSA9IChkYXRhc2V0JHZvdGVfcndzcCAhPSBkYXRhc2V0JHZvdGVfcndzcF9tZWFuKQ0KZGF0YXNldCRzZWxfczEyM3BjNCA9IChkYXRhc2V0JHMxMjNwYzQgIT0gZGF0YXNldCRzMTIzcGM0X21lYW4pDQoNCiNtYXRjaCBhZGRpdGlvbmFsIGRhdGEgb24gY3Jpc2lzIEFTQw0KI3RoZXNlIGRhdGEgaGF2ZSBiZWVuIGFkZGVkIGluIGEgbGF0ZXIgcGhhc2UgDQpkdXVyIDwtIHJlYWQuY3N2MigiZGF0YS9BZHJlc3NlbiBhbGxlIEFaQ3NfMTcwMjIwMTcuY3N2IikNCm5hbWVzKGR1dXIpDQpkdXVyIDwtIGR1dXJbLGMoIlBDNCIsICJTb29ydCIsICJDYXBfR2VtIiwgIkR1dXIudG90LjQuMTEiKV0NCm5hbWVzKGR1dXIpIDwtIGMoInBjNCIsICJzb29ydCIsICJjYXAiLCAiZHV1ciIpDQpkdXVyIDwtIGR1dXJbZHV1ciRzb29ydD09MyxdDQpzb3J0KHVuaXF1ZShkdXVyJHBjNFtkdXVyJGNhcD4wXSkpDQoNCiN3ZSBhcmUgbXVsdGlwbHlpbmcgbGVuZ3RoIG9mIHN0YXkgd2l0aCBudW1iZXIgb2YgQVMNCmR1dXIkczNfYWx0b3AgPC0gZHV1ciRkdXVyICogZHV1ciRjYXANCmR1dXIyIDwtIGFnZ3JlZ2F0ZShkdXVyWyxjKCJjYXAiLCAiZHV1ciIsICJzM19hbHRvcCIpXSwgYnk9bGlzdChkdXVyJHBjNCksIEZVTj1zdW0pDQpkdXVyMg0KbmFtZXMoZHV1cjIpWzFdIDwtIGMoInBjNCIpDQoNCmRhdGFzZXQgPC0gbWVyZ2UoZGF0YXNldCwgZHV1cjIsIGFsbC54PVQpDQpkYXRhc2V0JGR1dXJbaXMubmEoZGF0YXNldCRkdXVyKV0gPC0gMA0KZGF0YXNldCRzM19hbHRvcFtpcy5uYShkYXRhc2V0JHMzX2FsdG9wKV0gPC0gMA0KZGF0YXNldCRjYXBbaXMubmEoZGF0YXNldCRjYXApXSA8LSAwDQoNCiNhc3lsdW0gc2Vla2VycyBpbiBjcmlzaXMgY2VudGVycyBwZXIgMTAwMCBpbmhhYml0YW50cyB3ZWlnaHRlZCBieSBsZW5ndGggb2Ygc3RheQ0KZGF0YXNldCRzM19hbHRvcDIgPC0gMTAwMCAqIGRhdGFzZXQkczNfYWx0b3AgLyAoZGF0YXNldCRpbncyMDE0X3BjNCAqIGRhdGFzZXQkcGF1dG8yMDE0X3BjNCkNCmRhdGFzZXQkY2FwMiA8LSAxMDAwICogZGF0YXNldCRjYXAgLyAoZGF0YXNldCRpbncyMDE0X3BjNCAqIGRhdGFzZXQkcGF1dG8yMDE0X3BjNCkNCmRhdGFzZXQkczNfYWx0b3AgPC0gMTAwMCAqIGRhdGFzZXQkczNfYWx0b3AgLyBkYXRhc2V0JGludzIwMTRfcGM0DQpkYXRhc2V0JGNhcCA8LSAxMDAwICogZGF0YXNldCRjYXAgLyBkYXRhc2V0JGludzIwMTRfcGM0DQoNCg0KYGBgDQoNCg0KDQoNCi0tLSAgDQoNCg0KDQojIyBUYWJsZSAxIHsudGFic2V0IC50YWJzZXQtZmFkZX0NCg0KIyMjIEZpeGVkIGVmZmVjdHMgc2FtcGxlICANCg0KYGBge3IsIHJlc3VsdHM9ImhvbGQifQ0KbGlicmFyeShwc3ljaCkNCnJlcXVpcmUoRFQpIA0KDQpkYXRhc2V0X3NlbCA8LSBkYXRhc2V0W2RhdGFzZXQkc2VsX2ZlPT0xLF0NCiN0YWJsZShkYXRhc2V0X3NlbCR5X3B2diwgZGF0YXNldF9zZWwkdGlqZCkNCnByb3AudGFibGUodGFibGUoZGF0YXNldF9zZWwkeV9wdnYsIGRhdGFzZXRfc2VsJHRpamQpLCBtYXJnaW49MikNCg0KI2Rlc2NyaWJlQnkoZGF0YXNldF9zZWxbLGMoInMxMjNwYzQiLCAiczFwYzQiLCAiczJwYzQiLCAiczNwYzQiLCAidGhyZWF0IiwgImNvbnRhY3RudyIsICJzMTIzcGM0X2FmdyIsICJzMXBjNF9hZnciLCAiczJwYzRfYWZ3IiwgInMzcGM0X2FmdyIsICJ0aHJlYXRfYWZ3IiwgImNvbnRhY3Rud19hZnciKV0sIGdyb3VwPWRhdGFzZXRfc2VsJHRpamQpDQoNCg0KdGVzdCA8LSBkZXNjcmliZUJ5KGRhdGFzZXRfc2VsWyxjKCJzMTIzcGM0IiwgInMxcGM0IiwgInMycGM0IiwgInMzcGM0IiwgInRocmVhdCIsICJjb250YWN0bnciLCAiczEyM3BjNF9hZnciLCAiczFwYzRfYWZ3IiwgInMycGM0X2FmdyIsICJzM3BjNF9hZnciLCAidGhyZWF0X2FmdyIsICJjb250YWN0bndfYWZ3IildLCBncm91cD1kYXRhc2V0X3NlbCR0aWpkKQ0KI2thYmxlKHJvdW5kKHRlc3RbWzFdXSwyKSwgY2FwdGlvbj0iVGltZSAxIikNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgcmVzdWx0cz0iYXNpcyJ9DQpkYXRhdGFibGUocm91bmQodGVzdFtbMV1dLDIpLCBjYXB0aW9uPSJUaW1lIDEiKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCByZXN1bHRzPSJhc2lzIn0NCmRhdGF0YWJsZShyb3VuZCh0ZXN0W1syXV0sMiksIGNhcHRpb249IlRpbWUgMiIpDQpgYGANCg0KDQoqIHJlc3BvbmRlbnRzIGluIEZFIHNhbXBsZTogYHIgbGVuZ3RoKHVuaXF1ZShkYXRhc2V0X3NlbCRQYW5lbGlzdElkUXVlc3Rpb24pKWAgIA0KKiB6aXBjb2RlcyBpbiBGRSBzYW1wbGU6IGByIGxlbmd0aCh1bmlxdWUoZGF0YXNldF9zZWwkcGM0KSlgICANCiogcmVzcG9uZGVudHMgZXhwZXJpZW5jaW5nIGNoYW5nZSBpbiBGRSBzYW1wbGU6IGByIGxlbmd0aCh1bmlxdWUoZGF0YXNldF9zZWwkUGFuZWxpc3RJZFF1ZXN0aW9uW2RhdGFzZXRfc2VsJHMxMjNwYzQhPWRhdGFzZXRfc2VsJHMxMjNwYzRfbWVhbl0pKWAgIA0KKiB6aXBjb2RlcyBleHBlcmllbmNpbmcgY2hhbmdlIGluIEZFIHNhbXBsZTogYHIgbGVuZ3RoKHVuaXF1ZShkYXRhc2V0X3NlbCRwYzRbZGF0YXNldF9zZWwkczEyM3BjNCE9ZGF0YXNldF9zZWwkczEyM3BjNF9tZWFuXSkpYA0KDQotLS0gIA0KDQoNCiMjIyBoeWJyaWQgbW9kZWwgc2FtcGxlDQoNCmBgYHtyLCByZXN1bHRzPSJob2xkIn0NCg0KdGFibGUoZGF0YXNldCR5X3B2diwgZGF0YXNldCR0aWpkKQ0KcHJvcC50YWJsZSh0YWJsZShkYXRhc2V0JHlfcHZ2LCBkYXRhc2V0JHRpamQpLCBtYXJnaW49MikNCg0KZGVzY3JpYmVCeShkYXRhc2V0WyxjKCJzMTIzcGM0IiwgInMxcGM0IiwgInMycGM0IiwgInMzcGM0IiwgInRocmVhdCIsICJjb250YWN0bnciLCAiczEyM3BjNF9hZnciLCAiczFwYzRfYWZ3IiwgInMycGM0X2FmdyIsICJzM3BjNF9hZnciLCAidGhyZWF0X2FmdyIsICJjb250YWN0bndfYWZ3IildLCBncm91cD1kYXRhc2V0JHRpamQpDQoNCg0KcHJpbnQoInJlc3BvbmRlbnRzIGluIGh5YnJpZCBzYW1wbGUiKQ0KbGVuZ3RoKHVuaXF1ZShkYXRhc2V0JFBhbmVsaXN0SWRRdWVzdGlvbikpDQoNCnByaW50KCJ6aXBjb2RlcyBpbiBGRSBzYW1wbGUiKQ0KbGVuZ3RoKHVuaXF1ZShkYXRhc2V0JHBjNCkpDQoNCnByaW50KCJyZXNwb25kZW50cyBleHBlcmllbmNpbmcgY2hhbmdlIGluIEZFIHNhbXBsZSIpDQpsZW5ndGgodW5pcXVlKGRhdGFzZXQkUGFuZWxpc3RJZFF1ZXN0aW9uW2RhdGFzZXQkczEyM3BjNCE9ZGF0YXNldCRzMTIzcGM0X21lYW5dKSkNCg0KcHJpbnQoInppcGNvZGVzIGV4cGVyaWVuY2luZyBjaGFuZ2UgaW4gRkUgc2FtcGxlIikNCmxlbmd0aCh1bmlxdWUoZGF0YXNldCRwYzRbZGF0YXNldCRzMTIzcGM0IT1kYXRhc2V0JHMxMjNwYzRfbWVhbl0pKQ0KDQpgYGANCi0tLSANCg0KIyMgVGFibGUgMiB7LnRhYnNldCAudGFic2V0LWZhZGV9DQoNCmBgYHtyLCByZXN1bHRzPSJoaWRlIn0NCnJlcXVpcmUoc3Vydml2YWwpDQpldl9zZWwgPC0gZGF0YXNldF9zZWwgDQptMSA8LSBjbG9naXQoeV9wdnYgfiBzMTIzcGM0ICsgdGlqZCArIHN0cmF0YShQYW5lbGlzdElkUXVlc3Rpb24pLCBkYXRhPWV2X3NlbCkNCnN1bW1hcnkobTEpDQoNCiN2aWEgZGlmZmVyZW50IGVzdGltYXRpb24gb2YgZml4ZWQgZWZmZWN0cyBtb2RlbCAoYSBmaXJzdCBkaWZmZXJlbmNlIGRlc2lnbikNCiNvbmx5IHNlbGVjdCB5X29ic2VydmF0aW9uIGF0IHRpbWVwb2ludCAyDQpldl9zZWwyIDwtIGV2X3NlbFtldl9zZWwkdGlqZD09MSxdDQojbmVlZCB0byBtdWx0aXBseSBfYWZ3IHdpdGggMiAodGh1cyBiZWNvbWVzIHQyLXQxLCBpbnN0ZWFkIG9mIHQyIC0gbWVhbih0Mix0MSkNCmV2X3NlbDIkczEyM3BjNF9hZncgPC0gMipldl9zZWwyJHMxMjNwYzRfYWZ3DQpldl9zZWwyJHMxcGM0X2FmdyA8LSAyKmV2X3NlbDIkczFwYzRfYWZ3DQpldl9zZWwyJHMycGM0X2FmdyA8LSAyKmV2X3NlbDIkczJwYzRfYWZ3DQpldl9zZWwyJHMzcGM0X2FmdyA8LSAyKmV2X3NlbDIkczNwYzRfYWZ3DQpldl9zZWwyJHRocmVhdF9hZncgPC0gMipldl9zZWwyJHRocmVhdF9hZncNCmV2X3NlbDIkY29udGFjdG53X2FmdyA8LSAyKmV2X3NlbDIkY29udGFjdG53X2Fmdw0KDQptMV9hbHQxIDwtIGdsbSh5X3B2diB+IHMxMjNwYzRfYWZ3ICwgZGF0YT1ldl9zZWwyLCBmYW1pbHk9Ymlub21pYWwpDQptMV9hbHQyIDwtIGdsbSh5X3B2diB+IHMxcGM0X2FmdyArIHMycGM0X2FmdyArIHMzcGM0X2FmdyAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KbTFfYWx0MyA8LSBnbG0oeV9wdnYgfiBzMXBjNF9hZncgKyBzMnBjNF9hZncgKyBzM3BjNF9hZncgKyBjb250YWN0bndfYWZ3ICsgdGhyZWF0X2FmdyAsIGRhdGE9ZXZfc2VsMiwgZmFtaWx5PWJpbm9taWFsKQ0KDQpgYGANCg0KIyMjIG1vZGVsIDENCg0KYGBge3IsIGVjaG89RkFMU0V9DQpzdW1tYXJ5KG0xX2FsdDEpDQpgYGANCg0KLS0tICANCg0KIyMjIG1vZGVsIDINCg0KYGBge3IsIGVjaG89RkFMU0V9DQpzdW1tYXJ5KG0xX2FsdDIpDQpgYGANCg0KLS0tICANCg0KDQojIyMgbW9kZWwgMw0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnN1bW1hcnkobTFfYWx0MykNCmBgYA0KDQoNCi0tLSAgDQoNCg0KIyMgVGFibGUgMyB7LnRhYnNldCAudGFic2V0LWZhZGV9DQoNCmBgYHtyLCByZXN1bHRzPSJoaWRlIn0NCnJlcXVpcmUoc2FuZHdpY2gpDQpyZXF1aXJlKGxtdGVzdCkNCmV2IDwtIGRhdGFzZXQNCg0KIyNoeWJyaWQgbW9kZWwgDQojYmVjYXVzZSB3ZSBpbmNsdWRlIGV0aG5pYyBkZW5zaXR5IG9mIE5CIGFuZCBTRVMgb2YgTkIgbmVlZCB0byByZW1vdmUgbWlzc2luZyB2YWx1ZXMuDQoNCiNzdW0oaXMubmEoZXYkcG53YWwyMDE0X3BjNCkpDQpldl9zZWw0IDwtIGV2WyFpcy5uYShldiRwbndhbDIwMTRfcGM0KSxdDQojbG9zdCA5MCByZXNwb25kZW50cw0KDQpldl9zZWw0IDwtIGV2X3NlbDRbIShldl9zZWw0JHdvejIwMTJfcGM0PT0wKSxdDQojbG9zdCAyMiByZXNwb25kZW50cw0KZXZfc2VsNCA8LSBldl9zZWw0WyFpcy5uYShldl9zZWw0JHdvejIwMTJfcGM0KSxdDQojbG9zdCAzIHJlc3BvbmRlbnRzDQoNCiNjZW50ZXIgdmFyaWFibGVzISANCmV2X3NlbDQkYWdlX2MgPC0gZXZfc2VsNCRhZ2UgLSBtZWFuKGV2X3NlbDQkYWdlKQ0KZXZfc2VsNCRlZHVjX2MgPC0gZXZfc2VsNCRlZHVjIC0gbWVhbihldl9zZWw0JGVkdWMpDQpldl9zZWw0JHBud2FsMjAxNF9wYzRfYyA8LSBldl9zZWw0JHBud2FsMjAxNF9wYzQgLSBtZWFuKGV2X3NlbDQkcG53YWwyMDE0X3BjNCkNCmV2X3NlbDQkd296MjAxMl9wYzRfYyA8LSBldl9zZWw0JHdvejIwMTJfcGM0IC0gbWVhbihldl9zZWw0JHdvejIwMTJfcGM0KQ0KDQojcnVuIG1vZGVscw0KbTFoIDwtIGdsbSh5X3B2diB+IHRpamQgKyBzMTIzcGM0X2FmdyArIHMxMjNwYzRfbWVhbiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZGF0YT1ldl9zZWw0LCBmYW1pbHk9Ymlub21pYWwpDQptMmggPC0gZ2xtKHlfcHZ2IH4gdGlqZCArIHMxcGM0X2FmdyArIHMycGM0X2FmdyArIHMzcGM0X2FmdyArIHMxcGM0X21lYW4gKyBzMnBjNF9tZWFuICsgczNwYzRfbWVhbiArIGdlbmRlciArIGFnZV9jICsgZWR1Y19jICsgcG53YWwyMDE0X3BjNF9jICsgd296MjAxMl9wYzRfYywgZGF0YT1ldl9zZWw0LCBmYW1pbHk9Ymlub21pYWwpDQptM2ggPC0gZ2xtKHlfcHZ2IH4gdGlqZCArIHMxcGM0X2FmdyArIHMycGM0X2FmdyArIHMzcGM0X2FmdyArIHMxcGM0X21lYW4gKyBzMnBjNF9tZWFuICsgczNwYzRfbWVhbiArIHRocmVhdF9tZWFuICsgY29udGFjdG53X21lYW4gKyBnZW5kZXIgKyBhZ2VfYyArIGVkdWNfYyArIHBud2FsMjAxNF9wYzRfYyArIHdvejIwMTJfcGM0X2MsIGRhdGE9ZXZfc2VsNCwgZmFtaWx5PWJpbm9taWFsKQ0KbTRoIDwtIGdsbSh5X3B2diB+IHRpamQgKyBzMXBjNF9hZncqcG53YWwyMDE0X3BjNF9jICsgczJwYzRfYWZ3KnBud2FsMjAxNF9wYzRfYyArIHMzcGM0X2FmdypwbndhbDIwMTRfcGM0X2MgKyBzMXBjNF9tZWFuICsgczJwYzRfbWVhbiArIHMzcGM0X21lYW4gKyB0aHJlYXRfbWVhbiArIGNvbnRhY3Rud19tZWFuICsgZ2VuZGVyICsgYWdlX2MgKyBlZHVjX2MgKyB3b3oyMDEyX3BjNF9jLCBkYXRhPWV2X3NlbDQsIGZhbWlseT1iaW5vbWlhbCkNCg0KDQojIHN1bW1hcnkobTFoKQ0KIyBzdW1tYXJ5KG0yaCkNCiMgc3VtbWFyeShtM2gpDQojIA0KIyBjb2VmdGVzdChtMWgsIHZjb3YgPSB2Y292Q0wobTFoLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKQ0KIyBjb2VmdGVzdChtMmgsIHZjb3YgPSB2Y292Q0wobTJoLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKQ0KIyBjb2VmdGVzdChtM2gsIHZjb3YgPSB2Y292Q0wobTNoLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKQ0KYGBgDQoNCiMjIyBtb2RlbCAxICANCmBgYHtyLCBlY2hvPUZBTFNFfQ0Kcm91bmQoY29lZnRlc3QobTFoLCB2Y292ID0gdmNvdkNMKG0xaCwgY2x1c3RlciA9IH4gUGFuZWxpc3RJZFF1ZXN0aW9uKSksIDMpDQpgYGANCg0KLS0tICANCg0KIyMjIG1vZGVsIDIgIA0KYGBge3IsIGVjaG89RkFMU0V9DQpyb3VuZChjb2VmdGVzdChtMmgsIHZjb3YgPSB2Y292Q0wobTJoLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykgDQpgYGANCg0KLS0tICANCg0KIyMjIG1vZGVsIDMgIA0KYGBge3IsIGVjaG89RkFMU0V9DQpyb3VuZChjb2VmdGVzdChtM2gsIHZjb3YgPSB2Y292Q0wobTNoLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCmBgYA0KDQoNCi0tLSANCg0KIyMjIE1vZGVsIDQ6IG5vIGludGVyYWN0aW9uIHdpdGggZXRobmljIGRlbnNpdHkNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpyb3VuZChjb2VmdGVzdChtNGgsIHZjb3YgPSB2Y292Q0wobTRoLCBjbHVzdGVyID0gfiBQYW5lbGlzdElkUXVlc3Rpb24pKSwgMykNCmBgYA0KDQotLS0gDQoNCg0KIyMgSW5mbG93IGFzeWx1bSBzZWVrZXJzIG5vdCByZWxhdGVkIHRvIFBWViBzdXBwb3J0IFQxLiB7LnRhYnNldCAudGFic2V0LWZhZGV9DQoNCkluIG91ciBtYW51c2NyaXB0IHdlIHN0YXRlIHRoZSBmb2xsb3dpbmc6IA0KDQo+IFZvdGVycyBvZiBuZWlnaGJvdXJob29kcyB0aGF0IHdvdWxkIGV4cGVyaWVuY2UgYW4gaW5mbG93IG9mIGFzeWx1bSBzZWVrZXJzIGRpZCBub3QgZGlmZmVyIHdpdGggcmVzcGVjdCB0byByYWRpY2FsIHJpZ2h0IHN1cHBvcnQgZnJvbSB2b3RlcnMgdGhhdCB3b3VsZCBub3QgZXhwZXJpZW5jZSBhbiBpbmZsb3cgb2YgcmVmdWdlZXM6IHByZS1jcmlzZXMgc3VwcG9ydCBmb3IgdGhlIFBWViBmb3IgYm90aCB0aGUg4oCYdHJlYXRlZOKAmSBhbmQg4oCYdW50cmVhdGVk4oCZIGdyb3VwcyB3YXMgYXBwcm94aW1hdGVseSAxNyUuDQoNCiMjIyBkaWNodG9tZW91cyB0cmVhdG1lbnQgdmFyaWFibGUgKHRvdGFsIGV4cG9zdXJlKQ0KYGBge3IsIHJlc3VsdHM9J2hvbGQnfQ0KI2RlZmluZSB0cmVhdG1lbnQgdmFyaWFibGU6IHdoZXRoZXIgdGhlcmUgaGFzIGJlZW4gYW4gaW5jcmVhc2UgaW4gdG90YWwgYXN5bHVtIHNlZWtlcnMuICANCmRhdGFzZXQkdHJlYXRtZW50IDwtIGlmZWxzZShkYXRhc2V0JHRpamQ9PTEsIGFzLm51bWVyaWMoZGF0YXNldCRzMTIzcGM0X2Fmdz4wKSwgYXMubnVtZXJpYyhkYXRhc2V0JHMxMjNwYzRfYWZ3PDApKQ0KDQojY2hlY2sgaWYgdHJlYXRtZW50IGlzIG5vdCBjb3JyZWxhdGVkIHdpdGggcHJldHJlYXRtZW50IG91dGNvbWUNCnRlc3QgPC0gdGFibGUoZGF0YXNldCR0cmVhdG1lbnRbZGF0YXNldCR0aWpkPT0wXSxkYXRhc2V0JHlfcHZ2W2RhdGFzZXQkdGlqZD09MF0pDQpkaW1uYW1lcyh0ZXN0KVtbMV1dIDwtIGMoInRyZWF0bWVudCBOTyIsICJ0cmVhdG1lbnQgWUVTIiApDQpkaW1uYW1lcyh0ZXN0KVtbMl1dIDwtIGMoIlBWViBOTyIsICJQVlYgWUVTIiApDQp0ZXN0DQpwcm9wLnRhYmxlKHRlc3QsIG1hcmdpbj0xKQ0KdGVzdDEgPC0gZ2xtKHlfcHZ2IH4gdHJlYXRtZW50LCBmYW1pbHk9Ymlub21pYWwsIGRhdGE9ZGF0YXNldFtkYXRhc2V0JHRpamQ9PTAsXSkNCnN1bW1hcnkodGVzdDEpDQoNCmBgYA0KVGhpcyBpcyB3aGF0IHdlIHJlcG9ydCBpbiB0aGUgbWFudXNjcmlwdC4gIA0KDQotIE5vIHNlbGVjdGl2ZSB0cmVhdG1lbnQhICANCi0gQW1vbmcgYm90aCBncm91cHMsIFBWViBzdXBwb3J0IGp1c3QgYmVsb3cgMTclDQoNCi0tLSAgDQoNCg0KIyMjIGNvbnRpbnVvdXMgdHJlYXRtZW50IHZhcmlhYmxlICh0b3RhbCBleHBvc3VyZSkNCg0KYGBge3IsIHJlc3VsdHM9J2hvbGQnfQ0KI2RlZmluZSB0cmVhdG1lbnQgdmFyaWFibGU6IHdoZXRoZXIgdGhlcmUgaGFzIGJlZW4gYW4gaW5jcmVhc2UgaW4gdG90YWwgYXN5bHVtIHNlZWtlcnMuICANCmRhdGFzZXQkdHJlYXRtZW50X2MgPC0gaWZlbHNlKGRhdGFzZXQkdGlqZD09MSwgZGF0YXNldCRzMTIzcGM0X2FmdywgLSBkYXRhc2V0JHMxMjNwYzRfYWZ3KQ0KDQojY2hlY2sgaWYgdHJlYXRtZW50IGlzIG5vdCBjb3JyZWxhdGVkIHdpdGggcHJldHJlYXRtZW50IG91dGNvbWUNCnN1bW1hcnkoZ2xtKHlfcHZ2IH4gdHJlYXRtZW50X2MsIGZhbWlseT1iaW5vbWlhbCwgZGF0YT1kYXRhc2V0W2RhdGFzZXQkdGlqZD09MCxdKSkNCg0KYGBgDQpDb25jbHVzaW9uOiBObyBzZWxlY3Rpdml0eSBpbiB0cmVhdG1lbnQgd2l0aCByZXNwZWN0IHRvIHByZS1jcmlzaXMgUFZWIHN1cHBvcnQNCg0KLS0tICANCg0KIyMjIGRpY2h0b21lb3VzIHRyZWF0bWVudCB2YXJpYWJsZSAoY3Jpc2lzIGV4cG9zdXJlKQ0KYGBge3IsIHJlc3VsdHM9J2hvbGQnfQ0KI2RlZmluZSB0cmVhdG1lbnQgdmFyaWFibGUgYmFzZWQgb24gY3Jpc2lzIEFTQyBvbmx5OiB3aGV0aGVyIHRoZXJlIGhhcyBiZWVuIGFuIGluY3JlYXNlIGluIGNyaXNpcyBhc3lsdW0gc2Vla2Vycy4gDQpkYXRhc2V0JHRyZWF0bWVudDIgPC0gaWZlbHNlKGRhdGFzZXQkdGlqZD09MSwgYXMubnVtZXJpYyhkYXRhc2V0JHMzcGM0X2Fmdz4wKSwgYXMubnVtZXJpYyhkYXRhc2V0JHMzcGM0X2FmdzwwKSkNCiNjaGVjayBpZiB0cmVhdG1lbnQyIGlzIG5vdCBjb3JyZWxhdGVkIHdpdGggcHJldHJlYXRtZW50IG91dGNvbWUNCnRlc3QgPC0gdGFibGUoZGF0YXNldCR0cmVhdG1lbnQyW2RhdGFzZXQkdGlqZD09MF0sZGF0YXNldCR5X3B2dltkYXRhc2V0JHRpamQ9PTBdKQ0KZGltbmFtZXModGVzdClbWzFdXSA8LSBjKCJ0cmVhdG1lbnQgTk8iLCAidHJlYXRtZW50IFlFUyIgKQ0KZGltbmFtZXModGVzdClbWzJdXSA8LSBjKCJQVlYgTk8iLCAiUFZWIFlFUyIgKQ0KdGVzdA0KcHJvcC50YWJsZSh0ZXN0LCBtYXJnaW49MSkNCnRlc3QyIDwtIGdsbSh5X3B2diB+IHRyZWF0bWVudDIsIGZhbWlseT1iaW5vbWlhbCwgZGF0YT1kYXRhc2V0W2RhdGFzZXQkdGlqZD09MCxdKQ0Kc3VtbWFyeSh0ZXN0MikNCmBgYA0KQ29uY2x1c2lvbjogIA0KDQotIG5vIHNlbGVjdGl2aXR5DQoNCi0tLSAgDQoNCiMjIyBjb250aW51b3VzIHRyZWF0bWVudCB2YXJpYWJsZSAoY3Jpc2lzIGV4cG9zdXJlKQ0KDQpgYGB7ciwgcmVzdWx0cz0naG9sZCd9DQojZGVmaW5lIHRyZWF0bWVudCB2YXJpYWJsZSBiYXNlZCBvbiBjcmlzaXMgQVNDIG9ubHk6IHdoZXRoZXIgdGhlcmUgaGFzIGJlZW4gYW4gaW5jcmVhc2UgaW4gY3Jpc2lzIGFzeWx1bSBzZWVrZXJzLiANCmRhdGFzZXQkdHJlYXRtZW50Ml9jIDwtIGlmZWxzZShkYXRhc2V0JHRpamQ9PTEsIGRhdGFzZXQkczNwYzRfYWZ3LCAtIGRhdGFzZXQkczNwYzRfYWZ3KQ0Kc3VtbWFyeShnbG0oeV9wdnYgfiB0cmVhdG1lbnQyX2MsIGZhbWlseT1iaW5vbWlhbCwgZGF0YT1kYXRhc2V0W2RhdGFzZXQkdGlqZD09MCxdKSkNCiN0YWJsZShkYXRhc2V0JHRyZWF0bWVudDIsZGF0YXNldCR0cmVhdG1lbnQyX2MpDQojc3VtbWFyeShkYXRhc2V0JHMzcGM0X2Fmd1tkYXRhc2V0JHRpamQ9PTBdKQ0KI3N1bW1hcnkoZGF0YXNldCR0cmVhdG1lbnQyX2NbZGF0YXNldCR0aWpkPT0wXSkNCmBgYA0KQ29uY2x1c2lvbjogIA0KDQotIG5vIHNlbGVjdGl2aXR5DQoNCi0tLSAgDQoNCiMjIE5vdGUgMyBpbiBtYW51c2NyaXB0ICANCg0KLSBJbiB0aGUgbWFudXNjcmlwdCB3ZSBzdGF0ZSB0aGF0IHRoZSB0cmVhdG1lbnQgaXMgbm90IHJlbGF0ZWQgdG8gcHJldHJlYXRtZW50IFBWViBzdXBwb3J0LiAgDQotIEluIG5vdGUgMyB3ZSBzdGF0ZSB0aGF0IHRyZWF0bWVudCBpcyBub3QgcmVsYXRlZCB0byBhbiBpbmNyZWFzZSBpbiBjb250YWN0IG9yIHRocmVhdC4gDQoNCldlIGZpcnN0IGRlZmluZSBhIHRyZWF0bWVudCB2YXJpYWJsZTogMSAoWUVTLCBpbmNyZWFzZSBpbiBhc3lsdW0gc2Vla2Vycyk7IDAgKE5PLCBubyBpbmNyZWFzZSBpbiBhc3lsdW0gc2Vla2VycykNCg0KYGBge3J9DQoNCiNzaG93IHRoYXQgdHJlYXRtZW50IGlzIG5vdCByZWxhdGVkIHRvIGNoYW5nZXMgaW4gdGhyZWF0IGFuZCBjb250YWN0IGluIGZpeGVkIGVmZmVjdCBzYW1wbGUuIG5vdGUgMyBpbiByZXZpc2VkIG1hbnVzY3JpcHQuIA0KI29ubHkgc2VsZWN0IHlfb2JzZXJ2YXRpb24gYXQgdGltZXBvaW50IDINCmV2X3NlbDIgPC0gZGF0YXNldF9zZWxbZGF0YXNldF9zZWwkdGlqZD09MSxdDQpldl9zZWwyJHRyZWF0bWVudCA8LSBldl9zZWwyJHMxMjNwYzRfYWZ3PjANCm1lYW4oZXZfc2VsMiRjb250YWN0bndfYWZ3KQ0KYnkoZXZfc2VsMiRjb250YWN0bndfYWZ3LCBldl9zZWwyJHRyZWF0bWVudCwgZnVuY3Rpb24oeCkgc2QoeCkpDQp3aXRoKGV2X3NlbDIsIHQudGVzdChjb250YWN0bndfYWZ3fnRyZWF0bWVudCkpDQojdHJlYXRlZCBncm91cCBkZWNyZWFzZSBpbiBjb250YWN0LiB1bnRyZWF0ZWQgZ3JvdXAgaW5jcmVhc2UgaW4gY29udGFjdC4gZGlmZmVyZW5jZSBpbiBkaWZmZXJlbmNlIGlzIHNpZ25pZmljYW50LiANCg0KbWVhbihldl9zZWwyJHRocmVhdF9hZncpDQpieShldl9zZWwyJHRocmVhdF9hZncsIGV2X3NlbDIkdHJlYXRtZW50LCBmdW5jdGlvbih4KSBzZCh4KSkNCndpdGgoZXZfc2VsMiwgdC50ZXN0KHRocmVhdF9hZnd+dHJlYXRtZW50KSkNCiN0cmVhdGVkIGdyb3VwIGluY3JlYXNlIGluIHRocmVhdC4gdW50cmVhdGVkIChsZXNzKSBpbmNyZWFzZSBpbiB0aHJlYXQuIGRpZmZlcmVuY2UgaW4gZGlmZmVyZW5jZSBpcyBub3Qgc2lnbmlmaWNhbnQuIA0KDQpgYGANCg0KLS0tICANCg0K

Copyright © 2020 Jochem Tolsma