1 Goal

This file is used to tidy up the dataframes of political scientists and sociologists, by combining the two into a single dataframe with unique IDs and neat first and last names.

2 Custom functions

  • fpackage.check: Check if packages are installed (and install if not) in R (source).
  • fsave: Save to processed data in repository
  • fload: To load the files back after an fsave
  • fshowdf: To print objects (tibbles / data.frame) nicely on screen in .rmd
rm(list = ls())

fpackage.check <- function(packages) {
    lapply(packages, FUN = function(x) {
        if (!require(x, character.only = TRUE)) {
            install.packages(x, dependencies = TRUE)
            library(x, character.only = TRUE)
        }
    })
}

fsave <- function(x, file = NULL, location = "./data/processed/") {
    ifelse(!dir.exists("data"), dir.create("data"), FALSE)
    ifelse(!dir.exists("data/processed"), dir.create("data/processed"), FALSE)
    if (is.null(file))
        file = deparse(substitute(x))
    datename <- substr(gsub("[:-]", "", Sys.time()), 1, 8)
    totalname <- paste(location, datename, file, ".rda", sep = "")
    save(x, file = totalname)  #need to fix if file is reloaded as input name, not as x. 
}

fload <- function(filename) {
    load(filename)
    get(ls()[ls() != "filename"])
}

fshowdf <- function(x, ...) {
    knitr::kable(x, digits = 2, "html", ...) %>%
        kableExtra::kable_styling(bootstrap_options = c("striped", "hover")) %>%
        kableExtra::scroll_box(width = "100%", height = "300px")
}

3 Packages

  • ids: package used to randomly generate unique ids
  • stringr & stringi : for string manipulations
packages = c("ids", "stringr", "stringi")
fpackage.check(packages)

4 Input

We already saved the data from our webscrape in two files. Please download these files:

Download names_soc.csv

Download names_pol.csv

Save file in correct directory: ‘./data’.

soc <- read.csv("./data/names_soc.csv", sep = ";", encoding = "UTF-8")  # encoding to maintain diacritics
pol <- read.csv("./data/names_pol.csv", sep = ";", encoding = "UTF-8")

5 Initial cleaning of the dataframes

We start by cleaning up the .csv files a bit. Sometimes transforming .csv files to an R format creates some odd things. In this case, for example, the first column name appears to be off. Furthermore, dealing with files like this requires a little bit of ‘regular expression magic’. Regular expressions help you to transform text (string) data, by calling either to specific strings (e.g. the word “dog”), or for certain generalizable string patterns (e.g. a string consisting of exactly three lowercase letters).
Everything I have learned about string manipulation basically stems from this webpage. Especially when using web-scraped data, you will encounter raw text data pretty regularly, so knowing about regular expressions will probably come in handy.

# removing the 'specialisatie' column from the political science data frame because it is poorly
# filled and does not exist in sociology

pol <- subset(pol, select = -Specialisatie)


# making the column names easier to call
colnames(pol) <- c("name", "uni", "email", "position")
colnames(soc) <- c("name", "uni", "email", "position")


# removing empty rows
soc <- soc[soc$name != "", ]
pol <- pol[pol$name != "", ]



# combining the two dataframes in one, but first adding a discipline identifier for both
soc$discipline <- rep("sociology", nrow(soc))
pol$discipline <- rep("political science", nrow(pol))

df <- rbind.data.frame(soc, pol)


# removing double spaces
df$name <- gsub("\\s+", " ", df$name)  #  '\\s' indicates a whitespace, so '\\s+' refers to 2 or more whitespaces
df$name <- trimws(df$name)


# adding a year variable - in case multiple years are used, you should keep track of this.
df$year <- rep(2022, nrow(df))


# some people have double affiliations. These are stored as 'uni1/uni2' in the 'uni' column. We now
# want to create two separate variables for each affiliation.
df$affil1 <- df$uni  # first we create a new variable for the 1st affiliation, which is a copy of the original 'uni' variable
df$affil1 <- str_remove(df$affil1, "\\/.*$")  # remove the 2nd affiliation from the column of the first affiliation

df$affil2 <- str_remove(df$uni, "^.*\\/")  # extract everything after '/' to get the 2nd affiliation
df$affil2 <- str_remove(df$affil2, df$affil1)


# translating the positions to English - since the position string is free form, we have to extract
# the relevant info from there.  we start by the most senior positions, because some people list
# multiple and we only want to extract the most senior research position they occupy
df$position <- tolower(df$position)
df$position <- ifelse(as.numeric(str_detect(df$position, "hoogleraar")) == 1, "full_prof", df$position)
df$position <- ifelse(as.numeric(str_detect(df$position, "hoofddocent")) == 1, "associate_prof", df$position)
df$position <- ifelse(as.numeric(str_detect(df$position, "universitair docent")) == 1, "assistant_prof",
    df$position)
df$position <- ifelse(as.numeric(str_detect(df$position, "postdoc")) == 1, "postdoc", df$position)
df$position <- ifelse(as.numeric(str_detect(df$position, "(phd)|(doctoral)|(promovendus)")) == 1, "phd",
    df$position)

# all other positions are set to other - we do this because the position form on the website is a
# free text form, so the entries here are not standardized.  non-research positions are not really
# relevant for this analysis, because these people do not likely have very many co-authors.
df$position <- ifelse(!df$position %in% c("full_prof", "associate_prof", "assistant_prof", "postdoc",
    "phd"), "other", df$position)

