Intro

This website is a replication package for the paper “Twitter and divides in the Dutch Parliament: Social and Political Segregation in the following, @-mentions and retweets networks” by Tolsma and Spierings ((submitted)).

It contains R code to replicate all Tables/Figures/Appendix in the manuscript.

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

Use the top menu to navigate to the section of interest.

The source code of this website can be found on Github

Questions can be addressed to Jochem Tolsma.


Packages

# install if necessary
if (!require("tidyverse", character.only = TRUE)) {
    install.packages("tidyverse", dependencies = TRUE)
}
if (!require("dplyr", character.only = TRUE)) {
    install.packages("dplyr", dependencies = TRUE)
}
if (!require("foreign", character.only = TRUE)) {
    install.packages("foreign", dependencies = TRUE)
}
if (!require("igraph", character.only = TRUE)) {
    install.packages("igraph", dependencies = TRUE)
}
if (!require("knitr", character.only = TRUE)) {
    install.packages("knitr", dependencies = TRUE)
}
if (!require("kableExtra", character.only = TRUE)) {
    install.packages("kableExtra", dependencies = TRUE)
}
if (!require("RSiena", character.only = TRUE)) {
    install.packages("RSiena", dependencies = TRUE)
}
if (!require("netseg", character.only = TRUE)) {
    install.packages("netseg", dependencies = TRUE)
}



# load packages.
library(tidyverse)
library(dplyr)
library(foreign)
library(igraph)
library(knitr)
library(kableExtra)
library(RSiena)
library(netseg)

Custom segregation functions

Define custom functions to calculate network-segregation:

  • fdensity: density of network
  • fdensityintra: density within subgroups
  • fscolnet: Coleman’s Homophily Index at the network-level, see (( Bojanowski and Corten 2014))
  • fhomomat: make a matrix indicating wheter nodes are similar
  • fndyads: count number of dyads
  • fndayds2: count number of within subgroup dyads
fdensity <- function(x) {
    # x is your nomination network should be relationship, divided by all possible off diagonal
    # ties.  make sure diagonal cells are NA
    diag(x) <- NA
    x[x == 10] <- NA
    sum(x == 1, na.rm = T)/(sum(x == 1 | x == 0, na.rm = T))
}

fdensityintra <- function(x, A) {
    # A is matrix indicating whether nodes constituting dyad have same characteristics
    diag(x) <- NA
    x[x == 10] <- NA
    diag(A) <- NA
    sum(x == 1 & A == 1, na.rm = T)/(sum((x == 1 | x == 0) & A == 1, na.rm = T))
}

fdensityinter <- function(x, A) {
    # A is matrix indicating whether nodes constituting dyad have same characteristics
    diag(x) <- NA
    x[x == 10] <- NA
    diag(A) <- NA
    sum(x == 1 & A != 1, na.rm = T)/(sum((x == 1 | x == 0) & A != 1, na.rm = T))
}

fhomomat <- function(x) {
    xmat <- matrix(x, nrow = length(x), ncol = length(x))
    xmatt <- t(xmat)
    xhomo <- xmat == xmatt
    return(xhomo)
}

fndyads <- function(x) {
    diag(x) <- NA
    x[x == 10] <- NA
    (sum((x == 1 | x == 0), na.rm = T))
}

fndyads2 <- function(x, A) {
    diag(x) <- NA
    x[x == 10] <- NA
    diag(A) <- NA
    (sum((x == 1 | x == 0) & A == 1, na.rm = T))
}


fscolnet <- function(network, ccovar) {
    # Calculate coleman on network level:
    # https://reader.elsevier.com/reader/sd/pii/S0378873314000239?token=A42F99FF6E2B750436DD2CB0DB7B1F41BDEC16052A45683C02644DAF88215A3379636B2AA197B65941D6373E9E2EE413

    fhomomat <- function(x) {
        xmat <- matrix(x, nrow = length(x), ncol = length(x))
        xmatt <- t(xmat)
        xhomo <- xmat == xmatt
        return(xhomo)
    }

    fsumintra <- function(x, A) {
        # A is matrix indicating whether nodes constituting dyad have same characteristics
        diag(x) <- NA
        x[x == 10] <- NA
        diag(A) <- NA
        sum(x == 1 & A == 1, na.rm = T)
    }

    # expecation w*=sum_g sum_i (ni((ng-1)/(N-1)))
    network[network == 10] <- NA
    ni <- rowSums(network, na.rm = T)
    ng <- NA
    for (i in 1:length(ccovar)) {
        ng[i] <- table(ccovar)[rownames(table(ccovar)) == ccovar[i]]
    }
    N <- length(ccovar)
    wexp <- sum(ni * ((ng - 1)/(N - 1)), na.rm = T)

    # wgg1 how many intragroup ties
    w <- fsumintra(network, fhomomat(ccovar))

    Scol_net <- ifelse(w >= wexp, (w - wexp)/(sum(ni, na.rm = T) - wexp), (w - wexp)/wexp)
    return(Scol_net)

}

Load data objects

Data objects:

  • key: information on all politicians on election list
  • twitter
    • keyf: information on all 147 MPs with twitter handle
    • mydata: RSiena object with all kind of goodies inside
    • seats: seating coordinates of HoP (used for plotting)
# STAP 1: read in data
key <- read.spss("data-processed\\key moederbestand 20171114.sav", use.value.labels = T, to.data.frame = T)


load("data-processed\\twitter_20190919.RData")
# str(twitter_20190919,1)
keyf <- twitter_20190919[[1]]
mydata <- twitter_20190919[[2]]
seats <- twitter_20190919[[3]]

Summary of dataset used.

# select all MPs (we need to filter the correct EGOhandle)
data_mp <- key %>%
    filter(Elected20170315 == "yes, verkozen" & !(EGOhandle %in% c(10401, 10403, 13102, 15102, 106101,
        41400))) %>%
    select("Naam", "Partij", "Geslacht", "GebJaar", "EthMinZ", "PlekLijst", "Kamerlid20161123", "ZetelSegment20170315",
        "ZetelRij20170315", "ZetelKolom20170315")

# not necessary: 'Twitterhandle' 'Elected20170315'

seats$ZetelSegment20170315 <- seats$segments
seats$ZetelRij20170315 <- seats$rows
seats$ZetelKolom20170315 <- seats$columns

data_mp <- inner_join(data_mp, seats) %>%
    select("Naam", "Partij", "Geslacht", "GebJaar", "EthMinZ", "PlekLijst", "Kamerlid20161123", "ZetelSegment20170315",
        "ZetelRij20170315", "ZetelKolom20170315", "X", "Y")


colnames(data_mp) <- c("Name", "Party", "Sex", "Birth Year", "Visible Minority", "List Position", "Incumbency status",
    "Seating Segment", "Seating Row", "Seating Column", "X-coord.", "Y-coord")

data_mp$Sex <- as.character(data_mp$Sex)
data_mp$Sex[data_mp$Sex == "vrouw"] <- "female"
data_mp$Sex[data_mp$Sex == "man"] <- "male"


sumdat <- kbl(data_mp, booktabs = TRUE, digits = 2, caption = "Dataset summary", align = "c") %>%
    kable_classic(full_width = F, html_font = "Cambria") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))

scroll_box(sumdat, width = "100%", height = "500px")
Dataset summary
Name Party Sex Birth Year Visible Minority List Position Incumbency status Seating Segment Seating Row Seating Column X-coord. Y-coord
Agema, Fleur PVV female 1976 0 2 1 1 1 2 7.9 -2.9
Amhaouch, Mustafa CDA male 1970 1 15 1 2 3 1 9.5 1.3
Arib, Khadija PvdA female 1960 1 2 1 6 6 3 -16.1 -0.8
  1. Ark, Tamara
VVD female 1974 0 4 1 3 2 1 3.9 3.5
Azmani, Malik VVD male 1976 1 10 1 3 3 2 3.7 5.5
Beertema, Harm PVV male 1952 0 10 1 1 4 1 13.6 -4.5
Belhaj, Salima D66 female 1979 1 14 1 4 4 3 -3.3 7.4
Bergkamp, Vera D66 female 1971 0 6 1 4 3 4 -4.6 5.0
Bisschop, Roelof SGP male 1956 0 3 1 3 4 3 3.6 7.4
Bosma, Martin PVV male 1964 0 6 1 1 2 1 10.0 -4.4
Bosman, Andre VVD male 1965 0 24 1 3 4 5 1.2 7.8
ten Broeke, Han VVD male 1969 0 9 1 3 2 2 2.6 4.0
Bruins Slot, Hanke CDA female 1977 0 9 1 2 3 3 7.8 2.9
Van Dijck, Tony PVV male 1963 0 8 1 1 3 3 11.3 -1.9
Van Dijk, Jasper SP male 1971 0 14 1 6 6 6 -16.9 -4.4
Dijkgraaf, Elbert SGP male 1970 0 2 1 3 4 2 4.7 7.0
Dijkstra, Pia D66 female 1954 0 4 1 4 2 1 -1.1 4.2
Dijkstra, Remco VVD male 1972 0 27 1 3 5 3 4.0 9.1
Dik-Faber, Carla CU female 1971 0 4 1 2 5 4 9.9 6.1
Duisenberg, Pieter VVD male 1967 0 15 1 4 5 1 -1.2 9.6
Fritsma, Sietse PVV male 1972 0 5 1 1 3 1 11.8 -4.5
Geurts, Jaco CDA male 1970 0 10 1 1 4 4 12.8 -1.0
De Graaf, Machiel PVV male 1969 0 11 1 1 4 2 13.5 -3.2
Grashoff, Rik GroenLinks male 1961 0 5 1 5 3 1 -6.8 3.8
Graus, Dion PVV male 1967 0 12 1 1 4 3 13.2 -2.1
Van Haersma Buma, Sybrand CDA male 1965 0 1 1 2 1 2 5.3 0.5
Harbers, Mark VVD male 1969 0 8 1 3 2 3 1.3 4.2
Heerma, Pieter CDA male 1977 0 7 1 2 2 1 7.9 0.3
Helder, Lilian PVV female 1973 0 9 1 1 3 4 10.8 -0.9
Van Helvert, Martijn CDA male 1978 0 16 1 1 4 5 12.5 0.0
Keijzer, Mona CDA female 1968 0 2 1 2 1 1 6.4 -0.4
Klaver, jesse GroenLinks male 1986 1 1 1 5 1 1 -5.1 0.5
Knops, Raymond CDA male 1971 0 6 1 2 2 2 7.1 1.4
Kooiman, Nine SP female 1980 0 12 1 6 6 4 -16.4 -1.9
Koolmees, Wouter D66 male 1977 0 3 1 4 2 3 -3.7 3.5
Krol, Henk 50Plus male 1950 0 1 1 5 5 5 -12.4 3.1
Kuiken, Attje PvdA female 1977 0 6 1 6 3 2 -11.0 -1.9
Kuzu, Tunahan DENK male 1981 1 1 1 5 6 2 -10.3 7.5
Leijten, Renske SP female 1979 0 2 1 6 1 2 -8.0 -4.3
Lodders, Helma VVD female 1968 0 12 1 3 3 1 4.8 5.0
Madlener, Barry PVV male 1969 0 7 1 1 3 2 11.6 -3.2
Van Meenen, Paul D66 male 1956 0 8 1 4 4 5 -5.5 6.5
Mulder, Agnes CDA female 1973 0 13 1 1 5 5 14.0 0.8
Nijboer, Henk PvdA male 1983 0 7 1 6 5 2 -14.3 -0.4
Nijkerken-de Haan, Chantal VVD female 1973 0 30 1 4 6 2 -2.3 11.0
Van Nispen, Michiel SP male 1982 0 7 1 6 3 4 -11.5 -4.5
Omtzigt, Pieter CDA male 1974 0 4 1 2 2 3 6.1 2.1
Van Oosten, Foort VVD male 1977 0 32 1 3 5 2 5.4 8.6
Ozturk, Selcuk DENK male 1972 1 3 1 5 6 4 -12.2 5.8
Pechtold, Alexander D66 male 1965 0 1 1 4 1 2 -2.6 2.1
Van Raak, Ronald SP male 1969 0 4 1 6 2 2 -9.5 -3.1
Roemer, Emile SP male 1962 0 1 1 6 1 1 -7.7 -2.9
Rog, Michel CDA male 1973 0 14 1 2 5 2 11.8 4.1
Ronnes, Erik CDA male 1967 0 17 1 2 6 1 14.1 3.8
De Roon, Raymond PVV male 1952 0 13 1 1 5 1 15.4 -4.4
Rutte, Arno VVD male 1972 0 20 1 3 5 5 1.3 9.6
Schouten, Carola CU female 1977 0 2 1 2 4 4 8.8 4.7
Segers, Gert-Jan CU male 1969 0 1 1 2 4 5 7.9 5.4
Sjoerdsma, Sjoerd D66 male 1981 0 11 1 4 3 1 -1.0 6.0
Van der Staaij, Kees SGP male 1968 0 1 1 3 4 1 5.7 6.5
Tellegen, Ockje VVD female 1974 0 21 1 3 5 4 2.6 9.3
Thieme, Marianne PvdDieren female 1972 0 1 1 5 4 2 -8.6 4.7
Van Toorenburg, Madeleine CDA female 1986 0 5 1 2 6 2 13.3 4.8
Van Veldhoven, Stientje D66 female 1973 0 2 1 4 1 1 -1.3 2.4
Verhoeven, Kees D66 male 1976 0 7 1 4 2 2 -2.4 4.0
Visser, Barbara VVD female 1977 0 7 1 3 4 4 2.3 7.7
Voordewind, Joel CU male 1965 0 3 1 2 5 5 8.8 6.8
Voortman, Linda GroenLinks female 1979 0 4 1 5 2 2 -6.9 1.4
De Vries, Aukje VVD female 1964 0 18 1 4 6 3 -3.6 10.8
Wassenberg, Frank PvdDieren male 1966 0 4 0 5 5 2 -9.6 6.1
Van Weyenberg, Steven D66 male 1973 0 10 1 4 3 3 -3.6 5.5
Wilders, Geert PVV male 1963 0 1 1 1 1 1 8.2 -4.3
Van t’Wout, Bas VVD male 1979 0 13 1 4 5 2 -2.4 9.3
Ziengs, Erik VVD male 1960 0 23 1 4 4 1 -1.1 7.8
Zijlstra, Halbe VVD male 1969 0 3 1 3 1 2 1.4 2.4
Rutte, Mark VVD male 1967 0 1 0 3 1 1 3.0 2.1
Ploumen, Lilianne PvdA female 1962 0 10 0 6 6 2 -15.7 0.6
Hennis-Plasschaert, Jeanine VVD female 1973 0 2 0 3 3 4 1.3 6.0
Dijsselbloem, Jeroen PvdA male 1966 0 3 0 6 4 2 -12.6 -1.0
Asscher, Lodewijk PvdA male 1974 0 1 0 6 3 1 -10.6 -0.9
Dijksma, Sharon PvdA female 1971 0 4 0 6 4 3 -13.0 -2.1
Dekker, Sander VVD male 1975 0 6 0 3 5 1 6.5 8.2
Dijkhoff, Klaas VVD male 1981 0 5 0 3 3 3 2.4 5.9
Thierry Baudet FvD male 1983 0 1 0 1 6 6 15.4 1.6
Eppo Bruins CU male 1969 0 5 1 2 5 3 10.9 5.1
LILIAN MARIJNISSEN SP female 1985 0 3 0 6 2 1 -9.0 -1.8
SADET KARABULUT SP female 1975 1 5 1 6 2 3 -9.8 -4.4
SANDRA BECKERMAN SP female 1983 0 6 0 6 3 3 -11.4 -3.2
PETER KWINT SP male 1984 0 8 0 6 4 4 -13.2 -3.2
BART VAN KENT SP male 1983 0 9 0 6 4 5 -13.3 -4.5
CEM LACIN SP male 1986 1 10 0 6 5 4 -15.0 -3.2
FRANK FUTSELAAR SP male 1979 0 11 0 6 5 5 -15.1 -4.4
MAARTEN HIJINK SP male 1983 0 13 0 6 6 5 -16.6 -3.2
Ingrid van Engelshoven D66 female 1966 0 5 0 4 3 2 -2.3 5.9
Jan Paternotte D66 male 1984 0 9 0 4 5 3 -3.7 9.1
Rob Jetten D66 male 1987 0 12 0 4 5 4 -5.1 8.6
Jessica van Eijs D66 female 1981 0 13 0 4 4 4 -4.5 7.0
Maarten Groothuizen D66 male 1976 0 15 0 4 6 5 -5.9 10.1
Rens Raemakers D66 male 1991 0 17 0 4 6 4 -4.8 10.5
Achraf Bouali D66 male 1974 1 16 0 4 5 5 -6.3 8.2
Antje Diertens D66 female 1958 0 18 0 4 6 6 -7.2 9.6
Tjeerd de Groot D66 male 1968 0 19 0 5 6 1 -9.4 8.3
René Peters CDA male 1975 0 3 0 2 5 1 12.7 3.1
Harry van der Molen CDA male 1980 0 8 0 2 4 3 9.6 4.0
Anne Kuik CDA female 1987 0 11 0 2 4 1 11.1 2.2
Chris van Dam CDA male 1963 0 12 0 2 3 4 6.8 3.8
Joba van den Berg-Jansen CDA female 1958 0 18 0 2 3 2 8.7 2.2
Maurits von Martels CDA male 1960 0 44 0 2 4 2 10.4 3.0
Dennis Wiersma VVD male 1986 0 11 0 4 6 1 -1.0 11.2
Bente Becker VVD female 1985 0 14 0 3 6 6 1.3 11.2
Sophie Hermans VVD female 1981 0 16 0 3 6 5 2.6 11.0
Anne Mulder VVD male 1969 0 17 1 4 4 2 -2.2 7.7
Dilan Yesilgöz-Zegerius VVD female 1977 1 19 0 3 6 4 3.7 10.8
Daniel Koerhuis VVD male 1981 0 22 0 3 6 3 5.0 10.5
Albert van den Bosch VVD male 1955 0 25 0 3 6 2 6.3 10.1
Zohair el Yassini VVD male 1979 1 26 0 3 6 1 7.3 9.6
Martin Wörsdörfer VVD male 1972 0 28 0 2 6 6 9.5 8.3
Arne Weverling VVD male 1974 0 29 0 2 6 5 10.6 7.5
Sven Koopmans VVD male 1973 0 33 0 2 6 4 11.6 6.8
Jan Middendorp VVD male 1975 0 34 0 2 6 3 12.5 5.8
Léonie Sazias 50Plus female 1957 0 2 0 5 5 4 -11.5 4.1
Martin van Rooijen 50Plus male 1942 0 3 0 5 6 5 -13.1 4.8
Corrie van Brenk 50Plus female 1960 0 4 0 5 6 6 -13.9 3.8
Esther Ouwehand PvdDieren female 1976 0 2 1 5 4 1 -7.7 5.4
Kathalijne Buitenweg GroenLinks female 1970 0 2 0 5 1 2 -6.1 -0.4
Tom van der Lee GroenLinks male 1964 0 3 0 5 2 3 -7.7 0.3
Corinne Ellemeet GroenLinks female 1976 0 7 0 5 3 3 -8.6 2.2
Zihni Özdil GroenLinks male 1981 1 8 0 5 3 4 -9.3 1.3
Bart Snels GroenLinks male 1966 0 9 0 5 2 1 -5.9 2.1
Suzanne Kröger GroenLinks female 1977 0 11 0 5 4 4 -10.4 3.0
Bram van Oijk GroenLinks male 1954 0 10 0 5 4 5 -11.0 2.2
Nevin Özütok GroenLinks female 1960 1 12 0 5 4 3 -9.5 4.0
Lisa Westerveld GroenLinks female 1981 0 14 0 6 5 1 -13.8 0.8
Isabelle Diks GroenLinks female 1965 0 19 0 6 6 1 -15.2 1.6
Liesbeth van Tongeren GroenLinks female 1958 0 6 1 5 3 2 -7.7 2.9
Lammert van Raan PvdDieren male 1962 0 3 0 5 5 1 -8.6 6.8
Femke Merel Arissen PvdDieren female 1983 0 5 0 5 5 3 -10.7 5.1
Farid Azarkan DENK male 1971 1 2 0 5 6 3 -11.3 6.8
Gijs van Dijk PvdA male 1980 0 5 0 6 4 1 -12.2 0.0
Kirsten van den Hul PvdA female 1976 0 8 0 6 5 3 -14.6 -1.7
Gerbrands, Karen PVV female 1967 0 16 0 1 5 4 14.4 -0.4
Theo Hiddema FvD male 1944 0 2 0 1 6 5 15.9 0.6
Vicky Maeijer PVV female 1986 0 3 0 1 2 3 9.3 -1.8
Gidi Markuszower PVV male 1977 1 4 0 1 2 2 9.8 -3.1
Danai van Weerdenburg PVV female 1976 0 14 0 1 5 2 15.2 -3.2
Edgar Mulder PVV male 1961 0 15 0 1 5 3 14.9 -1.7
Léon de Jong PVV male 1982 0 17 0 1 6 1 17.1 -4.4
Gabriëlle Popken PVV female 1983 0 18 0 1 6 2 16.9 -3.2
Alexander Kops PVV male 1984 0 19 0 1 6 3 16.7 -1.9
Roy van Aalst PVV male 1983 0 20 0 1 6 4 16.3 -0.8