fshowdf(df)
name uni email position discipline year affil1 affil2
1 Ece Arat UU phd sociology 2022 UU
2 Marcel Van Assen UU full_prof sociology 2022 UU
3 Weverthon Barbosa Machado UU other sociology 2022 UU
4 Vardan Barsegyan UU other sociology 2022 UU
5 Rutger Blom UU other sociology 2022 UU
6 Lute Bos UU other sociology 2022 UU
7 Anne Brons UU other sociology 2022 UU
8 Janine De Bruijn UU other sociology 2022 UU
9 Vincent Buskens UU full_prof sociology 2022 UU
10 Tobias Cinjee UU other sociology 2022 UU
11 Rense Corten UU associate_prof sociology 2022 UU
12 Marleen Damman UU assistant_prof sociology 2022 UU
13 Lucas Drouhot UU assistant_prof sociology 2022 UU
14 Christian Fang UU phd sociology 2022 UU
15 Paula Hoffmann UU phd sociology 2022 UU
16 Eva Jaspers UU associate_prof sociology 2022 UU
17 Rita Jiao UU phd sociology 2022 UU
18 Matthias Kern UU other sociology 2022 UU
19 Antonie Knigge UU assistant_prof sociology 2022 UU
20 David De Kort UU other sociology 2022 UU
21 Lea Kroner UU phd sociology 2022 UU
22 Mathijs Kros UU assistant_prof sociology 2022 UU
23 Wouter Kwint UU other sociology 2022 UU
24 Marco Van Leeuwen UU full_prof sociology 2022 UU
25 Marjan Van Lier UU other sociology 2022 UU
26 Tanja Van Der Lippe UU full_prof sociology 2022 UU
27 Ineke Maas UU/UvA associate_prof sociology 2022 UU UvA
28 Ana Macanovic UU phd sociology 2022 UU
29 Luuk Mandemakers UU other sociology 2022 UU
30 Thomas Martens UU other sociology 2022 UU
31 Deni Mazrekaj UU assistant_prof sociology 2022 UU
32 Christof Nagel UU other sociology 2022 UU
33 Huyen Nguyen UU other sociology 2022 UU
34 Amy Nivette UU associate_prof sociology 2022 UU
35 Amina Op De Weegh UU phd sociology 2022 UU
36 Kasper Otten UU phd sociology 2022 UU
37 Jiamin Ou UU assistant_prof sociology 2022 UU
38 Paulina Pankowska UU assistant_prof sociology 2022 UU
39 Anne-Rigt Poortman UU full_prof sociology 2022 UU
40 Wojtek Przepiorka UU associate_prof sociology 2022 UU
41 Anne Van Der Put UU phd sociology 2022 UU
42 Werner Raub UU full_prof sociology 2022 UU
43 Stijn Ruiter UU full_prof sociology 2022 UU
44 Philipp Schneider UU phd sociology 2022 UU
45 Jan-Willem Simons UU phd sociology 2022 UU
46 Sanjana Singh UU phd sociology 2022 UU
47 Jos Slabbekoorn UU phd sociology 2022 UU
48 Tali Spiegel UU assistant_prof sociology 2022 UU
49 Kim Stienstra UU phd sociology 2022 UU
50 Frank Van Tubergen UU full_prof sociology 2022 UU
51 Isabelle Van Der Vegt UU assistant_prof sociology 2022 UU
52 Cok Vrooman UU full_prof sociology 2022 UU
53 Linde Vromans UU other sociology 2022 UU
54 Jeroen Weesie UU associate_prof sociology 2022 UU
55 Kevin Wittenberg UU phd sociology 2022 UU
56 Nick Wuestenenk UU phd sociology 2022 UU
57 Marjolein Bredie UU Ondersteunend personeel, dus niet verder uitgewerkt other sociology 2022 UU
58 Sofie Van De Calseijde UU other sociology 2022 UU
59 Annemarie Houkes UU other sociology 2022 UU
60 Ellen Janssen UU other sociology 2022 UU
61 Pim Sangers UU other sociology 2022 UU
62 Aleida Sjardijn UU other sociology 2022 UU
64 Ronald Batenburg RU full_prof sociology 2022 RU
65 Katia Begall RU assistant_prof sociology 2022 RU
66 Hidde Bekhuis RU other sociology 2022 RU
67 Lonneke van den Berg RU postdoc sociology 2022 RU
68 Lieselotte Blommaert RU assistant_prof sociology 2022 RU
69 Rob Eisinga RU assistant_prof sociology 2022 RU
70 Maurice Gesthuizen RU assistant_prof sociology 2022 RU
71 Nella Geurts RU postdoc sociology 2022 RU
72 Saskia Glas RU assistant_prof sociology 2022 RU
73 Margriet van Hek RU assistant_prof sociology 2022 RU
74 Remco Hoekman RU other sociology 2022 RU
75 Bas Hofstra RU assistant_prof sociology 2022 RU
76 Judith Koops RU postdoc sociology 2022 RU
77 Gerbert Kraaykamp RU full_prof sociology 2022 RU
78 Roza Meuleman RU assistant_prof sociology 2022 RU
79 Michael Savelkoul RU assistant_prof sociology 2022 RU
80 Peer Scheepers RU full_prof sociology 2022 RU
81 Niels Spierings RU associate_prof sociology 2022 RU
82 Jochem Tolsma RU/RUG full_prof sociology 2022 RU G
83 Ellen Verbakel RU full_prof sociology 2022 RU
84 Mark Visser RU assistant_prof sociology 2022 RU
85 Maarten Wolbers RU full_prof sociology 2022 RU
86 Carlijn Bussemakers RU phd sociology 2022 RU
87 Rob Franken RU phd sociology 2022 RU
88 Mustafa Firat RU phd sociology 2022 RU
89 Aysegül Güneyli RU phd sociology 2022 RU
90 Inge Hendriks RU phd sociology 2022 RU
91 Thijmen Jeroense RU phd sociology 2022 RU
92 Rachel Kollar RU phd sociology 2022 RU
93 Nik Linders RU phd sociology 2022 RU
94 Renae Loh RU phd sociology 2022 RU
95 Maikel Meijeren RU phd sociology 2022 RU
96 Carly van Mensvoort RU phd sociology 2022 RU
97 Anne Maaike Mulders RU phd sociology 2022 RU
98 Katrin Müller RU phd sociology 2022 RU
99 Klara Raiber RU phd sociology 2022 RU
100 Marlou Ramaekers RU phd sociology 2022 RU
101 Sara Wiertsema RU phd sociology 2022 RU
102 Janos Betko RU phd sociology 2022 RU
103 Jansje van Middendorp RU phd sociology 2022 RU
104 Elize Vis RU phd sociology 2022 RU
105 Tijmen Weber RU phd sociology 2022 RU
106 Elissa El Khawli RU other sociology 2022 RU
107 Carl Sterkens RU other sociology 2022 RU
108 Paul Vermeer RU other sociology 2022 RU
109 Malou Grubben RU other sociology 2022 RU
111 Danelien van Aalst RUG phd sociology 2022 RUG
112 Gabriël Anthonio RUG full_prof sociology 2022 RUG
113 Dieko Bakker RUG postdoc sociology 2022 RUG
114 Wike Been RUG assistant_prof sociology 2022 RUG
115 Sanne Berends RUG other sociology 2022 RUG
116 Edgar de Bie RUG other sociology 2022 RUG
117 A.B. Bieleman RUG other sociology 2022 RUG
118 Basak Bilecen RUG associate_prof sociology 2022 RUG
119 Rie Bosman RUG other sociology 2022 RUG
120 Daniel Robert Cowen RUG phd sociology 2022 RUG
121 M.M Cuperus RUG other sociology 2022 RUG
122 Jacob Dijkstra RUG associate_prof sociology 2022 RUG
123 Jan Kornelis Dijkstra RUG associate_prof sociology 2022 RUG
124 Z Dong RUG phd sociology 2022 RUG
125 Marijtje van Duijn RUG full_prof sociology 2022 RUG
126 Thomas Feliciani RUG phd sociology 2022 RUG
127 Andreas Flache RUG full_prof sociology 2022 RUG
128 Vincenz Frey RUG assistant_prof sociology 2022 RUG
129 Anne Gauthier RUG other sociology 2022 RUG
130 Marieke van Gerner-Haan RUG assistant_prof sociology 2022 RUG
131 Francesca Giardini RUG associate_prof sociology 2022 RUG
132 Arie Glebbeek RUG associate_prof sociology 2022 RUG
133 Thecla Goossens RUG phd sociology 2022 RUG
134 Rolf Granholm RUG phd sociology 2022 RUG
135 Minke Hajer Universita degli studi di Milano postdoc sociology 2022 Universita degli studi di Milano
136 Liesbet Heyse RUG associate_prof sociology 2022 RUG
137 Johan Hiemstra RUG phd sociology 2022 RUG
138 Anja Holwerda RUG other sociology 2022 RUG
139 Mark Huisman RUG assistant_prof sociology 2022 RUG
140 Gijs Huitsing RUG assistant_prof sociology 2022 RUG
141 Aliona Ignatieva RUG phd sociology 2022 RUG
142 Danielle Jansen RUG associate_prof sociology 2022 RUG
143 M. Kalma RUG other sociology 2022 RUG
144 Matthijs Kalmijn RUG full_prof sociology 2022 RUG
145 D. Karaagac RUG phd sociology 2022 RUG
146 Rowan ten Kate RUG phd sociology 2022 RUG
147 Laura Keesman RUG assistant_prof sociology 2022 RUG
148 Marijn Keijzer RUG phd sociology 2022 RUG
149 Sanne Kellij RUG phd sociology 2022 RUG
150 Wouter Kiekens RUG phd sociology 2022 RUG
151 Ronald Kielman RUG other sociology 2022 RUG
152 Anne Kuschel RUG phd sociology 2022 RUG
153 Lydia Laninga-Wijnen RUG postdoc sociology 2022 RUG
154 Siegwart Lindenberg RUG/Tilburg full_prof sociology 2022 RUG Tilburg
155 Zoltán Lippényi RUG assistant_prof sociology 2022 RUG
156 Jing Liu RUG phd sociology 2022 RUG
157 S. Liu RUG other sociology 2022 RUG
158 Sofie Lorijn RUG phd sociology 2022 RUG
159 Alla Loseva RUG phd sociology 2022 RUG
160 R. Lu RUG other sociology 2022 RUG
161 Marcel Lubbers RUG/RU full_prof sociology 2022 RUG RU
162 Eleonora Marucci RUG phd sociology 2022 RUG
163 Carlos de Matos Fernandes RUG phd sociology 2022 RUG
164 Dennis Nientimp RUG phd sociology 2022 RUG
165 Jaap Nieuwenhuis RUG assistant_prof sociology 2022 RUG
166 Xingna Qin RUG phd sociology 2022 RUG
167 Julian Rengers RUG phd sociology 2022 RUG
168 Chaïm la Roi RUG/Universiteit Stockholm other sociology 2022 RUG Universiteit Stockholm
169 Menno Rol RUG other sociology 2022 RUG
170 Marina Roos RUG other sociology 2022 RUG
171 Sayoni Santara RUG phd sociology 2022 RUG
172 Elizaveta Sivak RUG phd sociology 2022 RUG
173 L Slot RUG phd sociology 2022 RUG
174 Rita Smaniotto RUG other sociology 2022 RUG
175 Tom Snijders RUG full_prof sociology 2022 RUG
176 E.R. Spruijt RUG phd sociology 2022 RUG
177 Marie Stadel RUG phd sociology 2022 RUG
178 Christian Steglich RUG/University Linköping associate_prof sociology 2022 RUG University Linköping
179 Jonas Stein RUG phd sociology 2022 RUG
180 Nardi Steverink RUG full_prof sociology 2022 RUG
181 Gert Stulp RUG associate_prof sociology 2022 RUG
182 Tanzhe Tang RUG/TU Delft phd sociology 2022 RUG TU Delft
183 Thomas Teekens RUG phd sociology 2022 RUG
184 Donald van Tol RUG assistant_prof sociology 2022 RUG
185 Chlóe Tolmatcheff RUG/University of Turku postdoc sociology 2022 RUG University of Turku
186 Daniela Torres Alatorre RUG other sociology 2022 RUG
187 René Veenstra RUG full_prof sociology 2022 RUG
188 Amber Vellinga-Dings RUG phd sociology 2022 RUG
189 A.J. Venema RUG other sociology 2022 RUG
190 Simon Venema RUG phd sociology 2022 RUG
191 Annick Vlieg RUG other sociology 2022 RUG
192 Elsje de Vries RUG phd sociology 2022 RUG
193 Marieke van der Wal RUG other sociology 2022 RUG
194 Rudi Wielers RUG associate_prof sociology 2022 RUG
195 Sofie Wiersma RUG phd sociology 2022 RUG
196 Fenna van der Wijk RUG phd sociology 2022 RUG
197 Rafael Wittek RUG full_prof sociology 2022 RUG
198 Xinyue Wu RUG phd sociology 2022 RUG
199 Xiao Xu RUG phd sociology 2022 RUG
200 Stephan Zaretckii RUG phd sociology 2022 RUG
201 Theo van der Zee RUG other sociology 2022 RUG
202 Tibor Zingora RUG postdoc sociology 2022 RUG
204 Josien Arts UvA assistant_prof sociology 2022 UvA
205 Carlijn van Baak UvA phd sociology 2022 UvA
206 Evelyne Baillergeau UvA other sociology 2022 UvA
207 Nienke Boesveldt UvA other sociology 2022 UvA
208 Thijs Bol UvA associate_prof sociology 2022 UvA
209 David Bos UvA other sociology 2022 UvA
210 Sarah Bracke UvA full_prof sociology 2022 UvA
211 Patrick Brown UvA associate_prof sociology 2022 UvA
212 Jeroen Bruggeman UvA associate_prof sociology 2022 UvA
213 Christian Bröer UvA associate_prof sociology 2022 UvA
214 Kalima Carrigan Chavez UvA phd sociology 2022 UvA
215 Liubov Chernysheva UvA phd sociology 2022 UvA
216 Siegnella Concincion UvA phd sociology 2022 UvA
217 Rineke van Daalen UvA other sociology 2022 UvA
218 Johan de Deken UvA other sociology 2022 UvA
219 Kobe de Keere UvA assistant_prof sociology 2022 UvA
220 Sherilyn Deen UvA phd sociology 2022 UvA
221 Jan Willen Duyvendak UvA full_prof sociology 2022 UvA
222 Fenella Fleischmann UvA full_prof sociology 2022 UvA
223 Rébecca Franco UvA postdoc sociology 2022 UvA
224 Andrea Friedmann Rozenbaum UvA phd sociology 2022 UvA
225 Ruben van Gaalen UvA full_prof sociology 2022 UvA
226 Sara Geven UvA assistant_prof sociology 2022 UvA
227 Hein de Haas UvA full_prof sociology 2022 UvA
228 Bart van Heerikhuizen UvA other sociology 2022 UvA
229 Margriet van Heesch UvA other sociology 2022 UvA
230 Twan Huijsmans UvA phd sociology 2022 UvA
231 Chip Huisman UvA other sociology 2022 UvA
232 Rene Hulst UvA other sociology 2022 UvA
233 Christoph Janietz UvA phd sociology 2022 UvA
234 Marie-Louise Janssen UvA other sociology 2022 UvA
235 Emilija Jokubauskaite UvA phd sociology 2022 UvA
236 Roos de Jong UvA other sociology 2022 UvA
237 Agnieszka Kanas UvA/EUR assistant_prof sociology 2022 UvA EUR
238 Anna Keuchenius UvA postdoc sociology 2022 UvA
239 Monique Kremer UvA full_prof sociology 2022 UvA
240 Marie Labussière UvA postdoc sociology 2022 UvA
241 Bram Lancee UvA associate_prof sociology 2022 UvA
242 Liliya Leopold UvA postdoc sociology 2022 UvA
243 Kirils Makarovs UvA other sociology 2022 UvA
244 Daniel Mayerhoffer UvA/Frankfurt School of Finance & Management assistant_prof sociology 2022 UvA Frankfurt School of Finance & Management
245 Gerben Moerman UvA other sociology 2022 UvA
246 Lou Mousset UvA phd sociology 2022 UvA
247 Caroline Nevejan UvA full_prof sociology 2022 UvA
248 Bo Paulle UvA associate_prof sociology 2022 UvA
249 Pamela Prickett UvA assistant_prof sociology 2022 UvA
250 Ladan Rahbari UvA assistant_prof sociology 2022 UvA
251 Jan Rath UvA full_prof sociology 2022 UvA
252 Emran Riffi Acharki UvA phd sociology 2022 UvA
253 Renée Römkens UvA full_prof sociology 2022 UvA
254 Tobi Sachs UvA phd sociology 2022 UvA
255 Pinar Sefkatli UvA phd sociology 2022 UvA
256 Olga Sezneva UvA associate_prof sociology 2022 UvA
257 Jaap van Slageren UvA postdoc sociology 2022 UvA
258 Fenna Smits UvA phd sociology 2022 UvA
259 Hanne Stegeman UvA phd sociology 2022 UvA
260 Stephanie Steinmetz UvA/University of Lausanne associate_prof sociology 2022 UvA University of Lausanne
261 Katharina Stückradt UvA phd sociology 2022 UvA
262 Jurgen Tijms UvA other sociology 2022 UvA
263 Olav Velthuis UvA full_prof sociology 2022 UvA
264 Gerlieke Veltkamp UvA assistant_prof sociology 2022 UvA
265 Alex van Venrooij UvA assistant_prof sociology 2022 UvA
266 Arnoud Verhoeff UvA full_prof sociology 2022 UvA
267 Laura Vonk UvA phd sociology 2022 UvA
268 S Vuijsters UvA other sociology 2022 UvA
269 Don Weenink UvA associate_prof sociology 2022 UvA
270 Herman van de Werfhorst UvA full_prof sociology 2022 UvA
271 Catherine Wong UvA assistant_prof sociology 2022 UvA
272 Eva Zschirnt UvA assistant_prof sociology 2022 UvA
273 Dieuwke Zwier UvA phd sociology 2022 UvA
275 Jens Abbing VU phd sociology 2022 VU
276 Nazar Abdulazeez VU phd sociology 2022 VU
277 Menal Ahmed VU other sociology 2022 VU
278 Petra van Aken VU phd sociology 2022 VU
279 Carla Bakboord VU phd sociology 2022 VU
280 Bart Bakker VU full_prof sociology 2022 VU
281 René Bekkers VU full_prof sociology 2022 VU
282 Marije Blok VU phd sociology 2022 VU
283 Alice de Boer VU full_prof sociology 2022 VU
284 Henriëtte Boersma-de Vries VU phd sociology 2022 VU
285 Stef Bouwhuis VU other sociology 2022 VU
286 Marjolein Broese Van Groenou VU full_prof sociology 2022 VU
287 Gerhard van de Bunt VU associate_prof sociology 2022 VU
288 Samira Chatila VU phd sociology 2022 VU
289 Anika Chowdhury VU phd sociology 2022 VU
290 Alexandra Ciausescu VU phd sociology 2022 VU
291 Maurice Crul VU full_prof sociology 2022 VU
292 Kathy Davis VU other sociology 2022 VU
293 Carlijn Dekker VU other sociology 2022 VU
294 Gözde Duran VU phd sociology 2022 VU
295 Laura Eberlein VU phd sociology 2022 VU
296 Eddy Elmer VU phd sociology 2022 VU
297 Zakia Essanhaji VU phd sociology 2022 VU
298 Muhammad Farooq VU phd sociology 2022 VU
299 Tara Fiorito VU assistant_prof sociology 2022 VU
300 Harry Ganzeboom VU full_prof sociology 2022 VU
301 Maura Gardeniers VU phd sociology 2022 VU
302 Mauricio Garnier Villarreal VU assistant_prof sociology 2022 VU
303 Halleh Ghorashi VU full_prof sociology 2022 VU
304 Santiago Gomez Echeverry VU phd sociology 2022 VU
305 Barbara Gouwenberg VU other sociology 2022 VU
306 Caroline Graf VU phd sociology 2022 VU
307 Alaxandra Greene VU phd sociology 2022 VU
308 Mohammad Hammoud VU phd sociology 2022 VU
309 Fabian Holle VU phd sociology 2022 VU
310 Barry Hoolwerf VU other sociology 2022 VU
311 Olena van Horick VU phd sociology 2022 VU
312 Mariska van der Horst VU assistant_prof sociology 2022 VU
313 Martijn Huisman VU full_prof sociology 2022 VU
314 Erik van Ingen VU associate_prof sociology 2022 VU
315 Elif Keskiner VU assistant_prof sociology 2022 VU
316 Saskia Keuzenkamp VU full_prof sociology 2022 VU
317 Fatma Khalil VU phd sociology 2022 VU
318 Saba Khan VU phd sociology 2022 VU
319 Kyohee Kim VU phd sociology 2022 VU
320 Bert Klandermans VU full_prof sociology 2022 VU
321 Kim Knipprath VU phd sociology 2022 VU
322 Stephanie Koolen-Maas VU other sociology 2022 VU
323 Margrieth Korporaal VU phd sociology 2022 VU
324 Timo Korstenbroek VU phd sociology 2022 VU
325 Zsuzsa Kovacs VU phd sociology 2022 VU
326 Nebil Kusmallah VU other sociology 2022 VU
327 Haebin Lee VU phd sociology 2022 VU
328 Aat Liefbroer VU full_prof sociology 2022 VU
329 Youssra Lotfi VU other sociology 2022 VU
330 Helenard Louw VU phd sociology 2022 VU
331 Ineke Maas VU full_prof sociology 2022 VU
332 Elly Mariani VU phd sociology 2022 VU
333 Kay Mars VU other sociology 2022 VU
334 Eva-Maria Merz VU full_prof sociology 2022 VU
335 Phoebe Mbasalaki VU other sociology 2022 VU
336 Nasser Mohamedhoesein VU phd sociology 2022 VU
337 Jasper Muis VU assistant_prof sociology 2022 VU
338 Ineke Nagel VU assistant_prof sociology 2022 VU
339 Lorraine Nencel VU associate_prof sociology 2022 VU
340 Busisiwe Octavia Ntsele VU phd sociology 2022 VU
341 Mimi Ocadiz Arriaga VU phd sociology 2022 VU
342 Eline van Oosten VU other sociology 2022 VU
343 Joram Pach VU phd sociology 2022 VU
344 Dimitris Pavlopoulos VU associate_prof sociology 2022 VU
345 Diederik van der Plas VU phd sociology 2022 VU
346 Elena Ponzoni VU assistant_prof sociology 2022 VU
347 Sharon Quinsaat VU other sociology 2022 VU
348 Maria Charlotte Rast VU phd sociology 2022 VU
349 Jos Rath VU other sociology 2022 VU
350 Sawitri Saharso VU/UvH associate_prof sociology 2022 VU UvH
351 Joris Schröder VU phd sociology 2022 VU
352 Josje Schut VU phd sociology 2022 VU
353 Theo Schuyt VU other sociology 2022 VU
354 Sajad Sepehri VU other sociology 2022 VU
355 Fiona Shan VU phd sociology 2022 VU
356 Ying Shen VU phd sociology 2022 VU
357 Mansoureh Shojaee VU other sociology 2022 VU
358 Marieke Slootman VU assistant_prof sociology 2022 VU
359 Peer Smets VU assistant_prof sociology 2022 VU
360 Tamira Sno VU phd sociology 2022 VU
361 Jacquelien van Stekelenburg VU full_prof sociology 2022 VU
362 Elias Storms VU other sociology 2022 VU
363 Bianca Suanet VU associate_prof sociology 2022 VU
364 Joukje Swinkels VU other sociology 2022 VU
365 Saartje Tack VU other sociology 2022 VU
366 Claire van Teunenbroek VU other sociology 2022 VU
367 Anne-Mei The VU full_prof sociology 2022 VU
368 Theo van Tilburg VU full_prof sociology 2022 VU
369 Myrto Tourtouri VU phd sociology 2022 VU
370 Sara Trovato VU phd sociology 2022 VU
371 Joseph van Matre VU phd sociology 2022 VU
372 Nina Vergeldt VU other sociology 2022 VU
373 Evelyn Vlasman VU other sociology 2022 VU
374 Ismintha Waldring VU assistant_prof sociology 2022 VU
375 Pamala Wiepking VU full_prof sociology 2022 VU
376 Arjen de Wit VU assistant_prof sociology 2022 VU
377 Lisa Woensdregt VU phd sociology 2022 VU
378 Younes Younes VU other sociology 2022 VU
380 Jess Bier EUR assistant_prof sociology 2022 EUR
381 Samira van Bohemen EUR assistant_prof sociology 2022 EUR
382 Teana Boston-Mammah EUR phd sociology 2022 EUR
383 Sjaak Braster EUR associate_prof sociology 2022 EUR
384 Vivien Butot EUR other sociology 2022 EUR
385 Nele Cannaerts EUR assistant_prof sociology 2022 EUR
386 Jaco Dagevos EUR full_prof sociology 2022 EUR
387 Roxy Damen EUR phd sociology 2022 EUR
388 Majolijn Das EUR full_prof sociology 2022 EUR
389 Laura den Dulk EUR full_prof sociology 2022 EUR
390 Pearl Dykstra EUR full_prof sociology 2022 EUR
391 Godfried Engbersen EUR full_prof sociology 2022 EUR
392 Guusje Enneking EUR phd sociology 2022 EUR
393 Catharina Fokkema EUR full_prof sociology 2022 EUR
394 Bonnie French EUR assistant_prof sociology 2022 EUR
395 Daphne van Helden EUR phd sociology 2022 EUR
396 Marcel Hertogh EUR full_prof sociology 2022 EUR
397 Sara Hogye EUR phd sociology 2022 EUR
398 Jennifer Holland EUR assistant_prof sociology 2022 EUR
399 Elske van den Hoogen EUR phd sociology 2022 EUR
400 Gita Huijgen EUR phd sociology 2022 EUR
401 Josje ten Kate EUR phd sociology 2022 EUR
402 Renske Keizer EUR full_prof sociology 2022 EUR
403 Margot Kersing EUR phd sociology 2022 EUR
404 Ferry Koster EUR full_prof sociology 2022 EUR
405 Willem de Koster EUR full_prof sociology 2022 EUR
406 Arjen Leerkes EUR associate_prof sociology 2022 EUR
407 Thijs Lindner EUR phd sociology 2022 EUR
408 Gabriele Mari EUR assistant_prof sociology 2022 EUR
409 Saliha Metinsoy EUR assistant_prof sociology 2022 EUR
410 Samantha Metselaar EUR phd sociology 2022 EUR
411 Tim van Meurs EUR phd sociology 2022 EUR
412 Jonathan Mijs EUR/Boston University other sociology 2022 EUR Boston University
413 Kjell Noordzij EUR other sociology 2022 EUR
414 Irene van Oorschot EUR assistant_prof sociology 2022 EUR
415 Joost Oude Groeniger EUR assistant_prof sociology 2022 EUR
416 Lore van Praag EUR assistant_prof sociology 2022 EUR
417 Rogier van Reekum EUR assistant_prof sociology 2022 EUR
418 Willem Schinkel EUR full_prof sociology 2022 EUR
419 Lotte Schrijver EUR phd sociology 2022 EUR
420 Erik Snel EUR assistant_prof sociology 2022 EUR
421 Lisa van der Storm EUR phd sociology 2022 EUR
422 Thomas Swerts EUR assistant_prof sociology 2022 EUR
423 Will Tiemeijer EUR full_prof sociology 2022 EUR
424 Paula Vrolijk EUR phd sociology 2022 EUR
425 Jeroen van der Waal EUR full_prof sociology 2022 EUR
426 Liang Wang EUR other sociology 2022 EUR
427 Alissa van Zijl EUR assistant_prof sociology 2022 EUR
428 Liesbet van Zoonen EUR full_prof sociology 2022 EUR
430 Peter Achterberg UvT full_prof sociology 2022 UvT
431 Ipek Bayrak UvT other sociology 2022 UvT
432 Mark van Bergen UvT other sociology 2022 UvT
433 Eline Berkers UvT phd sociology 2022 UvT
434 Arnoud-Jan Bijsterveld UvT full_prof sociology 2022 UvT
435 Jos Bleus UvT phd sociology 2022 UvT
436 Paul Dekker UvT other sociology 2022 UvT
437 Caroline Dewilde UvT associate_prof sociology 2022 UvT
438 S.C.M. Dickens UvT phd sociology 2022 UvT
439 Frank van Doorn UvT phd sociology 2022 UvT
440 Gijs van Gaans UvT phd sociology 2022 UvT
441 Erwin Gielens UvT phd sociology 2022 UvT
442 Frank van Gils UvT phd sociology 2022 UvT
443 Rob Gruben UvT phd sociology 2022 UvT
444 Katya Ivanova UvT assistant_prof sociology 2022 UvT
445 Thijs Kemmeren UvT phd sociology 2022 UvT
446 F.J.A.E. Van Kempen-de Troye UvT phd sociology 2022 UvT
447 Suzanne Klein Schaarsberg UvT other sociology 2022 UvT
448 Tijs Laenen UvT other sociology 2022 UvT
449 Frank Lambregts UvT phd sociology 2022 UvT
450 Nancy Lambregts UvT phd sociology 2022 UvT
451 Ruud Luijkx UvT/Trento University associate_prof sociology 2022 UvT Trento University
452 Francesco Marolla UvT other sociology 2022 UvT
453 Quita Muis UvT other sociology 2022 UvT
454 Daniela Negoita UvT other sociology 2022 UvT
455 Bert Oomen UvT phd sociology 2022 UvT
456 Romy Oomens UvT other sociology 2022 UvT
457 Peter Parren UvT phd sociology 2022 UvT
458 Bram Peper UvT other sociology 2022 UvT
459 Ioana Pop UvT assistant_prof sociology 2022 UvT
460 Marga Pruijt UvT phd sociology 2022 UvT
461 Tim Reeskens UvT associate_prof sociology 2022 UvT
462 Helma Rodenburg UvT phd sociology 2022 UvT
463 Femke Roosma UvT assistant_prof sociology 2022 UvT
464 Inge Sieben UvT associate_prof sociology 2022 UvT
465 Renate Stapelbroek UvT phd sociology 2022 UvT
466 Tomas Turner-Zwinkels UvT assistant_prof sociology 2022 UvT
467 Christof van Mol UvT assistant_prof sociology 2022 UvT
468 Nora Waitkus UvT assistant_prof sociology 2022 UvT
469 Tom Welman UvT other sociology 2022 UvT
470 Franca Witlox UvT other sociology 2022 UvT
471 Cees van Woerkum UvT phd sociology 2022 UvT
472 Elizabeth Young UvT assistant_prof sociology 2022 UvT
473 Erik Zeltner UvT phd sociology 2022 UvT
474 Erik Zijlstra UvT other sociology 2022 UvT
1100 Nada Afa RU phd political science 2022 RU
2100 Joep Bonnekamp-Van Lit RU phd political science 2022 RU
379 Nienke Bos RU phd political science 2022 RU
429 Maarten Cras RU other political science 2022 RU
510 Daniel DeRock RU assistant_prof political science 2022 RU
63 Yaël van Drunen RU other political science 2022 RU
710 Teun Eikenaar RU postdoc political science 2022 RU
810 Erika van Elsas RU assistant_prof political science 2022 RU
910 Naomi Gilhuis RU phd political science 2022 RU
1010 Yannicke Goris RU phd political science 2022 RU
1110 Emily Gravesteijn RU phd political science 2022 RU
1210 Rosanne Gülkara-Anholt RU assistant_prof political science 2022 RU
1310 Gijs Hablous RU phd political science 2022 RU
1410 Carolien van Ham RU full_prof political science 2022 RU
1510 Kristof Jacobs RU associate_prof political science 2022 RU
1610 Jutta Joachim RU other political science 2022 RU
1710 Gerry van der Kamp-Alons RU associate_prof political science 2022 RU
1810 Gaard Kets RU assistant_prof political science 2022 RU
1910 Rosa Kindt RU phd political science 2022 RU
2010 Marijn Knieriem RU phd political science 2022 RU
2110 Stella Koenen RU phd political science 2022 RU
2210 Juul Kwaks RU phd political science 2022 RU
2310 Jan ter Laak RU other political science 2022 RU
2410 Bart van Leeuwen RU associate_prof political science 2022 RU
2510 Mathijs van Leeuwen RU full_prof political science 2022 RU
2610 Alex Lehr RU associate_prof political science 2022 RU
2710 Vera Linke RU phd political science 2022 RU
2810 Charlie Loopuijt RU other political science 2022 RU
2910 Sofie van der Maarel RU phd political science 2022 RU
3010 Romain Malejacq RU assistant_prof political science 2022 RU
3110 Katerina Manevska RU assistant_prof political science 2022 RU
3210 Gustav Meibauer RU assistant_prof political science 2022 RU
3310 Maurits Meijers RU assistant_prof political science 2022 RU
3410 Tine Molendijk RU other political science 2022 RU
3510 Marco Monaco RU phd political science 2022 RU
3610 Camille Munezero RU phd political science 2022 RU
3710 Chris Nijhuis RU other political science 2022 RU
3810 Bob Reinalda RU other political science 2022 RU
3910 Roderik Rekker UvA/Uni Gothenburg assistant_prof political science 2022 UvA Uni Gothenburg
4010 Miguel A Rivera Quinones RU other political science 2022 RU
4110 Saskia Ruth-Lovell RU assistant_prof political science 2022 RU
4210 Indra Römgens RU phd political science 2022 RU
4310 Salah Lema RU phd political science 2022 RU
4410 Melisa Soto RU phd political science 2022 RU
4510 Nora Stel RU assistant_prof political science 2022 RU
4610 Jeannine Suurmond RU postdoc political science 2022 RU
475 Haley Swedlund RU associate_prof political science 2022 RU
481 Tjidde Tempels RU other political science 2022 RU
491 Niels Terpstra RU assistant_prof political science 2022 RU
501 Marie Theuwis RU phd political science 2022 RU
511 Maya Turolla RU postdoc political science 2022 RU
521 Reinout van der Veer RU assistant_prof political science 2022 RU
531 Bertjan Verbeek RU full_prof political science 2022 RU
541 Willemijn Verkoren RU associate_prof political science 2022 RU
551 Mieke Verloo RU full_prof political science 2022 RU
561 Désirée Verweij RU full_prof political science 2022 RU
571 Anna van der Vleuten RU full_prof political science 2022 RU
581 Koen Vossen RU other political science 2022 RU
591 Angela Wigger RU associate_prof political science 2022 RU
601 Marcel Wissenburg RU full_prof political science 2022 RU
611 Andrej Zaslove RU associate_prof political science 2022 RU
641 Adina Akbik Leiden assistant_prof political science 2022 Leiden
651 Femke Bakker Leiden assistant_prof political science 2022 Leiden
661 Ingrid van Biezen Leiden full_prof political science 2022 Leiden
671 Nicolas Blarel Leiden associate_prof political science 2022 Leiden
681 Arjen Boin Leiden full_prof political science 2022 Leiden
691 Theo Brinkel Leiden full_prof political science 2022 Leiden
701 Valentina Carraro Leiden assistant_prof political science 2022 Leiden
711 Leila Demarest Leiden associate_prof political science 2022 Leiden
721 Jesse Doornenbal Leiden other political science 2022 Leiden
731 Matthew di Giuseppe Leiden associate_prof political science 2022 Leiden
741 Roos van der Haer Leiden assistant_prof political science 2022 Leiden
751 Gisela Hirschmann Leiden assistant_prof political science 2022 Leiden
761 Joop van Holsteijn Leiden full_prof political science 2022 Leiden
771 Corinna Jentzsch Leiden assistant_prof political science 2022 Leiden
781 Petr Kopecky Leiden full_prof political science 2022 Leiden
791 Matthew Longo Leiden assistant_prof political science 2022 Leiden
801 Tom Louwerse Leiden associate_prof political science 2022 Leiden
811 Floris Mansvelt Beck Leiden assistant_prof political science 2022 Leiden
821 Juan Masullo Jimenez Leiden assistant_prof political science 2022 Leiden
831 Hilde van Meegdenburg Leiden assistant_prof political science 2022 Leiden
841 Michael Meffert Leiden assistant_prof political science 2022 Leiden
851 Frits Meijerink Leiden assistant_prof political science 2022 Leiden
861 Tim Mickler Leiden assistant_prof political science 2022 Leiden
871 Martijn Mos Leiden assistant_prof political science 2022 Leiden
881 Katharina Natter Leiden assistant_prof political science 2022 Leiden
891 Cristoph Niessen Leiden assistant_prof political science 2022 Leiden
901 Paul Nieuwenburg Leiden full_prof political science 2022 Leiden
911 Simon Otjes Leiden assistant_prof political science 2022 Leiden
921 Johannes Oversloot Leiden assistant_prof political science 2022 Leiden
931 Jonathan Philips Leiden assistant_prof political science 2022 Leiden
941 Rebecca Ploof Leiden assistant_prof political science 2022 Leiden
951 Karolina Pomorska Leiden associate_prof political science 2022 Leiden
961 Francesco Ragazzi Leiden associate_prof political science 2022 Leiden
971 Babak Rezaeedaryakenari Leiden assistant_prof political science 2022 Leiden
981 Josh Robison Leiden assistant_prof political science 2022 Leiden
991 Michael Sampson Leiden assistant_prof political science 2022 Leiden
1001 Jan Aart Scholte Leiden full_prof political science 2022 Leiden
1011 Jonah Schulhofer-Wohl Leiden assistant_prof political science 2022 Leiden
1021 Maria Spirova Leiden assistant_prof political science 2022 Leiden
1031 Tom Theuns Leiden assistant_prof political science 2022 Leiden
1041 Daniel Thomas Leiden full_prof political science 2022 Leiden
1051 Vasiliki Tsagkroni Leiden assistant_prof political science 2022 Leiden
1061 Wouter Veenendaal Leiden associate_prof political science 2022 Leiden
1071 Claire Vergerio Leiden assistant_prof political science 2022 Leiden
1081 Marco Verschoor Leiden assistant_prof political science 2022 Leiden
1091 Cynthia van Vonno Leiden assistant_prof political science 2022 Leiden
110 Niels van Willigen Leiden associate_prof political science 2022 Leiden
1111 Shiming Yang Leiden postdoc political science 2022 Leiden
1121 Nikoleta Yordanova Leiden associate_prof political science 2022 Leiden
1131 Frank de Zwart Leiden assistant_prof political science 2022 Leiden
1141 Alessia Aspide Leiden phd political science 2022 Leiden
1151 Cyan Bae Leiden phd political science 2022 Leiden
1161 Kathleen Brown Leiden phd political science 2022 Leiden
1171 Josette Daemen Leiden phd political science 2022 Leiden
1181 Anastasia Ershova Leiden other political science 2022 Leiden
1191 Manuel Kaal Leiden phd political science 2022 Leiden
1201 Eleftherios Karchimakis Leiden phd political science 2022 Leiden
1211 Aleksandra Khokhlova Leiden phd political science 2022 Leiden
1221 Stijn Koenraads Leiden phd political science 2022 Leiden
1231 Hannah Kuhn Leiden phd political science 2022 Leiden
1241 Sabine Mokry Leiden/Uni Berlijn phd political science 2022 Leiden Uni Berlijn
1251 Ildikó Plájás Leiden other political science 2022 Leiden
1261 Zach Reyna Leiden other political science 2022 Leiden
1271 Alexander Schilin Leiden phd political science 2022 Leiden
1281 Pawan Sen Leiden phd political science 2022 Leiden
1291 Lukas Spielberger Leiden phd political science 2022 Leiden
1301 Ruben van de Ven Leiden phd political science 2022 Leiden
1311 Denny van der Vlist Leiden phd political science 2022 Leiden
1321 Thijs Vos Leiden phd political science 2022 Leiden
1331 Rick van Well Leiden phd political science 2022 Leiden
1341 Daan van den Wollenberg Leiden phd political science 2022 Leiden
1351 Elina Zorina Leiden phd political science 2022 Leiden
1361 Rudy Andeweg Leiden full_prof political science 2022 Leiden
1371 Ivan Bakalov Leiden other political science 2022 Leiden
1381 Agha Bayramov Leiden other political science 2022 Leiden
1391 Jelena Belic Leiden other political science 2022 Leiden
1401 Jelke Bethlehem Leiden full_prof political science 2022 Leiden
1411 Peter Castenmiller Leiden other political science 2022 Leiden
1421 Tomas Cirhan Leiden other political science 2022 Leiden
1431 Oda van Cranenburgh Leiden associate_prof political science 2022 Leiden
1441 Diana Davilla Gordillo Leiden/Lake Forest college other political science 2022 Leiden Lake Forest college
1451 Rutger Hagen Leiden other political science 2022 Leiden
1461 Janina Heaphy Leiden other political science 2022 Leiden
1471 Galen Irwin Leiden full_prof political science 2022 Leiden
1481 Müge Kinacioglu Leiden other political science 2022 Leiden
1491 Ruud Koole Leiden full_prof political science 2022 Leiden
1501 Amber Lauwers Leiden other political science 2022 Leiden
1511 Gjovalin Macaj Leiden other political science 2022 Leiden
1521 Marijn Nagtzaam Leiden other political science 2022 Leiden
1531 Alexandros Ntaflos Leiden other political science 2022 Leiden
1541 Joyce Outshoorn Leiden full_prof political science 2022 Leiden
1551 Ellen van Reuler Leiden other political science 2022 Leiden
1561 Arlinda Rrustemi Leiden other political science 2022 Leiden
1571 Thomas Scarff Leiden other political science 2022 Leiden
1581 Radost Sharenkova - Toshkova Leiden other political science 2022 Leiden
1591 Xander Slaski Leiden other political science 2022 Leiden
1601 Vishwesh Sundar Leiden other political science 2022 Leiden
1611 Olaf van der Veen Leiden other political science 2022 Leiden
1621 Amy Verdun Leiden/Uni of Victoria full_prof political science 2022 Leiden Uni of Victoria
1631 Anouk van Vliet Leiden other political science 2022 Leiden
1641 Carina van de Wetering Leiden other political science 2022 Leiden
1661 Paul Aarts UvA other political science 2022 UvA
1671 Selina Abraham UvA other political science 2022 UvA
1681 Tjitske Akkerman UvA other political science 2022 UvA
1691 Natasha Anastasiadou UvA other political science 2022 UvA
1701 Avyanthi Azis UvA/Uni Gothenburg phd political science 2022 UvA Uni Gothenburg
1711 Tito Bachmayer UvA phd political science 2022 UvA
1721 Julia Bader UvA associate_prof political science 2022 UvA
1731 Asma Balfaqih UvA other political science 2022 UvA
1741 Gulshan Banas UvA phd political science 2022 UvA
1751 Andreas Baur UvA phd political science 2022 UvA
1761 Joost Berkhout UvA associate_prof political science 2022 UvA
1771 Merve Biten UvA phd political science 2022 UvA
1781 Astrid Bodini UvA phd political science 2022 UvA
1791 Saskia Bonjour UvA associate_prof political science 2022 UvA
1801 Esmé Bosma UvA phd political science 2022 UvA
1811 Dimitris Bouris UvA other political science 2022 UvA
1821 Wouter van der Brug UvA full_prof political science 2022 UvA
1831 Brian Burgoon UvA full_prof political science 2022 UvA
1841 Olga Burlyuk UvA assistant_prof political science 2022 UvA
1851 Kristin Cain UvA phd political science 2022 UvA
1861 Ruth Carlitz UvA assistant_prof political science 2022 UvA
1871 Noyonika Das UvA phd political science 2022 UvA
1881 Ursula Daxecker UvA associate_prof political science 2022 UvA
1891 Jeroen Doomernik UvA associate_prof political science 2022 UvA
1901 David van der Duin Universiteit Gent phd political science 2022 Universiteit Gent
1911 Linet Durmusoglu UvA phd political science 2022 UvA
1921 Marieke Ekenhorst UvA phd political science 2022 UvA
1931 Evelyn Ersanili UvA other political science 2022 UvA
1941 Sonja Evaldsson Mellstrom UvA phd political science 2022 UvA
1951 Meindert Fennema UvA full_prof political science 2022 UvA
1961 Matilde Ferretti UvA other political science 2022 UvA
1971 Fatima Festic UvA other political science 2022 UvA
1981 Jan Fichtner UvA other political science 2022 UvA
1991 Luc Fransen UvA associate_prof political science 2022 UvA
2001 Annette Freyberg-Inan UvA full_prof political science 2022 UvA
2011 Maureen Fubara UvA phd political science 2022 UvA
2021 John Grin UvA full_prof political science 2022 UvA
203 Rob Hagendijk UvA other political science 2022 UvA
2041 Armèn Hakhverdian UvA associate_prof political science 2022 UvA
2051 Marcel Hanegraaff UvA associate_prof political science 2022 UvA
2061 Imke Harbers UvA associate_prof political science 2022 UvA
2071 Eelco Harteveld UvA assistant_prof political science 2022 UvA
2081 Victor Hartman UvA other political science 2022 UvA
2091 Anja van Heelsum UvA associate_prof political science 2022 UvA
2101 Eelke Heemskerk UvA associate_prof political science 2022 UvA
2111 Klaas Heemskerk UvA phd political science 2022 UvA
2121 Charlotte Hille UvA assistant_prof political science 2022 UvA
2131 Otto Holman UvA/Uni of Lausanne associate_prof political science 2022 UvA Uni of Lausanne
2141 Maaike Homan UvA phd political science 2022 UvA
2151 Franca van Hooren UvA assistant_prof political science 2022 UvA
2161 Beste Isleyen UvA associate_prof political science 2022 UvA
2171 Leonie Jegen UvA phd political science 2022 UvA
2181 Thomas Jocker UvA phd political science 2022 UvA
2191 Judith de Jong UvA phd political science 2022 UvA
2201 Haylee Kelsall UvA phd political science 2022 UvA
2211 Eda Kiriscioglu Tasan UvA phd political science 2022 UvA
2221 Jens van ’t Klooster UvA assistant_prof political science 2022 UvA
2231 Geert-Jan Knoops UvA/Shandong uni full_prof political science 2022 UvA Shandong uni
2241 Daniel Komaromy UvA other political science 2022 UvA
2251 Sebastian Krapohl UvA associate_prof political science 2022 UvA
2261 Katie Kuschminder UvA other political science 2022 UvA
2271 Chunglin Kwa UvA other political science 2022 UvA
2281 Sarah de Lange UvA full_prof political science 2022 UvA
2291 David Laws UvA other political science 2022 UvA
2301 Alexandros Lefteratos UvA phd political science 2022 UvA
2311 Yue Li UvA other political science 2022 UvA
2321 Chuyu Liu UvA assistant_prof political science 2022 UvA
2331 Meredith Loken UvA assistant_prof political science 2022 UvA
2341 Naomi Lührs UvA other political science 2022 UvA
2351 Kingsley Madueke UvA other political science 2022 UvA
2361 Rojika Maharjan UvA phd political science 2022 UvA
2371 Piotr Marczynski UvA other political science 2022 UvA
2381 Marcel Maussen UvA associate_prof political science 2022 UvA
2391 Tom van der Meer UvA full_prof political science 2022 UvA
2401 Ana Mishkovska Kajevska UvA other political science 2022 UvA
2411 Sabah Mofidi UvA other political science 2022 UvA
2421 Marie Morel UvA other political science 2022 UvA
2431 Daniel Mügge UvA full_prof political science 2022 UvA
2441 Liza Mügge UvA associate_prof political science 2022 UvA
2451 Ton Nijhuis UvA full_prof political science 2022 UvA
2461 Nilmawati Nilmawati UvA phd political science 2022 UvA
2471 Johan Olsthoorn UvA assistant_prof political science 2022 UvA
2481 Sanne van Oosten UvA phd political science 2022 UvA
2491 Polly Pallister-Wilkins UvA associate_prof political science 2022 UvA
2501 Mehdi Parvizi Amineh UvA other political science 2022 UvA
2511 Daphne van der Pas UvA assistant_prof political science 2022 UvA
2521 Julia Palejko UvA other political science 2022 UvA
2531 Steve Pickering UvA other political science 2022 UvA
2541 Robin Pistorius UvA other political science 2022 UvA
2551 Philip van Praag UvA associate_prof political science 2022 UvA
2561 Paul Raekstad UvA other political science 2022 UvA
2571 Emily Ragus UvA phd political science 2022 UvA
2581 Mariana Riquito Pereira UvA phd political science 2022 UvA
2591 Conny Roggeband UvA associate_prof political science 2022 UvA
2601 Matthijs Rooduijn UvA assistant_prof political science 2022 UvA
2611 Enzo Rossi UvA associate_prof political science 2022 UvA
2621 Zahra Runderkamp UvA phd political science 2022 UvA
2631 Kidjie Ian Saguin UvA assistant_prof political science 2022 UvA
2641 Rosa Sanchez Salgado UvA assistant_prof political science 2022 UvA
2651 Anne Sastromedjo UvA phd political science 2022 UvA
2661 Philip Schleifer UvA associate_prof political science 2022 UvA
2671 Eric Schliesser UvA full_prof political science 2022 UvA
2681 Gijs Schumacher UvA associate_prof political science 2022 UvA
2691 Merel Serdijn UvA phd political science 2022 UvA
2701 Yasemin Sivri UvA phd political science 2022 UvA
2711 Abbey Steele UvA associate_prof political science 2022 UvA
2721 Eefje Steenvoorden UvA assistant_prof political science 2022 UvA
2731 Frank Takes Leiden uni/UvA other political science 2022 Leiden uni UvA
274 Jean Tillie UvA full_prof political science 2022 UvA
2751 Geoffrey Underhill UvA full_prof political science 2022 UvA
2761 Duygu Uysal Dincol Koc University.UvA phd political science 2022 Koc University.UvA
2771 Nel Vandekerckhove UvA assistant_prof political science 2022 UvA
2781 Imrat Verhoeven UvA assistant_prof political science 2022 UvA
2791 Floris Vermeulen UvA associate_prof political science 2022 UvA
2801 Darshan Vigneswaran UvA associate_prof political science 2022 UvA
2811 Jessica de Vlieger UvA phd political science 2022 UvA
2821 Katharina Weber UvA phd political science 2022 UvA
2831 Eline Westra UvA phd political science 2022 UvA
2841 Sofia Margareta Wickberg UvA assistant_prof political science 2022 UvA
2861 Loes Aaldering VU assistant_prof political science 2022 VU
2871 Daniela Andrade VU other political science 2022 VU
2881 Bastiaan van Apeldoorn VU full_prof political science 2022 VU
2891 Jelle van Baardewijk VU assistant_prof political science 2022 VU
2901 Duco Bannink VU associate_prof political science 2022 VU
2911 Bas Becker VU phd political science 2022 VU
2921 Thijs de Boer VU phd political science 2022 VU
2931 Hans Bosselaar VU other political science 2022 VU
2941 Hans Boutellier VU full_prof political science 2022 VU
2951 Jeanne de Bruijn VU full_prof political science 2022 VU
2961 Madalina Busuioc VU full_prof political science 2022 VU
2971 Aylin Aydin Cakir VU other political science 2022 VU
2981 Sinan Cankaya VU assistant_prof political science 2022 VU
2991 Peter Castenmiller VU other political science 2022 VU
3001 Alana Castro de Azevedo VU phd political science 2022 VU
3011 Eric Cezne UU/VU other political science 2022 UU VU
3021 Liberty Chee VU other political science 2022 VU
3031 Ben Crum VU full_prof political science 2022 VU
3041 Serena Does VU full_prof political science 2022 VU
3051 Yunus Baris Ertürk VU phd political science 2022 VU
3061 Yarin Eski VU assistant_prof political science 2022 VU
3071 Fred Fleurke VU full_prof political science 2022 VU
3081 Gjalt de Graaf VU full_prof political science 2022 VU
3091 Nana de Graaff VU associate_prof political science 2022 VU
3101 Laurens Hartveld VU other political science 2022 VU
3111 Hans van den Heuvel VU full_prof political science 2022 VU
3121 John Hogan VU other political science 2022 VU
3131 Jan Hoogland VU assistant_prof political science 2022 VU
3141 Leo Huberts VU full_prof political science 2022 VU
3151 Thomas Janssen VU other political science 2022 VU
3161 Hortense Jongen VU assistant_prof political science 2022 VU
3171 Wynand Kastart VU other political science 2022 VU
3181 Hans Keman VU full_prof political science 2022 VU
3191 Cille Kaiser VU other political science 2022 VU
3201 Maria Kourpa VU other political science 2022 VU
3211 Benjamin Leidorf-Tida VU phd political science 2022 VU
3221 Geert Luteijn VU other political science 2022 VU
3231 Philipp Lutz VU assistant_prof political science 2022 VU
3241 Maria-Alexandra Martin VU phd political science 2022 VU
3251 Stefano Merlo VU phd political science 2022 VU
3261 Patrick Mello VU assistant_prof political science 2022 VU
3271 Dana Naomi Mills VU other political science 2022 VU
3281 AJGM van Montfort VU associate_prof political science 2022 VU
3291 Montserrat Koloffon Rosas VU phd political science 2022 VU
3301 Steven Otterman VU phd political science 2022 VU
3311 Henk Overbeek VU full_prof political science 2022 VU
3321 Patrick Overeem VU assistant_prof political science 2022 VU
3331 Philipp Pattberg VU full_prof political science 2022 VU
3341 Maeve Powlick VU other political science 2022 VU
3351 Michiel van Schagen VU other political science 2022 VU
3361 Kayla Schwoerer VU assistant_prof political science 2022 VU
3371 Katherine Senneville VU other political science 2022 VU
3381 Frederique Six VU associate_prof political science 2022 VU
3391 Boris Slijper VU other political science 2022 VU
3401 Diederik Stadig VU phd political science 2022 VU
3411 Ronald van Steden VU associate_prof political science 2022 VU
3421 Ozlem Terzi VU other political science 2022 VU
3431 JS Timmer VU assistant_prof political science 2022 VU
3441 Willem Trommel VU full_prof political science 2022 VU
3451 Lieselot Vandenbussche VU assistant_prof political science 2022 VU
3461 Bram Verhulst VU other political science 2022 VU
3471 Sietske van der Vliet VU other political science 2022 VU
3481 Catherine de Vries Bocconi University/UvA full_prof political science 2022 Bocconi University UvA
3491 FP Wagenaar VU assistant_prof political science 2022 VU
3501 Wolfgang Wagner VU full_prof political science 2022 VU
3511 Chendi Wang VU assistant_prof political science 2022 VU
3521 Pieter van Wijnen VU other political science 2022 VU
3531 Kristina Weissmueller VU assistant_prof political science 2022 VU

6 Creating a unique identifier for each person

The excel file does not contain unique identifiers. This is important when combining multiple data sources to help you keep track of individuals in your sample, and make sure that the right information is matched to the right person.

set.seed(2806)

df$id <- ids::random_id(n = nrow(df), bytes = 3, use_openssl = FALSE)

head(df$id)
#> [1] "f84cb8" "ad5eeb" "5a5e57" "7c3ed2" "944260" "6c23fc"
# should be 'f84cb8' 'ad5eeb' '5a5e57' '7c3ed2' '944260' '6c23fc' for reproducibility

7 names

Now, we get to the nitty-gritty: creating separate objects from first and last names.

… this shouldn’t be too hard right? Let’s look at some of the names.

head(df$name)
#> [1] "Ece Arat"                  "Marcel Van Assen"          "Weverthon Barbosa Machado"
#> [4] "Vardan Barsegyan"          "Rutger Blom"               "Lute Bos"

Well, in principle it isn’t! The names are in a standard format, e.g. “Jane Doe”, so we just extract the first word for the first name, and the last word for the last name.

For most cases, that is completely true! So in a sense our lives are easy, BUT…

There are also a handful of exceptions, which we need to deal with in some way. For the second and third names in the data (“Marcel van Assen”, “Weverthon Barbosa Machado”), we see that the full name consists of more than 2 words.