Appendix A.

# select all MPs (we need to filter the correct EGOhandle)
data_mp <- key %>%
    filter(Elected20170315 == "yes, verkozen" & !(EGOhandle %in% c(10401, 10403, 13102, 15102, 106101,
        41400)))

dg <- data_mp %>%
    group_by(Geslacht) %>%
    summarize(count = n(), freq = count/150)

de <- data_mp %>%
    group_by(EthMinZ) %>%
    summarize(count = n(), freq = count/150)

da <- data_mp %>%
    mutate(variable = "AGE") %>%
    summarize(age = first(variable), mean = mean(2017 - GebJaar, na.rm = T), sd = sd(2017 - GebJaar,
        na.rm = T))

dp <- data_mp %>%
    group_by(Partij) %>%
    summarize(count = n(), freq = count/150) %>%
    arrange(desc(count))

# by party
dgp <- data_mp %>%
    group_by(Partij) %>%
    add_tally() %>%
    group_by(Partij, Geslacht) %>%
    summarize(count = n(), freq = count/first(n), first = first(n)) %>%
    arrange(desc(first)) %>%
    select("Partij", "Geslacht", "count", "freq")

dep <- data_mp %>%
    group_by(Partij) %>%
    add_tally() %>%
    group_by(Partij, EthMinZ) %>%
    summarize(count = n(), freq = count/first(n), first = first(n)) %>%
    arrange(desc(first)) %>%
    select("Partij", "EthMinZ", "count", "freq")

dap <- data_mp %>%
    mutate(variable = "AGE") %>%
    group_by(Partij) %>%
    add_tally() %>%
    summarize(age = first(variable), mean = mean(2017 - GebJaar, na.rm = T), sd = sd(2017 - GebJaar,
        na.rm = T), first = first(n)) %>%
    arrange(desc(first)) %>%
    select("Partij", "age", "mean", "sd")

dg <- dg %>%
    add_column(grouping = "NO", .before = "Geslacht")
da <- da %>%
    add_column(grouping = "NO", .before = "age")
de <- de %>%
    add_column(grouping = "NO", .before = "EthMinZ")
dp <- dp %>%
    add_column(grouping = "NO", .before = "Partij")


# dgp dap dep

# write_csv(dg, 'table.csv') write_csv(da, 'table.csv', append = TRUE) write_csv(de, 'table.csv',
# append = TRUE) write_csv(dp, 'table.csv', append = TRUE) write_csv(dgp, 'table.csv', append =
# TRUE) write_csv(dap, 'table.csv', append = TRUE) write_csv(dep, 'table.csv', append = TRUE)

test <- read_csv("table.csv")

colnames(test) <- c("grouping", "social dimension", "N / mean", "prop. / SD")
test$grouping[test$grouping == "NO"] <- "HoP"
test[test == "man"] <- "male"
test[test == "vrouw"] <- "female"
test[test == "0"] <- "no visible minority"
test[, 2][test[, 2] == "1"] <- "visible minority"


AppendixA <- kbl(test, booktabs = TRUE, digits = 2, caption = "Appendix A. Composition of parliament and political parties in the Netherlands (2017)",
    align = "c") %>%
    kable_classic(full_width = F, html_font = "Cambria") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))

scroll_box(AppendixA, width = "100%", height = "500px")

# save_kable(AppendixA, 'AppendixA.html')
Appendix A. Composition of parliament and political parties in the Netherlands (2017)
grouping social dimension N / mean prop. / SD
HoP male 96.00 0.64
HoP female 54.00 0.36
HoP AGE 45.13 9.32
HoP no visible minority 134.00 0.89
HoP visible minority 16.00 0.11
HoP VVD 33.00 0.22
HoP PVV 20.00 0.13
HoP CDA 19.00 0.13
HoP D66 19.00 0.13
HoP GroenLinks 14.00 0.09
HoP SP 14.00 0.09
HoP PvdA 9.00 0.06
HoP CU 5.00 0.03
HoP PvdDieren 5.00 0.03
HoP 50Plus 4.00 0.03
HoP DENK 3.00 0.02
HoP SGP 3.00 0.02
HoP FvD 2.00 0.01
VVD male 23.00 0.70
VVD female 10.00 0.30
PVV male 14.00 0.70
PVV female 6.00 0.30
CDA male 13.00 0.68
CDA female 6.00 0.32
D66 male 12.00 0.63
D66 female 7.00 0.37
GroenLinks male 6.00 0.43
GroenLinks female 8.00 0.57
SP male 9.00 0.64
SP female 5.00 0.36
PvdA male 4.00 0.44
PvdA female 5.00 0.56
CU male 3.00 0.60
CU female 2.00 0.40
PvdDieren male 2.00 0.40
PvdDieren female 3.00 0.60
50Plus male 2.00 0.50
50Plus female 2.00 0.50
DENK male 3.00 1.00
SGP male 3.00 1.00
FvD male 2.00 1.00
VVD AGE 44.03 6.72
PVV AGE 46.05 10.09
CDA AGE 44.79 7.84
D66 AGE 43.84 10.16
GroenLinks AGE 47.14 10.08
SP AGE 38.36 6.99
PvdA AGE 44.89 7.99
CU AGE 46.80 4.38
PvdDieren AGE 45.20 8.26
50Plus AGE 64.75 8.02
DENK AGE 42.33 5.51
SGP AGE 52.33 7.57
FvD AGE 53.50 27.58
VVD no visible minority 30.00 0.91
VVD visible minority 3.00 0.09
PVV no visible minority 19.00 0.95
PVV visible minority 1.00 0.05
CDA no visible minority 18.00 0.95
CDA visible minority 1.00 0.05
D66 no visible minority 17.00 0.89
D66 visible minority 2.00 0.11
GroenLinks no visible minority 11.00 0.79
GroenLinks visible minority 3.00 0.21
SP no visible minority 12.00 0.86
SP visible minority 2.00 0.14
PvdA no visible minority 8.00 0.89
PvdA visible minority 1.00 0.11
CU no visible minority 5.00 1.00
PvdDieren no visible minority 5.00 1.00
50Plus no visible minority 4.00 1.00
DENK visible minority 3.00 1.00
SGP no visible minority 3.00 1.00
FvD no visible minority 2.00 1.00

SEGREGATION - Descriptive statistics

# We retrieve the data from the RSiena data-object

fnet <- mydata$depvars$fnet
atmnet <- mydata$depvars$atmnet
rtnet <- mydata$depvars$rtnet

vrouw <- mydata$cCovars$vrouw
partij <- mydata$cCovars$partij
ethminz <- mydata$cCovars$ethminz
lft <- mydata$cCovars$lft

ethminz <- ethminz + attributes(ethminz)$mean
partij <- partij + attributes(partij)$mean
vrouw <- vrouw + attributes(vrouw)$mean
lft <- lft + attributes(lft)$mean

vrouwm <- fhomomat(vrouw)
partijm <- fhomomat(partij)
ethminzm <- fhomomat(ethminz)

xmat <- matrix(ethminz, nrow = length(ethminz), ncol = length(ethminz))
xmatt <- t(xmat)
minoritym <- xmat == 1 & xmatt == 1

# for age max 5 year difference / for descriptives
xmat <- matrix(lft, nrow = length(lft), ncol = length(lft))
xmatt <- t(xmat)
lftm <- (abs(xmat - xmatt) < 6)

# fndyads2(fnet[,,1], vrouwm) fndyads2(fnet[,,3], vrouwm) fndyads2(fnet[,,1], partijm)
# fndyads2(fnet[,,3], partijm) fndyads2(fnet[,,1], ethminzm) fndyads2(fnet[,,3], ethminzm)


Table 1

desmat <- matrix(NA, nrow = 10, ncol = 9)
desmat[1, 1] <- fdensity(fnet[, , 1])
desmat[1, 2] <- fdensity(fnet[, , 2])
desmat[1, 3] <- fdensity(fnet[, , 3])
desmat[2, 1] <- fdensityintra(fnet[, , 1], vrouwm)
desmat[2, 2] <- fdensityintra(fnet[, , 2], vrouwm)
desmat[2, 3] <- fdensityintra(fnet[, , 3], vrouwm)
desmat[3, 1] <- fdensityinter(fnet[, , 1], vrouwm)
desmat[3, 2] <- fdensityinter(fnet[, , 2], vrouwm)
desmat[3, 3] <- fdensityinter(fnet[, , 3], vrouwm)
desmat[4, 1] <- fdensityintra(fnet[, , 1], partijm)
desmat[4, 2] <- fdensityintra(fnet[, , 2], partijm)
desmat[4, 3] <- fdensityintra(fnet[, , 3], partijm)
desmat[5, 1] <- fdensityinter(fnet[, , 1], partijm)
desmat[5, 2] <- fdensityinter(fnet[, , 2], partijm)
desmat[5, 3] <- fdensityinter(fnet[, , 3], partijm)
desmat[6, 1] <- fdensityintra(fnet[, , 1], ethminzm)
desmat[6, 2] <- fdensityintra(fnet[, , 2], ethminzm)
desmat[6, 3] <- fdensityintra(fnet[, , 3], ethminzm)
desmat[7, 1] <- fdensityinter(fnet[, , 1], ethminzm)
desmat[7, 2] <- fdensityinter(fnet[, , 2], ethminzm)
desmat[7, 3] <- fdensityinter(fnet[, , 3], ethminzm)
desmat[8, 1] <- fdensityinter(fnet[, , 1], minoritym)
desmat[8, 2] <- fdensityinter(fnet[, , 2], minoritym)
desmat[8, 3] <- fdensityinter(fnet[, , 3], minoritym)
desmat[9, 1] <- fdensityintra(fnet[, , 1], lftm)
desmat[9, 2] <- fdensityintra(fnet[, , 2], lftm)
desmat[9, 3] <- fdensityintra(fnet[, , 3], lftm)
desmat[10, 1] <- fdensityinter(fnet[, , 1], lftm)
desmat[10, 2] <- fdensityinter(fnet[, , 2], lftm)
desmat[10, 3] <- fdensityinter(fnet[, , 3], lftm)