In the case of the first name, I can tell you that the 2nd word of the name string is something called a nobiliary particle. These are prepositions that often come up in Dutch names (“Van”, “De”, “Ten”, among others), but also in some Spanish names (“Da”), French names (“Du”, “Le”), German names (“Von”, “Zu”) and those are just a few examples.

For the second name, a quick Google search informed me that the 2nd word of the name string is part of the last name. In Spanish- and Portuguese-speaking countries, it is quite common to take on the last names of both parents.

For matching names to various databases, it is useful to store last names and nobiliary particles in different objects. This has to do with the fact that sometimes, only the last name will give a match, while other databases require the full last name including nobiliary particles to match people from your dataframe.

In the case of multiple last names, it is a bit trickier. If a name is more than two words but there are no nobiliary particles, it is not easy to infer whether the names in the middle are actually part of the first or the last name, without checking all of them by hand. Therefore, I would advise you to simply try to extract the first word for the first name, and the last word for the last name to be sure.

7.1 A little exercise for you!

So, now it is up to you to decide how you would go about extracting in separate objects of your dataframe:

  • first names

  • nobiliary particles

  • last names

For these operations, I would advise you to use functions from the stringi package or use the ‘gsub’ function from base R.

# Your code here!

A list of some common nobiliary particles

c("van den", "van der", "van de", "vanden", "vande", "van 't", "op de", "de la", "den", "van", "de",
    "ten", "ter", "el", "la", "di")

7.2 Getting last names out first

The names are pretty neatly in the format “First name(s) last name(s)”. So we know that the last names are at the end of the string. One difficulty we have, is that while for most people, the last name is simply the last ‘word’ in the name string, for a handful of people the last name takes up multiple words. For some, it is longer because there are nobiliary particles in the name, which we want to extract in a different object, while for others it is longer because they have multiple last names.

# Some names have nobiliary particles (e.g. 'Da Costa' or 'Du Bois'). Especially in Dutch names,
# they are very common. We extract these in a separate object
np <- c("(V|v)an (D|d)er", "(V|v)an (D|d)en", "(V|v)an (D|d)e", "(V|v)ande(n)?", "(V|v)an '(T|t)", "(V|v)an'(T|t)",
    "(V|v)an (H|h)et", "(V|v)on (D|d)er", "(O|o)p (D|d)en?", "(O|o)p 't", "(O|o)f ten", "(A|a)an de(n)?",
    "(D|d)e (L|l)a", "(I|i)n (H|h)et", "(I|i)n '(T|t)", "(I|i)n'(T|t)", "(I|i)n (T|t)", "(I|i)n (D|d)er",
    "(B|b)ij (D|d)e")

np2 <- c("\\s(L|l)a\\s", "\\s(O|o)p\\s", "\\s(V|v)an\\s", "\\s(V|v)on\\s", "\\s(D|d)en\\s", "\\s(D|d)er\\s",
    "\\s(D|d)el\\s", "\\s(D|d)(e|a|u|i)\\s", "\\s(D|d)os?\\s", "\\s(T|t)er\\s", "\\s(T|t)en\\s", "\\s(T|t)e\\s",
    "\\s'(T|t)\\s", "\\s(L|l)e\\s", "\\s(E|A)l-", "\\s[(A|a)(E|e)](L|l)'?\\s", "\\s(D|d)'", "\\szu\\s",
    "\\s(Z|z)ur\\s", "\\s(Y|y)\\s", "\\s(E|e)\\s")


# First we extract the nobiliary particles consisting of multiple words
df$np <- str_extract(df$name, paste0(np, collapse = "|"))
df$np <- ifelse(is.na(df$np), str_extract(df$name, paste0(np2, collapse = "|")), df$np)  #only extract the single-word NP if it is not filled yet

# lastname: everything after nobiliary particle
df$lastname <- ifelse(!is.na(df$np), str_remove(df$name, paste0("^.*", df$np)), word(df$name, -1))


# some cleaning: make the string lowercase and remove extra whitespaces
df$np <- tolower(trimws(df$np, which = "both"))
df$np <- ifelse(is.na(df$np), "", df$np)

df$lastname <- tolower(trimws(df$lastname, which = "both"))
df$lastname <- stri_trans_general(df$lastname, id = "latin-ascii")  #remove diacritics

df$lastname <- str_extract(df$lastname, "[:lower:]+")  # if multiple last names after the nobiliary particle, we take the first one

7.3 Extracting first names

Due to the standard format of the name object, we can simply take out the first word of the name string. Please note that some people only have initials instead of a first name.

df$firstname <- str_remove(df$name, "\\s.*$") # remove everything from the name object after the first whitespace


# I first detect the initials by using a general pattern - some regular expression magic if you will. 
# you can update this to match what you find in your own data
initialpattern <- paste(c("^([:upper:]\\.)+[:upper:]$",       # Last initial does not have a full stop at the end (e.g. A.A.A)
                          "([:upper:]\\.+)+",                 # All initials have full stops at the end (e.g. A.A.A.)
                          "^\\s?[:upper:]+$"),                # Entire string consists of capital letters
                        collapse = "|")

df$ini <- str_extract(df$firstname, paste0(initialpattern)) # we extract the initials from format we defined, and save them in a different object
df$firstname <- ifelse(!is.na(df$ini), str_remove(df$firstname, df$ini), df$firstname) # extract initials from first name object when present, so that the first name object really only contains first names 
df$ini <- ifelse(is.na(df$ini), "", df$ini) # set initials object to empty if there are no initials


# some cleaning: make the first name lowercase
df$firstname <- tolower(df$firstname)
df$firstname <- stri_trans_general(df$firstname, id="latin-ascii") #remove diacritics

7.4 Saving the new dataframe

Now with cleaned first and last names, ID variable and some data manipulation on the other variables.