desmat[1, 1 + 3] <- fdensity(atmnet[, , 1])
desmat[1, 2 + 3] <- fdensity(atmnet[, , 2])
desmat[1, 3 + 3] <- fdensity(atmnet[, , 3])
desmat[2, 1 + 3] <- fdensityintra(atmnet[, , 1], vrouwm)
desmat[2, 2 + 3] <- fdensityintra(atmnet[, , 2], vrouwm)
desmat[2, 3 + 3] <- fdensityintra(atmnet[, , 3], vrouwm)
desmat[3, 1 + 3] <- fdensityinter(atmnet[, , 1], vrouwm)
desmat[3, 2 + 3] <- fdensityinter(atmnet[, , 2], vrouwm)
desmat[3, 3 + 3] <- fdensityinter(atmnet[, , 3], vrouwm)
desmat[4, 1 + 3] <- fdensityintra(atmnet[, , 1], partijm)
desmat[4, 2 + 3] <- fdensityintra(atmnet[, , 2], partijm)
desmat[4, 3 + 3] <- fdensityintra(atmnet[, , 3], partijm)
desmat[5, 1 + 3] <- fdensityinter(atmnet[, , 1], partijm)
desmat[5, 2 + 3] <- fdensityinter(atmnet[, , 2], partijm)
desmat[5, 3 + 3] <- fdensityinter(atmnet[, , 3], partijm)
desmat[6, 1 + 3] <- fdensityintra(atmnet[, , 1], ethminzm)
desmat[6, 2 + 3] <- fdensityintra(atmnet[, , 2], ethminzm)
desmat[6, 3 + 3] <- fdensityintra(atmnet[, , 3], ethminzm)
desmat[7, 1 + 3] <- fdensityinter(atmnet[, , 1], ethminzm)
desmat[7, 2 + 3] <- fdensityinter(atmnet[, , 2], ethminzm)
desmat[7, 3 + 3] <- fdensityinter(atmnet[, , 3], ethminzm)
desmat[8, 1 + 3] <- fdensityinter(atmnet[, , 1], minoritym)
desmat[8, 2 + 3] <- fdensityinter(atmnet[, , 2], minoritym)
desmat[8, 3 + 3] <- fdensityinter(atmnet[, , 3], minoritym)
desmat[9, 1 + 3] <- fdensityintra(atmnet[, , 1], lftm)
desmat[9, 2 + 3] <- fdensityintra(atmnet[, , 2], lftm)
desmat[9, 3 + 3] <- fdensityintra(atmnet[, , 3], lftm)
desmat[10, 1 + 3] <- fdensityinter(atmnet[, , 1], lftm)
desmat[10, 2 + 3] <- fdensityinter(atmnet[, , 2], lftm)
desmat[10, 3 + 3] <- fdensityinter(atmnet[, , 3], lftm)

desmat[1, 1 + 6] <- fdensity(rtnet[, , 1])
desmat[1, 2 + 6] <- fdensity(rtnet[, , 2])
desmat[1, 3 + 6] <- fdensity(rtnet[, , 3])
desmat[2, 1 + 6] <- fdensityintra(rtnet[, , 1], vrouwm)
desmat[2, 2 + 6] <- fdensityintra(rtnet[, , 2], vrouwm)
desmat[2, 3 + 6] <- fdensityintra(rtnet[, , 3], vrouwm)
desmat[3, 1 + 6] <- fdensityinter(rtnet[, , 1], vrouwm)
desmat[3, 2 + 6] <- fdensityinter(rtnet[, , 2], vrouwm)
desmat[3, 3 + 6] <- fdensityinter(rtnet[, , 3], vrouwm)
desmat[4, 1 + 6] <- fdensityintra(rtnet[, , 1], partijm)
desmat[4, 2 + 6] <- fdensityintra(rtnet[, , 2], partijm)
desmat[4, 3 + 6] <- fdensityintra(rtnet[, , 3], partijm)
desmat[5, 1 + 6] <- fdensityinter(rtnet[, , 1], partijm)
desmat[5, 2 + 6] <- fdensityinter(rtnet[, , 2], partijm)
desmat[5, 3 + 6] <- fdensityinter(rtnet[, , 3], partijm)
desmat[6, 1 + 6] <- fdensityintra(rtnet[, , 1], ethminzm)
desmat[6, 2 + 6] <- fdensityintra(rtnet[, , 2], ethminzm)
desmat[6, 3 + 6] <- fdensityintra(rtnet[, , 3], ethminzm)
desmat[7, 1 + 6] <- fdensityinter(rtnet[, , 1], ethminzm)
desmat[7, 2 + 6] <- fdensityinter(rtnet[, , 2], ethminzm)
desmat[7, 3 + 6] <- fdensityinter(rtnet[, , 3], ethminzm)
desmat[8, 1 + 6] <- fdensityinter(rtnet[, , 1], minoritym)
desmat[8, 2 + 6] <- fdensityinter(rtnet[, , 2], minoritym)
desmat[8, 3 + 6] <- fdensityinter(rtnet[, , 3], minoritym)
desmat[9, 1 + 6] <- fdensityintra(rtnet[, , 1], lftm)
desmat[9, 2 + 6] <- fdensityintra(rtnet[, , 2], lftm)
desmat[9, 3 + 6] <- fdensityintra(rtnet[, , 3], lftm)
desmat[10, 1 + 6] <- fdensityinter(rtnet[, , 1], lftm)
desmat[10, 2 + 6] <- fdensityinter(rtnet[, , 2], lftm)
desmat[10, 3 + 6] <- fdensityinter(rtnet[, , 3], lftm)


colnames(desmat) <- c("following T1", "following T2", "following T3", "atmentions T1", "atmentions T2",
    "atmentions T3", "retweets T1", "retweets T2", "retweets T3")
rownames(desmat) <- c("total", "same sex", "different sex", "same party", "different party", "same ethnicity",
    "different ethnicity", "both minority", "same age (<6)", "different age (>5)")

# desmat write.csv2(desmat, '20190829desmat.csv')

desmatkable <- kbl(desmat, booktabs = TRUE, digits = 2, caption = "Table 1.  Inter- and intra-group densities within the three Twitter layers among Dutch MPs (2017)",
    align = "c") %>%
    kable_classic(full_width = F, html_font = "Cambria") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    column_spec(column = 1, width = "3in")

desmatkable
Table 1. Inter- and intra-group densities within the three Twitter layers among Dutch MPs (2017)
following T1 following T2 following T3 atmentions T1 atmentions T2 atmentions T3 retweets T1 retweets T2 retweets T3
total 0.25 0.28 0.28 0.05 0.04 0.01 0.05 0.03 0.03
same sex 0.26 0.29 0.29 0.05 0.04 0.01 0.05 0.03 0.03
different sex 0.24 0.27 0.27 0.04 0.03 0.01 0.05 0.03 0.03
same party 0.71 0.73 0.74 0.20 0.14 0.06 0.34 0.25 0.25
different party 0.19 0.22 0.22 0.03 0.02 0.01 0.01 0.01 0.01
same ethnicity 0.27 0.29 0.29 0.05 0.04 0.01 0.05 0.03 0.03
different ethnicity 0.21 0.24 0.24 0.05 0.03 0.01 0.04 0.03 0.03
both minority 0.25 0.28 0.28 0.05 0.03 0.01 0.05 0.03 0.03
same age (<6) 0.29 0.31 0.31 0.06 0.04 0.01 0.05 0.04 0.04
different age (>5) 0.24 0.26 0.26 0.04 0.03 0.01 0.04 0.03 0.03


A slightly different order of social dimensions (rows) as compared to manuscript but same numbers.


Table 2

fnet[fnet == 10] <- NA
rtnet[rtnet == 10] <- NA
atmnet[atmnet == 10] <- NA

colmat <- matrix(NA, nrow = 3, ncol = 9)

colmat[1, 1] <- fscolnet(fnet[, , 1], partij)
colmat[1, 2] <- fscolnet(fnet[, , 2], partij)
colmat[1, 3] <- fscolnet(fnet[, , 3], partij)
colmat[1, 4] <- fscolnet(atmnet[, , 1], partij)
colmat[1, 5] <- fscolnet(atmnet[, , 2], partij)
colmat[1, 6] <- fscolnet(atmnet[, , 3], partij)
colmat[1, 7] <- fscolnet(rtnet[, , 1], partij)
colmat[1, 8] <- fscolnet(rtnet[, , 2], partij)
colmat[1, 9] <- fscolnet(rtnet[, , 3], partij)

colmat[2, 1] <- fscolnet(fnet[, , 1], vrouw)
colmat[2, 2] <- fscolnet(fnet[, , 2], vrouw)
colmat[2, 3] <- fscolnet(fnet[, , 3], vrouw)
colmat[2, 4] <- fscolnet(atmnet[, , 1], vrouw)
colmat[2, 5] <- fscolnet(atmnet[, , 2], vrouw)
colmat[2, 6] <- fscolnet(atmnet[, , 3], vrouw)
colmat[2, 7] <- fscolnet(rtnet[, , 1], vrouw)
colmat[2, 8] <- fscolnet(rtnet[, , 2], vrouw)
colmat[2, 9] <- fscolnet(rtnet[, , 3], vrouw)

colmat[3, 1] <- fscolnet(fnet[, , 1], ethminz)
colmat[3, 2] <- fscolnet(fnet[, , 2], ethminz)
colmat[3, 3] <- fscolnet(fnet[, , 3], ethminz)
colmat[3, 4] <- fscolnet(atmnet[, , 1], ethminz)
colmat[3, 5] <- fscolnet(atmnet[, , 2], ethminz)
colmat[3, 6] <- fscolnet(atmnet[, , 3], ethminz)
colmat[3, 7] <- fscolnet(rtnet[, , 1], ethminz)
colmat[3, 8] <- fscolnet(rtnet[, , 2], ethminz)
colmat[3, 9] <- fscolnet(rtnet[, , 3], ethminz)

colnames(colmat) <- c("following T1", "following T2", "following T3", "atmentions T1", "atmentions T2",
    "atmentions T3", "retweets T1", "retweets T2", "retweets T3")
rownames(colmat) <- c("party", "sex", "ethnicity")
# colmat

# write.csv2(colmat, '20190829colmat.csv')

colmatkable <- kbl(colmat, booktabs = TRUE, digits = 2, caption = "Table 2. Coleman’s Homophily Index within the three Twitter layers among Dutch MPs (2017)",
    align = "c") %>%
    kable_classic(full_width = F, html_font = "Cambria") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    column_spec(column = 1, width = "3in")

colmatkable
Table 2. Coleman’s Homophily Index within the three Twitter layers among Dutch MPs (2017)
following T1 following T2 following T3 atmentions T1 atmentions T2 atmentions T3 retweets T1 retweets T2 retweets T3
party 0.23 0.21 0.21 0.39 0.40 0.48 0.80 0.80 0.80
sex 0.05 0.04 0.04 0.07 0.03 0.05 -0.01 -0.03 -0.01
ethnicity 0.12 0.10 0.10 -0.03 0.00 -0.02 0.05 -0.01 -0.01

Table 3

fnet[fnet == 10] <- NA
rtnet[rtnet == 10] <- NA
atmnet[atmnet == 10] <- NA

vrouw_int <- as.integer(vrouw) + 1
partij_int <- as.integer(partij)
ethminz <- ethminz + 1

asmat <- matrix(NA, nrow = 4, ncol = 9)

gfnet1 <- graph_from_adjacency_matrix(fnet[, , 1], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)
gfnet2 <- graph_from_adjacency_matrix(fnet[, , 2], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)
gfnet3 <- graph_from_adjacency_matrix(fnet[, , 3], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)

grtnet1 <- graph_from_adjacency_matrix(rtnet[, , 1], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)
grtnet2 <- graph_from_adjacency_matrix(rtnet[, , 2], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)
grtnet3 <- graph_from_adjacency_matrix(rtnet[, , 3], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)

gatmnet1 <- graph_from_adjacency_matrix(atmnet[, , 1], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)
gatmnet2 <- graph_from_adjacency_matrix(atmnet[, , 2], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)
gatmnet3 <- graph_from_adjacency_matrix(atmnet[, , 3], mode = "directed", weighted = NULL, diag = FALSE,
    add.colnames = NA, add.rownames = NA)

asmat[1, 1] <- assortativity_nominal(gfnet1, types = partij_int, directed = TRUE)
asmat[1, 2] <- assortativity_nominal(gfnet2, types = partij_int, directed = TRUE)
asmat[1, 3] <- assortativity_nominal(gfnet3, types = partij_int, directed = TRUE)
asmat[2, 1] <- assortativity_nominal(gfnet1, types = vrouw_int, directed = TRUE)
asmat[2, 2] <- assortativity_nominal(gfnet2, types = vrouw_int, directed = TRUE)
asmat[2, 3] <- assortativity_nominal(gfnet3, types = vrouw_int, directed = TRUE)
asmat[3, 1] <- assortativity_nominal(gfnet1, types = ethminz, directed = TRUE)
asmat[3, 2] <- assortativity_nominal(gfnet2, types = ethminz, directed = TRUE)
asmat[3, 3] <- assortativity_nominal(gfnet3, types = ethminz, directed = TRUE)
asmat[4, 1] <- assortativity(gfnet1, types1 = lft, directed = TRUE)
asmat[4, 2] <- assortativity(gfnet2, types1 = lft, directed = TRUE)
asmat[4, 3] <- assortativity(gfnet3, types1 = lft, directed = TRUE)

asmat[1, 7] <- assortativity_nominal(grtnet1, types = partij_int, directed = TRUE)
asmat[1, 8] <- assortativity_nominal(grtnet2, types = partij_int, directed = TRUE)
asmat[1, 9] <- assortativity_nominal(grtnet3, types = partij_int, directed = TRUE)
asmat[2, 7] <- assortativity_nominal(grtnet1, types = vrouw_int, directed = TRUE)
asmat[2, 8] <- assortativity_nominal(grtnet2, types = vrouw_int, directed = TRUE)
asmat[2, 9] <- assortativity_nominal(grtnet3, types = vrouw_int, directed = TRUE)
asmat[3, 7] <- assortativity_nominal(grtnet1, types = ethminz, directed = TRUE)
asmat[3, 8] <- assortativity_nominal(grtnet2, types = ethminz, directed = TRUE)
asmat[3, 9] <- assortativity_nominal(grtnet3, types = ethminz, directed = TRUE)
asmat[4, 7] <- assortativity(grtnet1, types1 = lft, directed = TRUE)
asmat[4, 8] <- assortativity(grtnet2, types1 = lft, directed = TRUE)
asmat[4, 9] <- assortativity(grtnet3, types1 = lft, directed = TRUE)

asmat[1, 4] <- assortativity_nominal(gatmnet1, types = partij_int, directed = TRUE)
asmat[1, 5] <- assortativity_nominal(gatmnet2, types = partij_int, directed = TRUE)
asmat[1, 6] <- assortativity_nominal(gatmnet3, types = partij_int, directed = TRUE)
asmat[2, 4] <- assortativity_nominal(gatmnet1, types = vrouw_int, directed = TRUE)
asmat[2, 5] <- assortativity_nominal(gatmnet2, types = vrouw_int, directed = TRUE)
asmat[2, 6] <- assortativity_nominal(gatmnet3, types = vrouw_int, directed = TRUE)
asmat[3, 4] <- assortativity_nominal(gatmnet1, types = ethminz, directed = TRUE)
asmat[3, 5] <- assortativity_nominal(gatmnet2, types = ethminz, directed = TRUE)
asmat[3, 6] <- assortativity_nominal(gatmnet3, types = ethminz, directed = TRUE)
asmat[4, 4] <- assortativity(gatmnet1, types1 = lft, directed = TRUE)
asmat[4, 5] <- assortativity(gatmnet2, types1 = lft, directed = TRUE)
asmat[4, 6] <- assortativity(gatmnet3, types1 = lft, directed = TRUE)

colnames(asmat) <- c("following T1", "following T2", "following T3", "atmentions T1", "atmentions T2",
    "atmentions T3", "retweets T1", "retweets T2", "retweets T3")
rownames(asmat) <- c("party", "sex", "ethnicity", "age")
# asmat write.csv2(asmat, '20190828asmat.csv')



asmatkable <- kbl(asmat, booktabs = TRUE, digits = 2, caption = "Table 3. Newman’s Assortativity Coefficient within the three Twitter layers among Dutch MPs (2017)",
    align = "c") %>%
    kable_classic(full_width = F, html_font = "Cambria") %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    column_spec(column = 1, width = "3in")

asmatkable
Table 3. Newman’s Assortativity Coefficient within the three Twitter layers among Dutch MPs (2017)
following T1 following T2 following T3 atmentions T1 atmentions T2 atmentions T3 retweets T1 retweets T2 retweets T3
party 0.22 0.20 0.20 0.39 0.39 0.47 0.82 0.83 0.83
sex 0.04 0.03 0.04 0.10 0.04 0.06 0.01 -0.01 0.02
ethnicity 0.06 0.05 0.05 0.08 0.02 -0.07 0.09 0.02 0.04
age 0.05 0.04 0.04 0.09 0.02 0.12 0.02 0.01 0.06

RR2 Coleman’s segregation per party

RR.Coleman’s Homophily Index within the three Twitter layers among Dutch MPs (2017), per political party (party size between brackets)
following T1 following T2 following T3 atmentions T1 atmentions T2 atmentions T3 retweets T1 retweets T2 retweets T3
VVD (32) 0.34 0.33 0.33 0.86 0.82 0.87 0.41 0.35 0.41
CDA (19) 0.24 0.22 0.23 0.83 0.80 0.76 0.53 0.56 0.50
D66 (19) 0.21 0.19 0.17 0.89 0.85 0.85 0.48 0.45 0.57
PVV (18) 0.52 0.48 0.47 0.94 0.98 0.98 0.27 0.63 0.43
SP (14) 0.29 0.19 0.25 0.86 0.90 0.90 0.40 0.39 0.58
GroenLinks (14) 0.20 0.17 0.17 0.73 0.81 0.75 0.39 0.39 0.38
PvdA (9) 0.12 0.11 0.10 0.80 0.52 0.44 0.32 0.22 0.23
CU (5) 0.09 0.09 0.09 0.56 0.54 0.60 0.36 0.21 0.31
PvdDieren (5) 0.05 0.04 0.04 0.60 0.73 0.88 0.26 0.31 0.61
50Plus (4) 0.09 0.10 0.10 1.00 0.59 0.71 0.29 0.32 1.00
DENK (3) 0.06 0.06 0.06 0.66 1.00 0.39 0.26 0.19 -1.00
SGP (3) 0.01 0.01 0.01 0.37 0.26 0.57 0.28 0.32 NaN
FvD (2) 0.14 0.12 0.08 0.19 NaN 0.50 0.14 -1.00 -1.00

References