df_names <- df
fsave(df_names)
LS0tDQp0aXRsZTogIk5hbWUgQ3VyYXRpb24iDQpiaWJsaW9ncmFwaHk6IHJlZmVyZW5jZXMuYmliDQpsaW5rLWNpdGF0aW9uczogeWVzDQotLS0NCg0KDQogIA0KYGBge3IsIGdsb2JhbHNldHRpbmdzLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30NCmxpYnJhcnkoa25pdHIpDQpvcHRzX2NodW5rJHNldCh0aWR5Lm9wdHM9bGlzdCh3aWR0aC5jdXRvZmY9MTAwKSx0aWR5PVRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLGNvbW1lbnQgPSAiIz4iLCBjYWNoZT1UUlVFLCBjbGFzcy5zb3VyY2U9YygidGVzdCIpLCBjbGFzcy5vdXRwdXQ9YygidGVzdDIiKSwgY2FjaGUubGF6eSA9IEZBTFNFKQ0Kb3B0aW9ucyh3aWR0aCA9IDEwMCkgDQpyZ2w6OnNldHVwS25pdHIoKQ0KDQpjb2xvcml6ZSA8LSBmdW5jdGlvbih4LCBjb2xvcikge3NwcmludGYoIjxzcGFuIHN0eWxlPSdjb2xvcjogJXM7Jz4lczwvc3Bhbj4iLCBjb2xvciwgeCkgfQ0KDQpgYGANCg0KYGBge3Iga2xpcHB5LCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUUsIG1lc3NhZ2U9RkFMU0V9DQojIGluc3RhbGwucGFja2FnZXMoInJlbW90ZXMiKQ0KI3JlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJybGVzdXIva2xpcHB5IikNCmtsaXBweTo6a2xpcHB5KHBvc2l0aW9uID0gYygndG9wJywgJ3JpZ2h0JykpDQoja2xpcHB5OjprbGlwcHkoY29sb3IgPSAnZGFya3JlZCcpDQoja2xpcHB5OjprbGlwcHkodG9vbHRpcF9tZXNzYWdlID0gJ0NsaWNrIHRvIGNvcHknLCB0b29sdGlwX3N1Y2Nlc3MgPSAnRG9uZScpDQpgYGANCg0KDQotLS0tDQoNCiMgR29hbA0KDQpUaGlzIGZpbGUgaXMgdXNlZCB0byB0aWR5IHVwIHRoZSBkYXRhZnJhbWVzIG9mIHBvbGl0aWNhbCBzY2llbnRpc3RzIGFuZCBzb2Npb2xvZ2lzdHMsIGJ5IGNvbWJpbmluZyB0aGUgdHdvIGludG8gYSBzaW5nbGUgZGF0YWZyYW1lIHdpdGggdW5pcXVlIElEcyBhbmQgbmVhdCBmaXJzdCBhbmQgbGFzdCBuYW1lcy4gDQoNCg0KIyBDdXN0b20gZnVuY3Rpb25zDQoNCi0gYGZwYWNrYWdlLmNoZWNrYDogQ2hlY2sgaWYgcGFja2FnZXMgYXJlIGluc3RhbGxlZCAoYW5kIGluc3RhbGwgaWYgbm90KSBpbiBSIChbc291cmNlXShodHRwczovL3ZiYWxpZ2EuZ2l0aHViLmlvL3ZlcmlmeS10aGF0LXItcGFja2FnZXMtYXJlLWluc3RhbGxlZC1hbmQtbG9hZGVkLykpLiAgDQotIGBmc2F2ZWA6IFNhdmUgdG8gcHJvY2Vzc2VkIGRhdGEgaW4gcmVwb3NpdG9yeSAgDQotIGBmbG9hZGA6IFRvIGxvYWQgdGhlIGZpbGVzIGJhY2sgYWZ0ZXIgYW4gYGZzYXZlYCAgDQotIGBmc2hvd2RmYDogVG8gcHJpbnQgb2JqZWN0cyAodGliYmxlcyAvIGRhdGEuZnJhbWUpIG5pY2VseSBvbiBzY3JlZW4gaW4gLnJtZCAgDQoNCg0KYGBge3IgY3VzdG9tZnVuY3Rpb25zLCByZXN1bHRzPSdoaWRlJ30NCg0Kcm0obGlzdCA9IGxzKCkpDQoNCmZwYWNrYWdlLmNoZWNrIDwtIGZ1bmN0aW9uKHBhY2thZ2VzKSB7DQogIGxhcHBseShwYWNrYWdlcywgRlVOID0gZnVuY3Rpb24oeCkgew0KICAgIGlmICghcmVxdWlyZSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7DQogICAgICBpbnN0YWxsLnBhY2thZ2VzKHgsIGRlcGVuZGVuY2llcyA9IFRSVUUpDQogICAgICBsaWJyYXJ5KHgsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkNCiAgICB9DQogIH0pDQp9DQoNCmZzYXZlIDwtIGZ1bmN0aW9uKHgsIGZpbGU9TlVMTCwgbG9jYXRpb249Ii4vZGF0YS9wcm9jZXNzZWQvIikgew0KICBpZmVsc2UoIWRpci5leGlzdHMoImRhdGEiKSwgZGlyLmNyZWF0ZSgiZGF0YSIpLCBGQUxTRSkNCiAgaWZlbHNlKCFkaXIuZXhpc3RzKCJkYXRhL3Byb2Nlc3NlZCIpLCBkaXIuY3JlYXRlKCJkYXRhL3Byb2Nlc3NlZCIpLCBGQUxTRSkNCiAgaWYgKGlzLm51bGwoZmlsZSkpIGZpbGU9IGRlcGFyc2Uoc3Vic3RpdHV0ZSh4KSkNCiAgZGF0ZW5hbWUgPC0gc3Vic3RyKGdzdWIoIls6LV0iLCAiIiwgU3lzLnRpbWUoKSksIDEsOCkgIA0KICB0b3RhbG5hbWUgPC0gcGFzdGUobG9jYXRpb24sIGRhdGVuYW1lLCBmaWxlLCAiLnJkYSIsIHNlcD0iIikNCiAgc2F2ZSh4LCBmaWxlID0gdG90YWxuYW1lKSAgI25lZWQgdG8gZml4IGlmIGZpbGUgaXMgcmVsb2FkZWQgYXMgaW5wdXQgbmFtZSwgbm90IGFzIHguIA0KfQ0KDQpmbG9hZCA8LSBmdW5jdGlvbihmaWxlbmFtZSkgew0KICBsb2FkKGZpbGVuYW1lKQ0KICBnZXQobHMoKVtscygpICE9ICJmaWxlbmFtZSJdKQ0KfQ0KDQpmc2hvd2RmIDwtICBmdW5jdGlvbih4LCAuLi4pIHsNCiAga25pdHI6OmthYmxlKHgsIGRpZ2l0cz0yLCAiaHRtbCIsIC4uLikgJT4lDQogIGthYmxlRXh0cmE6OmthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIikpICU+JQ0KICBrYWJsZUV4dHJhOjpzY3JvbGxfYm94KHdpZHRoPSIxMDAlIiwgaGVpZ2h0PSAiMzAwcHgiKQ0KfSANCg0KDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIGV2YWw9VFJVRX0NCmNvbG9yaXplIDwtIGZ1bmN0aW9uKHgsIGNvbG9yKSB7c3ByaW50ZigiPHNwYW4gc3R5bGU9J2NvbG9yOiAlczsnPiVzPC9zcGFuPiIsIGNvbG9yLCB4KSB9DQpgYGANCg0KLS0tICANCg0KIyBQYWNrYWdlcw0KDQotIGBpZHNgOiBwYWNrYWdlIHVzZWQgdG8gcmFuZG9tbHkgZ2VuZXJhdGUgdW5pcXVlIGlkcyAgDQotIGBzdHJpbmdyYCAmIGBzdHJpbmdpYCA6IGZvciBzdHJpbmcgbWFuaXB1bGF0aW9ucw0KDQoNCmBgYHtyLCByZXN1bHRzPSdoaWRlJ30NCnBhY2thZ2VzID0gYygiaWRzIiwgInN0cmluZ3IiLCAic3RyaW5naSIpDQpmcGFja2FnZS5jaGVjayhwYWNrYWdlcykNCmBgYA0KDQoNCi0tLSANCg0KIyBJbnB1dA0KDQpXZSBhbHJlYWR5IHNhdmVkIHRoZSBkYXRhIGZyb20gb3VyIHdlYnNjcmFwZSBpbiB0d28gZmlsZXMuIA0KUGxlYXNlIGRvd25sb2FkIHRoZXNlIGZpbGVzOiAgDQoNCmByIHhmdW46OmVtYmVkX2ZpbGUoIi4vZGF0YS9uYW1lc19zb2MuY3N2IilgICANCg0KYHIgeGZ1bjo6ZW1iZWRfZmlsZSgiLi9kYXRhL25hbWVzX3BvbC5jc3YiKWAgIA0KDQpTYXZlIGZpbGUgaW4gY29ycmVjdCBkaXJlY3Rvcnk6ICcuL2RhdGEnLiANCg0KYGBge3J9DQoNCnNvYyA8LSByZWFkLmNzdigiLi9kYXRhL25hbWVzX3NvYy5jc3YiLCBzZXA9IjsiLCBlbmNvZGluZz0iVVRGLTgiKSAjIGVuY29kaW5nIHRvIG1haW50YWluIGRpYWNyaXRpY3MNCnBvbCA8LSByZWFkLmNzdigiLi9kYXRhL25hbWVzX3BvbC5jc3YiLCBzZXA9IjsiLCBlbmNvZGluZz0iVVRGLTgiKQ0KDQpgYGANCg0KDQotLS0NCg0KIyBJbml0aWFsIGNsZWFuaW5nIG9mIHRoZSBkYXRhZnJhbWVzDQoNCg0KV2Ugc3RhcnQgYnkgY2xlYW5pbmcgdXAgdGhlIC5jc3YgZmlsZXMgYSBiaXQuIFNvbWV0aW1lcyB0cmFuc2Zvcm1pbmcgLmNzdiBmaWxlcyB0byBhbiBSIGZvcm1hdCBjcmVhdGVzIHNvbWUgb2RkIHRoaW5ncy4gSW4gdGhpcyBjYXNlLCBmb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGNvbHVtbiBuYW1lIGFwcGVhcnMgdG8gYmUgb2ZmLiANCkZ1cnRoZXJtb3JlLCBkZWFsaW5nIHdpdGggZmlsZXMgbGlrZSB0aGlzIHJlcXVpcmVzIGEgbGl0dGxlIGJpdCBvZiAncmVndWxhciBleHByZXNzaW9uIG1hZ2ljJy4gUmVndWxhciBleHByZXNzaW9ucyBoZWxwIHlvdSB0byB0cmFuc2Zvcm0gdGV4dCAoc3RyaW5nKSBkYXRhLCBieSBjYWxsaW5nIGVpdGhlciB0byBzcGVjaWZpYyBzdHJpbmdzIChlLmcuIHRoZSB3b3JkICJkb2ciKSwgb3IgZm9yIGNlcnRhaW4gZ2VuZXJhbGl6YWJsZSBzdHJpbmcgcGF0dGVybnMgKGUuZy4gYSBzdHJpbmcgY29uc2lzdGluZyBvZiBleGFjdGx5IHRocmVlIGxvd2VyY2FzZSBsZXR0ZXJzKS4gIA0KRXZlcnl0aGluZyBJIGhhdmUgbGVhcm5lZCBhYm91dCBzdHJpbmcgbWFuaXB1bGF0aW9uIGJhc2ljYWxseSBzdGVtcyBmcm9tIFt0aGlzIHdlYnBhZ2VdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9zdHJpbmdyL3ZpZ25ldHRlcy9yZWd1bGFyLWV4cHJlc3Npb25zLmh0bWwpLiBFc3BlY2lhbGx5IHdoZW4gdXNpbmcgd2ViLXNjcmFwZWQgZGF0YSwgeW91IHdpbGwgZW5jb3VudGVyIHJhdyB0ZXh0IGRhdGEgcHJldHR5IHJlZ3VsYXJseSwgc28ga25vd2luZyBhYm91dCByZWd1bGFyIGV4cHJlc3Npb25zIHdpbGwgcHJvYmFibHkgY29tZSBpbiBoYW5keS4gDQoNCg0KYGBge3J9DQojIHJlbW92aW5nIHRoZSAic3BlY2lhbGlzYXRpZSIgY29sdW1uIGZyb20gdGhlIHBvbGl0aWNhbCBzY2llbmNlIGRhdGEgZnJhbWUgYmVjYXVzZSBpdCBpcyBwb29ybHkgZmlsbGVkIGFuZCBkb2VzIG5vdCBleGlzdCBpbiBzb2Npb2xvZ3kNCg0KcG9sIDwtIHN1YnNldChwb2wsIHNlbGVjdD0tU3BlY2lhbGlzYXRpZSkNCg0KDQojIG1ha2luZyB0aGUgY29sdW1uIG5hbWVzIGVhc2llciB0byBjYWxsDQpjb2xuYW1lcyhwb2wpIDwtIGMoIm5hbWUiLCAidW5pIiwgImVtYWlsIiwgInBvc2l0aW9uIikNCmNvbG5hbWVzKHNvYykgPC1jKCJuYW1lIiwgInVuaSIsICJlbWFpbCIsICJwb3NpdGlvbiIpDQoNCg0KIyByZW1vdmluZyBlbXB0eSByb3dzDQpzb2MgPC0gc29jW3NvYyRuYW1lIT0iIixdDQpwb2wgPC0gcG9sW3BvbCRuYW1lIT0iIixdDQoNCg0KDQojIGNvbWJpbmluZyB0aGUgdHdvIGRhdGFmcmFtZXMgaW4gb25lLCBidXQgZmlyc3QgYWRkaW5nIGEgZGlzY2lwbGluZSBpZGVudGlmaWVyIGZvciBib3RoDQpzb2MkZGlzY2lwbGluZSA8LSByZXAoInNvY2lvbG9neSIsIG5yb3coc29jKSkNCnBvbCRkaXNjaXBsaW5lIDwtIHJlcCgicG9saXRpY2FsIHNjaWVuY2UiLCBucm93KHBvbCkpDQoNCmRmIDwtIHJiaW5kLmRhdGEuZnJhbWUoc29jLCBwb2wpDQoNCg0KIyByZW1vdmluZyBkb3VibGUgc3BhY2VzDQpkZiRuYW1lIDwtIGdzdWIoIlxccysiLCAiICIsIGRmJG5hbWUpICMgICJcXHMiIGluZGljYXRlcyBhIHdoaXRlc3BhY2UsIHNvICJcXHMrIiByZWZlcnMgdG8gMiBvciBtb3JlIHdoaXRlc3BhY2VzDQpkZiRuYW1lIDwtIHRyaW13cyhkZiRuYW1lKQ0KDQoNCiMgYWRkaW5nIGEgeWVhciB2YXJpYWJsZSAtIGluIGNhc2UgbXVsdGlwbGUgeWVhcnMgYXJlIHVzZWQsIHlvdSBzaG91bGQga2VlcCB0cmFjayBvZiB0aGlzLiANCmRmJHllYXIgPC0gcmVwKDIwMjIsIG5yb3coZGYpKQ0KDQoNCiMgc29tZSBwZW9wbGUgaGF2ZSBkb3VibGUgYWZmaWxpYXRpb25zLiBUaGVzZSBhcmUgc3RvcmVkIGFzICJ1bmkxL3VuaTIiIGluIHRoZSAndW5pJyBjb2x1bW4uIFdlIG5vdyB3YW50IHRvIGNyZWF0ZSB0d28gc2VwYXJhdGUgdmFyaWFibGVzIGZvciBlYWNoIGFmZmlsaWF0aW9uLg0KZGYkYWZmaWwxIDwtIGRmJHVuaSAjIGZpcnN0IHdlIGNyZWF0ZSBhIG5ldyB2YXJpYWJsZSBmb3IgdGhlIDFzdCBhZmZpbGlhdGlvbiwgd2hpY2ggaXMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCAndW5pJyB2YXJpYWJsZQ0KZGYkYWZmaWwxIDwtIHN0cl9yZW1vdmUoZGYkYWZmaWwxLCAiXFwvLiokIikgIyByZW1vdmUgdGhlIDJuZCBhZmZpbGlhdGlvbiBmcm9tIHRoZSBjb2x1bW4gb2YgdGhlIGZpcnN0IGFmZmlsaWF0aW9uDQoNCmRmJGFmZmlsMiA8LSBzdHJfcmVtb3ZlKGRmJHVuaSwgIl4uKlxcLyIpICMgZXh0cmFjdCBldmVyeXRoaW5nIGFmdGVyICIvIiB0byBnZXQgdGhlIDJuZCBhZmZpbGlhdGlvbg0KZGYkYWZmaWwyIDwtIHN0cl9yZW1vdmUoZGYkYWZmaWwyLCBkZiRhZmZpbDEpDQoNCg0KIyB0cmFuc2xhdGluZyB0aGUgcG9zaXRpb25zIHRvIEVuZ2xpc2ggLSBzaW5jZSB0aGUgcG9zaXRpb24gc3RyaW5nIGlzIGZyZWUgZm9ybSwgd2UgaGF2ZSB0byBleHRyYWN0IHRoZSByZWxldmFudCBpbmZvIGZyb20gdGhlcmUuIA0KIyB3ZSBzdGFydCBieSB0aGUgbW9zdCBzZW5pb3IgcG9zaXRpb25zLCBiZWNhdXNlIHNvbWUgcGVvcGxlIGxpc3QgbXVsdGlwbGUgYW5kIHdlIG9ubHkgd2FudCB0byBleHRyYWN0IHRoZSBtb3N0IHNlbmlvciByZXNlYXJjaCBwb3NpdGlvbiB0aGV5IG9jY3VweQ0KZGYkcG9zaXRpb24gPC0gdG9sb3dlcihkZiRwb3NpdGlvbikNCmRmJHBvc2l0aW9uIDwtIGlmZWxzZShhcy5udW1lcmljKHN0cl9kZXRlY3QoZGYkcG9zaXRpb24sICJob29nbGVyYWFyIikpPT0xLCAiZnVsbF9wcm9mIiwgZGYkcG9zaXRpb24pDQpkZiRwb3NpdGlvbiA8LSBpZmVsc2UoYXMubnVtZXJpYyhzdHJfZGV0ZWN0KGRmJHBvc2l0aW9uLCAiaG9vZmRkb2NlbnQiKSk9PTEsICJhc3NvY2lhdGVfcHJvZiIsIGRmJHBvc2l0aW9uKQ0KZGYkcG9zaXRpb24gPC0gaWZlbHNlKGFzLm51bWVyaWMoc3RyX2RldGVjdChkZiRwb3NpdGlvbiwgInVuaXZlcnNpdGFpciBkb2NlbnQiKSk9PTEsICJhc3Npc3RhbnRfcHJvZiIsIGRmJHBvc2l0aW9uKQ0KZGYkcG9zaXRpb24gPC0gaWZlbHNlKGFzLm51bWVyaWMoc3RyX2RldGVjdChkZiRwb3NpdGlvbiwgInBvc3Rkb2MiKSk9PTEsICJwb3N0ZG9jIiwgZGYkcG9zaXRpb24pDQpkZiRwb3NpdGlvbiA8LSBpZmVsc2UoYXMubnVtZXJpYyhzdHJfZGV0ZWN0KGRmJHBvc2l0aW9uLCAiKHBoZCl8KGRvY3RvcmFsKXwocHJvbW92ZW5kdXMpIikpPT0xLCAicGhkIiwgZGYkcG9zaXRpb24pIA0KDQojIGFsbCBvdGhlciBwb3NpdGlvbnMgYXJlIHNldCB0byBvdGhlciAtIHdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgcG9zaXRpb24gZm9ybSBvbiB0aGUgd2Vic2l0ZSBpcyBhIGZyZWUgdGV4dCBmb3JtLCBzbyB0aGUgZW50cmllcyBoZXJlIGFyZSBub3Qgc3RhbmRhcmRpemVkLiANCiMgbm9uLXJlc2VhcmNoIHBvc2l0aW9ucyBhcmUgbm90IHJlYWxseSByZWxldmFudCBmb3IgdGhpcyBhbmFseXNpcywgYmVjYXVzZSB0aGVzZSBwZW9wbGUgZG8gbm90IGxpa2VseSBoYXZlIHZlcnkgbWFueSBjby1hdXRob3JzLiANCmRmJHBvc2l0aW9uIDwtIGlmZWxzZSghZGYkcG9zaXRpb24gJWluJSBjKCJmdWxsX3Byb2YiLCAiYXNzb2NpYXRlX3Byb2YiLCAiYXNzaXN0YW50X3Byb2YiLCAicG9zdGRvYyIsICJwaGQiKSwgIm90aGVyIiwgZGYkcG9zaXRpb24pDQoNCmZzaG93ZGYoZGYpDQoNCmBgYA0KDQoNCg0KDQojIENyZWF0aW5nIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggcGVyc29uICANCg0KDQpUaGUgZXhjZWwgZmlsZSBkb2VzIG5vdCBjb250YWluIHVuaXF1ZSBpZGVudGlmaWVycy4gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBjb21iaW5pbmcgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIHRvIGhlbHAgeW91IGtlZXAgdHJhY2sgb2YgaW5kaXZpZHVhbHMgaW4geW91ciBzYW1wbGUsIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgcmlnaHQgaW5mb3JtYXRpb24gaXMgbWF0Y2hlZCB0byB0aGUgcmlnaHQgcGVyc29uLiANCg0KYGBge3J9DQpzZXQuc2VlZCgyODA2KQ0KDQpkZiRpZCA8LSBpZHM6OnJhbmRvbV9pZChuID0gbnJvdyhkZiksIGJ5dGVzID0gMywgdXNlX29wZW5zc2wgPSBGQUxTRSkNCg0KaGVhZChkZiRpZCkNCiMgc2hvdWxkIGJlICJmODRjYjgiICJhZDVlZWIiICI1YTVlNTciICI3YzNlZDIiICI5NDQyNjAiICI2YzIzZmMiIGZvciByZXByb2R1Y2liaWxpdHkNCmBgYA0KDQojIG5hbWVzIA0KDQoNCk5vdywgd2UgZ2V0IHRvIHRoZSBuaXR0eS1ncml0dHk6IGNyZWF0aW5nIHNlcGFyYXRlIG9iamVjdHMgZnJvbSBmaXJzdCBhbmQgbGFzdCBuYW1lcy4gDQoNCg0KLi4uIHRoaXMgc2hvdWxkbid0IGJlIHRvbyBoYXJkIHJpZ2h0PyBMZXQncyBsb29rIGF0IHNvbWUgb2YgdGhlIG5hbWVzLiANCg0KDQpgYGB7cn0NCmhlYWQoZGYkbmFtZSkNCmBgYA0KDQpXZWxsLCBpbiBwcmluY2lwbGUgaXQgaXNuJ3QhIFRoZSBuYW1lcyBhcmUgaW4gYSBzdGFuZGFyZCBmb3JtYXQsIGUuZy4gIkphbmUgRG9lIiwgc28gd2UganVzdCBleHRyYWN0IHRoZSBmaXJzdCB3b3JkIGZvciB0aGUgZmlyc3QgbmFtZSwgYW5kIHRoZSBsYXN0IHdvcmQgZm9yIHRoZSBsYXN0IG5hbWUuDQoNCkZvciBtb3N0IGNhc2VzLCB0aGF0IGlzIGNvbXBsZXRlbHkgdHJ1ZSEgU28gaW4gYSBzZW5zZSBvdXIgbGl2ZXMgYXJlIGVhc3ksIEJVVC4uLg0KDQpUaGVyZSBhcmUgYWxzbyBhIGhhbmRmdWwgb2YgZXhjZXB0aW9ucywgd2hpY2ggd2UgbmVlZCB0byBkZWFsIHdpdGggaW4gc29tZSB3YXkuIEZvciB0aGUgc2Vjb25kIGFuZCB0aGlyZCBuYW1lcyBpbiB0aGUgZGF0YSAoIk1hcmNlbCB2YW4gQXNzZW4iLCAiV2V2ZXJ0aG9uIEJhcmJvc2EgTWFjaGFkbyIpLCB3ZSBzZWUgdGhhdCB0aGUgZnVsbCBuYW1lIGNvbnNpc3RzIG9mIG1vcmUgdGhhbiAyIHdvcmRzLiANCg0KSW4gdGhlIGNhc2Ugb2YgdGhlIGZpcnN0IG5hbWUsIEkgY2FuIHRlbGwgeW91IHRoYXQgdGhlIDJuZCB3b3JkIG9mIHRoZSBuYW1lIHN0cmluZyBpcyBzb21ldGhpbmcgY2FsbGVkIGEgbm9iaWxpYXJ5IHBhcnRpY2xlLiBUaGVzZSBhcmUgcHJlcG9zaXRpb25zIHRoYXQgb2Z0ZW4gY29tZSB1cCBpbiBEdXRjaCBuYW1lcyAoIlZhbiIsICJEZSIsICJUZW4iLCBhbW9uZyBvdGhlcnMpLCBidXQgYWxzbyBpbiBzb21lIFNwYW5pc2ggbmFtZXMgKCJEYSIpLCBGcmVuY2ggbmFtZXMgKCJEdSIsICJMZSIpLCBHZXJtYW4gbmFtZXMgKCJWb24iLCAiWnUiKSBhbmQgdGhvc2UgYXJlIGp1c3QgYSBmZXcgZXhhbXBsZXMuIA0KDQpGb3IgdGhlIHNlY29uZCBuYW1lLCBhIHF1aWNrIEdvb2dsZSBzZWFyY2ggaW5mb3JtZWQgbWUgdGhhdCB0aGUgMm5kIHdvcmQgb2YgdGhlIG5hbWUgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGxhc3QgbmFtZS4gSW4gU3BhbmlzaC0gYW5kIFBvcnR1Z3Vlc2Utc3BlYWtpbmcgY291bnRyaWVzLCBpdCBpcyBxdWl0ZSBjb21tb24gdG8gdGFrZSBvbiB0aGUgbGFzdCBuYW1lcyBvZiBib3RoIHBhcmVudHMuIA0KDQoNCkZvciBtYXRjaGluZyBuYW1lcyB0byB2YXJpb3VzIGRhdGFiYXNlcywgaXQgaXMgdXNlZnVsIHRvIHN0b3JlIGxhc3QgbmFtZXMgYW5kIG5vYmlsaWFyeSBwYXJ0aWNsZXMgaW4gZGlmZmVyZW50IG9iamVjdHMuIFRoaXMgaGFzIHRvIGRvIHdpdGggdGhlIGZhY3QgdGhhdCBzb21ldGltZXMsIG9ubHkgdGhlIGxhc3QgbmFtZSB3aWxsIGdpdmUgYSBtYXRjaCwgd2hpbGUgb3RoZXIgZGF0YWJhc2VzIHJlcXVpcmUgdGhlIGZ1bGwgbGFzdCBuYW1lIGluY2x1ZGluZyBub2JpbGlhcnkgcGFydGljbGVzIHRvIG1hdGNoIHBlb3BsZSBmcm9tIHlvdXIgZGF0YWZyYW1lLiANCg0KSW4gdGhlIGNhc2Ugb2YgbXVsdGlwbGUgbGFzdCBuYW1lcywgaXQgaXMgYSBiaXQgdHJpY2tpZXIuIElmIGEgbmFtZSBpcyBtb3JlIHRoYW4gdHdvIHdvcmRzIGJ1dCB0aGVyZSBhcmUgbm8gbm9iaWxpYXJ5IHBhcnRpY2xlcywgaXQgaXMgbm90IGVhc3kgdG8gaW5mZXIgd2hldGhlciB0aGUgbmFtZXMgaW4gdGhlIG1pZGRsZSBhcmUgYWN0dWFsbHkgcGFydCBvZiB0aGUgZmlyc3Qgb3IgdGhlIGxhc3QgbmFtZSwgd2l0aG91dCBjaGVja2luZyBhbGwgb2YgdGhlbSBieSBoYW5kLiBUaGVyZWZvcmUsIEkgd291bGQgYWR2aXNlIHlvdSB0byBzaW1wbHkgdHJ5IHRvIGV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgZm9yIHRoZSBmaXJzdCBuYW1lLCBhbmQgdGhlIGxhc3Qgd29yZCBmb3IgdGhlIGxhc3QgbmFtZSB0byBiZSBzdXJlLiANCg0KDQojIyBBIGxpdHRsZSBleGVyY2lzZSBmb3IgeW91ISANCg0KDQpTbywgbm93IGl0IGlzIHVwIHRvIHlvdSB0byBkZWNpZGUgaG93IHlvdSB3b3VsZCBnbyBhYm91dCBleHRyYWN0aW5nIGluIHNlcGFyYXRlIG9iamVjdHMgb2YgeW91ciBkYXRhZnJhbWU6IA0KDQoqIGZpcnN0IG5hbWVzDQoNCiogbm9iaWxpYXJ5IHBhcnRpY2xlcw0KDQoqIGxhc3QgbmFtZXMNCg0KDQpGb3IgdGhlc2Ugb3BlcmF0aW9ucywgSSB3b3VsZCBhZHZpc2UgeW91IHRvIHVzZSBmdW5jdGlvbnMgZnJvbSB0aGUgYHN0cmluZ2lgIHBhY2thZ2Ugb3IgdXNlIHRoZSAnZ3N1YicgZnVuY3Rpb24gZnJvbSBiYXNlIFIuDQoNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQoNCg0KIyBZb3VyIGNvZGUgaGVyZSEgDQoNCg0KDQoNCmBgYA0KDQoNCkEgbGlzdCBvZiBzb21lIGNvbW1vbiBub2JpbGlhcnkgcGFydGljbGVzIA0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCg0KDQpjKCJ2YW4gZGVuIiwgInZhbiBkZXIiLCAidmFuIGRlIiwgInZhbmRlbiIsICJ2YW5kZSIsICJ2YW4gJ3QiLCAib3AgZGUiLCAiZGUgbGEiLCAiZGVuIiAsInZhbiIsICJkZSIsICJ0ZW4iLCAidGVyIiwgImVsIiwgImxhIiwgImRpIikNCg0KDQpgYGANCg0KDQojIyBHZXR0aW5nIGxhc3QgbmFtZXMgb3V0IGZpcnN0DQoNClRoZSBuYW1lcyBhcmUgcHJldHR5IG5lYXRseSBpbiB0aGUgZm9ybWF0ICJGaXJzdCBuYW1lKHMpIGxhc3QgbmFtZShzKSIuIFNvIHdlIGtub3cgdGhhdCB0aGUgbGFzdCBuYW1lcyBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiBPbmUgZGlmZmljdWx0eSB3ZSBoYXZlLCBpcyB0aGF0IHdoaWxlIGZvciBtb3N0IHBlb3BsZSwgdGhlIGxhc3QgbmFtZSBpcyBzaW1wbHkgdGhlIGxhc3QgJ3dvcmQnIGluIHRoZSBuYW1lIHN0cmluZywgZm9yIGEgaGFuZGZ1bCBvZiBwZW9wbGUgdGhlIGxhc3QgbmFtZSB0YWtlcyB1cCBtdWx0aXBsZSB3b3Jkcy4gRm9yIHNvbWUsIGl0IGlzIGxvbmdlciBiZWNhdXNlIHRoZXJlIGFyZSBub2JpbGlhcnkgcGFydGljbGVzIGluIHRoZSBuYW1lLCB3aGljaCB3ZSB3YW50IHRvIGV4dHJhY3QgaW4gYSBkaWZmZXJlbnQgb2JqZWN0LCB3aGlsZSBmb3Igb3RoZXJzIGl0IGlzIGxvbmdlciBiZWNhdXNlIHRoZXkgaGF2ZSBtdWx0aXBsZSBsYXN0IG5hbWVzLiANCg0KYGBge3J9DQoNCiMgU29tZSBuYW1lcyBoYXZlIG5vYmlsaWFyeSBwYXJ0aWNsZXMgKGUuZy4gIkRhIENvc3RhIiBvciAiRHUgQm9pcyIpLiBFc3BlY2lhbGx5IGluIER1dGNoIG5hbWVzLCB0aGV5IGFyZSB2ZXJ5IGNvbW1vbi4gV2UgZXh0cmFjdCB0aGVzZSBpbiBhIHNlcGFyYXRlIG9iamVjdA0KbnAgPC0gYygiKFZ8dilhbiAoRHxkKWVyIiwgIihWfHYpYW4gKER8ZCllbiIsICIoVnx2KWFuIChEfGQpZSIsICIoVnx2KWFuZGUobik/IiwgIihWfHYpYW4gJyhUfHQpIiwgIihWfHYpYW4nKFR8dCkiLCAiKFZ8dilhbiAoSHxoKWV0IiwgIihWfHYpb24gKER8ZCllciIsICIoT3xvKXAgKER8ZCllbj8iLCAiKE98bylwICd0IiwgIihPfG8pZiB0ZW4iLCAiKEF8YSlhbiBkZShuKT8iLCAiKER8ZCllIChMfGwpYSIsICIoSXxpKW4gKEh8aClldCIsICIoSXxpKW4gJyhUfHQpIiwgIihJfGkpbicoVHx0KSIsICIoSXxpKW4gKFR8dCkiLCAiKEl8aSluIChEfGQpZXIiLCAiKEJ8YilpaiAoRHxkKWUiKSANCg0KbnAyIDwtIGMoIlxccyhMfGwpYVxccyIsICJcXHMoT3xvKXBcXHMiICwiXFxzKFZ8dilhblxccyIsICJcXHMoVnx2KW9uXFxzIiwgIlxccyhEfGQpZW5cXHMiLCAiXFxzKER8ZCllclxccyIsICJcXHMoRHxkKWVsXFxzIiwgIlxccyhEfGQpKGV8YXx1fGkpXFxzIiwgIlxccyhEfGQpb3M/XFxzIiwgIlxccyhUfHQpZXJcXHMiLCAiXFxzKFR8dCllblxccyIsICJcXHMoVHx0KWVcXHMiLCAiXFxzJyhUfHQpXFxzIiwgIlxccyhMfGwpZVxccyIsICJcXHMoRXxBKWwtIiwgIlxcc1soQXxhKShFfGUpXShMfGwpJz9cXHMiLCAiXFxzKER8ZCknIiwgIlxcc3p1XFxzIiwgIlxccyhafHopdXJcXHMiLCAiXFxzKFl8eSlcXHMiLCAiXFxzKEV8ZSlcXHMiKQ0KDQoNCiMgRmlyc3Qgd2UgZXh0cmFjdCB0aGUgbm9iaWxpYXJ5IHBhcnRpY2xlcyBjb25zaXN0aW5nIG9mIG11bHRpcGxlIHdvcmRzDQpkZiRucCA8LSBzdHJfZXh0cmFjdChkZiRuYW1lLCBwYXN0ZTAobnAsIGNvbGxhcHNlPSJ8IikpDQpkZiRucCA8LSBpZmVsc2UoaXMubmEoZGYkbnApLCBzdHJfZXh0cmFjdChkZiRuYW1lLCBwYXN0ZTAobnAyLCBjb2xsYXBzZT0ifCIpKSwgZGYkbnApICNvbmx5IGV4dHJhY3QgdGhlIHNpbmdsZS13b3JkIE5QIGlmIGl0IGlzIG5vdCBmaWxsZWQgeWV0DQogIA0KIyBsYXN0bmFtZTogZXZlcnl0aGluZyBhZnRlciBub2JpbGlhcnkgcGFydGljbGUgIA0KZGYkbGFzdG5hbWUgPC0gaWZlbHNlKCFpcy5uYShkZiRucCksIHN0cl9yZW1vdmUoZGYkbmFtZSwgcGFzdGUwKCJeLioiLCBkZiRucCkpLCB3b3JkKGRmJG5hbWUsIC0xKSkNCg0KDQojIHNvbWUgY2xlYW5pbmc6IG1ha2UgdGhlIHN0cmluZyBsb3dlcmNhc2UgYW5kIHJlbW92ZSBleHRyYSB3aGl0ZXNwYWNlcw0KZGYkbnAgPC0gdG9sb3dlcih0cmltd3MoZGYkbnAsIHdoaWNoPSJib3RoIikpDQpkZiRucCA8LSBpZmVsc2UoaXMubmEoZGYkbnApLCAiIiwgZGYkbnApDQoNCmRmJGxhc3RuYW1lIDwtIHRvbG93ZXIodHJpbXdzKGRmJGxhc3RuYW1lLCB3aGljaD0iYm90aCIpKQ0KZGYkbGFzdG5hbWUgPC0gc3RyaV90cmFuc19nZW5lcmFsKGRmJGxhc3RuYW1lLCBpZD0ibGF0aW4tYXNjaWkiKSAjcmVtb3ZlIGRpYWNyaXRpY3MNCg0KZGYkbGFzdG5hbWUgPC0gc3RyX2V4dHJhY3QoZGYkbGFzdG5hbWUsICJbOmxvd2VyOl0rIikgIyBpZiBtdWx0aXBsZSBsYXN0IG5hbWVzIGFmdGVyIHRoZSBub2JpbGlhcnkgcGFydGljbGUsIHdlIHRha2UgdGhlIGZpcnN0IG9uZQ0KDQoNCmBgYA0KDQoNCg0KIyMgRXh0cmFjdGluZyBmaXJzdCBuYW1lcyANCg0KRHVlIHRvIHRoZSBzdGFuZGFyZCBmb3JtYXQgb2YgdGhlIG5hbWUgb2JqZWN0LCB3ZSBjYW4gc2ltcGx5IHRha2Ugb3V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBuYW1lIHN0cmluZy4gUGxlYXNlIG5vdGUgdGhhdCBzb21lIHBlb3BsZSBvbmx5IGhhdmUgaW5pdGlhbHMgaW5zdGVhZCBvZiBhIGZpcnN0IG5hbWUuIA0KDQpgYGB7cn0NCg0KZGYkZmlyc3RuYW1lIDwtIHN0cl9yZW1vdmUoZGYkbmFtZSwgIlxccy4qJCIpICMgcmVtb3ZlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgbmFtZSBvYmplY3QgYWZ0ZXIgdGhlIGZpcnN0IHdoaXRlc3BhY2UNCg0KDQojIEkgZmlyc3QgZGV0ZWN0IHRoZSBpbml0aWFscyBieSB1c2luZyBhIGdlbmVyYWwgcGF0dGVybiAtIHNvbWUgcmVndWxhciBleHByZXNzaW9uIG1hZ2ljIGlmIHlvdSB3aWxsLiANCiMgeW91IGNhbiB1cGRhdGUgdGhpcyB0byBtYXRjaCB3aGF0IHlvdSBmaW5kIGluIHlvdXIgb3duIGRhdGENCmluaXRpYWxwYXR0ZXJuIDwtIHBhc3RlKGMoIl4oWzp1cHBlcjpdXFwuKStbOnVwcGVyOl0kIiwgICAgICAgIyBMYXN0IGluaXRpYWwgZG9lcyBub3QgaGF2ZSBhIGZ1bGwgc3RvcCBhdCB0aGUgZW5kIChlLmcuIEEuQS5BKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAiKFs6dXBwZXI6XVxcLispKyIsICAgICAgICAgICAgICAgICAjIEFsbCBpbml0aWFscyBoYXZlIGZ1bGwgc3RvcHMgYXQgdGhlIGVuZCAoZS5nLiBBLkEuQS4pDQogICAgICAgICAgICAgICAgICAgICAgICAgICJeXFxzP1s6dXBwZXI6XSskIiksICAgICAgICAgICAgICAgICMgRW50aXJlIHN0cmluZyBjb25zaXN0cyBvZiBjYXBpdGFsIGxldHRlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlID0gInwiKQ0KDQpkZiRpbmkgPC0gc3RyX2V4dHJhY3QoZGYkZmlyc3RuYW1lLCBwYXN0ZTAoaW5pdGlhbHBhdHRlcm4pKSAjIHdlIGV4dHJhY3QgdGhlIGluaXRpYWxzIGZyb20gZm9ybWF0IHdlIGRlZmluZWQsIGFuZCBzYXZlIHRoZW0gaW4gYSBkaWZmZXJlbnQgb2JqZWN0DQpkZiRmaXJzdG5hbWUgPC0gaWZlbHNlKCFpcy5uYShkZiRpbmkpLCBzdHJfcmVtb3ZlKGRmJGZpcnN0bmFtZSwgZGYkaW5pKSwgZGYkZmlyc3RuYW1lKSAjIGV4dHJhY3QgaW5pdGlhbHMgZnJvbSBmaXJzdCBuYW1lIG9iamVjdCB3aGVuIHByZXNlbnQsIHNvIHRoYXQgdGhlIGZpcnN0IG5hbWUgb2JqZWN0IHJlYWxseSBvbmx5IGNvbnRhaW5zIGZpcnN0IG5hbWVzIA0KZGYkaW5pIDwtIGlmZWxzZShpcy5uYShkZiRpbmkpLCAiIiwgZGYkaW5pKSAjIHNldCBpbml0aWFscyBvYmplY3QgdG8gZW1wdHkgaWYgdGhlcmUgYXJlIG5vIGluaXRpYWxzDQoNCg0KIyBzb21lIGNsZWFuaW5nOiBtYWtlIHRoZSBmaXJzdCBuYW1lIGxvd2VyY2FzZQ0KZGYkZmlyc3RuYW1lIDwtIHRvbG93ZXIoZGYkZmlyc3RuYW1lKQ0KZGYkZmlyc3RuYW1lIDwtIHN0cmlfdHJhbnNfZ2VuZXJhbChkZiRmaXJzdG5hbWUsIGlkPSJsYXRpbi1hc2NpaSIpICNyZW1vdmUgZGlhY3JpdGljcw0KDQoNCmBgYA0KDQoNCg0KIyMgU2F2aW5nIHRoZSBuZXcgZGF0YWZyYW1lDQoNCk5vdyB3aXRoIGNsZWFuZWQgZmlyc3QgYW5kIGxhc3QgbmFtZXMsIElEIHZhcmlhYmxlIGFuZCBzb21lIGRhdGEgbWFuaXB1bGF0aW9uIG9uIHRoZSBvdGhlciB2YXJpYWJsZXMuIA0KDQpgYGB7ciwgZXZhbD1GQUxTRX0NCmRmX25hbWVzIDwtIGRmIA0KZnNhdmUoZGZfbmFtZXMpDQpgYGANCg0K


Copyright © 2024 Jochem Tolsma