Bojanowski, Michał, and Rense Corten. 2014. “Measuring Segregation in Social Networks.” Social Networks 39: 14–32. https://doi.org/https://doi.org/10.1016/j.socnet.2014.04.001.
Tolsma, Jochem, and Niels Spierings. (submitted). “Twitter and Divides in the Dutch Parliament: Social and Political Segregation in the Following, @-Mentions and Retweets Networks.” - - (-): –. -.
LS0tDQp0aXRsZTogIlJlcGxpY2F0aW9uIHBhY2thZ2UtRGVzY3JpcHRpdmVzIg0KYXV0aG9yOiAnW0pvY2hlbSBUb2xzbWFdKGh0dHBzOi8vd3d3LmpvY2hlbXRvbHNtYS5ubCkgLSBSYWRib3VkIFVuaXZlcnNpdHkgLyBVbml2ZXJzaXR5IG9mIEdyb25pbmdlbiwgdGhlIE5ldGhlcmxhbmRzJw0KYmlibGlvZ3JhcGh5OiByZWZlcmVuY2VzLmJpYg0KZGF0ZTogIkxhc3QgY29tcGlsZWQgb24gYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiwgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogIHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KYGBge3IgZ2xvYmFsc2V0dGluZ3MsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KbGlicmFyeShrbml0cikNCm9wdHNfY2h1bmskc2V0KHRpZHkub3B0cz1saXN0KHdpZHRoLmN1dG9mZj0xMDApLHRpZHk9VFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsY29tbWVudCA9ICIjPiIsIGNhY2hlPVRSVUUsIGVjaG89RkFMU0UsIGNsYXNzLnNvdXJjZT1jKCJ0ZXN0IiksIHJlc3VsdHMgPSAiaG9sZCIsIGNsYXNzLm91dHB1dD1jKCJ0ZXN0MiIpKQ0Kb3B0aW9ucyh3aWR0aCA9IDEwMCkNCnJnbDo6c2V0dXBLbml0cigpDQpgYGANCg0KYGBge3IgY29sb3JpemUsIGVjaG89RkFMU0V9DQpjb2xvcml6ZSA8LSBmdW5jdGlvbih4LCBjb2xvcikgew0KICBpZiAoa25pdHI6OmlzX2xhdGV4X291dHB1dCgpKSB7DQogICAgc3ByaW50ZigiXFx0ZXh0Y29sb3J7JXN9eyVzfSIsIGNvbG9yLCB4KQ0KICB9IGVsc2UgaWYgKGtuaXRyOjppc19odG1sX291dHB1dCgpKSB7DQogICAgc3ByaW50ZigiPHNwYW4gc3R5bGU9J2NvbG9yOiAlczsnPiVzPC9zcGFuPiIsIGNvbG9yLCANCiAgICAgICAgICAgIHgpDQogIH0gZWxzZSB4DQp9DQoNCmBgYA0KDQpgYGB7ciBrbGlwcHksIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRSwgZXZhbD1UUlVFfQ0Ka2xpcHB5OjprbGlwcHkocG9zaXRpb24gPSBjKCd0b3AnLCAncmlnaHQnKSkNCiNrbGlwcHk6OmtsaXBweShjb2xvciA9ICdkYXJrcmVkJykNCiNrbGlwcHk6OmtsaXBweSh0b29sdGlwX21lc3NhZ2UgPSAnQ2xpY2sgdG8gY29weScsIHRvb2x0aXBfc3VjY2VzcyA9ICdEb25lJykNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KcHJlLnRlc3Qgew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCiAgb3ZlcmZsb3cteTogYXV0bzsNCiAgb3ZlcmZsb3cteDogYXV0bzsNCiAgbWFyZ2luOiAwcHg7DQp9DQoNCnByZS50ZXN0MiB7DQogIG1heC1oZWlnaHQ6IDMwMHB4Ow0KICBvdmVyZmxvdy15OiBhdXRvOw0KICBvdmVyZmxvdy14OiBhdXRvOw0KICBtYXJnaW46IDBweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQogIGNvbG9yOiByZ2IoMjAxLCA3NiwgNzYpOw0KfQ0KDQoNCmgxLCAuaDEsIGgyLCAuaDIsIGgzLCAuaDMgew0KICBtYXJnaW4tdG9wOiAyNHB4Ow0KfQ0KDQoNCmBgYA0KDQoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCg0KIyBJbnRybyAgDQoNCg0KVGhpcyBbd2Vic2l0ZV0oaHR0cHM6Ly9qb2NoZW10b2xzbWEuZ2l0aHViLmlvL1R3aXR0ZXIvKSBpcyBhIHJlcGxpY2F0aW9uIHBhY2thZ2UgZm9yIHRoZSBwYXBlciAiKipUd2l0dGVyIGFuZCBkaXZpZGVzIGluIHRoZSBEdXRjaCBQYXJsaWFtZW50OiBTb2NpYWwgYW5kIFBvbGl0aWNhbCBTZWdyZWdhdGlvbiBpbiB0aGUgZm9sbG93aW5nLCBALW1lbnRpb25zIGFuZCByZXR3ZWV0cyBuZXR3b3JrcyoqIiBieSBAVG9sc21hMjAyMS4gIA0KDQpJdCBjb250YWlucyBSIGNvZGUgdG8gcmVwbGljYXRlIGFsbCBUYWJsZXMvRmlndXJlcy9BcHBlbmRpeCBpbiB0aGUgbWFudXNjcmlwdC4NCg0KVG8gY29weSB0aGUgY29kZSBjbGljayB0aGUgYnV0dG9uIGluIHRoZSB1cHBlciByaWdodCBjb3JuZXIgb2YgdGhlIGNvZGUtY2h1bmtzLg0KDQpVc2UgdGhlIHRvcCBtZW51IHRvIG5hdmlnYXRlIHRvIHRoZSBzZWN0aW9uIG9mIGludGVyZXN0LiANCg0KVGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgd2Vic2l0ZSBjYW4gYmUgZm91bmQgb24gW0dpdGh1Yl0oaHR0cHM6Ly9naXRodWIuY29tL0pvY2hlbVRvbHNtYS9Ud2l0dGVyKQ0KDQpRdWVzdGlvbnMgY2FuIGJlIGFkZHJlc3NlZCB0byBbSm9jaGVtIFRvbHNtYV0obWFpbHRvOmpvY2hlbS50b2xzbWFAcnUubmwpLg0KDQotLS0gIA0KDQojIFBhY2thZ2VzICANCg0KYGBge3IgcGFja2FnZXMsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiNpbnN0YWxsIGlmIG5lY2Vzc2FyeSANCmlmICghcmVxdWlyZSgidGlkeXZlcnNlIiwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkge2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIsIGRlcGVuZGVuY2llcz1UUlVFKX0NCmlmICghcmVxdWlyZSgiZHBseXIiLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7aW5zdGFsbC5wYWNrYWdlcygiZHBseXIiLCBkZXBlbmRlbmNpZXM9VFJVRSl9DQppZiAoIXJlcXVpcmUoImZvcmVpZ24iLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7aW5zdGFsbC5wYWNrYWdlcygiZm9yZWlnbiIsIGRlcGVuZGVuY2llcz1UUlVFKX0NCmlmICghcmVxdWlyZSgiaWdyYXBoIiwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkge2luc3RhbGwucGFja2FnZXMoImlncmFwaCIsIGRlcGVuZGVuY2llcz1UUlVFKX0NCmlmICghcmVxdWlyZSgia25pdHIiLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7aW5zdGFsbC5wYWNrYWdlcygia25pdHIiLCBkZXBlbmRlbmNpZXM9VFJVRSl9DQppZiAoIXJlcXVpcmUoImthYmxlRXh0cmEiLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7aW5zdGFsbC5wYWNrYWdlcygia2FibGVFeHRyYSIsIGRlcGVuZGVuY2llcz1UUlVFKX0NCmlmICghcmVxdWlyZSgiUlNpZW5hIiwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkge2luc3RhbGwucGFja2FnZXMoIlJTaWVuYSIsIGRlcGVuZGVuY2llcz1UUlVFKX0NCmlmICghcmVxdWlyZSgibmV0c2VnIiwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkge2luc3RhbGwucGFja2FnZXMoIm5ldHNlZyIsIGRlcGVuZGVuY2llcz1UUlVFKX0NCg0KDQoNCiNsb2FkIHBhY2thZ2VzLg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShmb3JlaWduKQ0KbGlicmFyeShpZ3JhcGgpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShSU2llbmEpDQpsaWJyYXJ5KG5ldHNlZykNCg0KYGBgDQoNCg0KLS0tICAgDQoNCg0KIyBDdXN0b20gc2VncmVnYXRpb24gZnVuY3Rpb25zIA0KDQpEZWZpbmUgY3VzdG9tIGZ1bmN0aW9ucyB0byBjYWxjdWxhdGUgbmV0d29yay1zZWdyZWdhdGlvbjogIA0KDQotIGZkZW5zaXR5OiBkZW5zaXR5IG9mIG5ldHdvcmsgIA0KLSBmZGVuc2l0eWludHJhOiBkZW5zaXR5IHdpdGhpbiBzdWJncm91cHMgIA0KLSBmc2NvbG5ldDogQ29sZW1hbuKAmXMgSG9tb3BoaWx5IEluZGV4IGF0IHRoZSBuZXR3b3JrLWxldmVsLCBzZWUgWyhAQk9KQU5PV1NLSTIwMTQxNCldICANCi0gZmhvbW9tYXQ6IG1ha2UgYSBtYXRyaXggaW5kaWNhdGluZyB3aGV0ZXIgbm9kZXMgYXJlIHNpbWlsYXIgIA0KLSBmbmR5YWRzOiBjb3VudCBudW1iZXIgb2YgZHlhZHMgIA0KLSBmbmRheWRzMjogY291bnQgbnVtYmVyIG9mIHdpdGhpbiBzdWJncm91cCBkeWFkcw0KDQpgYGB7ciBmdW5jdGlvbnMsIGVjaG89VFJVRX0NCmZkZW5zaXR5IDwtIGZ1bmN0aW9uKHgpIHsgDQoJI3ggaXMgeW91ciBub21pbmF0aW9uIG5ldHdvcmsNCgkjc2hvdWxkIGJlIHJlbGF0aW9uc2hpcCwgZGl2aWRlZCBieSBhbGwgcG9zc2libGUgb2ZmIGRpYWdvbmFsIHRpZXMuIA0KCSNtYWtlIHN1cmUgZGlhZ29uYWwgY2VsbHMgYXJlIE5BDQoJZGlhZyh4KSA8LSBOQQ0KCXhbeD09MTBdIDwtIE5BDQoJc3VtKHg9PTEsIG5hLnJtPVQpIC8gKHN1bSh4PT0xIHwgeD09MCwgbmEucm09VCkpDQp9DQoNCmZkZW5zaXR5aW50cmEgPC0gZnVuY3Rpb24oeCwgQSkgeyANCgkjQSBpcyBtYXRyaXggaW5kaWNhdGluZyB3aGV0aGVyIG5vZGVzIGNvbnN0aXR1dGluZyBkeWFkIGhhdmUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MNCglkaWFnKHgpIDwtIE5BDQoJeFt4PT0xMF0gPC0gTkENCglkaWFnKEEpIDwtIE5BDQoJc3VtKHg9PTEgJiBBPT0xLCBuYS5ybT1UKSAvIChzdW0oKHg9PTEgfCB4PT0wKSAmIEE9PTEsIG5hLnJtPVQpKQ0KfQ0KDQpmZGVuc2l0eWludGVyIDwtIGZ1bmN0aW9uKHgsIEEpIHsgDQoJI0EgaXMgbWF0cml4IGluZGljYXRpbmcgd2hldGhlciBub2RlcyBjb25zdGl0dXRpbmcgZHlhZCBoYXZlIHNhbWUgY2hhcmFjdGVyaXN0aWNzDQoJZGlhZyh4KSA8LSBOQQ0KCXhbeD09MTBdIDwtIE5BDQoJZGlhZyhBKSA8LSBOQQ0KCXN1bSh4PT0xICYgQSE9MSwgbmEucm09VCkgLyAoc3VtKCh4PT0xIHwgeD09MCkgJiBBIT0xLCBuYS5ybT1UKSkNCn0NCg0KZmhvbW9tYXQgPC0gZnVuY3Rpb24oeCkgew0KeG1hdCA8LSBtYXRyaXgoeCwgbnJvdz1sZW5ndGgoeCksIG5jb2w9bGVuZ3RoKHgpKQ0KeG1hdHQgPC0gdCh4bWF0KQ0KeGhvbW8gPC0geG1hdD09eG1hdHQNCnJldHVybih4aG9tbykNCn0NCg0KZm5keWFkcyA8LSBmdW5jdGlvbih4KSB7DQoJZGlhZyh4KSA8LSBOQQ0KCXhbeD09MTBdIDwtIE5BDQoJKHN1bSgoeD09MSB8IHg9PTApICwgbmEucm09VCkpDQp9DQoNCmZuZHlhZHMyIDwtIGZ1bmN0aW9uKHgsIEEpIHsNCglkaWFnKHgpIDwtIE5BDQoJeFt4PT0xMF0gPC0gTkENCglkaWFnKEEpIDwtIE5BDQoJKHN1bSgoeD09MSB8IHg9PTApICYgQT09MSwgbmEucm09VCkpDQp9DQoNCg0KZnNjb2xuZXQgPC0gZnVuY3Rpb24obmV0d29yaywgY2NvdmFyKSB7DQojQ2FsY3VsYXRlIGNvbGVtYW4gb24gbmV0d29yayBsZXZlbDogaHR0cHM6Ly9yZWFkZXIuZWxzZXZpZXIuY29tL3JlYWRlci9zZC9waWkvUzAzNzg4NzMzMTQwMDAyMzk/dG9rZW49QTQyRjk5RkY2RTJCNzUwNDM2REQyQ0IwREI3QjFGNDFCREVDMTYwNTJBNDU2ODNDMDI2NDREQUY4ODIxNUEzMzc5NjM2QjJBQTE5N0I2NTk0MUQ2MzczRTlFMkVFNDEzDQoNCglmaG9tb21hdCA8LSBmdW5jdGlvbih4KSB7DQoJeG1hdCA8LSBtYXRyaXgoeCwgbnJvdz1sZW5ndGgoeCksIG5jb2w9bGVuZ3RoKHgpKQ0KCXhtYXR0IDwtIHQoeG1hdCkNCgl4aG9tbyA8LSB4bWF0PT14bWF0dA0KCXJldHVybih4aG9tbykNCgl9DQoNCglmc3VtaW50cmEgPC0gZnVuY3Rpb24oeCwgQSkgeyANCgkjQSBpcyBtYXRyaXggaW5kaWNhdGluZyB3aGV0aGVyIG5vZGVzIGNvbnN0aXR1dGluZyBkeWFkIGhhdmUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MNCglkaWFnKHgpIDwtIE5BDQoJeFt4PT0xMF0gPC0gTkENCglkaWFnKEEpIDwtIE5BDQoJc3VtKHg9PTEgJiBBPT0xLCBuYS5ybT1UKSANCgl9DQoNCgkjZXhwZWNhdGlvbiB3Kj1zdW1fZyBzdW1faSAobmkoKG5nLTEpLyhOLTEpKSkNCgluZXR3b3JrW25ldHdvcms9PTEwXSA8LSBOQQ0KCW5pIDwtIHJvd1N1bXMobmV0d29yaywgbmEucm09VCkNCgluZyA8LSBOQQ0KCWZvciAoaSBpbiAxOmxlbmd0aChjY292YXIpKSB7bmdbaV0gPC0gdGFibGUoY2NvdmFyKVtyb3duYW1lcyh0YWJsZShjY292YXIpKT09Y2NvdmFyW2ldXX0NCglOIDwtIGxlbmd0aChjY292YXIpDQoJd2V4cCA8LSBzdW0obmkqKChuZy0xKS8oTi0xKSksIG5hLnJtPVQpDQoNCgkjd2dnMSBob3cgbWFueSBpbnRyYWdyb3VwIHRpZXMNCgl3IDwtIGZzdW1pbnRyYShuZXR3b3JrLCBmaG9tb21hdChjY292YXIpKSANCgkNCglTY29sX25ldCA8LSBpZmVsc2Uodz49d2V4cCwgKHctd2V4cCkgLyAoc3VtKG5pLCBuYS5ybT1UKSAtIHdleHApLCAodyAtIHdleHApL3dleHApDQoJcmV0dXJuKFNjb2xfbmV0KQ0KDQp9DQoNCg0KYGBgDQoNCi0tLSAgDQoNCiMgTG9hZCBkYXRhIG9iamVjdHMgey50YWJzZXQgLnRhYnNldC1mYWRlfSAgDQoNCiANCg0KRGF0YSBvYmplY3RzOiAgDQoNCi0gW2tleV0oLi9kYXRhLXByb2Nlc3NlZC9rZXkgbW9lZGVyYmVzdGFuZCAyMDE3MTExNC5zYXYpOiBpbmZvcm1hdGlvbiBvbiBhbGwgcG9saXRpY2lhbnMgb24gZWxlY3Rpb24gbGlzdCAgDQotIFt0d2l0dGVyXSguL2RhdGEtcHJvY2Vzc2VkL3R3aXR0ZXJfMjAxOTA5MTkuUkRhdGEpICANCiAgICAtIGtleWY6IGluZm9ybWF0aW9uIG9uIGFsbCAxNDcgTVBzIHdpdGggdHdpdHRlciBoYW5kbGUgIA0KICAgIC0gbXlkYXRhOiBSU2llbmEgb2JqZWN0IHdpdGggYWxsIGtpbmQgb2YgZ29vZGllcyBpbnNpZGUgIA0KICAgIC0gc2VhdHM6IHNlYXRpbmcgY29vcmRpbmF0ZXMgb2YgSG9QICh1c2VkIGZvciBwbG90dGluZykNCg0KYGBge3IgZGF0YSwgZWNobz1UUlVFLCB3YXJuaW5nPUZBTFNFfQ0KI1NUQVAgMTogcmVhZCBpbiBkYXRhDQprZXkgPC0gcmVhZC5zcHNzKCdkYXRhLXByb2Nlc3NlZFxca2V5IG1vZWRlcmJlc3RhbmQgMjAxNzExMTQuc2F2JywgdXNlLnZhbHVlLmxhYmVscz1ULCB0by5kYXRhLmZyYW1lPVQpDQoNCg0KbG9hZCgiZGF0YS1wcm9jZXNzZWRcXHR3aXR0ZXJfMjAxOTA5MTkuUkRhdGEiKQ0KI3N0cih0d2l0dGVyXzIwMTkwOTE5LDEpDQprZXlmIDwtIHR3aXR0ZXJfMjAxOTA5MTlbWzFdXQ0KbXlkYXRhIDwtIHR3aXR0ZXJfMjAxOTA5MTlbWzJdXQ0Kc2VhdHMgPC0gdHdpdHRlcl8yMDE5MDkxOVtbM11dDQpgYGANCg0KLS0tICANCg0KIyBTdW1tYXJ5IG9mIGRhdGFzZXQgdXNlZC4gDQoNCg0KYGBge3IgZGF0YXNldCwgZWNobz1UUlVFfQ0KI3NlbGVjdCBhbGwgTVBzICh3ZSBuZWVkIHRvIGZpbHRlciB0aGUgY29ycmVjdCBFR09oYW5kbGUpDQpkYXRhX21wIDwtIGtleSAlPiUgDQogIGZpbHRlcihFbGVjdGVkMjAxNzAzMTU9PSJ5ZXMsIHZlcmtvemVuIiAmICEoRUdPaGFuZGxlICVpbiUgYygxMDQwMSwgMTA0MDMsIDEzMTAyLCAxNTEwMiwgMTA2MTAxLCA0MTQwMCkpKSAlPiUNCiAgc2VsZWN0KCJOYWFtIiwgIlBhcnRpaiIsICJHZXNsYWNodCIsICJHZWJKYWFyIiwgIkV0aE1pbloiLCAiUGxla0xpanN0IiwgIkthbWVybGlkMjAxNjExMjMiLCJaZXRlbFNlZ21lbnQyMDE3MDMxNSIsICJaZXRlbFJpajIwMTcwMzE1IiwgIlpldGVsS29sb20yMDE3MDMxNSIpDQoNCiMgbm90IG5lY2Vzc2FyeTogIlR3aXR0ZXJoYW5kbGUiICJFbGVjdGVkMjAxNzAzMTUiDQoNCnNlYXRzJFpldGVsU2VnbWVudDIwMTcwMzE1IDwtIHNlYXRzJHNlZ21lbnRzDQpzZWF0cyRaZXRlbFJpajIwMTcwMzE1IDwtIHNlYXRzJHJvd3MNCnNlYXRzJFpldGVsS29sb20yMDE3MDMxNSA8LSBzZWF0cyRjb2x1bW5zDQoNCmRhdGFfbXAgPC0gaW5uZXJfam9pbihkYXRhX21wLCBzZWF0cykgJT4lDQogIHNlbGVjdCgiTmFhbSIsICJQYXJ0aWoiLCAiR2VzbGFjaHQiLCAiR2ViSmFhciIsICJFdGhNaW5aIiwgIlBsZWtMaWpzdCIsICJLYW1lcmxpZDIwMTYxMTIzIiwiWmV0ZWxTZWdtZW50MjAxNzAzMTUiLCAiWmV0ZWxSaWoyMDE3MDMxNSIsICJaZXRlbEtvbG9tMjAxNzAzMTUiLCAiWCIsICJZIikNCg0KDQpjb2xuYW1lcyhkYXRhX21wKSA8LSBjKCJOYW1lIiwgIlBhcnR5IiwgIlNleCIsICJCaXJ0aCBZZWFyIiwgIlZpc2libGUgTWlub3JpdHkiLCAiTGlzdCBQb3NpdGlvbiIsICJJbmN1bWJlbmN5IHN0YXR1cyIsIlNlYXRpbmcgU2VnbWVudCIsICJTZWF0aW5nIFJvdyIsICJTZWF0aW5nIENvbHVtbiIsICJYLWNvb3JkLiIsICJZLWNvb3JkIikNCg0KZGF0YV9tcCRTZXggPC0gYXMuY2hhcmFjdGVyKGRhdGFfbXAkU2V4KQ0KZGF0YV9tcCRTZXhbZGF0YV9tcCRTZXg9PSJ2cm91dyJdIDwtICJmZW1hbGUiDQpkYXRhX21wJFNleFtkYXRhX21wJFNleD09Im1hbiJdIDwtICJtYWxlIg0KDQoNCnN1bWRhdCA8LSBrYmwoZGF0YV9tcCwgYm9va3RhYnM9VFJVRSwgZGlnaXRzPTIsIGNhcHRpb249IkRhdGFzZXQgc3VtbWFyeSIsIGFsaWduID0gImMiKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIkNhbWJyaWEiKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkgDQoNCnNjcm9sbF9ib3goc3VtZGF0LCB3aWR0aD0iMTAwJSIsIGhlaWdodD0iNTAwcHgiKQ0KDQoNCmBgYA0KDQotLS0gIA0KDQoNCg0KIyMgQXBwZW5kaXggQS4gDQoNCg0KYGBge3IgdGFibGUxLCBlY2hvPVRSVUV9DQoNCiNzZWxlY3QgYWxsIE1QcyAod2UgbmVlZCB0byBmaWx0ZXIgdGhlIGNvcnJlY3QgRUdPaGFuZGxlKQ0KZGF0YV9tcCA8LSBrZXkgJT4lIA0KICBmaWx0ZXIoRWxlY3RlZDIwMTcwMzE1PT0ieWVzLCB2ZXJrb3plbiIgJiAhKEVHT2hhbmRsZSAlaW4lIGMoMTA0MDEsIDEwNDAzLCAxMzEwMiwgMTUxMDIsIDEwNjEwMSwgNDE0MDApKSkNCg0KZGcgPC0gZGF0YV9tcCAlPiUgDQogIGdyb3VwX2J5KEdlc2xhY2h0KSAlPiUNCiAgc3VtbWFyaXplKGNvdW50PSBuKCksIGZyZXE9Y291bnQvMTUwKQ0KDQpkZSA8LSBkYXRhX21wICU+JSANCiAgZ3JvdXBfYnkoRXRoTWluWikgJT4lDQogIHN1bW1hcml6ZShjb3VudD0gbigpLCBmcmVxPWNvdW50LzE1MCkNCg0KZGEgPC0gZGF0YV9tcCAlPiUgDQogIG11dGF0ZSAodmFyaWFibGU9IkFHRSIpICU+JQ0KICBzdW1tYXJpemUoYWdlPWZpcnN0KHZhcmlhYmxlKSwgbWVhbj0gbWVhbigyMDE3LUdlYkphYXIsIG5hLnJtPVQpLCBzZD1zZCgyMDE3LUdlYkphYXIsIG5hLnJtPVQpKSANCg0KZHAgPC0gZGF0YV9tcCAlPiUgDQogIGdyb3VwX2J5KFBhcnRpaikgJT4lDQogIHN1bW1hcml6ZShjb3VudD0gbigpLCBmcmVxPWNvdW50LzE1MCkgJT4lDQogIGFycmFuZ2UoZGVzYyhjb3VudCkpDQoNCiMgYnkgcGFydHkNCmRncCA8LSBkYXRhX21wICU+JSANCiAgZ3JvdXBfYnkoUGFydGlqKSAlPiUNCiAgYWRkX3RhbGx5KCkgJT4lIA0KICBncm91cF9ieShQYXJ0aWosIEdlc2xhY2h0KSAlPiUNCiAgc3VtbWFyaXplKGNvdW50PW4oKSwgZnJlcT1jb3VudC9maXJzdChuKSwgZmlyc3Q9Zmlyc3QobikpICU+JQ0KICBhcnJhbmdlKGRlc2MoZmlyc3QpKSAlPiUNCiAgc2VsZWN0KCJQYXJ0aWoiLCAiR2VzbGFjaHQiLCAiY291bnQiLCAiZnJlcSIpDQoNCmRlcCA8LSBkYXRhX21wICU+JSANCiAgZ3JvdXBfYnkoUGFydGlqKSAlPiUNCiAgYWRkX3RhbGx5KCkgJT4lIA0KICBncm91cF9ieShQYXJ0aWosIEV0aE1pblopICU+JQ0KICBzdW1tYXJpemUoY291bnQ9bigpLCBmcmVxPWNvdW50L2ZpcnN0KG4pLCBmaXJzdD1maXJzdChuKSkgJT4lDQogIGFycmFuZ2UoZGVzYyhmaXJzdCkpICU+JQ0KICBzZWxlY3QoIlBhcnRpaiIsICJFdGhNaW5aIiwgImNvdW50IiwgImZyZXEiKQ0KDQpkYXAgPC0gZGF0YV9tcCAlPiUNCiAgbXV0YXRlICh2YXJpYWJsZT0iQUdFIikgJT4lDQogIGdyb3VwX2J5KFBhcnRpaikgJT4lDQogIGFkZF90YWxseSgpICU+JSANCiAgc3VtbWFyaXplKGFnZT1maXJzdCh2YXJpYWJsZSksIG1lYW49IG1lYW4oMjAxNy1HZWJKYWFyLCBuYS5ybT1UKSwgc2Q9c2QoMjAxNy1HZWJKYWFyLCBuYS5ybT1UKSwgZmlyc3Q9Zmlyc3QobikpICU+JSANCiAgYXJyYW5nZShkZXNjKGZpcnN0KSkgJT4lDQogIHNlbGVjdCgiUGFydGlqIiwgImFnZSIsICJtZWFuIiwgInNkIikgDQoNCmRnIDwtIGRnICU+JSBhZGRfY29sdW1uKGdyb3VwaW5nID0gIk5PIiwgLmJlZm9yZT0iR2VzbGFjaHQiKQ0KZGEgPC0gZGEgJT4lIGFkZF9jb2x1bW4oZ3JvdXBpbmcgPSAiTk8iLCAuYmVmb3JlPSJhZ2UiKQ0KZGUgPC0gZGUgJT4lIGFkZF9jb2x1bW4oZ3JvdXBpbmcgPSAiTk8iLCAuYmVmb3JlPSJFdGhNaW5aIikNCmRwIDwtIGRwICU+JSBhZGRfY29sdW1uKGdyb3VwaW5nID0gIk5PIiwgLmJlZm9yZT0iUGFydGlqIikNCg0KDQojIGRncA0KIyBkYXANCiMgZGVwDQoNCiMgd3JpdGVfY3N2KGRnLCAidGFibGUuY3N2IikNCiMgd3JpdGVfY3N2KGRhLCAidGFibGUuY3N2IiwgYXBwZW5kID0gVFJVRSkNCiMgd3JpdGVfY3N2KGRlLCAidGFibGUuY3N2IiwgYXBwZW5kID0gVFJVRSkNCiMgd3JpdGVfY3N2KGRwLCAidGFibGUuY3N2IiwgYXBwZW5kID0gVFJVRSkNCiMgDQojIHdyaXRlX2NzdihkZ3AsICJ0YWJsZS5jc3YiLCBhcHBlbmQgPSBUUlVFKQ0KIyB3cml0ZV9jc3YoZGFwLCAidGFibGUuY3N2IiwgYXBwZW5kID0gVFJVRSkNCiMgd3JpdGVfY3N2KGRlcCwgInRhYmxlLmNzdiIsIGFwcGVuZCA9IFRSVUUpDQoNCnRlc3QgPC0gcmVhZF9jc3YoJ3RhYmxlLmNzdicpDQoNCmNvbG5hbWVzKHRlc3QpIDwtIGMoImdyb3VwaW5nIiwgInNvY2lhbCBkaW1lbnNpb24iLCAiTiAvIG1lYW4iLCAicHJvcC4gLyBTRCIpDQp0ZXN0JGdyb3VwaW5nW3Rlc3QkZ3JvdXBpbmc9PSJOTyJdIDwtICJIb1AiDQp0ZXN0W3Rlc3Q9PSJtYW4iXSA8LSAibWFsZSINCnRlc3RbdGVzdD09InZyb3V3Il0gPC0gImZlbWFsZSINCnRlc3RbdGVzdD09IjAiXSA8LSAibm8gdmlzaWJsZSBtaW5vcml0eSINCnRlc3RbLDJdW3Rlc3RbLDJdPT0iMSJdIDwtICJ2aXNpYmxlIG1pbm9yaXR5Ig0KDQoNCkFwcGVuZGl4QSA8LSBrYmwodGVzdCwgYm9va3RhYnM9VFJVRSwgZGlnaXRzPTIsIGNhcHRpb249IkFwcGVuZGl4IEEuIENvbXBvc2l0aW9uIG9mIHBhcmxpYW1lbnQgYW5kIHBvbGl0aWNhbCBwYXJ0aWVzIGluIHRoZSBOZXRoZXJsYW5kcyAoMjAxNykiLCBhbGlnbiA9ICJjIikgJT4lDQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsIGh0bWxfZm9udCA9ICJDYW1icmlhIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpIA0KDQpzY3JvbGxfYm94KEFwcGVuZGl4QSwgd2lkdGg9IjEwMCUiLCBoZWlnaHQ9IjUwMHB4IikNCg0KI3NhdmVfa2FibGUoQXBwZW5kaXhBLCAiQXBwZW5kaXhBLmh0bWwiKQ0KIA0KICANCmBgYA0KDQoNCi0tLSAgDQoNCg0KDQojIFNFR1JFR0FUSU9OIC0gRGVzY3JpcHRpdmUgc3RhdGlzdGljcyB7LnRhYnNldCAudGFic2V0LWZhZGV9IA0KDQoNCg0KYGBge3IgZGF0YXRhYmxlMiwgZWNobz1UUlVFfQ0KI1dlIHJldHJpZXZlIHRoZSBkYXRhIGZyb20gdGhlIFJTaWVuYSBkYXRhLW9iamVjdCANCg0KZm5ldCA8LSBteWRhdGEkZGVwdmFycyRmbmV0DQphdG1uZXQgPC0gbXlkYXRhJGRlcHZhcnMkYXRtbmV0DQpydG5ldCA8LSBteWRhdGEkZGVwdmFycyRydG5ldA0KDQp2cm91dyA8LSBteWRhdGEkY0NvdmFycyR2cm91dw0KcGFydGlqIDwtIG15ZGF0YSRjQ292YXJzJHBhcnRpag0KZXRobWlueiA8LSBteWRhdGEkY0NvdmFycyRldGhtaW56DQpsZnQgPC0gbXlkYXRhJGNDb3ZhcnMkbGZ0DQoNCmV0aG1pbnogPC0gZXRobWlueiArIGF0dHJpYnV0ZXMoZXRobWlueikkbWVhbg0KcGFydGlqIDwtIHBhcnRpaiArIGF0dHJpYnV0ZXMocGFydGlqKSRtZWFuDQp2cm91dyA8LSB2cm91dyArIGF0dHJpYnV0ZXModnJvdXcpJG1lYW4NCmxmdCA8LSBsZnQgKyBhdHRyaWJ1dGVzKGxmdCkkbWVhbg0KDQp2cm91d20gPC0gZmhvbW9tYXQodnJvdXcpDQpwYXJ0aWptIDwtIGZob21vbWF0KHBhcnRpaikNCmV0aG1pbnptIDwtIGZob21vbWF0KGV0aG1pbnopDQoNCnhtYXQgPC0gbWF0cml4KGV0aG1pbnosIG5yb3c9bGVuZ3RoKGV0aG1pbnopLCBuY29sPWxlbmd0aChldGhtaW56KSkNCnhtYXR0IDwtIHQoeG1hdCkNCm1pbm9yaXR5bSA8LSB4bWF0PT0xICYgeG1hdHQ9PTENCg0KI2ZvciBhZ2UgbWF4IDUgeWVhciBkaWZmZXJlbmNlIC8gZm9yIGRlc2NyaXB0aXZlcw0KeG1hdCA8LSBtYXRyaXgobGZ0LCBucm93PWxlbmd0aChsZnQpLCBuY29sPWxlbmd0aChsZnQpKQ0KeG1hdHQgPC0gdCh4bWF0KQ0KbGZ0bSA8LSAoYWJzKHhtYXQgLSB4bWF0dCkgPCA2KQ0KDQojIGZuZHlhZHMyKGZuZXRbLCwxXSwgdnJvdXdtKQ0KIyBmbmR5YWRzMihmbmV0WywsM10sIHZyb3V3bSkNCiMgZm5keWFkczIoZm5ldFssLDFdLCBwYXJ0aWptKQ0KIyBmbmR5YWRzMihmbmV0WywsM10sIHBhcnRpam0pDQojIGZuZHlhZHMyKGZuZXRbLCwxXSwgZXRobWluem0pDQojIGZuZHlhZHMyKGZuZXRbLCwzXSwgZXRobWluem0pDQoNCmBgYCANCg0KPGJyPiANCg0KIyMgVGFibGUgMSAgIA0KDQoNCg0KYGBge3IgLCBlY2hvPVRSVUV9DQoNCmRlc21hdCA8LSBtYXRyaXgoTkEsIG5yb3c9MTAsIG5jb2w9OSkNCmRlc21hdFsxLDFdIDwtIGZkZW5zaXR5KGZuZXRbLCwxXSkNCmRlc21hdFsxLDJdIDwtIGZkZW5zaXR5KGZuZXRbLCwyXSkNCmRlc21hdFsxLDNdIDwtIGZkZW5zaXR5KGZuZXRbLCwzXSkNCmRlc21hdFsyLDFdIDwtIGZkZW5zaXR5aW50cmEoZm5ldFssLDFdLCB2cm91d20pDQpkZXNtYXRbMiwyXSA8LSBmZGVuc2l0eWludHJhKGZuZXRbLCwyXSwgdnJvdXdtKQ0KZGVzbWF0WzIsM10gPC0gZmRlbnNpdHlpbnRyYShmbmV0WywsM10sIHZyb3V3bSkNCmRlc21hdFszLDFdIDwtIGZkZW5zaXR5aW50ZXIoZm5ldFssLDFdLCB2cm91d20pDQpkZXNtYXRbMywyXSA8LSBmZGVuc2l0eWludGVyKGZuZXRbLCwyXSwgdnJvdXdtKQ0KZGVzbWF0WzMsM10gPC0gZmRlbnNpdHlpbnRlcihmbmV0WywsM10sIHZyb3V3bSkNCmRlc21hdFs0LDFdIDwtIGZkZW5zaXR5aW50cmEoZm5ldFssLDFdLCBwYXJ0aWptKQ0KZGVzbWF0WzQsMl0gPC0gZmRlbnNpdHlpbnRyYShmbmV0WywsMl0sIHBhcnRpam0pDQpkZXNtYXRbNCwzXSA8LSBmZGVuc2l0eWludHJhKGZuZXRbLCwzXSwgcGFydGlqbSkNCmRlc21hdFs1LDFdIDwtIGZkZW5zaXR5aW50ZXIoZm5ldFssLDFdLCBwYXJ0aWptKQ0KZGVzbWF0WzUsMl0gPC0gZmRlbnNpdHlpbnRlcihmbmV0WywsMl0sIHBhcnRpam0pDQpkZXNtYXRbNSwzXSA8LSBmZGVuc2l0eWludGVyKGZuZXRbLCwzXSwgcGFydGlqbSkNCmRlc21hdFs2LDFdIDwtIGZkZW5zaXR5aW50cmEoZm5ldFssLDFdLCBldGhtaW56bSkNCmRlc21hdFs2LDJdIDwtIGZkZW5zaXR5aW50cmEoZm5ldFssLDJdLCBldGhtaW56bSkNCmRlc21hdFs2LDNdIDwtIGZkZW5zaXR5aW50cmEoZm5ldFssLDNdLCBldGhtaW56bSkNCmRlc21hdFs3LDFdIDwtIGZkZW5zaXR5aW50ZXIoZm5ldFssLDFdLCBldGhtaW56bSkNCmRlc21hdFs3LDJdIDwtIGZkZW5zaXR5aW50ZXIoZm5ldFssLDJdLCBldGhtaW56bSkNCmRlc21hdFs3LDNdIDwtIGZkZW5zaXR5aW50ZXIoZm5ldFssLDNdLCBldGhtaW56bSkNCmRlc21hdFs4LDFdIDwtIGZkZW5zaXR5aW50ZXIoZm5ldFssLDFdLCBtaW5vcml0eW0pDQpkZXNtYXRbOCwyXSA8LSBmZGVuc2l0eWludGVyKGZuZXRbLCwyXSwgbWlub3JpdHltKQ0KZGVzbWF0WzgsM10gPC0gZmRlbnNpdHlpbnRlcihmbmV0WywsM10sIG1pbm9yaXR5bSkNCmRlc21hdFs5LDFdIDwtIGZkZW5zaXR5aW50cmEoZm5ldFssLDFdLCBsZnRtKQ0KZGVzbWF0WzksMl0gPC0gZmRlbnNpdHlpbnRyYShmbmV0WywsMl0sIGxmdG0pDQpkZXNtYXRbOSwzXSA8LSBmZGVuc2l0eWludHJhKGZuZXRbLCwzXSwgbGZ0bSkNCmRlc21hdFsxMCwxXSA8LSBmZGVuc2l0eWludGVyKGZuZXRbLCwxXSwgbGZ0bSkNCmRlc21hdFsxMCwyXSA8LSBmZGVuc2l0eWludGVyKGZuZXRbLCwyXSwgbGZ0bSkNCmRlc21hdFsxMCwzXSA8LSBmZGVuc2l0eWludGVyKGZuZXRbLCwzXSwgbGZ0bSkNCg0KZGVzbWF0WzEsMSszXSA8LSBmZGVuc2l0eShhdG1uZXRbLCwxXSkNCmRlc21hdFsxLDIrM10gPC0gZmRlbnNpdHkoYXRtbmV0WywsMl0pDQpkZXNtYXRbMSwzKzNdIDwtIGZkZW5zaXR5KGF0bW5ldFssLDNdKQ0KZGVzbWF0WzIsMSszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDFdLCB2cm91d20pDQpkZXNtYXRbMiwyKzNdIDwtIGZkZW5zaXR5aW50cmEoYXRtbmV0WywsMl0sIHZyb3V3bSkNCmRlc21hdFsyLDMrM10gPC0gZmRlbnNpdHlpbnRyYShhdG1uZXRbLCwzXSwgdnJvdXdtKQ0KZGVzbWF0WzMsMSszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDFdLCB2cm91d20pDQpkZXNtYXRbMywyKzNdIDwtIGZkZW5zaXR5aW50ZXIoYXRtbmV0WywsMl0sIHZyb3V3bSkNCmRlc21hdFszLDMrM10gPC0gZmRlbnNpdHlpbnRlcihhdG1uZXRbLCwzXSwgdnJvdXdtKQ0KZGVzbWF0WzQsMSszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDFdLCBwYXJ0aWptKQ0KZGVzbWF0WzQsMiszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDJdLCBwYXJ0aWptKQ0KZGVzbWF0WzQsMyszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDNdLCBwYXJ0aWptKQ0KZGVzbWF0WzUsMSszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDFdLCBwYXJ0aWptKQ0KZGVzbWF0WzUsMiszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDJdLCBwYXJ0aWptKQ0KZGVzbWF0WzUsMyszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDNdLCBwYXJ0aWptKQ0KZGVzbWF0WzYsMSszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDFdLCBldGhtaW56bSkNCmRlc21hdFs2LDIrM10gPC0gZmRlbnNpdHlpbnRyYShhdG1uZXRbLCwyXSwgZXRobWluem0pDQpkZXNtYXRbNiwzKzNdIDwtIGZkZW5zaXR5aW50cmEoYXRtbmV0WywsM10sIGV0aG1pbnptKQ0KZGVzbWF0WzcsMSszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDFdLCBldGhtaW56bSkNCmRlc21hdFs3LDIrM10gPC0gZmRlbnNpdHlpbnRlcihhdG1uZXRbLCwyXSwgZXRobWluem0pDQpkZXNtYXRbNywzKzNdIDwtIGZkZW5zaXR5aW50ZXIoYXRtbmV0WywsM10sIGV0aG1pbnptKQ0KZGVzbWF0WzgsMSszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDFdLCBtaW5vcml0eW0pDQpkZXNtYXRbOCwyKzNdIDwtIGZkZW5zaXR5aW50ZXIoYXRtbmV0WywsMl0sIG1pbm9yaXR5bSkNCmRlc21hdFs4LDMrM10gPC0gZmRlbnNpdHlpbnRlcihhdG1uZXRbLCwzXSwgbWlub3JpdHltKQ0KZGVzbWF0WzksMSszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDFdLCBsZnRtKQ0KZGVzbWF0WzksMiszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDJdLCBsZnRtKQ0KZGVzbWF0WzksMyszXSA8LSBmZGVuc2l0eWludHJhKGF0bW5ldFssLDNdLCBsZnRtKQ0KZGVzbWF0WzEwLDErM10gPC0gZmRlbnNpdHlpbnRlcihhdG1uZXRbLCwxXSwgbGZ0bSkNCmRlc21hdFsxMCwyKzNdIDwtIGZkZW5zaXR5aW50ZXIoYXRtbmV0WywsMl0sIGxmdG0pDQpkZXNtYXRbMTAsMyszXSA8LSBmZGVuc2l0eWludGVyKGF0bW5ldFssLDNdLCBsZnRtKQ0KDQpkZXNtYXRbMSwxKzZdIDwtIGZkZW5zaXR5KHJ0bmV0WywsMV0pDQpkZXNtYXRbMSwyKzZdIDwtIGZkZW5zaXR5KHJ0bmV0WywsMl0pDQpkZXNtYXRbMSwzKzZdIDwtIGZkZW5zaXR5KHJ0bmV0WywsM10pDQpkZXNtYXRbMiwxKzZdIDwtIGZkZW5zaXR5aW50cmEocnRuZXRbLCwxXSwgdnJvdXdtKQ0KZGVzbWF0WzIsMis2XSA8LSBmZGVuc2l0eWludHJhKHJ0bmV0WywsMl0sIHZyb3V3bSkNCmRlc21hdFsyLDMrNl0gPC0gZmRlbnNpdHlpbnRyYShydG5ldFssLDNdLCB2cm91d20pDQpkZXNtYXRbMywxKzZdIDwtIGZkZW5zaXR5aW50ZXIocnRuZXRbLCwxXSwgdnJvdXdtKQ0KZGVzbWF0WzMsMis2XSA8LSBmZGVuc2l0eWludGVyKHJ0bmV0WywsMl0sIHZyb3V3bSkNCmRlc21hdFszLDMrNl0gPC0gZmRlbnNpdHlpbnRlcihydG5ldFssLDNdLCB2cm91d20pDQpkZXNtYXRbNCwxKzZdIDwtIGZkZW5zaXR5aW50cmEocnRuZXRbLCwxXSwgcGFydGlqbSkNCmRlc21hdFs0LDIrNl0gPC0gZmRlbnNpdHlpbnRyYShydG5ldFssLDJdLCBwYXJ0aWptKQ0KZGVzbWF0WzQsMys2XSA8LSBmZGVuc2l0eWludHJhKHJ0bmV0WywsM10sIHBhcnRpam0pDQpkZXNtYXRbNSwxKzZdIDwtIGZkZW5zaXR5aW50ZXIocnRuZXRbLCwxXSwgcGFydGlqbSkNCmRlc21hdFs1LDIrNl0gPC0gZmRlbnNpdHlpbnRlcihydG5ldFssLDJdLCBwYXJ0aWptKQ0KZGVzbWF0WzUsMys2XSA8LSBmZGVuc2l0eWludGVyKHJ0bmV0WywsM10sIHBhcnRpam0pDQpkZXNtYXRbNiwxKzZdIDwtIGZkZW5zaXR5aW50cmEocnRuZXRbLCwxXSwgZXRobWluem0pDQpkZXNtYXRbNiwyKzZdIDwtIGZkZW5zaXR5aW50cmEocnRuZXRbLCwyXSwgZXRobWluem0pDQpkZXNtYXRbNiwzKzZdIDwtIGZkZW5zaXR5aW50cmEocnRuZXRbLCwzXSwgZXRobWluem0pDQpkZXNtYXRbNywxKzZdIDwtIGZkZW5zaXR5aW50ZXIocnRuZXRbLCwxXSwgZXRobWluem0pDQpkZXNtYXRbNywyKzZdIDwtIGZkZW5zaXR5aW50ZXIocnRuZXRbLCwyXSwgZXRobWluem0pDQpkZXNtYXRbNywzKzZdIDwtIGZkZW5zaXR5aW50ZXIocnRuZXRbLCwzXSwgZXRobWluem0pDQpkZXNtYXRbOCwxKzZdIDwtIGZkZW5zaXR5aW50ZXIocnRuZXRbLCwxXSwgbWlub3JpdHltKQ0KZGVzbWF0WzgsMis2XSA8LSBmZGVuc2l0eWludGVyKHJ0bmV0WywsMl0sIG1pbm9yaXR5bSkNCmRlc21hdFs4LDMrNl0gPC0gZmRlbnNpdHlpbnRlcihydG5ldFssLDNdLCBtaW5vcml0eW0pDQpkZXNtYXRbOSwxKzZdIDwtIGZkZW5zaXR5aW50cmEocnRuZXRbLCwxXSwgbGZ0bSkNCmRlc21hdFs5LDIrNl0gPC0gZmRlbnNpdHlpbnRyYShydG5ldFssLDJdLCBsZnRtKQ0KZGVzbWF0WzksMys2XSA8LSBmZGVuc2l0eWludHJhKHJ0bmV0WywsM10sIGxmdG0pDQpkZXNtYXRbMTAsMSs2XSA8LSBmZGVuc2l0eWludGVyKHJ0bmV0WywsMV0sIGxmdG0pDQpkZXNtYXRbMTAsMis2XSA8LSBmZGVuc2l0eWludGVyKHJ0bmV0WywsMl0sIGxmdG0pDQpkZXNtYXRbMTAsMys2XSA8LSBmZGVuc2l0eWludGVyKHJ0bmV0WywsM10sIGxmdG0pDQoNCg0KY29sbmFtZXMoZGVzbWF0KSA8LSBjKCJmb2xsb3dpbmcgVDEiLCAiZm9sbG93aW5nIFQyIiwgImZvbGxvd2luZyBUMyIsImF0bWVudGlvbnMgVDEiLCJhdG1lbnRpb25zIFQyIiwiYXRtZW50aW9ucyBUMyIsInJldHdlZXRzIFQxIiwicmV0d2VldHMgVDIiLCJyZXR3ZWV0cyBUMyIpIA0Kcm93bmFtZXMoZGVzbWF0KSA8LSBjKCJ0b3RhbCIsICAic2FtZSBzZXgiLCAiZGlmZmVyZW50IHNleCIsICJzYW1lIHBhcnR5IiwgImRpZmZlcmVudCBwYXJ0eSIsICJzYW1lIGV0aG5pY2l0eSIsICJkaWZmZXJlbnQgZXRobmljaXR5IiwgImJvdGggbWlub3JpdHkiLCAic2FtZSBhZ2UgKDw2KSIsICJkaWZmZXJlbnQgYWdlICg+NSkiKQ0KDQojZGVzbWF0DQojd3JpdGUuY3N2MihkZXNtYXQsICIyMDE5MDgyOWRlc21hdC5jc3YiKQ0KDQpkZXNtYXRrYWJsZSA8LSBrYmwoZGVzbWF0LCBib29rdGFicz1UUlVFLCBkaWdpdHM9MiwgY2FwdGlvbj0iVGFibGUgMS4gIEludGVyLSBhbmQgaW50cmEtZ3JvdXAgZGVuc2l0aWVzIHdpdGhpbiB0aGUgdGhyZWUgVHdpdHRlciBsYXllcnMgYW1vbmcgRHV0Y2ggTVBzICgyMDE3KSIsIGFsaWduID0gImMiKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIkNhbWJyaWEiKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkgJT4lDQogIGNvbHVtbl9zcGVjKGNvbHVtbiA9IDEsIHdpZHRoID0gIjNpbiIpDQogIA0KZGVzbWF0a2FibGUNCg0KDQoNCmBgYCANCjxicj4gDQoNCkEgc2xpZ2h0bHkgZGlmZmVyZW50IG9yZGVyIG9mIHNvY2lhbCBkaW1lbnNpb25zIChyb3dzKSBhcyBjb21wYXJlZCB0byBtYW51c2NyaXB0IGJ1dCBzYW1lIG51bWJlcnMuIA0KDQotLS0gIA0KDQoNCiMjIFRhYmxlIDIgIA0KDQoNCmBgYHtyIFRhYmxlMmIsIGVjaG89VFJVRX0NCg0KZm5ldFtmbmV0PT0xMF0gPC0gTkENCnJ0bmV0W3J0bmV0PT0xMF0gPC0gTkENCmF0bW5ldFthdG1uZXQ9PTEwXSA8LSBOQQ0KDQpjb2xtYXQgPC0gbWF0cml4KE5BLCBucm93PTMsIG5jb2w9OSkNCg0KY29sbWF0WzEsMV0gPC0gZnNjb2xuZXQoZm5ldFssLDFdLCBwYXJ0aWopIA0KY29sbWF0WzEsMl0gPC0gZnNjb2xuZXQoZm5ldFssLDJdLCBwYXJ0aWopIA0KY29sbWF0WzEsM10gPC0gZnNjb2xuZXQoZm5ldFssLDNdLCBwYXJ0aWopIA0KY29sbWF0WzEsNF0gPC0gZnNjb2xuZXQoYXRtbmV0WywsMV0sIHBhcnRpaikgDQpjb2xtYXRbMSw1XSA8LSBmc2NvbG5ldChhdG1uZXRbLCwyXSwgcGFydGlqKSANCmNvbG1hdFsxLDZdIDwtIGZzY29sbmV0KGF0bW5ldFssLDNdLCBwYXJ0aWopIA0KY29sbWF0WzEsN10gPC0gZnNjb2xuZXQocnRuZXRbLCwxXSwgcGFydGlqKSANCmNvbG1hdFsxLDhdIDwtIGZzY29sbmV0KHJ0bmV0WywsMl0sIHBhcnRpaikgDQpjb2xtYXRbMSw5XSA8LSBmc2NvbG5ldChydG5ldFssLDNdLCBwYXJ0aWopIA0KDQpjb2xtYXRbMiwxXSA8LSBmc2NvbG5ldChmbmV0WywsMV0sIHZyb3V3KSANCmNvbG1hdFsyLDJdIDwtIGZzY29sbmV0KGZuZXRbLCwyXSwgdnJvdXcpIA0KY29sbWF0WzIsM10gPC0gZnNjb2xuZXQoZm5ldFssLDNdLCB2cm91dykgDQpjb2xtYXRbMiw0XSA8LSBmc2NvbG5ldChhdG1uZXRbLCwxXSwgdnJvdXcpIA0KY29sbWF0WzIsNV0gPC0gZnNjb2xuZXQoYXRtbmV0WywsMl0sIHZyb3V3KSANCmNvbG1hdFsyLDZdIDwtIGZzY29sbmV0KGF0bW5ldFssLDNdLCB2cm91dykgDQpjb2xtYXRbMiw3XSA8LSBmc2NvbG5ldChydG5ldFssLDFdLCB2cm91dykgDQpjb2xtYXRbMiw4XSA8LSBmc2NvbG5ldChydG5ldFssLDJdLCB2cm91dykgDQpjb2xtYXRbMiw5XSA8LSBmc2NvbG5ldChydG5ldFssLDNdLCB2cm91dykgDQoNCmNvbG1hdFszLDFdIDwtIGZzY29sbmV0KGZuZXRbLCwxXSwgZXRobWlueikgDQpjb2xtYXRbMywyXSA8LSBmc2NvbG5ldChmbmV0WywsMl0sIGV0aG1pbnopIA0KY29sbWF0WzMsM10gPC0gZnNjb2xuZXQoZm5ldFssLDNdLCBldGhtaW56KSANCmNvbG1hdFszLDRdIDwtIGZzY29sbmV0KGF0bW5ldFssLDFdLCBldGhtaW56KSANCmNvbG1hdFszLDVdIDwtIGZzY29sbmV0KGF0bW5ldFssLDJdLCBldGhtaW56KSANCmNvbG1hdFszLDZdIDwtIGZzY29sbmV0KGF0bW5ldFssLDNdLCBldGhtaW56KSANCmNvbG1hdFszLDddIDwtIGZzY29sbmV0KHJ0bmV0WywsMV0sIGV0aG1pbnopIA0KY29sbWF0WzMsOF0gPC0gZnNjb2xuZXQocnRuZXRbLCwyXSwgZXRobWlueikgDQpjb2xtYXRbMyw5XSA8LSBmc2NvbG5ldChydG5ldFssLDNdLCBldGhtaW56KSANCg0KY29sbmFtZXMoY29sbWF0KSA8LSBjKCJmb2xsb3dpbmcgVDEiLCAiZm9sbG93aW5nIFQyIiwgImZvbGxvd2luZyBUMyIsImF0bWVudGlvbnMgVDEiLCJhdG1lbnRpb25zIFQyIiwiYXRtZW50aW9ucyBUMyIsInJldHdlZXRzIFQxIiwicmV0d2VldHMgVDIiLCJyZXR3ZWV0cyBUMyIpIA0Kcm93bmFtZXMoY29sbWF0KSA8LSBjKCJwYXJ0eSIsICJzZXgiLCAiZXRobmljaXR5IikNCiNjb2xtYXQNCiANCiN3cml0ZS5jc3YyKGNvbG1hdCwgIjIwMTkwODI5Y29sbWF0LmNzdiIpDQoNCmNvbG1hdGthYmxlIDwtIGtibChjb2xtYXQsIGJvb2t0YWJzPVRSVUUsIGRpZ2l0cz0yLCBjYXB0aW9uPSJUYWJsZSAyLiBDb2xlbWFu4oCZcyBIb21vcGhpbHkgSW5kZXggd2l0aGluIHRoZSB0aHJlZSBUd2l0dGVyIGxheWVycyBhbW9uZyBEdXRjaCBNUHMgKDIwMTcpIiwgYWxpZ24gPSAiYyIpICU+JQ0KICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiQ2FtYnJpYSIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpKSAlPiUNCiAgY29sdW1uX3NwZWMoY29sdW1uID0gMSwgd2lkdGggPSAiM2luIikNCiAgDQpjb2xtYXRrYWJsZQ0KDQpgYGAgDQoNCiAgDQotLS0gIA0KDQoNCiMjIFRhYmxlIDMNCg0KDQpgYGB7ciAsIGVjaG89VFJVRX0gDQoNCmZuZXRbZm5ldD09MTBdIDwtIE5BDQpydG5ldFtydG5ldD09MTBdIDwtIE5BDQphdG1uZXRbYXRtbmV0PT0xMF0gPC0gTkENCg0KdnJvdXdfaW50IDwtIGFzLmludGVnZXIodnJvdXcpICsgMQ0KcGFydGlqX2ludCA8LSBhcy5pbnRlZ2VyKHBhcnRpaikNCmV0aG1pbnogPC0gZXRobWlueiArIDENCg0KYXNtYXQgPC0gbWF0cml4KE5BLCBucm93PTQsIG5jb2w9OSkNCg0KZ2ZuZXQxIDwtIGdyYXBoX2Zyb21fYWRqYWNlbmN5X21hdHJpeChmbmV0WywsMV0sIG1vZGUgPSAiZGlyZWN0ZWQiLCB3ZWlnaHRlZCA9IE5VTEwsIGRpYWcgPSBGQUxTRSwgIGFkZC5jb2xuYW1lcyA9IE5BLCBhZGQucm93bmFtZXMgPSBOQSkNCmdmbmV0MiA8LSBncmFwaF9mcm9tX2FkamFjZW5jeV9tYXRyaXgoZm5ldFssLDJdLCBtb2RlID0gImRpcmVjdGVkIiwgd2VpZ2h0ZWQgPSBOVUxMLCBkaWFnID0gRkFMU0UsICBhZGQuY29sbmFtZXMgPSBOQSwgYWRkLnJvd25hbWVzID0gTkEpDQpnZm5ldDMgPC0gZ3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KGZuZXRbLCwzXSwgbW9kZSA9ICJkaXJlY3RlZCIsIHdlaWdodGVkID0gTlVMTCwgZGlhZyA9IEZBTFNFLCAgYWRkLmNvbG5hbWVzID0gTkEsIGFkZC5yb3duYW1lcyA9IE5BKQ0KDQpncnRuZXQxIDwtIGdyYXBoX2Zyb21fYWRqYWNlbmN5X21hdHJpeChydG5ldFssLDFdLCBtb2RlID0gImRpcmVjdGVkIiwgd2VpZ2h0ZWQgPSBOVUxMLCBkaWFnID0gRkFMU0UsICBhZGQuY29sbmFtZXMgPSBOQSwgYWRkLnJvd25hbWVzID0gTkEpDQpncnRuZXQyIDwtIGdyYXBoX2Zyb21fYWRqYWNlbmN5X21hdHJpeChydG5ldFssLDJdLCBtb2RlID0gImRpcmVjdGVkIiwgd2VpZ2h0ZWQgPSBOVUxMLCBkaWFnID0gRkFMU0UsICBhZGQuY29sbmFtZXMgPSBOQSwgYWRkLnJvd25hbWVzID0gTkEpDQpncnRuZXQzIDwtIGdyYXBoX2Zyb21fYWRqYWNlbmN5X21hdHJpeChydG5ldFssLDNdLCBtb2RlID0gImRpcmVjdGVkIiwgd2VpZ2h0ZWQgPSBOVUxMLCBkaWFnID0gRkFMU0UsICBhZGQuY29sbmFtZXMgPSBOQSwgYWRkLnJvd25hbWVzID0gTkEpDQoNCmdhdG1uZXQxIDwtIGdyYXBoX2Zyb21fYWRqYWNlbmN5X21hdHJpeChhdG1uZXRbLCwxXSwgbW9kZSA9ICJkaXJlY3RlZCIsIHdlaWdodGVkID0gTlVMTCwgZGlhZyA9IEZBTFNFLCAgYWRkLmNvbG5hbWVzID0gTkEsIGFkZC5yb3duYW1lcyA9IE5BKQ0KZ2F0bW5ldDIgPC0gZ3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KGF0bW5ldFssLDJdLCBtb2RlID0gImRpcmVjdGVkIiwgd2VpZ2h0ZWQgPSBOVUxMLCBkaWFnID0gRkFMU0UsICBhZGQuY29sbmFtZXMgPSBOQSwgYWRkLnJvd25hbWVzID0gTkEpDQpnYXRtbmV0MyA8LSBncmFwaF9mcm9tX2FkamFjZW5jeV9tYXRyaXgoYXRtbmV0WywsM10sIG1vZGUgPSAiZGlyZWN0ZWQiLCB3ZWlnaHRlZCA9IE5VTEwsIGRpYWcgPSBGQUxTRSwgIGFkZC5jb2xuYW1lcyA9IE5BLCBhZGQucm93bmFtZXMgPSBOQSkNCg0KYXNtYXRbMSwxXSA8LSBhc3NvcnRhdGl2aXR5X25vbWluYWwoZ2ZuZXQxLCB0eXBlcz1wYXJ0aWpfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFsxLDJdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChnZm5ldDIsIHR5cGVzPXBhcnRpal9pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzEsM10gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdmbmV0MywgdHlwZXM9cGFydGlqX2ludCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbMiwxXSA8LSBhc3NvcnRhdGl2aXR5X25vbWluYWwoZ2ZuZXQxLCB0eXBlcz12cm91d19pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzIsMl0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdmbmV0MiwgdHlwZXM9dnJvdXdfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFsyLDNdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChnZm5ldDMsIHR5cGVzPXZyb3V3X2ludCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbMywxXSA8LSBhc3NvcnRhdGl2aXR5X25vbWluYWwoZ2ZuZXQxLCB0eXBlcz1ldGhtaW56LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFszLDJdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChnZm5ldDIsIHR5cGVzPWV0aG1pbnosIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzMsM10gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdmbmV0MywgdHlwZXM9ZXRobWlueiwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbNCwxXSA8LSBhc3NvcnRhdGl2aXR5KGdmbmV0MSwgdHlwZXMxPWxmdCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbNCwyXSA8LSBhc3NvcnRhdGl2aXR5KGdmbmV0MiwgdHlwZXMxPWxmdCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbNCwzXSA8LSBhc3NvcnRhdGl2aXR5KGdmbmV0MywgdHlwZXMxPWxmdCwgZGlyZWN0ZWQgPSBUUlVFKQ0KDQphc21hdFsxLDddIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQxLCB0eXBlcz1wYXJ0aWpfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFsxLDhdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQyLCB0eXBlcz1wYXJ0aWpfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFsxLDldIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQzLCB0eXBlcz1wYXJ0aWpfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFsyLDddIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQxLCB0eXBlcz12cm91d19pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzIsOF0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdydG5ldDIsIHR5cGVzPXZyb3V3X2ludCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbMiw5XSA8LSBhc3NvcnRhdGl2aXR5X25vbWluYWwoZ3J0bmV0MywgdHlwZXM9dnJvdXdfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFszLDddIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQxLCB0eXBlcz1ldGhtaW56LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFszLDhdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQyLCB0eXBlcz1ldGhtaW56LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFszLDldIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChncnRuZXQzLCB0eXBlcz1ldGhtaW56LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFs0LDddIDwtIGFzc29ydGF0aXZpdHkoZ3J0bmV0MSwgdHlwZXMxPWxmdCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbNCw4XSA8LSBhc3NvcnRhdGl2aXR5KGdydG5ldDIsIHR5cGVzMT1sZnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzQsOV0gPC0gYXNzb3J0YXRpdml0eShncnRuZXQzLCB0eXBlczE9bGZ0LCBkaXJlY3RlZCA9IFRSVUUpDQoNCmFzbWF0WzEsNF0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdhdG1uZXQxLCB0eXBlcz1wYXJ0aWpfaW50LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFsxLDVdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChnYXRtbmV0MiwgdHlwZXM9cGFydGlqX2ludCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbMSw2XSA8LSBhc3NvcnRhdGl2aXR5X25vbWluYWwoZ2F0bW5ldDMsIHR5cGVzPXBhcnRpal9pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzIsNF0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdhdG1uZXQxLCB0eXBlcz12cm91d19pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzIsNV0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdhdG1uZXQyLCB0eXBlcz12cm91d19pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzIsNl0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdhdG1uZXQzLCB0eXBlcz12cm91d19pbnQsIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzMsNF0gPC0gYXNzb3J0YXRpdml0eV9ub21pbmFsKGdhdG1uZXQxLCB0eXBlcz1ldGhtaW56LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFszLDVdIDwtIGFzc29ydGF0aXZpdHlfbm9taW5hbChnYXRtbmV0MiwgdHlwZXM9ZXRobWlueiwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbMyw2XSA8LSBhc3NvcnRhdGl2aXR5X25vbWluYWwoZ2F0bW5ldDMsIHR5cGVzPWV0aG1pbnosIGRpcmVjdGVkID0gVFJVRSkNCmFzbWF0WzQsNF0gPC0gYXNzb3J0YXRpdml0eShnYXRtbmV0MSwgdHlwZXMxPWxmdCwgZGlyZWN0ZWQgPSBUUlVFKQ0KYXNtYXRbNCw1XSA8LSBhc3NvcnRhdGl2aXR5KGdhdG1uZXQyLCB0eXBlczE9bGZ0LCBkaXJlY3RlZCA9IFRSVUUpDQphc21hdFs0LDZdIDwtIGFzc29ydGF0aXZpdHkoZ2F0bW5ldDMsIHR5cGVzMT1sZnQsIGRpcmVjdGVkID0gVFJVRSkNCg0KY29sbmFtZXMoYXNtYXQpIDwtIGMoImZvbGxvd2luZyBUMSIsICJmb2xsb3dpbmcgVDIiLCAiZm9sbG93aW5nIFQzIiwiYXRtZW50aW9ucyBUMSIsImF0bWVudGlvbnMgVDIiLCJhdG1lbnRpb25zIFQzIiwicmV0d2VldHMgVDEiLCJyZXR3ZWV0cyBUMiIsInJldHdlZXRzIFQzIikgDQpyb3duYW1lcyhhc21hdCkgPC0gYygicGFydHkiLCAic2V4IiwgImV0aG5pY2l0eSIsICJhZ2UiKQ0KI2FzbWF0DQojd3JpdGUuY3N2Mihhc21hdCwgIjIwMTkwODI4YXNtYXQuY3N2IikNCg0KDQoNCmFzbWF0a2FibGUgPC0ga2JsKGFzbWF0LCBib29rdGFicz1UUlVFLCBkaWdpdHM9MiwgY2FwdGlvbj0iVGFibGUgMy4gTmV3bWFu4oCZcyBBc3NvcnRhdGl2aXR5IENvZWZmaWNpZW50IHdpdGhpbiB0aGUgdGhyZWUgVHdpdHRlciBsYXllcnMgYW1vbmcgRHV0Y2ggTVBzICgyMDE3KSIsIGFsaWduID0gImMiKSAlPiUNCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIkNhbWJyaWEiKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkgJT4lDQogIGNvbHVtbl9zcGVjKGNvbHVtbiA9IDEsIHdpZHRoID0gIjNpbiIpDQogIA0KYXNtYXRrYWJsZQ0KDQpgYGANCg0KIyMgUlIyIENvbGVtYW4ncyBzZWdyZWdhdGlvbiBwZXIgcGFydHkNCg0KDQpgYGB7cn0NCmNvbG1hdDIgPC0gbWF0cml4KE5BLCBucm93PTEzLCBuY29sPTkpDQpjb2xtYXQyWywxXSA8LSBuZXRzZWc6OmNvbGVtYW4oZ2ZuZXQxLCB2YXR0cj1wYXJ0aWpfaW50KQ0KY29sbWF0MlssMl0gPC0gbmV0c2VnOjpjb2xlbWFuKGdmbmV0MiwgdmF0dHI9cGFydGlqX2ludCkNCmNvbG1hdDJbLDNdIDwtIG5ldHNlZzo6Y29sZW1hbihnZm5ldDMsIHZhdHRyPXBhcnRpal9pbnQpDQpjb2xtYXQyWyw0XSA8LSBuZXRzZWc6OmNvbGVtYW4oZ3J0bmV0MSwgdmF0dHI9cGFydGlqX2ludCkNCmNvbG1hdDJbLDVdIDwtIG5ldHNlZzo6Y29sZW1hbihncnRuZXQyLCB2YXR0cj1wYXJ0aWpfaW50KQ0KY29sbWF0MlssNl0gPC0gbmV0c2VnOjpjb2xlbWFuKGdydG5ldDMsIHZhdHRyPXBhcnRpal9pbnQpDQpjb2xtYXQyWyw3XSA8LSBuZXRzZWc6OmNvbGVtYW4oZ2F0bW5ldDEsIHZhdHRyPXBhcnRpal9pbnQpDQpjb2xtYXQyWyw4XSA8LSBuZXRzZWc6OmNvbGVtYW4oZ2F0bW5ldDIsIHZhdHRyPXBhcnRpal9pbnQpDQpjb2xtYXQyWyw5XSA8LSBuZXRzZWc6OmNvbGVtYW4oZ2F0bW5ldDMsIHZhdHRyPXBhcnRpal9pbnQpDQoNCmNvbG5hbWVzKGNvbG1hdDIpIDwtIGMoImZvbGxvd2luZyBUMSIsICJmb2xsb3dpbmcgVDIiLCAiZm9sbG93aW5nIFQzIiwiYXRtZW50aW9ucyBUMSIsImF0bWVudGlvbnMgVDIiLCJhdG1lbnRpb25zIFQzIiwicmV0d2VldHMgVDEiLCJyZXR3ZWV0cyBUMiIsInJldHdlZXRzIFQzIikgDQoNCnJvd25hbWVzKGNvbG1hdDIpIDwtIGxldmVscyhrZXlmJFBhcnRpailbLWMoMSw3LDksMTUsMTgsMTkpXQ0KDQpyb3duYW1lcyhjb2xtYXQyKSA8LSBjKCJDREEgKDE5KSIsICJDVSAoNSkiLCAiREVOSyAoMykiLCAiRDY2ICgxOSkiLCAiRnZEICgyKSIsICJHcm9lbkxpbmtzICgxNCkiLCAiUHZkQSAoOSkiICwgICAgICAiUHZkRGllcmVuICg1KSIsICJQVlYgKDE4KSIgLCAiU0dQICgzKSIsICJTUCAoMTQpIiwgICJWVkQgKDMyKSIsICI1MFBsdXMgKDQpIikgDQoNCmNvbG1hdDIgPC0gY29sbWF0MltjKDEyLDEsNCw5LDExLDYsNywyLDgsMTMsMywxMCw1KSxdDQoNCg0KIyAjd2h5IE5hTiBlLmcuIEZ2RCBhdG1lbnRpb25zIHQyDQojIFYoZ2F0bW5ldDIpJGxhYmVsIDwtIHBhcnRpal9pbnQNCiMgVihncnRuZXQyKSRsYWJlbCA8LSBwYXJ0aWpfaW50DQojIA0KIyBnYXRtbmV0Ml9zdWJzZXQgPC0gc3ViZ3JhcGguZWRnZXMoZ3JhcGg9Z2F0bW5ldDIsIGVpZHM9d2hpY2gocGFydGlqX2ludD09NiksIGRlbGV0ZS52ZXJ0aWNlcyA9IFRSVUUpDQojIHBsb3QoZ2F0bW5ldDJfc3Vic2V0KQ0KIyANCiMgZ2F0bW5ldDJfc3Vic2V0IDwtIHN1YmdyYXBoKGdyYXBoPWdhdG1uZXQyLCB2aWRzPXdoaWNoKFYoZ2F0bW5ldDIpJGxhYmVsPT02KSkNCiMgcGxvdChnYXRtbmV0Ml9zdWJzZXQpDQojICNiZWNhdXNlIG5vIG91dCB0aWVzIS4gDQojIA0KIyAjd2h5IC0xIGUuZy4gRnZEIHJ0d2VldHMgdDINCiMgZ3J0bmV0Ml9zdWJzZXQgPC0gc3ViZ3JhcGguZWRnZXMoZ3JhcGg9Z3J0bmV0MiwgZWlkcz13aGljaChwYXJ0aWpfaW50PT02KSwgZGVsZXRlLnZlcnRpY2VzID0gVFJVRSkNCiMgcGxvdChncnRuZXQyX3N1YnNldCkNCiMgZ3J0bmV0Ml9zdWJzZXQgPC0gc3ViZ3JhcGgoZ3JhcGg9Z3J0bmV0Miwgdmlkcz13aGljaChwYXJ0aWpfaW50PT02KSkNCiMgcGxvdChnYXRtbmV0Ml9zdWJzZXQpDQojICNiZWNhdXNlIG5vIGluZ3JvdXAgdGllLiANCg0KDQoNCmNvbG1hdDJrYWJsZSA8LSBrYmwoY29sbWF0MiwgYm9va3RhYnM9VFJVRSwgZGlnaXRzPTIsIGNhcHRpb249IlJSLkNvbGVtYW7igJlzIEhvbW9waGlseSBJbmRleCB3aXRoaW4gdGhlIHRocmVlIFR3aXR0ZXIgbGF5ZXJzIGFtb25nIER1dGNoIE1QcyAoMjAxNyksIHBlciBwb2xpdGljYWwgcGFydHkgKHBhcnR5IHNpemUgYmV0d2VlbiBicmFja2V0cykiLCBhbGlnbiA9ICJjIikgJT4lDQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsIGh0bWxfZm9udCA9ICJDYW1icmlhIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpICU+JQ0KICBjb2x1bW5fc3BlYyhjb2x1bW4gPSAxLCB3aWR0aCA9ICIzaW4iKQ0KICANCmNvbG1hdDJrYWJsZQ0KDQpgYGANCg0KLS0tICAgDQoNCiMgUmVmZXJlbmNlcw0KDQo=


Copyright © 2021 Jochem Tolsma