Import WJS consolidated data file and country data from SPSS
setwd("/Users/janfredrikhovden/Dropbox/DBXPAGAANDEARBEID/Statistikk/Rworkdir/WJS")
wjs<-read.spss("WJS Consolidated Data V4-01 310117.sav", to.data.frame=TRUE)
country<-read.spss("country data 100217.sav", to.data.frame=TRUE)
countryorg<-country
# wjs<-read.spss("WJS Consolidated Data V2-03 140916.sav", to.data.frame=TRUE)
# wjs<-read.spss("WJS Consolidated Data V3-01 261016.sav", to.data.frame=TRUE, use.missings=FALSE) # If one want to include all missing values
## NOTE: IF THE NUMBER OR ORDER OF COUNTRIES ARE CHANGED, CHECK COUNTRY ROW NUMBER belows where #CHECKROWNUMBER are added
wjs$ID<-as.numeric(rownames(wjs)) # assign row number as ID
wjc<-dplyr::left_join(wjs,country, by="COUNTRY")
Filter additional countries and make subsamples if needed
Functions
scale_by_rank <- function(x) apply(x, 2, rank)
Mean <- function(x) base::mean(x, na.rm=TRUE) # Mean ignoring missing values
Sd<-function(x) base::sd(x, na.rm=TRUE) # SD ignoring missing values
delete.na <- function(DF, n=0) {
DF[rowSums(is.na(DF)) <= n,]
} # drop rows with a treshold for NAs
Recoding
# fixing naming of United Arab Emirates (should NOT be United Arabic Emirates)
levels(country$COUNTRY)[match("UAE",levels(country$COUNTRY))] <- "United Arab Emirates"
levels(wjs$COUNTRY)[match("UAE",levels(wjs$COUNTRY))] <- "United Arab Emirates"
# import and selection of variables for analysis
indep<- dplyr::select(wjs, COUNTRY, C1, C2, C6, C7, C20, C14A:C14K, C22:C23, T5, T7.1:T9, AUTONOMY, ID)
#recoding where necessary
#C1 manager
indep$manager<-recode(indep$C1, "c('Reporter', 'News writer', 'Trainee', 'Other')='not.manager'; NA=NA; else='manager'")
indep$manager <- factor(indep$manager, levels=c("not.manager", "manager")) # changer order of levels
indep$T5<-factor(indep$T5, levels=c("Rank-and-file","\"Junior\" manager","Senior/executive manager"))
#C2 fulltime
indep$fulltime<-recode(indep$C2, "c('Full-time employment')='Fulltime'; NA=NA; else='not.Fulltime'")
#C6/7 newsbeat
indep$hardnews<-recode(indep$C7, "c('News/current affairs', 'Politics', 'Foreign politics', 'Domestic politics', 'Economy', 'Crime & law', NA)='hardnews or general'; else='softnews'")
#C20 education
indep$highedu<-recode(indep$C20, "c('Not completed high school', 'Completed high school', 'some university studies, but no degree')='no.highedu'; NA=NA; else='high.edu'")
indep$master<-recode(indep$C20, "c('Not completed high school', 'Completed high school', 'some university studies, but no degree', 'College/Bachelor\342\200\231s degree or equivalent')='no.master';NA=NA; else='master'")
indep$edu3<-recode(indep$C20, "c('Not completed high school', 'Completed high school')='edu.nohigh';c('some university studies, but no degree', 'College/Bachelor\342\200\231s degree or equivalent')='edu.mid'; NA=NA; else='edu.master'")
indep$edu3 <- factor(indep$edu3, levels=c("edu.nohigh", "edu.mid", "edu.master")) # changer order of levels
# T7 medium (how?)
indep$broadcast<-recode(indep$T7.4, "c('Yes')='Broadcasting'; NA=NA; else='not.broadcasting'")
indep$broadcast[indep$T7.5=="Yes"]<-"Broadcasting"
indep$broadcast<-factor(indep$broadcast, levels=c("not.broadcasting", "Broadcasting"))
# T8 national media
indep$national<-recode(indep$T8, "c('National')='National'; NA=NA; else='not.national'")
indep$national<-factor(indep$national, levels=c("not.national", "National"))
# T9 ownership
indep$owner<-recode(indep$T9, "c('Purely public ownership', 'Purely state ownership', 'Mixed ownership but mostly public', 'Mixed ownership but mostly state-owned')='public/state'; NA=NA; else='private'")
C13 ETHICS
## Subsetting dataset and renaming variables
BAT<-dplyr::select(wjs,COUNTRY, ID, C13A:C14K)
# BAT<-BAT %>% filter(complete.cases(.)) # note filter on only complete cases
BAT<-plyr::rename(BAT, c(C13A="Always.follow.codes", C13B="Depends.on.situation", C13C="Matter.of.personal.judgement", C13D="Can.be.set.aside",C14A="Paying.for.info", C14B="Using.conf.documents", C14C="False.identity", C14D="Pressure.informants",
C14E="Use.personal.doc", C14F="Undercover.empl", C14G="Hidden.miccam", C14H="Recreations", C14J="Publ.unverified", C14K="Accept.money"))
#C13
BATm <- apply(dplyr::select(BAT, Always.follow.codes:Can.be.set.aside), 2, function(x) {x <- recode(x,"'strongly disagree'=1; 'somewhat disagree'=2; 'undecided'=3; 'somewhat agree'=4; 'strongly agree'=5"); x})
### re-add country and add labels
BATm<-data.frame(BATm)
BATm$COUNTRY<-BAT$COUNTRY
BATm$ID<-BAT$ID
BATmC13<-BATm # make a copy of the dataset (orginal)
BATmCOMPLETE<-BATm %>% filter(complete.cases(.)) # note filter on only complete C13* cases
BATmORG<-BATm # make a copy of the dataset (orginal)
### convert to matrix of averages by country and add rownames and labels
BATm<-BATm %>%
group_by(COUNTRY) %>%
summarise_each(funs(Mean), Always.follow.codes:Can.be.set.aside)
`summarise_each()` is deprecated.
Use `summarise_all()`, `summarise_at()` or `summarise_if()` instead.
To map `funs` over a selection of variables, use `summarise_at()`
BATm<-data.frame(BATm)
rownames(BATm)<-BATm[,1]
BATmORGC13map<-BATm
BATm<-BATm[,2:5]
BATmORGC13<-BATm
#BATm<-BATm[c(-61),]# remove Tanzania
BATm<-BATm[c(-10),]# remove Bulgaria, C13 has been wrongly translated
BATmORGC13<-BATmORGC13[c(-10),]# remove Bulgaria, C13 has been wrongly translated
### make table of mean and sd by question and country
DT <- data.table(BATmC13)
wide <- setnames(DT[, sapply(.SD, function(x) list(n=sum(complete.cases(x)), mean=round(mean(x, na.rm=TRUE), 2), sd=round(sd(x, na.rm=TRUE), 2))), by=COUNTRY], c("COUNTRY", sapply(names(DT)[-6], paste0, c(".n", ".men", ".SD"))))
table.meansdC13<-as.data.frame(wide[,1:13])
Maps C13
sPDF<-joinCountryData2Map(BATmORGC13map, joinCode = "NAME", nameJoinColumn = "COUNTRY")
67 codes from your data successfully matched countries in the map
0 codes from your data failed to match with a country code in the map
176 codes from the map weren't represented in your data
par(mai=c(0,0,0.2,0),xaxs="i",yaxs="i")
mapCountryData(sPDF, nameColumnToPlot = "Always.follow.codes", colourPalette =c('black','grey90'))
2 colours specified and 7 required, using interpolation to calculate colours

mapCountryData(sPDF, nameColumnToPlot = "Depends.on.situation", colourPalette =c('black','grey90'))
2 colours specified and 7 required, using interpolation to calculate colours

mapCountryData(sPDF, nameColumnToPlot = "Matter.of.personal.judgement", colourPalette =c('black','grey90'))
2 colours specified and 7 required, using interpolation to calculate colours

mapCountryData(sPDF, nameColumnToPlot = "Can.be.set.aside", colourPalette =c('black','grey90'))
2 colours specified and 7 required, using interpolation to calculate colours

Scatterplots C13
fcountry <- merge(BATmORGC13map,country,by="COUNTRY")
rownames(fcountry)<-fcountry[,1]
namn<-row.names(fcountry)
fcountry<-fcountry[c(-10),] #removing Bulgaria because of C13 wrong translation
fcountry<-fcountry[c(-22),] #removing Ethiopia = outlier
fcountry<-fcountry[c(-53),] #removing Singapore = outlier
qplot(FHPFREES,EIUDEMOS, data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal()

qplot(FHPFREES,fcountry[,2], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "Freedom House Press Freedom index", y="Always follow codes")

qplot(FHPFREES,fcountry[,3], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "Freedom House Press Freedom index", y="Depends on situation")

qplot(FHPFREES,fcountry[,4], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "Freedom House Press Freedom index", y="Matter of personal judgement")

qplot(FHPFREES,fcountry[,5], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "Freedom House Press Freedom index", y="Can be set aside")

qplot(EIUDEMOS,fcountry[,2], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "EIU Democracy Score", y="Always follow codes")

qplot(EIUDEMOS,fcountry[,3], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "EIU Democracy Score", y="Depends on situation")

qplot(EIUDEMOS,fcountry[,4], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "EIU Democracy Score", y="Matter of personal judgement")

qplot(EIUDEMOS,fcountry[,5], data = fcountry) + geom_text_repel(aes(label=row.names(fcountry))) + theme_minimal() + labs(x = "EIU Democracy Score", y="Can be set aside")

Various descriptive statistics and figures C13
# sjp.setTheme(geom.outline.size = 0, geom.label.size = 3, title.size = 1.5)
#sjp.likert(BAT[,2:5], sort.frq = "pos.asc", show.prc.sign = TRUE, digits=0, show.n=FALSE, show.legend=FALSE, catcount=5,title="Agreement? (C13, all countries)") # lickert plot
# Average mean and spread of roles (based on country averages), boxplot and beanplot
sortedBATm<-BATm[ , order(colMeans(BATm))] # sort by column mean
par(mar = c(4,15,2,2)) # set margins
boxplot(x = as.list(sortedBATm), horizontal = TRUE, las=1, main="Averages aggregated by country (C13)", log="")
par(mar = c(4,15,2,2)) # set margins

beanplot(x = as.list(sortedBATm), horizontal = TRUE, las=1, main="Averages aggregated by country (C13)", log="")

##Bertin plot (centered)
cBATm<-t(BATm)
cBATm<-scale(cBATm, scale=FALSE) #centering of means
cBATm<-t(cBATm)
cBATmC13<-cBATm
x <- scale_by_rank(as.matrix(scale(cBATm, scale=FALSE)))
order <- seriate(x, method="PCA")
bertinplot(x, order, options = list(panel=panel.squares, shading=TRUE, reverse=TRUE, mar = c(1,1,10,6), gp_labels=gpar(fontsize=8)))

order <- seriate(x, method="PCA_angle")
bertinplot(x, order, options = list(panel=panel.squares, shading=TRUE, reverse=TRUE, mar = c(1,1,10,6), gp_labels=gpar(fontsize=8)))

#uncentered C13 Bertin
x <- scale_by_rank(as.matrix(BATm))
order <- seriate(x, method="PCA")
bertinplot(x, order, options = list(panel=panel.squares, shading=TRUE, reverse=TRUE, mar = c(1,1,10,6), gp_labels=gpar(fontsize=8)))

heatmap(cBATm, margins=c(5,5)) # heatmap (centered)

# network plot of correlations
c<-correlate(BATm)
network_plot(c, min_cor=.2, colors=c("red", "green")) # not working for now

c<-cor(BATm)
corrplot(c, type = "upper", order = "FPC", tl.col = "black", tl.srt = 45, diag=FALSE, tl.cex=0.8,mar=c(1,0,0,1))

sjp.corr(c)
Computing correlation using pearson-method with listwise-deletion...

# distance matrix (correlations)
#res.dist <- get_dist(C13x, stand = TRUE, method = "pearson")
#fviz_dist(res.dist, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))
PCA and biplot, mean centered
#BATm2<- BATm[-c(22,54), ] #Removal Ethiopia and Singapore as outliers
BATm2<- BATm
cBATm<-t(BATm2)
cBATm<-scale(cBATm, scale=FALSE) #centering of means
cBATm<-t(cBATm)
x<-t(cBATm)
x<-scale(x, scale=FALSE)
x<-t(x)
C13x<-x
# test for PCA factors = 2
paran(x)
Using eigendecomposition of correlation matrix.
Computing: 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
Results of Horn's Parallel Analysis for component retention
120 iterations, using the mean estimate
--------------------------------------------------
Component Adjusted Unadjusted Estimated
Eigenvalue Eigenvalue Bias
--------------------------------------------------
1 1.611300 1.903982 0.292681
2 1.151001 1.218220 0.067218
--------------------------------------------------
Adjusted eigenvalues > 1 indicate dimensions to retain.
(2 components retained)
res.pca<-PCA(x , scale.unit=FALSE, ncp=3, graph = TRUE) # suggests 2 axes only


#res.pca$var$coord
fviz_pca_var(res.pca, col.var = "black")+ labs(title = "C13 PCA, centered means")

#sjt.pca(x)
#fviz_pca_biplot(res.pca, geom = "text", title="Ethics(C13)", axes =c(1,2), labelsize=2.5, repel=TRUE) + theme_minimal()
fviz_pca_biplot(res.pca, repel = TRUE)+ labs(title = "C13 PCA, centered means")

fviz_screeplot(res.pca, ncp=10)

fviz_contrib(res.pca, choice = "var", axes = 1)

fviz_contrib(res.pca, choice = "var", axes = 2)

fviz_contrib(res.pca, choice = "var", axes = 3) # not stable (PARAN)

indroles <- get_pca_ind(res.pca)
C13ind<-indroles$coord
# Quality of representation of the Countries
fviz_cos2(res.pca, choice="ind", axes = 1, top = 68 )

fviz_cos2(res.pca, choice="ind", axes = 2, top = 68 )

# K-menas clustering = just one cluser
set.seed(123)
fviz_nbclust(C13x, kmeans, method = "gap_stat") + labs(title = "C13 clusters (K-means)") # 1 cluster
Clustering k = 1,2,..., K.max (= 10): .. done
Bootstrapping, b = 1,2,..., B (= 100) [one "." per sample]:
.................................................. 50
.................................................. 100

# km.res <- kmeans((C13x), 4, nstart = 25)
#fviz_cluster(km.res, C13x, ellipse.type = "norm")
# HCPC Clustering
res.pca.hcpc<-HCPC(res.pca, nb.clust=-1) # 5 clusters



res.pca.hcpc$data.clust
fviz_cluster(res.pca.hcpc, data = x, ellipse.type = "convex", repel=TRUE)+ theme_tufte() + labs(title = "C13 clusters (after PCA), centered means") + ylab(" <--- 1: Absolutism") + xlab("2: <--- Subjectivism") + theme(axis.text=element_text(size=12), axis.title=element_text(size=14,face="bold"))

#fviz_cluster(res.pca.hcpc, data = x, axes=c(1,3), ellipse.type = "convex", repel=TRUE)+ theme_tufte() + labs(title = "C13 clusters (after PCA)") + ylab(" <--- 1: Absolutism") + xlab("2: <--- Situationism") + theme(axis.text=element_text(size=12), axis.title=element_text(size=14,face="bold"))
#fviz_cluster(res.pca.hcpc, data = x, axes=c(2,3), ellipse.type = "convex", repel=TRUE)+ theme_tufte() + labs(title = "C13 clusters (after PCA)") + ylab(" <--- 2: Subjectivism") + xlab("3: <--- Situationism") + theme(axis.text=element_text(size=12), axis.title=element_text(size=14,face="bold"))
fviz_dend(res.pca.hcpc, rect = TRUE, cex = 0.5, horiz=TRUE)

#res.pca.hcpc$desc.var
# Non-metric MDS
library(ggrepel)
d<-dist(C13x[,c(-2)]) # also removing Argentina #CHECKROWNUMBER
fit <- isoMDS(d, k=2)
initial value 4.168022
iter 5 value 3.861572
final value 3.850813
converged
fit
$points
[,1] [,2]
Albania 0.254043740 0.013908584
Argentina -0.190321897 -0.206896483
Australia -0.391511646 0.192218283
Austria -0.629906667 -0.181398664
Bangladesh -0.211676875 -0.427445210
Belgium -0.014701740 0.244288859
Bhutan 0.396023651 -0.027502323
Botswana -0.356831124 0.387599788
Brazil -0.273172084 0.060477270
Canada -0.185745158 0.360944338
Chile -0.265965777 0.028929172
China -0.218128203 0.155833286
Colombia -0.363921451 -0.517614539
Croatia -0.508344660 -0.358308731
Cyprus -0.262750459 0.434399371
Czech Republic 0.496559686 0.534575410
Denmark 0.536104967 0.350898749
Ecuador -0.212861654 -0.350732579
Egypt 0.072108277 -0.566981270
El Salvador -0.227894360 -0.191658034
Estonia -0.325734053 0.055164819
Ethiopia 1.501558558 0.440744278
Finland -0.584368019 -0.278971484
France 0.142208639 0.299972366
Germany -0.641366091 0.007237585
Greece -0.143118737 0.287963860
Hong Kong 0.306621330 -0.172937977
Hungary 0.189998006 0.230587975
Iceland -0.097081313 -0.009127974
India 0.599173572 -0.033770224
Indonesia -0.504458948 0.191826206
Ireland 0.118064473 0.049483701
Israel 0.061751627 0.247962909
Italy -0.561181871 0.343091207
Japan 0.378287542 0.045154544
Kenya 0.054513631 0.150248968
Kosovo -0.282838647 0.087509762
Latvia -0.067263776 -0.157906085
Malawi -0.091431050 0.296126245
Malaysia 0.422012457 -0.211374453
Mexico -0.002635776 -0.093035264
Moldova -0.154476411 0.102030449
Netherlands 0.461258492 0.006643104
New Zealand -0.182913021 -0.012346573
Norway -0.186477321 -0.227743120
Oman 0.822149720 -0.491811532
Philippines 0.035349359 -0.191440793
Portugal -0.477727144 0.315342435
Qatar 0.373255946 -0.597499952
Romania -0.298003863 0.092976317
Russia 0.459319604 -0.054645407
Serbia -0.618596061 -0.312718765
Sierra Leone 0.326634824 0.444646596
Singapore 1.328001454 0.020847490
South Africa -0.253609451 0.078238161
South Korea -0.305120500 -0.145853967
Spain -0.366342896 0.016166388
Sudan 0.764508431 -0.637250072
Sweden 0.392414266 0.350079042
Switzerland -0.343309475 0.156814509
Tanzania 0.631313795 -0.149594921
Thailand 0.728207570 -0.162978202
Turkey -0.321923059 -0.169862138
United Arab Emirates -0.077517746 -0.330048269
UK 0.012584327 0.005249021
USA -0.662798961 0.183273960
$stress
[1] 3.850813
fit.sh<-Shepard(d, fit$points)
plot(fit.sh, pch = ".")
lines(fit.sh$x, fit.sh$yf, type = "S")

x <- fit$points[,1]
y <- fit$points[,2]
plot(x, y, xlab="Coordinate 1", ylab="Coordinate 2",
main="NonMetric MDS", type="n")
text(x, y, labels = row.names(BATm), cex=.7)

space<-as.data.frame(fit$points)
space$label<-C13x[,-1]
qplot(V1, V2, data=space) + geom_text_repel(aes(label=row.names(fit$points))) + ggtitle("Non-parametric MDS C13, centered means") + theme_minimal()

#res.mds.hcpc<-HCPC(space, nb.clust=-1)
#fviz_cluster(res.mds.hcpc, data = x, frame.type = "convex", repel=TRUE, labelsize=3)+ theme_tufte() + labs(title = "C13 clusters (after MDS)")
# res.mds.hcpc$desc.var
FA test C13
ethic<-BATmC13
#roles<-dplyr::filter(roles,COUNTRY!='Singapore_NON-REP' & COUNTRY !='Ethiopia') # remove Singapore and Ethiopia
# ethic<-ethic %>% filter(complete.cases(.))
x<-t(ethic[,c(-(5:6))])
x<-scale(x, scale=FALSE)
x<-t(x)
center_ethic<-as.data.frame(x)
center_ethic$COUNTRY<-ethic$COUNTRY
center_ethic$ID<-ethic$ID
ethics<-ethic[,-c(5:6)]
#ethics<-center_ethic[,-c(19:20)]
describe(ethics)
25% 50% 75%
1.079350e+05 3.209450e+00 1.464182e+00 1.000000e+00 2.000000e+00 4.000000e+00 4.000000e+00 5.000000e+00 -1.079310e+05
KMO(ethics) # not really suitable, KMO MSA=0.67
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = ethics)
Overall MSA = 0.67
MSA for each item =
Always.follow.codes Depends.on.situation Matter.of.personal.judgement Can.be.set.aside
0.71 0.65 0.66 0.70
cortest.bartlett(ethics) # suggest 2 factors and 1 component
R was not square, finding R from data
$chisq
[1] 14166.94
$p.value
[1] 0
$df
[1] 6
fa.parallel(ethics)
Parallel analysis suggests that the number of factors = 2 and the number of components = 1

scree(ethics)

#varimax, rotated
myfa<-fa(ethics, fm = "pa", nfactors = 2, rotate = "varimax", covar=FALSE)
print(myfa, cut=.4, sort=TRUE)
Factor Analysis using method = pa
Call: fa(r = ethics, nfactors = 2, rotate = "varimax", covar = FALSE,
fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
item PA1 PA2 h2 u2 com
Matter.of.personal.judgement 3 0.67 0.45 0.55 1.0
Depends.on.situation 2 0.64 0.49 0.51 1.4
Can.be.set.aside 4 0.46 0.42 0.39 0.61 2.0
Always.follow.codes 1 -0.42 0.19 0.81 1.1
PA1 PA2
SS loadings 1.07 0.45
Proportion Var 0.27 0.11
Cumulative Var 0.27 0.38
Proportion Explained 0.71 0.29
Cumulative Proportion 0.71 1.00
Mean item complexity = 1.4
Test of the hypothesis that 2 factors are sufficient.
The degrees of freedom for the null model are 6 and the objective function was 0.51 with Chi Square of 14166.94
The degrees of freedom for the model are -1 and the objective function was 0
The root mean square of the residuals (RMSR) is 0
The df corrected root mean square of the residuals is NA
The harmonic number of observations is 26803 with the empirical chi square 0.44 with prob < NA
The total number of observations was 27567 with Likelihood Chi Square = 0.58 with prob < NA
Tucker Lewis Index of factoring reliability = 1.001
Fit based upon off diagonal values = 1
Measures of factor score adequacy
PA1 PA2
Correlation of (regression) scores with factors 0.78 0.56
Multiple R square of scores with factors 0.61 0.31
Minimum correlation of possible factor scores 0.22 -0.38
plot(myfa, xlim = c(-1, 1), ylim = c(-1, 1))

fa.diagram(myfa, cut = .001, main="FA C13, PCA extraction, varimax")

# oblimin
myfa<-fa(ethics, fm = "pa", nfactors = 2, rotate = "oblimin", covar=FALSE)
Loading required namespace: GPArotation
print(myfa, cut=.4, sort=TRUE)
Factor Analysis using method = pa
Call: fa(r = ethics, nfactors = 2, rotate = "oblimin", covar = FALSE,
fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
item PA1 PA2 h2 u2 com
Matter.of.personal.judgement 3 0.72 0.45 0.55 1.0
Depends.on.situation 2 0.64 0.49 0.51 1.1
Can.be.set.aside 4 0.41 0.39 0.61 1.9
Always.follow.codes 1 0.43 0.19 0.81 1.0
PA1 PA2
SS loadings 1.15 0.37
Proportion Var 0.29 0.09
Cumulative Var 0.29 0.38
Proportion Explained 0.75 0.25
Cumulative Proportion 0.75 1.00
With factor correlations of
PA1 PA2
PA1 1.00 -0.47
PA2 -0.47 1.00
Mean item complexity = 1.3
Test of the hypothesis that 2 factors are sufficient.
The degrees of freedom for the null model are 6 and the objective function was 0.51 with Chi Square of 14166.94
The degrees of freedom for the model are -1 and the objective function was 0
The root mean square of the residuals (RMSR) is 0
The df corrected root mean square of the residuals is NA
The harmonic number of observations is 26803 with the empirical chi square 0.44 with prob < NA
The total number of observations was 27567 with Likelihood Chi Square = 0.58 with prob < NA
Tucker Lewis Index of factoring reliability = 1.001
Fit based upon off diagonal values = 1
Measures of factor score adequacy
PA1 PA2
Correlation of (regression) scores with factors 0.83 0.64
Multiple R square of scores with factors 0.69 0.40
Minimum correlation of possible factor scores 0.38 -0.19
plot(myfa, xlim = c(-1, 1), ylim = c(-1, 1))

fa.diagram(myfa, cut = .001, main="FA C13, PCA extraction, oblimin")

# note: the test does not align exactly with SPSS procedures
#test for scaling
#colab<-dplyr::select(ethics, Pos.image.politicians, Sup.gov.policy)
#alpha(colab)
C14 ETHICS (PRACTICES)
#C14
BATm <- apply(dplyr::select(BAT, Paying.for.info:Accept.money), 2, function(x) {x <- recode(x,"'not approve under any circumstances'=1; 'justified on occasion'=2; 'always justified'=3"); x})
### re-add country and add labels
BATm<-data.frame(BATm)
BATm$COUNTRY<-BAT$COUNTRY
BATm$ID<-BAT$ID
BATmC14<-BATm
BATmCOMPLETE<-BATm %>% filter(complete.cases(.)) # note filter on only complete C14* cases
BATmORG<-BATm # make a copy of the dataset (orginal)
### convert to matrix of averages by country and add rownames and labels
BATm<-BATm %>%
group_by(COUNTRY) %>%
summarise_each(funs(Mean), Paying.for.info:Accept.money)
`summarise_each()` is deprecated.
Use `summarise_all()`, `summarise_at()` or `summarise_if()` instead.
To map `funs` over a selection of variables, use `summarise_at()`
BATm<-data.frame(BATm)
rownames(BATm)<-BATm[,1]
BATm<-BATm[,2:11]
BATm<-BATm[c(-36),] #removing Japan because of missing C14 question
BATm<-BATm[c(-59),] #removing Sweden because of missing C14 question
BATmORGC14<-BATm
### make table of mean and sd by question and country
DT <- data.table(BATmC14)
wide <- setnames(DT[, sapply(.SD, function(x) list(n=sum(complete.cases(x)), mean=round(mean(x, na.rm=TRUE), 2), sd=round(sd(x, na.rm=TRUE), 2))), by=COUNTRY], c("COUNTRY", sapply(names(DT)[-12], paste0, c(".n", ".men", ".SD"))))
table.meansdC14<-as.data.frame(wide[,1:31])
PCA and biplot, raw values C14
x<-BATm
paran(x) # 2 components
Using eigendecomposition of correlation matrix.
Computing: 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
Results of Horn's Parallel Analysis for component retention
300 iterations, using the mean estimate
--------------------------------------------------
Component Adjusted Unadjusted Estimated
Eigenvalue Eigenvalue Bias
--------------------------------------------------
1 3.590664 4.250436 0.659772
2 1.400674 1.839303 0.438628
--------------------------------------------------
Adjusted eigenvalues > 1 indicate dimensions to retain.
(2 components retained)
res.pca<-PCA(x , scale.unit=FALSE, ncp=2, graph = TRUE)


fviz_pca_biplot(res.pca, geom = "text", title="Ethics(C14) Raw values", axes =c(1,2), labelsize=2.5, repel=TRUE) + theme_minimal()

fviz_pca_var(res.pca, col.var = "black")+ labs(title = "Ethics(C14) Raw values")

fviz_screeplot(res.pca, ncp=10)

fviz_contrib(res.pca, choice = "var", axes = 1)

fviz_contrib(res.pca, choice = "var", axes = 2)

indroles <- get_pca_ind(res.pca)
C14ind<-indroles$coord
# HCPC Clustering
res.pca.hcpc<-HCPC(res.pca, nb.clust=-1) # 3 clusters



fviz_cluster(res.pca.hcpc, data = x, frame.type = "convex", repel=TRUE)+ theme_tufte() + labs(title = "C14 clusters (after PCA)") + ylab("2: Accept money/publ. unverified --->") + xlab("1: Acceptance (general) --->") + theme(axis.text=element_text(size=12), axis.title=element_text(size=14,face="bold"))
argument frame is deprecated; please use ellipse instead.argument frame.type is deprecated; please use ellipse.type instead.

res.pca.hcpc$desc.var
$quanti.var
Eta2 P-value
False.identity 0.5054515 3.314947e-10
Undercover.empl 0.4514724 8.225306e-09
Hidden.miccam 0.4499298 8.973496e-09
Using.conf.documents 0.3914928 2.052281e-07
Publ.unverified 0.3874586 2.518830e-07
Recreations 0.3493974 1.632261e-06
Use.personal.doc 0.3323994 3.630936e-06
Pressure.informants 0.2894590 2.507629e-05
Paying.for.info 0.2814599 3.547986e-05
Accept.money 0.2220268 4.167763e-04
$quanti
$quanti$`1`
v.test Mean in category Overall mean sd in category Overall sd p.value
Pressure.informants -2.056833 1.433895 1.504220 0.1684411 0.1956503 3.970233e-02
Publ.unverified -2.397120 1.151667 1.230313 0.1018828 0.1877376 1.652450e-02
Paying.for.info -3.074533 1.369469 1.478706 0.1649810 0.2033088 2.108326e-03
Recreations -3.464035 1.355207 1.530467 0.2603903 0.2895131 5.321373e-04
Use.personal.doc -3.659470 1.301948 1.399896 0.1206191 0.1531598 2.527375e-04
Using.conf.documents -4.787314 1.557939 1.773167 0.2461223 0.2572608 1.690284e-06
False.identity -5.181118 1.338812 1.544273 0.1427306 0.2269199 2.205596e-07
Undercover.empl -5.206467 1.443252 1.633863 0.1490712 0.2094938 1.924699e-07
Hidden.miccam -5.335515 1.542969 1.760803 0.2013912 0.2336225 9.527376e-08
$quanti$`2`
v.test Mean in category Overall mean sd in category Overall sd p.value
Using.conf.documents 4.265682 1.921332 1.773167 0.16501165 0.2572608 1.992924e-05
Hidden.miccam 3.104298 1.858720 1.760803 0.14528254 0.2336225 1.907314e-03
Undercover.empl 2.446191 1.703053 1.633863 0.16151870 0.2094938 1.443746e-02
Accept.money -2.798442 1.064234 1.141770 0.07363577 0.2052133 5.134973e-03
$quanti$`3`
v.test Mean in category Overall mean sd in category Overall sd p.value
Publ.unverified 4.933383 1.461858 1.230313 0.2441595 0.1877376 8.081738e-07
Pressure.informants 4.266388 1.712900 1.504220 0.1839708 0.1956503 1.986635e-05
Recreations 4.244964 1.837710 1.530467 0.2274297 0.2895131 2.186288e-05
False.identity 4.044050 1.773692 1.544273 0.1255413 0.2269199 5.253563e-05
Use.personal.doc 3.930550 1.550396 1.399896 0.1768360 0.1531598 8.475184e-05
Paying.for.info 3.831924 1.673472 1.478706 0.2263899 0.2033088 1.271453e-04
Accept.money 3.534094 1.323081 1.141770 0.2173916 0.2052133 4.091754e-04
Undercover.empl 3.110394 1.796765 1.633863 0.1501910 0.2094938 1.868377e-03
Hidden.miccam 2.442858 1.903479 1.760803 0.1810163 0.2336225 1.457148e-02
attr(,"class")
[1] "catdes" "list "
# K-means clustering
fviz_nbclust(x, kmeans, method = "gap_stat") # 1 cluster
Clustering k = 1,2,..., K.max (= 10): .. done
Bootstrapping, b = 1,2,..., B (= 100) [one "." per sample]:
.................................................. 50
.................................................. 100

# Non-metric MDS
library(ggrepel)
d<-dist(BATm) # also removing Argentina #CHECKROWNUMBER
fit <- isoMDS(d, k=2)
initial value 21.272747
iter 5 value 15.737199
iter 10 value 15.148189
iter 15 value 14.944642
iter 15 value 14.934252
iter 15 value 14.934252
final value 14.934252
converged
fit
$points
[,1] [,2]
Albania 0.032773678 -0.518224621
Argentina -0.184649319 -0.013511940
Australia -0.275344982 0.483536939
Austria -0.002365233 0.168018257
Bangladesh -0.540787403 -0.257746004
Belgium 0.201331779 -0.143793225
Bhutan 0.800739794 0.192704727
Botswana -0.153520101 -0.055115182
Brazil -0.103242458 -0.368165731
Bulgaria -0.004116274 -0.264569501
Canada 0.368404062 -0.208664097
Chile -0.005983910 -0.033920615
China 0.489474848 0.835555187
Colombia -0.711095082 0.191822488
Croatia 0.047797534 0.108327914
Cyprus -0.246612834 -0.349204182
Czech Republic 0.280161229 -0.228679416
Denmark 0.521694586 -0.021940383
Ecuador -0.322881918 0.345268862
Egypt -0.299711681 -0.281387772
El Salvador -0.455797055 0.110180560
Estonia 0.352799003 0.317314665
Ethiopia -0.611387880 0.115513122
Finland 0.404591713 0.240081496
France 0.242004486 -0.594867767
Germany 0.152427374 0.357355884
Greece -0.397536703 -0.190011799
Hong Kong 0.333219194 0.051526775
Hungary 0.258394886 0.170249628
Iceland -0.155680513 -0.201158078
India 0.078564284 0.089396777
Indonesia -0.362256295 -0.405859676
Ireland 0.442862885 -0.000684754
Israel 1.370728591 0.002644432
Italy 0.232798874 -0.030263571
Kenya 0.111231202 0.065399486
Kosovo -0.211302563 -0.189143077
Latvia 0.275051856 -0.200795797
Malawi -0.004653981 -0.013352845
Malaysia -0.250756105 0.212361309
Mexico -0.179652724 0.010582882
Moldova 0.285879350 -0.401862620
Netherlands 0.222978382 -0.221224082
New Zealand -0.083339715 0.126427159
Norway 0.219132742 -0.120947999
Oman 1.116528311 0.782749910
Philippines -0.340005426 0.126085042
Portugal 1.017167122 0.355618988
Qatar -1.440800825 -0.032913338
Romania 0.327171867 -0.394275466
Russia 0.546988540 -0.181193406
Serbia -0.231377697 -0.014675825
Sierra Leone 0.471922802 0.144307796
Singapore -0.410216149 0.135892365
South Africa -0.116228145 -0.036516379
South Korea 0.112004158 -0.302225828
Spain -0.047865862 -0.147373888
Sudan -0.447171933 -0.287793182
Switzerland -0.031294811 0.171696122
Tanzania -1.706010536 0.937779542
Thailand 0.161719293 0.416745065
Turkey -0.018553723 -0.603575024
United Arab Emirates -0.881743218 0.019871498
UK 0.155482949 0.087514680
USA -0.400084319 -0.056892489
$stress
[1] 14.93425
fit.sh<-Shepard(d, fit$points)
plot(fit.sh, pch = ".")
lines(fit.sh$x, fit.sh$yf, type = "S")

x <- fit$points[,1]
y <- fit$points[,2]
plot(x, y, xlab="Coordinate 1", ylab="Coordinate 2",
main="NonMetric MDS", type="n")
text(x, y, labels = row.names(BATm), cex=.7)

space<-as.data.frame(fit$points)
#space$label<-C13x[,-1]
qplot(V1, V2, data=space) + geom_text_repel(aes(label=row.names(fit$points))) + ggtitle("Non-parametric MDS C14, centered means") + theme_minimal()

#res.mds.hcpc<-HCPC(space, nb.clust=-1)
#fviz_cluster(res.mds.hcpc, data = x, frame.type = "convex", repel=TRUE, labelsize=3)+ theme_tufte() + labs(title = "C14 clusters (after MDS)")
# res.mds.hcpc$desc.var
Various descriptive statistics and figures C14
# sjp.setTheme(geom.outline.size = 0, geom.label.size = 3, title.size = 1.5)
sjp.likert(BAT[,6:15], sort.frq = "pos.asc", show.prc.sign = TRUE, digits=0, show.n=FALSE, show.legend=FALSE, catcount=4,
title="Agreement? (C14, all countries)") # lickert plot
# Problem: Sweden is missing C14E (Personal documents) and Japan C14J (Publ. unverified)
## solution: The value is set to average for all other countries
## colMeans(BATm, na.rm=TRUE)
# Japan
BATm[36,9]<-1.236357 #CHECKROWNUMBER
# Sweden
BATm[60,5]<-1.401936 #CHECKROWNUMBER
# Average mean and spread of roles (based on country averages), boxplot and beanplot
sortedBATm<-BATm[ , order(colMeans(BATm))] # sort by column mean
par(mar = c(4,15,2,2)) # set margins

boxplot(x = as.list(sortedBATm), horizontal = TRUE, las=1, main="Averages aggregated by country (C14)", log="")
par(mar = c(4,15,2,2)) # set margins

beanplot(x = as.list(sortedBATm), horizontal = TRUE, las=1, main="Averages aggregated by country (C14)", log="")

##Bertin plot (uncentered)
x <- scale_by_rank(as.matrix(BATm))
order <- seriate(x, method="PCA")
bertinplot(x, order, options = list(panel=panel.squares, shading=TRUE, reverse=TRUE, mar = c(1,1,10,6), gp_labels=gpar(fontsize=8)))

order <- seriate(x, method="PCA_angle")
bertinplot(x, order, options = list(panel=panel.squares, shading=TRUE, reverse=TRUE, mar = c(1,1,10,6), gp_labels=gpar(fontsize=8)))

# network plot of correlations
c<-correlate(BATm)
network_plot(c, min_cor=.2, colors=c("red", "green"), legend=TRUE)

c<-cor(BATm)
corrplot(c, type = "upper", order = "FPC", tl.col = "black", tl.srt = 45, diag=FALSE, tl.cex=0.8,mar=c(1,0,0,1))

FA test C14
prethic<-BATmC14
#prethic<-dplyr::filter(roles,COUNTRY!='Singapore_NON-REP' & COUNTRY !='Ethiopia') # remove Singapore and Ethiopia
x<-t(prethic[,c(-(11:12))])
x<-scale(x, scale=FALSE)
x<-t(x)
center_prethic<-as.data.frame(x)
center_prethic$COUNTRY<-ethic$COUNTRY
center_prethic$ID<-prethic$ID
prethics<-prethic[,-c(11:12)] #removing country and ID
prethics<-prethics[,-8] # removing recreations
#prethics<-center_prethic[,-c(11:12)]
#prethics<-prethics %>% filter(complete.cases(.))
describe(prethics)
25% 50% 75%
2.374840e+05 1.501116e+00 6.148928e-01 1.000000e+00 1.000000e+00 1.000000e+00 2.000000e+00 3.000000e+00 -2.374750e+05
KMO(prethics) # suitable, KMO MSA=0.83, .82 without recreations
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = prethics)
Overall MSA = 0.82
MSA for each item =
Paying.for.info Using.conf.documents False.identity Pressure.informants Use.personal.doc Undercover.empl
0.87 0.82 0.86 0.88 0.85 0.84
Hidden.miccam Publ.unverified Accept.money
0.83 0.73 0.68
cortest.bartlett(prethics)
R was not square, finding R from data
$chisq
[1] 47616.4
$p.value
[1] 0
$df
[1] 36
fa.parallel(prethics) # suggest 4 factors and 2 components (also without recr.)
Parallel analysis suggests that the number of factors = 4 and the number of components = 2

#varimax, rotated
myfa<-fa(prethics, fm = "pa", nfactors = 4, rotate = "varimax", covar=FALSE, SMC=FALSE)
print(myfa, cut=.4, sort=TRUE)
Factor Analysis using method = pa
Call: fa(r = prethics, nfactors = 4, rotate = "varimax", SMC = FALSE,
covar = FALSE, fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
item PA1 PA2 PA3 PA4 h2 u2 com
Hidden.miccam 7 0.62 0.43 0.57 1.2
Undercover.empl 6 0.62 0.45 0.55 1.4
False.identity 3 0.57 0.40 0.60 1.5
Paying.for.info 1 0.41 0.22 0.78 1.6
Accept.money 9 0.80 0.67 0.33 1.1
Publ.unverified 8 0.57 0.38 0.62 1.4
Pressure.informants 4 0.88 0.87 0.13 1.2
Using.conf.documents 2 0.54 0.42 0.58 1.8
Use.personal.doc 5 0.43 0.40 0.60 3.2
PA1 PA2 PA3 PA4
SS loadings 1.54 1.16 0.88 0.67
Proportion Var 0.17 0.13 0.10 0.07
Cumulative Var 0.17 0.30 0.40 0.47
Proportion Explained 0.36 0.27 0.21 0.16
Cumulative Proportion 0.36 0.63 0.84 1.00
Mean item complexity = 1.6
Test of the hypothesis that 4 factors are sufficient.
The degrees of freedom for the null model are 36 and the objective function was 1.73 with Chi Square of 47616.4
The degrees of freedom for the model are 6 and the objective function was 0.01
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 25883 with the empirical chi square 176.34 with prob < 2e-35
The total number of observations was 27567 with Likelihood Chi Square = 239.84 with prob < 6.1e-49
Tucker Lewis Index of factoring reliability = 0.971
RMSEA index = 0.038 and the 90 % confidence intervals are 0.034 0.042
BIC = 178.5
Fit based upon off diagonal values = 1
Measures of factor score adequacy
PA1 PA2 PA3 PA4
Correlation of (regression) scores with factors 0.79 0.84 0.91 0.63
Multiple R square of scores with factors 0.62 0.70 0.82 0.40
Minimum correlation of possible factor scores 0.24 0.41 0.64 -0.20
plot(myfa, xlim = c(-1, 1), ylim = c(-1, 1))

fa.diagram(myfa, cut = .001, main="FA C14, PCA extraction, varimax")

# oblimin
myfa<-fa(prethics, fm = "pa", nfactors = 4, rotate = "oblimin", covar=FALSE, SMC=FALSE)
print(myfa, cut=.4, sort=TRUE)
Factor Analysis using method = pa
Call: fa(r = prethics, nfactors = 4, rotate = "oblimin", SMC = FALSE,
covar = FALSE, fm = "pa")
Standardized loadings (pattern matrix) based upon correlation matrix
item PA1 PA2 PA3 PA4 h2 u2 com
Hidden.miccam 7 0.66 0.43 0.57 1.0
Undercover.empl 6 0.64 0.45 0.55 1.0
False.identity 3 0.57 0.40 0.60 1.1
Paying.for.info 1 0.43 0.22 0.78 1.3
Accept.money 9 0.82 0.67 0.33 1.0
Publ.unverified 8 0.55 0.38 0.62 1.4
Pressure.informants 4 0.93 0.87 0.13 1.0
Using.conf.documents 2 0.53 0.42 0.58 1.3
Use.personal.doc 5 0.42 0.40 0.60 1.8
PA1 PA2 PA3 PA4
SS loadings 1.53 1.11 0.95 0.66
Proportion Var 0.17 0.12 0.11 0.07
Cumulative Var 0.17 0.29 0.40 0.47
Proportion Explained 0.36 0.26 0.22 0.15
Cumulative Proportion 0.36 0.62 0.85 1.00
With factor correlations of
PA1 PA2 PA3 PA4
PA1 1.00 0.29 0.42 0.61
PA2 0.29 1.00 0.29 0.19
PA3 0.42 0.29 1.00 0.37
PA4 0.61 0.19 0.37 1.00
Mean item complexity = 1.2
Test of the hypothesis that 4 factors are sufficient.
The degrees of freedom for the null model are 36 and the objective function was 1.73 with Chi Square of 47616.4
The degrees of freedom for the model are 6 and the objective function was 0.01
The root mean square of the residuals (RMSR) is 0.01
The df corrected root mean square of the residuals is 0.02
The harmonic number of observations is 25883 with the empirical chi square 176.34 with prob < 2e-35
The total number of observations was 27567 with Likelihood Chi Square = 239.84 with prob < 6.1e-49
Tucker Lewis Index of factoring reliability = 0.971
RMSEA index = 0.038 and the 90 % confidence intervals are 0.034 0.042
BIC = 178.5
Fit based upon off diagonal values = 1
Measures of factor score adequacy
PA1 PA2 PA3 PA4
Correlation of (regression) scores with factors 0.86 0.86 0.93 0.77
Multiple R square of scores with factors 0.75 0.74 0.87 0.59
Minimum correlation of possible factor scores 0.49 0.47 0.74 0.17
plot(myfa, xlim = c(-1, 1), ylim = c(-1, 1))

fa.diagram(myfa, cut = .001, main="FA C14, PCA extraction, oblimin")

#test for scaling # none are above 0.70, which is problematic
# but Nunnally (1978): When there are a small number of items in the scale (fewer than 10), Cronbach alpha values can be quite small. In this situation it may be better to calculate and report the mean inter-item correlation for the items. Optimal mean inter-item correlation values range from .2 to .4 (as recommended by Briggs & Cheek 1986).
covert<-dplyr::select(prethics, Undercover.empl, Hidden.miccam, False.identity,Paying.for.info )
alpha(covert) #0.69, average inter-item correlation = average_r=.33 OK
Reliability analysis
Call: alpha(x = covert)
raw_alpha std.alpha G6(smc) average_r S/N ase mean sd
0.69 0.69 0.63 0.36 2.2 0.0031 1.6 0.44
lower alpha upper 95% confidence boundaries
0.68 0.69 0.69
Reliability if an item is dropped:
raw_alpha std.alpha G6(smc) average_r S/N alpha se
Undercover.empl 0.59 0.59 0.50 0.33 1.5 0.0042
Hidden.miccam 0.61 0.61 0.51 0.34 1.5 0.0041
False.identity 0.60 0.60 0.51 0.33 1.5 0.0042
Paying.for.info 0.69 0.69 0.59 0.42 2.2 0.0033
Item statistics
n raw.r std.r r.cor r.drop mean sd
Undercover.empl 26361 0.76 0.75 0.63 0.52 1.7 0.62
Hidden.miccam 26655 0.73 0.74 0.61 0.50 1.8 0.59
False.identity 26634 0.74 0.74 0.61 0.51 1.5 0.60
Paying.for.info 26210 0.65 0.65 0.44 0.37 1.5 0.60
Non missing response frequency for each item
1 2 3 miss
Undercover.empl 0.43 0.49 0.08 0.04
Hidden.miccam 0.31 0.60 0.09 0.03
False.identity 0.51 0.43 0.06 0.03
Paying.for.info 0.58 0.36 0.05 0.05
personal<-dplyr::select(prethics, Using.conf.documents, Pressure.informants, Use.personal.doc)
alpha(personal) #0.59, average_r=.33
Reliability analysis
Call: alpha(x = personal)
raw_alpha std.alpha G6(smc) average_r S/N ase mean sd
0.58 0.59 0.49 0.32 1.4 0.0044 1.6 0.45
lower alpha upper 95% confidence boundaries
0.57 0.58 0.59
Reliability if an item is dropped:
raw_alpha std.alpha G6(smc) average_r S/N alpha se
Using.conf.documents 0.52 0.53 0.36 0.36 1.11 0.0057
Pressure.informants 0.53 0.53 0.36 0.36 1.13 0.0056
Use.personal.doc 0.39 0.39 0.24 0.24 0.64 0.0073
Item statistics
n raw.r std.r r.cor r.drop mean sd
Using.conf.documents 26532 0.74 0.72 0.48 0.36 1.8 0.64
Pressure.informants 26441 0.73 0.72 0.48 0.36 1.5 0.62
Use.personal.doc 26013 0.75 0.77 0.60 0.46 1.4 0.56
Non missing response frequency for each item
1 2 3 miss
Using.conf.documents 0.32 0.55 0.13 0.04
Pressure.informants 0.57 0.37 0.06 0.04
Use.personal.doc 0.64 0.32 0.04 0.06
personal2<-dplyr::select(prethics, Using.conf.documents, Pressure.informants)
alpha(personal2) #0.4
Reliability analysis
Call: alpha(x = personal2)
raw_alpha std.alpha G6(smc) average_r S/N ase mean sd
0.39 0.39 0.24 0.24 0.64 0.0073 1.7 0.5
lower alpha upper 95% confidence boundaries
0.38 0.39 0.4
Reliability if an item is dropped:
raw_alpha std.alpha G6(smc) average_r S/N alpha se
Using.conf.documents 0.24 0.24 0.059 0.24 NA NA
Pressure.informants 0.24 0.24 0.059 0.24 NA NA
Item statistics
n raw.r std.r r.cor r.drop mean sd
Using.conf.documents 26532 0.80 0.79 0.39 0.24 1.8 0.64
Pressure.informants 26441 0.78 0.79 0.39 0.24 1.5 0.62
Non missing response frequency for each item
1 2 3 miss
Using.conf.documents 0.32 0.55 0.13 0.04
Pressure.informants 0.57 0.37 0.06 0.04
moneyunver<-dplyr::select(prethics, Publ.unverified, Accept.money)
alpha(moneyunver) #0.64, average_r=.48
Reliability analysis
Call: alpha(x = moneyunver)
raw_alpha std.alpha G6(smc) average_r S/N ase mean sd
0.63 0.64 0.47 0.47 1.8 0.0043 1.2 0.39
lower alpha upper 95% confidence boundaries
0.62 0.63 0.64
Reliability if an item is dropped:
raw_alpha std.alpha G6(smc) average_r S/N alpha se
Publ.unverified 0.47 0.47 0.22 0.47 NA NA
Accept.money 0.47 0.47 0.22 0.47 NA NA
Item statistics
n raw.r std.r r.cor r.drop mean sd
Publ.unverified 25920 0.89 0.86 0.59 0.47 1.2 0.50
Accept.money 26718 0.83 0.86 0.59 0.47 1.1 0.41
Non missing response frequency for each item
1 2 3 miss
Publ.unverified 0.79 0.18 0.03 0.06
Accept.money 0.92 0.05 0.03 0.03
LS0tCnRpdGxlOiAiV0pTIEV0aGljcyBwciBkZWMxOCwgSkZIIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIEluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgYW5kIHNldCB3b3JraW5nIGRpcmVjdG9yeQpgYGB7ciwgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpyZXF1aXJlKGZvcmVpZ24pCnJlcXVpcmUoRmFjdG9NaW5lUikKcmVxdWlyZShzam1pc2MpCnJlcXVpcmUoYWRlNCkKcmVxdWlyZShmYWN0b2V4dHJhKQpyZXF1aXJlKHNvYy5jYSkKcmVxdWlyZShkcGx5cikKcmVxdWlyZShzalBsb3QpCnJlcXVpcmUoY2FyKQpyZXF1aXJlKHZhcmhhbmRsZSkKcmVxdWlyZShnZ3Bsb3QyKQpyZXF1aXJlKHBsb3RsdWNrKQpyZXF1aXJlKGJlYW5wbG90KQpyZXF1aXJlKHNlcmlhdGlvbikKcmVxdWlyZShjb3JycikKcmVxdWlyZShwYXJhbikKcmVxdWlyZSh0YWJsZXMpCnJlcXVpcmUoeGxzeCkKcmVxdWlyZShjb3JycGxvdCkKcmVxdWlyZShhcGUpCnJlcXVpcmUoZ3JpZCkKcmVxdWlyZShtYXRyaXhTdGF0cykKcmVxdWlyZShnZ3RoZW1lcykKcmVxdWlyZShkYXRhLnRhYmxlKQpyZXF1aXJlKHBzeWNoKQpyZXF1aXJlKGV4cGxvcikKbGlicmFyeShyd29ybGRtYXApCmxpYnJhcnkoQ0NBKQpsaWJyYXJ5KGdncmVwZWwpCmBgYAoKIyBJbXBvcnQgV0pTIGNvbnNvbGlkYXRlZCBkYXRhIGZpbGUgYW5kIGNvdW50cnkgZGF0YSBmcm9tIFNQU1MKYGBge3IsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc2V0d2QoIi9Vc2Vycy9qYW5mcmVkcmlraG92ZGVuL0Ryb3Bib3gvREJYUEFHQUFOREVBUkJFSUQvU3RhdGlzdGlray9Sd29ya2Rpci9XSlMiKQp3anM8LXJlYWQuc3BzcygiV0pTIENvbnNvbGlkYXRlZCBEYXRhIFY0LTAxIDMxMDExNy5zYXYiLCB0by5kYXRhLmZyYW1lPVRSVUUpCmNvdW50cnk8LXJlYWQuc3BzcygiY291bnRyeSBkYXRhIDEwMDIxNy5zYXYiLCB0by5kYXRhLmZyYW1lPVRSVUUpCmNvdW50cnlvcmc8LWNvdW50cnkKIyB3anM8LXJlYWQuc3BzcygiV0pTIENvbnNvbGlkYXRlZCBEYXRhIFYyLTAzIDE0MDkxNi5zYXYiLCB0by5kYXRhLmZyYW1lPVRSVUUpCiMgd2pzPC1yZWFkLnNwc3MoIldKUyBDb25zb2xpZGF0ZWQgRGF0YSBWMy0wMSAyNjEwMTYuc2F2IiwgdG8uZGF0YS5mcmFtZT1UUlVFLCB1c2UubWlzc2luZ3M9RkFMU0UpICMgSWYgb25lIHdhbnQgdG8gaW5jbHVkZSBhbGwgbWlzc2luZyB2YWx1ZXMKIyMgTk9URTogSUYgVEhFIE5VTUJFUiBPUiBPUkRFUiBPRiBDT1VOVFJJRVMgQVJFIENIQU5HRUQsIENIRUNLIENPVU5UUlkgUk9XIE5VTUJFUiBiZWxvd3Mgd2hlcmUgI0NIRUNLUk9XTlVNQkVSIGFyZSBhZGRlZAp3anMkSUQ8LWFzLm51bWVyaWMocm93bmFtZXMod2pzKSkgIyBhc3NpZ24gcm93IG51bWJlciBhcyBJRAp3amM8LWRwbHlyOjpsZWZ0X2pvaW4od2pzLGNvdW50cnksIGJ5PSJDT1VOVFJZIikKYGBgCgojIyBGaWx0ZXIgYWRkaXRpb25hbCBjb3VudHJpZXMgYW5kIG1ha2Ugc3Vic2FtcGxlcyBpZiBuZWVkZWQKYGBge3IgQWRkaXRpb25hbCBzdWJzZXR0aW5nIGlmIG5lZWRlZCwgaW5jbHVkZT1GQUxTRX0KIyMocmVtb3ZlICMjIHRvIHVzZSkKIyMjd2pzPC1kcGx5cjo6ZmlsdGVyKHdqcyxDNz09J0N1bHR1cmUnKSAjIEN1bHR1cmUgam91cm5hbGlzdHMKIyMjd2pzPC1maWx0ZXIod2pzLCBDT1VOVFJZID09J05vcndheScgfCBDT1VOVFJZID09J0Rlbm1hcmsnIHwgQ09VTlRSWSA9PSdTd2VkZW4nIHwgQ09VTlRSWSA9PSdJY2VsYW5kJyB8IENPVU5UUlkgPT0nRmlubGFuZCcpICMgTm9yZGljIGNvdW50cmllcwojIyNub3J3YXk8LWRwbHlyOjpmaWx0ZXIod2pzLENPVU5UUlk9PSdOb3J3YXknKSAKYGBgCgojIyBGdW5jdGlvbnMKYGBge3IgRnVuY3Rpb25zLCBlY2hvPVRSVUV9CnNjYWxlX2J5X3JhbmsgPC0gZnVuY3Rpb24oeCkgYXBwbHkoeCwgMiwgcmFuaykKTWVhbiA8LSBmdW5jdGlvbih4KSBiYXNlOjptZWFuKHgsIG5hLnJtPVRSVUUpICMgTWVhbiBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcwpTZDwtZnVuY3Rpb24oeCkgYmFzZTo6c2QoeCwgbmEucm09VFJVRSkgIyBTRCBpZ25vcmluZyBtaXNzaW5nIHZhbHVlcwpkZWxldGUubmEgPC0gZnVuY3Rpb24oREYsIG49MCkgewogIERGW3Jvd1N1bXMoaXMubmEoREYpKSA8PSBuLF0KfSAjIGRyb3Agcm93cyB3aXRoIGEgdHJlc2hvbGQgZm9yIE5BcwpgYGAKCiMjIFJlY29kaW5nCmBgYHtyfQojIGZpeGluZyBuYW1pbmcgb2YgVW5pdGVkIEFyYWIgRW1pcmF0ZXMgKHNob3VsZCBOT1QgYmUgVW5pdGVkIEFyYWJpYyBFbWlyYXRlcykKbGV2ZWxzKGNvdW50cnkkQ09VTlRSWSlbbWF0Y2goIlVBRSIsbGV2ZWxzKGNvdW50cnkkQ09VTlRSWSkpXSA8LSAiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiCmxldmVscyh3anMkQ09VTlRSWSlbbWF0Y2goIlVBRSIsbGV2ZWxzKHdqcyRDT1VOVFJZKSldIDwtICJVbml0ZWQgQXJhYiBFbWlyYXRlcyIKCiMgaW1wb3J0IGFuZCBzZWxlY3Rpb24gb2YgdmFyaWFibGVzIGZvciBhbmFseXNpcwppbmRlcDwtIGRwbHlyOjpzZWxlY3Qod2pzLCBDT1VOVFJZLCBDMSwgQzIsIEM2LCBDNywgQzIwLCBDMTRBOkMxNEssIEMyMjpDMjMsIFQ1LCBUNy4xOlQ5LCBBVVRPTk9NWSwgSUQpCgojcmVjb2Rpbmcgd2hlcmUgbmVjZXNzYXJ5CiNDMSBtYW5hZ2VyCmluZGVwJG1hbmFnZXI8LXJlY29kZShpbmRlcCRDMSwgImMoJ1JlcG9ydGVyJywgJ05ld3Mgd3JpdGVyJywgJ1RyYWluZWUnLCAnT3RoZXInKT0nbm90Lm1hbmFnZXInOyBOQT1OQTsgZWxzZT0nbWFuYWdlciciKQppbmRlcCRtYW5hZ2VyIDwtIGZhY3RvcihpbmRlcCRtYW5hZ2VyLCBsZXZlbHM9Yygibm90Lm1hbmFnZXIiLCAibWFuYWdlciIpKSAjIGNoYW5nZXIgb3JkZXIgb2YgbGV2ZWxzCmluZGVwJFQ1PC1mYWN0b3IoaW5kZXAkVDUsIGxldmVscz1jKCJSYW5rLWFuZC1maWxlIiwiXCJKdW5pb3JcIiBtYW5hZ2VyIiwiU2VuaW9yL2V4ZWN1dGl2ZSBtYW5hZ2VyIikpCiNDMiBmdWxsdGltZQppbmRlcCRmdWxsdGltZTwtcmVjb2RlKGluZGVwJEMyLCAiYygnRnVsbC10aW1lIGVtcGxveW1lbnQnKT0nRnVsbHRpbWUnOyBOQT1OQTsgZWxzZT0nbm90LkZ1bGx0aW1lJyIpCiNDNi83IG5ld3NiZWF0CmluZGVwJGhhcmRuZXdzPC1yZWNvZGUoaW5kZXAkQzcsICJjKCdOZXdzL2N1cnJlbnQgYWZmYWlycycsICdQb2xpdGljcycsICdGb3JlaWduIHBvbGl0aWNzJywgJ0RvbWVzdGljIHBvbGl0aWNzJywgJ0Vjb25vbXknLCAnQ3JpbWUgJiBsYXcnLCBOQSk9J2hhcmRuZXdzIG9yIGdlbmVyYWwnOyBlbHNlPSdzb2Z0bmV3cyciKQojQzIwIGVkdWNhdGlvbgppbmRlcCRoaWdoZWR1PC1yZWNvZGUoaW5kZXAkQzIwLCAiYygnTm90IGNvbXBsZXRlZCBoaWdoIHNjaG9vbCcsICdDb21wbGV0ZWQgaGlnaCBzY2hvb2wnLCAnc29tZSB1bml2ZXJzaXR5IHN0dWRpZXMsIGJ1dCBubyBkZWdyZWUnKT0nbm8uaGlnaGVkdSc7IE5BPU5BOyBlbHNlPSdoaWdoLmVkdSciKQppbmRlcCRtYXN0ZXI8LXJlY29kZShpbmRlcCRDMjAsICJjKCdOb3QgY29tcGxldGVkIGhpZ2ggc2Nob29sJywgJ0NvbXBsZXRlZCBoaWdoIHNjaG9vbCcsICdzb21lIHVuaXZlcnNpdHkgc3R1ZGllcywgYnV0IG5vIGRlZ3JlZScsICdDb2xsZWdlL0JhY2hlbG9yXDM0MlwyMDBcMjMxcyBkZWdyZWUgb3IgZXF1aXZhbGVudCcpPSduby5tYXN0ZXInO05BPU5BOyBlbHNlPSdtYXN0ZXInIikKaW5kZXAkZWR1MzwtcmVjb2RlKGluZGVwJEMyMCwgImMoJ05vdCBjb21wbGV0ZWQgaGlnaCBzY2hvb2wnLCAnQ29tcGxldGVkIGhpZ2ggc2Nob29sJyk9J2VkdS5ub2hpZ2gnO2MoJ3NvbWUgdW5pdmVyc2l0eSBzdHVkaWVzLCBidXQgbm8gZGVncmVlJywgJ0NvbGxlZ2UvQmFjaGVsb3JcMzQyXDIwMFwyMzFzIGRlZ3JlZSBvciBlcXVpdmFsZW50Jyk9J2VkdS5taWQnOyBOQT1OQTsgZWxzZT0nZWR1Lm1hc3RlciciKQppbmRlcCRlZHUzIDwtIGZhY3RvcihpbmRlcCRlZHUzLCBsZXZlbHM9YygiZWR1Lm5vaGlnaCIsICJlZHUubWlkIiwgImVkdS5tYXN0ZXIiKSkgIyBjaGFuZ2VyIG9yZGVyIG9mIGxldmVscwojIFQ3IG1lZGl1bSAoaG93PykKaW5kZXAkYnJvYWRjYXN0PC1yZWNvZGUoaW5kZXAkVDcuNCwgImMoJ1llcycpPSdCcm9hZGNhc3RpbmcnOyBOQT1OQTsgZWxzZT0nbm90LmJyb2FkY2FzdGluZyciKQppbmRlcCRicm9hZGNhc3RbaW5kZXAkVDcuNT09IlllcyJdPC0iQnJvYWRjYXN0aW5nIgppbmRlcCRicm9hZGNhc3Q8LWZhY3RvcihpbmRlcCRicm9hZGNhc3QsIGxldmVscz1jKCJub3QuYnJvYWRjYXN0aW5nIiwgIkJyb2FkY2FzdGluZyIpKQojIFQ4IG5hdGlvbmFsIG1lZGlhCmluZGVwJG5hdGlvbmFsPC1yZWNvZGUoaW5kZXAkVDgsICJjKCdOYXRpb25hbCcpPSdOYXRpb25hbCc7IE5BPU5BOyBlbHNlPSdub3QubmF0aW9uYWwnIikKaW5kZXAkbmF0aW9uYWw8LWZhY3RvcihpbmRlcCRuYXRpb25hbCwgbGV2ZWxzPWMoIm5vdC5uYXRpb25hbCIsICJOYXRpb25hbCIpKQojIFQ5IG93bmVyc2hpcAppbmRlcCRvd25lcjwtcmVjb2RlKGluZGVwJFQ5LCAiYygnUHVyZWx5IHB1YmxpYyBvd25lcnNoaXAnLCAnUHVyZWx5IHN0YXRlIG93bmVyc2hpcCcsICdNaXhlZCBvd25lcnNoaXAgYnV0IG1vc3RseSBwdWJsaWMnLCAnTWl4ZWQgb3duZXJzaGlwIGJ1dCBtb3N0bHkgc3RhdGUtb3duZWQnKT0ncHVibGljL3N0YXRlJzsgTkE9TkE7IGVsc2U9J3ByaXZhdGUnIikKYGBgCgojIEMxMyBFVEhJQ1MKYGBge3IgRXRoaWNzLCBlY2hvPVRSVUV9CiMjIFN1YnNldHRpbmcgZGF0YXNldCBhbmQgcmVuYW1pbmcgdmFyaWFibGVzCkJBVDwtZHBseXI6OnNlbGVjdCh3anMsQ09VTlRSWSwgSUQsIEMxM0E6QzE0SykKIyBCQVQ8LUJBVCAlPiUgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSAgIyBub3RlIGZpbHRlciBvbiBvbmx5IGNvbXBsZXRlIGNhc2VzCkJBVDwtcGx5cjo6cmVuYW1lKEJBVCwgYyhDMTNBPSJBbHdheXMuZm9sbG93LmNvZGVzIiwgQzEzQj0iRGVwZW5kcy5vbi5zaXR1YXRpb24iLCBDMTNDPSJNYXR0ZXIub2YucGVyc29uYWwuanVkZ2VtZW50IiwgQzEzRD0iQ2FuLmJlLnNldC5hc2lkZSIsQzE0QT0iUGF5aW5nLmZvci5pbmZvIiwgQzE0Qj0iVXNpbmcuY29uZi5kb2N1bWVudHMiLCBDMTRDPSJGYWxzZS5pZGVudGl0eSIsIEMxNEQ9IlByZXNzdXJlLmluZm9ybWFudHMiLApDMTRFPSJVc2UucGVyc29uYWwuZG9jIiwgQzE0Rj0iVW5kZXJjb3Zlci5lbXBsIiwgQzE0Rz0iSGlkZGVuLm1pY2NhbSIsIEMxNEg9IlJlY3JlYXRpb25zIiwgQzE0Sj0iUHVibC51bnZlcmlmaWVkIiwgQzE0Sz0iQWNjZXB0Lm1vbmV5IikpCmBgYAoKYGBge3Igd2FybmluZz1GQUxTRX0KI0MxMwpCQVRtIDwtIGFwcGx5KGRwbHlyOjpzZWxlY3QoQkFULCBBbHdheXMuZm9sbG93LmNvZGVzOkNhbi5iZS5zZXQuYXNpZGUpLCAyLCBmdW5jdGlvbih4KSB7eCA8LSByZWNvZGUoeCwiJ3N0cm9uZ2x5IGRpc2FncmVlJz0xOyAnc29tZXdoYXQgZGlzYWdyZWUnPTI7ICd1bmRlY2lkZWQnPTM7ICdzb21ld2hhdCBhZ3JlZSc9NDsgJ3N0cm9uZ2x5IGFncmVlJz01Iik7IHh9KQoKIyMjIHJlLWFkZCBjb3VudHJ5IGFuZCBhZGQgbGFiZWxzCkJBVG08LWRhdGEuZnJhbWUoQkFUbSkKQkFUbSRDT1VOVFJZPC1CQVQkQ09VTlRSWSAKQkFUbSRJRDwtQkFUJElEIApCQVRtQzEzPC1CQVRtICMgbWFrZSBhIGNvcHkgb2YgdGhlIGRhdGFzZXQgKG9yZ2luYWwpCkJBVG1DT01QTEVURTwtQkFUbSAlPiUgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSAjIG5vdGUgZmlsdGVyIG9uIG9ubHkgY29tcGxldGUgQzEzKiBjYXNlcwpCQVRtT1JHPC1CQVRtICMgbWFrZSBhIGNvcHkgb2YgdGhlIGRhdGFzZXQgKG9yZ2luYWwpCgojIyMgY29udmVydCB0byBtYXRyaXggb2YgYXZlcmFnZXMgYnkgY291bnRyeSBhbmQgYWRkIHJvd25hbWVzIGFuZCBsYWJlbHMKQkFUbTwtQkFUbSAlPiUKICBncm91cF9ieShDT1VOVFJZKSAlPiUKICBzdW1tYXJpc2VfZWFjaChmdW5zKE1lYW4pLCBBbHdheXMuZm9sbG93LmNvZGVzOkNhbi5iZS5zZXQuYXNpZGUpCkJBVG08LWRhdGEuZnJhbWUoQkFUbSkKcm93bmFtZXMoQkFUbSk8LUJBVG1bLDFdCkJBVG1PUkdDMTNtYXA8LUJBVG0KQkFUbTwtQkFUbVssMjo1XQpCQVRtT1JHQzEzPC1CQVRtCiNCQVRtPC1CQVRtW2MoLTYxKSxdIyByZW1vdmUgVGFuemFuaWEgCgpCQVRtPC1CQVRtW2MoLTEwKSxdIyByZW1vdmUgQnVsZ2FyaWEsIEMxMyBoYXMgYmVlbiB3cm9uZ2x5IHRyYW5zbGF0ZWQKQkFUbU9SR0MxMzwtQkFUbU9SR0MxM1tjKC0xMCksXSMgcmVtb3ZlIEJ1bGdhcmlhLCBDMTMgaGFzIGJlZW4gd3JvbmdseSB0cmFuc2xhdGVkCgojIyMgbWFrZSB0YWJsZSBvZiBtZWFuIGFuZCBzZCBieSBxdWVzdGlvbiBhbmQgY291bnRyeQpEVCA8LSBkYXRhLnRhYmxlKEJBVG1DMTMpCndpZGUgPC0gc2V0bmFtZXMoRFRbLCBzYXBwbHkoLlNELCBmdW5jdGlvbih4KSBsaXN0KG49c3VtKGNvbXBsZXRlLmNhc2VzKHgpKSwgbWVhbj1yb3VuZChtZWFuKHgsIG5hLnJtPVRSVUUpLCAyKSwgc2Q9cm91bmQoc2QoeCwgbmEucm09VFJVRSksIDIpKSksIGJ5PUNPVU5UUlldLCBjKCJDT1VOVFJZIiwgc2FwcGx5KG5hbWVzKERUKVstNl0sIHBhc3RlMCwgYygiLm4iLCAiLm1lbiIsICIuU0QiKSkpKQp0YWJsZS5tZWFuc2RDMTM8LWFzLmRhdGEuZnJhbWUod2lkZVssMToxM10pCmBgYCAgICAgICAgICAgICAgCgojIyBNYXBzIEMxMwpgYGB7cn0Kc1BERjwtam9pbkNvdW50cnlEYXRhMk1hcChCQVRtT1JHQzEzbWFwLCBqb2luQ29kZSA9ICJOQU1FIiwgbmFtZUpvaW5Db2x1bW4gPSAiQ09VTlRSWSIpCnBhcihtYWk9YygwLDAsMC4yLDApLHhheHM9ImkiLHlheHM9ImkiKQptYXBDb3VudHJ5RGF0YShzUERGLCBuYW1lQ29sdW1uVG9QbG90ID0gIkFsd2F5cy5mb2xsb3cuY29kZXMiLCBjb2xvdXJQYWxldHRlICA9YygnYmxhY2snLCdncmV5OTAnKSkKbWFwQ291bnRyeURhdGEoc1BERiwgbmFtZUNvbHVtblRvUGxvdCA9ICJEZXBlbmRzLm9uLnNpdHVhdGlvbiIsIGNvbG91clBhbGV0dGUgID1jKCdibGFjaycsJ2dyZXk5MCcpKQptYXBDb3VudHJ5RGF0YShzUERGLCBuYW1lQ29sdW1uVG9QbG90ID0gIk1hdHRlci5vZi5wZXJzb25hbC5qdWRnZW1lbnQiLCBjb2xvdXJQYWxldHRlICA9YygnYmxhY2snLCdncmV5OTAnKSkKbWFwQ291bnRyeURhdGEoc1BERiwgbmFtZUNvbHVtblRvUGxvdCA9ICJDYW4uYmUuc2V0LmFzaWRlIiwgY29sb3VyUGFsZXR0ZSAgPWMoJ2JsYWNrJywnZ3JleTkwJykpCmBgYAoKIyBTY2F0dGVycGxvdHMgQzEzCmBgYHtyfQpmY291bnRyeSA8LSBtZXJnZShCQVRtT1JHQzEzbWFwLGNvdW50cnksYnk9IkNPVU5UUlkiKQpyb3duYW1lcyhmY291bnRyeSk8LWZjb3VudHJ5WywxXQpuYW1uPC1yb3cubmFtZXMoZmNvdW50cnkpIApmY291bnRyeTwtZmNvdW50cnlbYygtMTApLF0gI3JlbW92aW5nIEJ1bGdhcmlhIGJlY2F1c2Ugb2YgQzEzIHdyb25nIHRyYW5zbGF0aW9uCmZjb3VudHJ5PC1mY291bnRyeVtjKC0yMiksXSAjcmVtb3ZpbmcgRXRoaW9waWEgPSBvdXRsaWVyCmZjb3VudHJ5PC1mY291bnRyeVtjKC01MyksXSAjcmVtb3ZpbmcgU2luZ2Fwb3JlID0gb3V0bGllcgoKcXBsb3QoRkhQRlJFRVMsRUlVREVNT1MsIGRhdGEgPSBmY291bnRyeSkgKyBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsPXJvdy5uYW1lcyhmY291bnRyeSkpKSArICB0aGVtZV9taW5pbWFsKCkKCnFwbG90KEZIUEZSRUVTLGZjb3VudHJ5WywyXSwgZGF0YSA9IGZjb3VudHJ5KSArIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWw9cm93Lm5hbWVzKGZjb3VudHJ5KSkpICsgIHRoZW1lX21pbmltYWwoKSArIGxhYnMoeCA9ICJGcmVlZG9tIEhvdXNlIFByZXNzIEZyZWVkb20gaW5kZXgiLCB5PSJBbHdheXMgZm9sbG93IGNvZGVzIikKcXBsb3QoRkhQRlJFRVMsZmNvdW50cnlbLDNdLCBkYXRhID0gZmNvdW50cnkpICsgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbD1yb3cubmFtZXMoZmNvdW50cnkpKSkgKyAgdGhlbWVfbWluaW1hbCgpICsgbGFicyh4ID0gIkZyZWVkb20gSG91c2UgUHJlc3MgRnJlZWRvbSBpbmRleCIsIHk9IkRlcGVuZHMgb24gc2l0dWF0aW9uIikKcXBsb3QoRkhQRlJFRVMsZmNvdW50cnlbLDRdLCBkYXRhID0gZmNvdW50cnkpICsgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbD1yb3cubmFtZXMoZmNvdW50cnkpKSkgKyAgdGhlbWVfbWluaW1hbCgpICsgbGFicyh4ID0gIkZyZWVkb20gSG91c2UgUHJlc3MgRnJlZWRvbSBpbmRleCIsIHk9Ik1hdHRlciBvZiBwZXJzb25hbCBqdWRnZW1lbnQiKQpxcGxvdChGSFBGUkVFUyxmY291bnRyeVssNV0sIGRhdGEgPSBmY291bnRyeSkgKyBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsPXJvdy5uYW1lcyhmY291bnRyeSkpKSArICB0aGVtZV9taW5pbWFsKCkgKyBsYWJzKHggPSAiRnJlZWRvbSBIb3VzZSBQcmVzcyBGcmVlZG9tIGluZGV4IiwgeT0iQ2FuIGJlIHNldCBhc2lkZSIpCgpxcGxvdChFSVVERU1PUyxmY291bnRyeVssMl0sIGRhdGEgPSBmY291bnRyeSkgKyBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsPXJvdy5uYW1lcyhmY291bnRyeSkpKSArICB0aGVtZV9taW5pbWFsKCkgKyBsYWJzKHggPSAiRUlVIERlbW9jcmFjeSBTY29yZSIsIHk9IkFsd2F5cyBmb2xsb3cgY29kZXMiKQpxcGxvdChFSVVERU1PUyxmY291bnRyeVssM10sIGRhdGEgPSBmY291bnRyeSkgKyBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsPXJvdy5uYW1lcyhmY291bnRyeSkpKSArICB0aGVtZV9taW5pbWFsKCkgKyBsYWJzKHggPSAiRUlVIERlbW9jcmFjeSBTY29yZSIsIHk9IkRlcGVuZHMgb24gc2l0dWF0aW9uIikKcXBsb3QoRUlVREVNT1MsZmNvdW50cnlbLDRdLCBkYXRhID0gZmNvdW50cnkpICsgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbD1yb3cubmFtZXMoZmNvdW50cnkpKSkgKyAgdGhlbWVfbWluaW1hbCgpICsgbGFicyh4ID0gIkVJVSBEZW1vY3JhY3kgU2NvcmUiLCB5PSJNYXR0ZXIgb2YgcGVyc29uYWwganVkZ2VtZW50IikKcXBsb3QoRUlVREVNT1MsZmNvdW50cnlbLDVdLCBkYXRhID0gZmNvdW50cnkpICsgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbD1yb3cubmFtZXMoZmNvdW50cnkpKSkgKyAgdGhlbWVfbWluaW1hbCgpICsgbGFicyh4ID0gIkVJVSBEZW1vY3JhY3kgU2NvcmUiLCB5PSJDYW4gYmUgc2V0IGFzaWRlIikKYGBgCgoKIyMgVmFyaW91cyBkZXNjcmlwdGl2ZSBzdGF0aXN0aWNzIGFuZCBmaWd1cmVzIEMxMwpgYGB7ciBEZXNjcmlwdGl2ZSBzdGF0aXN0aWNzIGFuZCBmaWd1cmVzIEMxMywgZmlnLmhlaWdodD05LCBmaWcud2lkdGg9Nn0KIyBzanAuc2V0VGhlbWUoZ2VvbS5vdXRsaW5lLnNpemUgPSAwLCBnZW9tLmxhYmVsLnNpemUgPSAzLCB0aXRsZS5zaXplID0gMS41KQojc2pwLmxpa2VydChCQVRbLDI6NV0sIHNvcnQuZnJxID0gInBvcy5hc2MiLCBzaG93LnByYy5zaWduID0gVFJVRSwgZGlnaXRzPTAsIHNob3cubj1GQUxTRSwgc2hvdy5sZWdlbmQ9RkFMU0UsIGNhdGNvdW50PTUsdGl0bGU9IkFncmVlbWVudD8gICAgIChDMTMsIGFsbCBjb3VudHJpZXMpIikgIyBsaWNrZXJ0IHBsb3QKCiMgQXZlcmFnZSBtZWFuIGFuZCBzcHJlYWQgb2Ygcm9sZXMgKGJhc2VkIG9uIGNvdW50cnkgYXZlcmFnZXMpLCBib3hwbG90IGFuZCBiZWFucGxvdApzb3J0ZWRCQVRtPC1CQVRtWyAsIG9yZGVyKGNvbE1lYW5zKEJBVG0pKV0gIyBzb3J0IGJ5IGNvbHVtbiBtZWFuCnBhcihtYXIgPSBjKDQsMTUsMiwyKSkgIyBzZXQgbWFyZ2lucwpib3hwbG90KHggPSBhcy5saXN0KHNvcnRlZEJBVG0pLCBob3Jpem9udGFsID0gVFJVRSwgbGFzPTEsIG1haW49IkF2ZXJhZ2VzIGFnZ3JlZ2F0ZWQgYnkgY291bnRyeSAoQzEzKSIsIGxvZz0iIikKCnBhcihtYXIgPSBjKDQsMTUsMiwyKSkgIyBzZXQgbWFyZ2lucwpiZWFucGxvdCh4ID0gYXMubGlzdChzb3J0ZWRCQVRtKSwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcz0xLCBtYWluPSJBdmVyYWdlcyBhZ2dyZWdhdGVkIGJ5IGNvdW50cnkgKEMxMykiLCBsb2c9IiIpCgojI0JlcnRpbiBwbG90IChjZW50ZXJlZCkKY0JBVG08LXQoQkFUbSkKY0JBVG08LXNjYWxlKGNCQVRtLCBzY2FsZT1GQUxTRSkgI2NlbnRlcmluZyBvZiBtZWFucwpjQkFUbTwtdChjQkFUbSkKY0JBVG1DMTM8LWNCQVRtCnggPC0gc2NhbGVfYnlfcmFuayhhcy5tYXRyaXgoc2NhbGUoY0JBVG0sIHNjYWxlPUZBTFNFKSkpCm9yZGVyIDwtIHNlcmlhdGUoeCwgbWV0aG9kPSJQQ0EiKQpiZXJ0aW5wbG90KHgsIG9yZGVyLCBvcHRpb25zID0gbGlzdChwYW5lbD1wYW5lbC5zcXVhcmVzLCBzaGFkaW5nPVRSVUUsIHJldmVyc2U9VFJVRSwgbWFyID0gYygxLDEsMTAsNiksIGdwX2xhYmVscz1ncGFyKGZvbnRzaXplPTgpKSkKb3JkZXIgPC0gc2VyaWF0ZSh4LCBtZXRob2Q9IlBDQV9hbmdsZSIpCmJlcnRpbnBsb3QoeCwgb3JkZXIsIG9wdGlvbnMgPSBsaXN0KHBhbmVsPXBhbmVsLnNxdWFyZXMsIHNoYWRpbmc9VFJVRSwgcmV2ZXJzZT1UUlVFLCBtYXIgPSBjKDEsMSwxMCw2KSwgZ3BfbGFiZWxzPWdwYXIoZm9udHNpemU9OCkpKQojdW5jZW50ZXJlZCBDMTMgQmVydGluCnggPC0gc2NhbGVfYnlfcmFuayhhcy5tYXRyaXgoQkFUbSkpCm9yZGVyIDwtIHNlcmlhdGUoeCwgbWV0aG9kPSJQQ0EiKQpiZXJ0aW5wbG90KHgsIG9yZGVyLCBvcHRpb25zID0gbGlzdChwYW5lbD1wYW5lbC5zcXVhcmVzLCBzaGFkaW5nPVRSVUUsIHJldmVyc2U9VFJVRSwgbWFyID0gYygxLDEsMTAsNiksIGdwX2xhYmVscz1ncGFyKGZvbnRzaXplPTgpKSkKCmhlYXRtYXAoY0JBVG0sIG1hcmdpbnM9Yyg1LDUpKSAjIGhlYXRtYXAgKGNlbnRlcmVkKQoKIyBuZXR3b3JrIHBsb3Qgb2YgY29ycmVsYXRpb25zCmM8LWNvcnJlbGF0ZShCQVRtKQpuZXR3b3JrX3Bsb3QoYywgbWluX2Nvcj0uMiwgY29sb3JzPWMoInJlZCIsICJncmVlbiIpKSAjIG5vdCB3b3JraW5nIGZvciBub3cKYzwtY29yKEJBVG0pCmNvcnJwbG90KGMsIHR5cGUgPSAidXBwZXIiLCBvcmRlciA9ICJGUEMiLCB0bC5jb2wgPSAiYmxhY2siLCB0bC5zcnQgPSA0NSwgZGlhZz1GQUxTRSwgdGwuY2V4PTAuOCxtYXI9YygxLDAsMCwxKSkKc2pwLmNvcnIoYykKCiMgZGlzdGFuY2UgbWF0cml4IChjb3JyZWxhdGlvbnMpCiNyZXMuZGlzdCA8LSBnZXRfZGlzdChDMTN4LCBzdGFuZCA9IFRSVUUsIG1ldGhvZCA9ICJwZWFyc29uIikKI2Z2aXpfZGlzdChyZXMuZGlzdCwgZ3JhZGllbnQgPSBsaXN0KGxvdyA9ICIjMDBBRkJCIiwgbWlkID0gIndoaXRlIiwgaGlnaCA9ICIjRkM0RTA3IikpCgpgYGAKCiMjIFBDQSBhbmQgYmlwbG90LCBtZWFuIGNlbnRlcmVkCmBgYHtyIHdhcm5pbmc9RkFMU0V9CiNCQVRtMjwtIEJBVG1bLWMoMjIsNTQpLCBdICNSZW1vdmFsIEV0aGlvcGlhIGFuZCBTaW5nYXBvcmUgYXMgb3V0bGllcnMKQkFUbTI8LSBCQVRtCmNCQVRtPC10KEJBVG0yKQpjQkFUbTwtc2NhbGUoY0JBVG0sIHNjYWxlPUZBTFNFKSAjY2VudGVyaW5nIG9mIG1lYW5zCmNCQVRtPC10KGNCQVRtKQp4PC10KGNCQVRtKQp4PC1zY2FsZSh4LCBzY2FsZT1GQUxTRSkKeDwtdCh4KQpDMTN4PC14CgojIHRlc3QgZm9yIFBDQSBmYWN0b3JzID0gMgpwYXJhbih4KQpyZXMucGNhPC1QQ0EoeCAsIHNjYWxlLnVuaXQ9RkFMU0UsIG5jcD0zLCBncmFwaCA9IFRSVUUpICMgc3VnZ2VzdHMgMiBheGVzIG9ubHkKI3Jlcy5wY2EkdmFyJGNvb3JkCmZ2aXpfcGNhX3ZhcihyZXMucGNhLCBjb2wudmFyID0gImJsYWNrIikrIGxhYnModGl0bGUgPSAiQzEzIFBDQSwgY2VudGVyZWQgbWVhbnMiKQoKI3NqdC5wY2EoeCkKI2Z2aXpfcGNhX2JpcGxvdChyZXMucGNhLCBnZW9tID0gInRleHQiLCAgdGl0bGU9IkV0aGljcyhDMTMpIiwgYXhlcyA9YygxLDIpLCBsYWJlbHNpemU9Mi41LCByZXBlbD1UUlVFKSArIHRoZW1lX21pbmltYWwoKQpmdml6X3BjYV9iaXBsb3QocmVzLnBjYSwgcmVwZWwgPSBUUlVFKSsgbGFicyh0aXRsZSA9ICJDMTMgUENBLCBjZW50ZXJlZCBtZWFucyIpCgpmdml6X3NjcmVlcGxvdChyZXMucGNhLCBuY3A9MTApCmZ2aXpfY29udHJpYihyZXMucGNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDEpCmZ2aXpfY29udHJpYihyZXMucGNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDIpCmZ2aXpfY29udHJpYihyZXMucGNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDMpICMgbm90IHN0YWJsZSAoUEFSQU4pCmluZHJvbGVzIDwtIGdldF9wY2FfaW5kKHJlcy5wY2EpCkMxM2luZDwtaW5kcm9sZXMkY29vcmQKCiMgUXVhbGl0eSBvZiByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ291bnRyaWVzCmZ2aXpfY29zMihyZXMucGNhLCBjaG9pY2U9ImluZCIsIGF4ZXMgPSAxLCB0b3AgPSA2OCApCmZ2aXpfY29zMihyZXMucGNhLCBjaG9pY2U9ImluZCIsIGF4ZXMgPSAyLCB0b3AgPSA2OCApCgojIEstbWVuYXMgY2x1c3RlcmluZyA9IGp1c3Qgb25lIGNsdXNlcgpzZXQuc2VlZCgxMjMpCmZ2aXpfbmJjbHVzdChDMTN4LCBrbWVhbnMsIG1ldGhvZCA9ICJnYXBfc3RhdCIpICsgbGFicyh0aXRsZSA9ICJDMTMgY2x1c3RlcnMgKEstbWVhbnMpIikgIyAxIGNsdXN0ZXIgCiMga20ucmVzIDwtIGttZWFucygoQzEzeCksIDQsIG5zdGFydCA9IDI1KQojZnZpel9jbHVzdGVyKGttLnJlcywgQzEzeCwgZWxsaXBzZS50eXBlID0gIm5vcm0iKQoKIyBIQ1BDIENsdXN0ZXJpbmcKcmVzLnBjYS5oY3BjPC1IQ1BDKHJlcy5wY2EsIG5iLmNsdXN0PS0xKSAjIDUgY2x1c3RlcnMKcmVzLnBjYS5oY3BjJGRhdGEuY2x1c3QKCmZ2aXpfY2x1c3RlcihyZXMucGNhLmhjcGMsIGRhdGEgPSB4LCBlbGxpcHNlLnR5cGUgPSAiY29udmV4IiwgcmVwZWw9VFJVRSkrIHRoZW1lX3R1ZnRlKCkgKyBsYWJzKHRpdGxlID0gIkMxMyBjbHVzdGVycyAoYWZ0ZXIgUENBKSwgY2VudGVyZWQgbWVhbnMiKSArIHlsYWIoIiA8LS0tIDE6IEFic29sdXRpc20iKSArIHhsYWIoIjI6IDwtLS0gU3ViamVjdGl2aXNtIikgKyB0aGVtZShheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTIpLCBheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSkKI2Z2aXpfY2x1c3RlcihyZXMucGNhLmhjcGMsIGRhdGEgPSB4LCBheGVzPWMoMSwzKSwgZWxsaXBzZS50eXBlID0gImNvbnZleCIsIHJlcGVsPVRSVUUpKyB0aGVtZV90dWZ0ZSgpICsgbGFicyh0aXRsZSA9ICJDMTMgY2x1c3RlcnMgKGFmdGVyIFBDQSkiKSArIHlsYWIoIiA8LS0tIDE6IEFic29sdXRpc20iKSArIHhsYWIoIjI6IDwtLS0gU2l0dWF0aW9uaXNtIikgKyB0aGVtZShheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9MTIpLCBheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTE0LGZhY2U9ImJvbGQiKSkKI2Z2aXpfY2x1c3RlcihyZXMucGNhLmhjcGMsIGRhdGEgPSB4LCBheGVzPWMoMiwzKSwgZWxsaXBzZS50eXBlID0gImNvbnZleCIsIHJlcGVsPVRSVUUpKyB0aGVtZV90dWZ0ZSgpICsgbGFicyh0aXRsZSA9ICJDMTMgY2x1c3RlcnMgKGFmdGVyIFBDQSkiKSArIHlsYWIoIiA8LS0tIDI6IFN1YmplY3RpdmlzbSIpICsgeGxhYigiMzogPC0tLSBTaXR1YXRpb25pc20iKSArIHRoZW1lKGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xMiksIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTQsZmFjZT0iYm9sZCIpKQoKZnZpel9kZW5kKHJlcy5wY2EuaGNwYywgcmVjdCA9IFRSVUUsIGNleCA9IDAuNSwgaG9yaXo9VFJVRSkKCiNyZXMucGNhLmhjcGMkZGVzYy52YXIKCiMgTm9uLW1ldHJpYyBNRFMKbGlicmFyeShnZ3JlcGVsKQpkPC1kaXN0KEMxM3hbLGMoLTIpXSkgIyBhbHNvIHJlbW92aW5nIEFyZ2VudGluYSAjQ0hFQ0tST1dOVU1CRVIKZml0IDwtIGlzb01EUyhkLCBrPTIpCmZpdApmaXQuc2g8LVNoZXBhcmQoZCwgZml0JHBvaW50cykKcGxvdChmaXQuc2gsIHBjaCA9ICIuIikKbGluZXMoZml0LnNoJHgsIGZpdC5zaCR5ZiwgdHlwZSA9ICJTIikKeCA8LSBmaXQkcG9pbnRzWywxXQp5IDwtIGZpdCRwb2ludHNbLDJdCnBsb3QoeCwgeSwgeGxhYj0iQ29vcmRpbmF0ZSAxIiwgeWxhYj0iQ29vcmRpbmF0ZSAyIiwKbWFpbj0iTm9uTWV0cmljCU1EUyIsCXR5cGU9Im4iKQp0ZXh0KHgsIHksIGxhYmVscyA9IHJvdy5uYW1lcyhCQVRtKSwgY2V4PS43KQpzcGFjZTwtYXMuZGF0YS5mcmFtZShmaXQkcG9pbnRzKQpzcGFjZSRsYWJlbDwtQzEzeFssLTFdCnFwbG90KFYxLCBWMiwgZGF0YT1zcGFjZSkgKyBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsPXJvdy5uYW1lcyhmaXQkcG9pbnRzKSkpICsgZ2d0aXRsZSgiTm9uLXBhcmFtZXRyaWMgTURTIEMxMywgY2VudGVyZWQgbWVhbnMiKSArIHRoZW1lX21pbmltYWwoKQoKI3Jlcy5tZHMuaGNwYzwtSENQQyhzcGFjZSwgbmIuY2x1c3Q9LTEpIAojZnZpel9jbHVzdGVyKHJlcy5tZHMuaGNwYywgZGF0YSA9IHgsIGZyYW1lLnR5cGUgPSAiY29udmV4IiwgcmVwZWw9VFJVRSwgbGFiZWxzaXplPTMpKyB0aGVtZV90dWZ0ZSgpICsgbGFicyh0aXRsZSA9ICJDMTMgY2x1c3RlcnMgKGFmdGVyIE1EUykiKSAKIyByZXMubWRzLmhjcGMkZGVzYy52YXIKYGBgCgoKIyMgRkEgdGVzdCBDMTMKYGBge3J9CmV0aGljPC1CQVRtQzEzCiNyb2xlczwtZHBseXI6OmZpbHRlcihyb2xlcyxDT1VOVFJZIT0nU2luZ2Fwb3JlX05PTi1SRVAnICYgQ09VTlRSWSAhPSdFdGhpb3BpYScpICMgcmVtb3ZlIFNpbmdhcG9yZSBhbmQgRXRoaW9waWEKIyBldGhpYzwtZXRoaWMgJT4lIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkKeDwtdChldGhpY1ssYygtKDU6NikpXSkKeDwtc2NhbGUoeCwgc2NhbGU9RkFMU0UpCng8LXQoeCkKY2VudGVyX2V0aGljPC1hcy5kYXRhLmZyYW1lKHgpCmNlbnRlcl9ldGhpYyRDT1VOVFJZPC1ldGhpYyRDT1VOVFJZCmNlbnRlcl9ldGhpYyRJRDwtZXRoaWMkSUQKCmV0aGljczwtZXRoaWNbLC1jKDU6NildCiNldGhpY3M8LWNlbnRlcl9ldGhpY1ssLWMoMTk6MjApXQoKZGVzY3JpYmUoZXRoaWNzKQpLTU8oZXRoaWNzKSAjIG5vdCByZWFsbHkgc3VpdGFibGUsIEtNTyBNU0E9MC42Nwpjb3J0ZXN0LmJhcnRsZXR0KGV0aGljcykgIyBzdWdnZXN0IDIgZmFjdG9ycyBhbmQgMSBjb21wb25lbnQKZmEucGFyYWxsZWwoZXRoaWNzKQpzY3JlZShldGhpY3MpCiN2YXJpbWF4LCByb3RhdGVkCm15ZmE8LWZhKGV0aGljcywgZm0gPSAicGEiLCBuZmFjdG9ycyA9IDIsIHJvdGF0ZSA9ICJ2YXJpbWF4IiwgY292YXI9RkFMU0UpIApwcmludChteWZhLCBjdXQ9LjQsIHNvcnQ9VFJVRSkKcGxvdChteWZhLCB4bGltID0gYygtMSwgMSksIHlsaW0gPSBjKC0xLCAxKSkKZmEuZGlhZ3JhbShteWZhLCBjdXQgPSAuMDAxLCBtYWluPSJGQSBDMTMsIFBDQSBleHRyYWN0aW9uLCB2YXJpbWF4IikKIyBvYmxpbWluCm15ZmE8LWZhKGV0aGljcywgZm0gPSAicGEiLCBuZmFjdG9ycyA9IDIsIHJvdGF0ZSA9ICJvYmxpbWluIiwgY292YXI9RkFMU0UpIApwcmludChteWZhLCBjdXQ9LjQsIHNvcnQ9VFJVRSkKcGxvdChteWZhLCB4bGltID0gYygtMSwgMSksIHlsaW0gPSBjKC0xLCAxKSkKZmEuZGlhZ3JhbShteWZhLCBjdXQgPSAuMDAxLCBtYWluPSJGQSBDMTMsIFBDQSBleHRyYWN0aW9uLCBvYmxpbWluIikKCiMgbm90ZTogdGhlIHRlc3QgZG9lcyBub3QgYWxpZ24gZXhhY3RseSB3aXRoIFNQU1MgcHJvY2VkdXJlcwojdGVzdCBmb3Igc2NhbGluZwojY29sYWI8LWRwbHlyOjpzZWxlY3QoZXRoaWNzLCBQb3MuaW1hZ2UucG9saXRpY2lhbnMsIFN1cC5nb3YucG9saWN5KQojYWxwaGEoY29sYWIpCgpgYGAKCiMgQzE0IEVUSElDUyAoUFJBQ1RJQ0VTKQpgYGB7cn0KI0MxNApCQVRtIDwtIGFwcGx5KGRwbHlyOjpzZWxlY3QoQkFULCBQYXlpbmcuZm9yLmluZm86QWNjZXB0Lm1vbmV5KSwgMiwgZnVuY3Rpb24oeCkge3ggPC0gcmVjb2RlKHgsIidub3QgYXBwcm92ZSB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcyc9MTsgJ2p1c3RpZmllZCBvbiBvY2Nhc2lvbic9MjsgJ2Fsd2F5cyBqdXN0aWZpZWQnPTMiKTsgeH0pIAoKIyMjIHJlLWFkZCBjb3VudHJ5IGFuZCBhZGQgbGFiZWxzCkJBVG08LWRhdGEuZnJhbWUoQkFUbSkKQkFUbSRDT1VOVFJZPC1CQVQkQ09VTlRSWSAKQkFUbSRJRDwtQkFUJElEIAoKQkFUbUMxNDwtQkFUbQpCQVRtQ09NUExFVEU8LUJBVG0gJT4lIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkgIyBub3RlIGZpbHRlciBvbiBvbmx5IGNvbXBsZXRlIEMxNCogY2FzZXMKQkFUbU9SRzwtQkFUbSAjIG1ha2UgYSBjb3B5IG9mIHRoZSBkYXRhc2V0IChvcmdpbmFsKQoKIyMjIGNvbnZlcnQgdG8gbWF0cml4IG9mIGF2ZXJhZ2VzIGJ5IGNvdW50cnkgYW5kIGFkZCByb3duYW1lcyBhbmQgbGFiZWxzCkJBVG08LUJBVG0gJT4lCiAgZ3JvdXBfYnkoQ09VTlRSWSkgJT4lCiAgc3VtbWFyaXNlX2VhY2goZnVucyhNZWFuKSwgUGF5aW5nLmZvci5pbmZvOkFjY2VwdC5tb25leSkKQkFUbTwtZGF0YS5mcmFtZShCQVRtKQpyb3duYW1lcyhCQVRtKTwtQkFUbVssMV0KQkFUbTwtQkFUbVssMjoxMV0KQkFUbTwtQkFUbVtjKC0zNiksXSAjcmVtb3ZpbmcgSmFwYW4gYmVjYXVzZSBvZiBtaXNzaW5nIEMxNCBxdWVzdGlvbgpCQVRtPC1CQVRtW2MoLTU5KSxdICNyZW1vdmluZyBTd2VkZW4gYmVjYXVzZSBvZiBtaXNzaW5nIEMxNCBxdWVzdGlvbgpCQVRtT1JHQzE0PC1CQVRtCgojIyMgbWFrZSB0YWJsZSBvZiBtZWFuIGFuZCBzZCBieSBxdWVzdGlvbiBhbmQgY291bnRyeQpEVCA8LSBkYXRhLnRhYmxlKEJBVG1DMTQpCndpZGUgPC0gc2V0bmFtZXMoRFRbLCBzYXBwbHkoLlNELCBmdW5jdGlvbih4KSBsaXN0KG49c3VtKGNvbXBsZXRlLmNhc2VzKHgpKSwgbWVhbj1yb3VuZChtZWFuKHgsIG5hLnJtPVRSVUUpLCAyKSwgc2Q9cm91bmQoc2QoeCwgbmEucm09VFJVRSksIDIpKSksIGJ5PUNPVU5UUlldLCBjKCJDT1VOVFJZIiwgc2FwcGx5KG5hbWVzKERUKVstMTJdLCBwYXN0ZTAsIGMoIi5uIiwgIi5tZW4iLCAiLlNEIikpKSkKdGFibGUubWVhbnNkQzE0PC1hcy5kYXRhLmZyYW1lKHdpZGVbLDE6MzFdKQoKYGBgICAgICAKCiMjIFBDQSBhbmQgYmlwbG90LCByYXcgdmFsdWVzIEMxNApgYGB7ciwgZmlnLmhlaWdodD05LCBmaWcud2lkdGg9Nn0KeDwtQkFUbQpwYXJhbih4KSAjIDIgY29tcG9uZW50cwpyZXMucGNhPC1QQ0EoeCAsIHNjYWxlLnVuaXQ9RkFMU0UsIG5jcD0yLCBncmFwaCA9IFRSVUUpCmZ2aXpfcGNhX2JpcGxvdChyZXMucGNhLCBnZW9tID0gInRleHQiLCAgdGl0bGU9IkV0aGljcyhDMTQpIFJhdyB2YWx1ZXMiLCBheGVzID1jKDEsMiksIGxhYmVsc2l6ZT0yLjUsIHJlcGVsPVRSVUUpICsgdGhlbWVfbWluaW1hbCgpCgpmdml6X3BjYV92YXIocmVzLnBjYSwgY29sLnZhciA9ICJibGFjayIpKyBsYWJzKHRpdGxlID0gIkV0aGljcyhDMTQpIFJhdyB2YWx1ZXMiKQpmdml6X3NjcmVlcGxvdChyZXMucGNhLCBuY3A9MTApCmZ2aXpfY29udHJpYihyZXMucGNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDEpCmZ2aXpfY29udHJpYihyZXMucGNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDIpCgppbmRyb2xlcyA8LSBnZXRfcGNhX2luZChyZXMucGNhKQpDMTRpbmQ8LWluZHJvbGVzJGNvb3JkCgojIEhDUEMgQ2x1c3RlcmluZwpyZXMucGNhLmhjcGM8LUhDUEMocmVzLnBjYSwgbmIuY2x1c3Q9LTEpICMgMyBjbHVzdGVycwoKZnZpel9jbHVzdGVyKHJlcy5wY2EuaGNwYywgZGF0YSA9IHgsIGZyYW1lLnR5cGUgPSAiY29udmV4IiwgcmVwZWw9VFJVRSkrIHRoZW1lX3R1ZnRlKCkgKyBsYWJzKHRpdGxlID0gIkMxNCBjbHVzdGVycyAoYWZ0ZXIgUENBKSIpICsgeWxhYigiMjogQWNjZXB0IG1vbmV5L3B1YmwuIHVudmVyaWZpZWQgLS0tPiIpICsgeGxhYigiMTogQWNjZXB0YW5jZSAoZ2VuZXJhbCkgLS0tPiIpICsgdGhlbWUoYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTEyKSwgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xNCxmYWNlPSJib2xkIikpCnJlcy5wY2EuaGNwYyRkZXNjLnZhcgoKIyBLLW1lYW5zIGNsdXN0ZXJpbmcKZnZpel9uYmNsdXN0KHgsIGttZWFucywgbWV0aG9kID0gImdhcF9zdGF0IikgIyAxIGNsdXN0ZXIKCiMgTm9uLW1ldHJpYyBNRFMKbGlicmFyeShnZ3JlcGVsKQpkPC1kaXN0KEJBVG0pICMgYWxzbyByZW1vdmluZyBBcmdlbnRpbmEgI0NIRUNLUk9XTlVNQkVSCmZpdCA8LSBpc29NRFMoZCwgaz0yKQpmaXQKZml0LnNoPC1TaGVwYXJkKGQsIGZpdCRwb2ludHMpCnBsb3QoZml0LnNoLCBwY2ggPSAiLiIpCmxpbmVzKGZpdC5zaCR4LCBmaXQuc2gkeWYsIHR5cGUgPSAiUyIpCnggPC0gZml0JHBvaW50c1ssMV0KeSA8LSBmaXQkcG9pbnRzWywyXQpwbG90KHgsIHksIHhsYWI9IkNvb3JkaW5hdGUgMSIsIHlsYWI9IkNvb3JkaW5hdGUgMiIsCm1haW49Ik5vbk1ldHJpYwlNRFMiLAl0eXBlPSJuIikKdGV4dCh4LCB5LCBsYWJlbHMgPSByb3cubmFtZXMoQkFUbSksIGNleD0uNykKc3BhY2U8LWFzLmRhdGEuZnJhbWUoZml0JHBvaW50cykKI3NwYWNlJGxhYmVsPC1DMTN4WywtMV0KcXBsb3QoVjEsIFYyLCBkYXRhPXNwYWNlKSArIGdlb21fdGV4dF9yZXBlbChhZXMobGFiZWw9cm93Lm5hbWVzKGZpdCRwb2ludHMpKSkgKyBnZ3RpdGxlKCJOb24tcGFyYW1ldHJpYyBNRFMgQzE0LCBjZW50ZXJlZCBtZWFucyIpICsgdGhlbWVfbWluaW1hbCgpCgojcmVzLm1kcy5oY3BjPC1IQ1BDKHNwYWNlLCBuYi5jbHVzdD0tMSkgCiNmdml6X2NsdXN0ZXIocmVzLm1kcy5oY3BjLCBkYXRhID0geCwgZnJhbWUudHlwZSA9ICJjb252ZXgiLCByZXBlbD1UUlVFLCBsYWJlbHNpemU9MykrIHRoZW1lX3R1ZnRlKCkgKyBsYWJzKHRpdGxlID0gIkMxNCBjbHVzdGVycyAoYWZ0ZXIgTURTKSIpIAojIHJlcy5tZHMuaGNwYyRkZXNjLnZhcgoKYGBgCgojIyBWYXJpb3VzIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgYW5kIGZpZ3VyZXMgQzE0CmBgYHtyIERlc2NyaXB0aXZlIHN0YXRpc3RpY3MgYW5kIGZpZ3VyZXMgQzE0LCBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD02fQojIHNqcC5zZXRUaGVtZShnZW9tLm91dGxpbmUuc2l6ZSA9IDAsIGdlb20ubGFiZWwuc2l6ZSA9IDMsIHRpdGxlLnNpemUgPSAxLjUpCnNqcC5saWtlcnQoQkFUWyw2OjE1XSwgc29ydC5mcnEgPSAicG9zLmFzYyIsIHNob3cucHJjLnNpZ24gPSBUUlVFLCBkaWdpdHM9MCwgc2hvdy5uPUZBTFNFLCBzaG93LmxlZ2VuZD1GQUxTRSwgY2F0Y291bnQ9NCwKICAgICAgICAgICB0aXRsZT0iQWdyZWVtZW50PyAgICAgKEMxNCwgYWxsIGNvdW50cmllcykiKSAjIGxpY2tlcnQgcGxvdAoKIyBQcm9ibGVtOiBTd2VkZW4gaXMgbWlzc2luZyBDMTRFIChQZXJzb25hbCBkb2N1bWVudHMpIGFuZCBKYXBhbiBDMTRKIChQdWJsLiB1bnZlcmlmaWVkKQojIyBzb2x1dGlvbjogVGhlIHZhbHVlIGlzIHNldCB0byBhdmVyYWdlIGZvciBhbGwgb3RoZXIgY291bnRyaWVzIAojIyBjb2xNZWFucyhCQVRtLCBuYS5ybT1UUlVFKQojIEphcGFuCkJBVG1bMzYsOV08LTEuMjM2MzU3ICNDSEVDS1JPV05VTUJFUiAKIyBTd2VkZW4KQkFUbVs2MCw1XTwtMS40MDE5MzYgI0NIRUNLUk9XTlVNQkVSCgojIEF2ZXJhZ2UgbWVhbiBhbmQgc3ByZWFkIG9mIHJvbGVzIChiYXNlZCBvbiBjb3VudHJ5IGF2ZXJhZ2VzKSwgYm94cGxvdCBhbmQgYmVhbnBsb3QKc29ydGVkQkFUbTwtQkFUbVsgLCBvcmRlcihjb2xNZWFucyhCQVRtKSldICMgc29ydCBieSBjb2x1bW4gbWVhbgpwYXIobWFyID0gYyg0LDE1LDIsMikpICMgc2V0IG1hcmdpbnMKYm94cGxvdCh4ID0gYXMubGlzdChzb3J0ZWRCQVRtKSwgaG9yaXpvbnRhbCA9IFRSVUUsIGxhcz0xLCBtYWluPSJBdmVyYWdlcyBhZ2dyZWdhdGVkIGJ5IGNvdW50cnkgKEMxNCkiLCBsb2c9IiIpCgpwYXIobWFyID0gYyg0LDE1LDIsMikpICMgc2V0IG1hcmdpbnMKYmVhbnBsb3QoeCA9IGFzLmxpc3Qoc29ydGVkQkFUbSksIGhvcml6b250YWwgPSBUUlVFLCBsYXM9MSwgbWFpbj0iQXZlcmFnZXMgYWdncmVnYXRlZCBieSBjb3VudHJ5IChDMTQpIiwgbG9nPSIiKQoKIyNCZXJ0aW4gcGxvdCAodW5jZW50ZXJlZCkKeCA8LSBzY2FsZV9ieV9yYW5rKGFzLm1hdHJpeChCQVRtKSkKb3JkZXIgPC0gc2VyaWF0ZSh4LCBtZXRob2Q9IlBDQSIpCmJlcnRpbnBsb3QoeCwgb3JkZXIsIG9wdGlvbnMgPSBsaXN0KHBhbmVsPXBhbmVsLnNxdWFyZXMsIHNoYWRpbmc9VFJVRSwgcmV2ZXJzZT1UUlVFLCBtYXIgPSBjKDEsMSwxMCw2KSwgZ3BfbGFiZWxzPWdwYXIoZm9udHNpemU9OCkpKQpvcmRlciA8LSBzZXJpYXRlKHgsIG1ldGhvZD0iUENBX2FuZ2xlIikKYmVydGlucGxvdCh4LCBvcmRlciwgb3B0aW9ucyA9IGxpc3QocGFuZWw9cGFuZWwuc3F1YXJlcywgc2hhZGluZz1UUlVFLCByZXZlcnNlPVRSVUUsIG1hciA9IGMoMSwxLDEwLDYpLCBncF9sYWJlbHM9Z3Bhcihmb250c2l6ZT04KSkpCgoKIyBuZXR3b3JrIHBsb3Qgb2YgY29ycmVsYXRpb25zCmM8LWNvcnJlbGF0ZShCQVRtKQpuZXR3b3JrX3Bsb3QoYywgbWluX2Nvcj0uMiwgY29sb3JzPWMoInJlZCIsICJncmVlbiIpLCBsZWdlbmQ9VFJVRSkgCmM8LWNvcihCQVRtKQpjb3JycGxvdChjLCB0eXBlID0gInVwcGVyIiwgb3JkZXIgPSAiRlBDIiwgdGwuY29sID0gImJsYWNrIiwgdGwuc3J0ID0gNDUsIGRpYWc9RkFMU0UsIHRsLmNleD0wLjgsbWFyPWMoMSwwLDAsMSkpCmBgYAoKCgojIyBGQSB0ZXN0IEMxNApgYGB7cn0KcHJldGhpYzwtQkFUbUMxNAoKI3ByZXRoaWM8LWRwbHlyOjpmaWx0ZXIocm9sZXMsQ09VTlRSWSE9J1NpbmdhcG9yZV9OT04tUkVQJyAmIENPVU5UUlkgIT0nRXRoaW9waWEnKSAjIHJlbW92ZSBTaW5nYXBvcmUgYW5kIEV0aGlvcGlhCng8LXQocHJldGhpY1ssYygtKDExOjEyKSldKQp4PC1zY2FsZSh4LCBzY2FsZT1GQUxTRSkKeDwtdCh4KQpjZW50ZXJfcHJldGhpYzwtYXMuZGF0YS5mcmFtZSh4KQpjZW50ZXJfcHJldGhpYyRDT1VOVFJZPC1ldGhpYyRDT1VOVFJZCmNlbnRlcl9wcmV0aGljJElEPC1wcmV0aGljJElECgpwcmV0aGljczwtcHJldGhpY1ssLWMoMTE6MTIpXSAjcmVtb3ZpbmcgY291bnRyeSBhbmQgSUQKcHJldGhpY3M8LXByZXRoaWNzWywtOF0gIyByZW1vdmluZyByZWNyZWF0aW9ucwojcHJldGhpY3M8LWNlbnRlcl9wcmV0aGljWywtYygxMToxMildCiNwcmV0aGljczwtcHJldGhpY3MgJT4lIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkKCgpkZXNjcmliZShwcmV0aGljcykKS01PKHByZXRoaWNzKSAjICBzdWl0YWJsZSwgS01PIE1TQT0wLjgzLCAuODIgd2l0aG91dCByZWNyZWF0aW9ucwpjb3J0ZXN0LmJhcnRsZXR0KHByZXRoaWNzKQpmYS5wYXJhbGxlbChwcmV0aGljcykgICMgc3VnZ2VzdCA0IGZhY3RvcnMgYW5kIDIgY29tcG9uZW50cyAoYWxzbyB3aXRob3V0IHJlY3IuKQojdmFyaW1heCwgcm90YXRlZApteWZhPC1mYShwcmV0aGljcywgZm0gPSAicGEiLCBuZmFjdG9ycyA9IDQsIHJvdGF0ZSA9ICJ2YXJpbWF4IiwgY292YXI9RkFMU0UsIFNNQz1GQUxTRSkgCnByaW50KG15ZmEsIGN1dD0uNCwgc29ydD1UUlVFKQpwbG90KG15ZmEsIHhsaW0gPSBjKC0xLCAxKSwgeWxpbSA9IGMoLTEsIDEpKQpmYS5kaWFncmFtKG15ZmEsIGN1dCA9IC4wMDEsIG1haW49IkZBIEMxNCwgUENBIGV4dHJhY3Rpb24sIHZhcmltYXgiKQojIG9ibGltaW4KbXlmYTwtZmEocHJldGhpY3MsIGZtID0gInBhIiwgbmZhY3RvcnMgPSA0LCByb3RhdGUgPSAib2JsaW1pbiIsIGNvdmFyPUZBTFNFLCAgU01DPUZBTFNFKSAKcHJpbnQobXlmYSwgY3V0PS40LCBzb3J0PVRSVUUpCnBsb3QobXlmYSwgeGxpbSA9IGMoLTEsIDEpLCB5bGltID0gYygtMSwgMSkpCmZhLmRpYWdyYW0obXlmYSwgY3V0ID0gLjAwMSwgbWFpbj0iRkEgQzE0LCBQQ0EgZXh0cmFjdGlvbiwgb2JsaW1pbiIpCgojdGVzdCBmb3Igc2NhbGluZyAjIG5vbmUgYXJlIGFib3ZlIDAuNzAsIHdoaWNoIGlzIHByb2JsZW1hdGljCgojIGJ1dCBOdW5uYWxseSAoMTk3OCk6IFdoZW4gdGhlcmUgYXJlIGEgc21hbGwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBzY2FsZSAoZmV3ZXIgdGhhbiAxMCksIENyb25iYWNoIGFscGhhIHZhbHVlcyBjYW4gYmUgcXVpdGUgc21hbGwuIEluIHRoaXMgc2l0dWF0aW9uIGl0IG1heSBiZSBiZXR0ZXIgdG8gY2FsY3VsYXRlIGFuZCByZXBvcnQgdGhlIG1lYW4gaW50ZXItaXRlbSBjb3JyZWxhdGlvbiBmb3IgdGhlIGl0ZW1zLiBPcHRpbWFsIG1lYW4gaW50ZXItaXRlbSBjb3JyZWxhdGlvbiB2YWx1ZXMgcmFuZ2UgZnJvbSAuMiB0byAuNCAoYXMgcmVjb21tZW5kZWQgYnkgQnJpZ2dzICYgQ2hlZWsgMTk4NikuIAoKY292ZXJ0PC1kcGx5cjo6c2VsZWN0KHByZXRoaWNzLCBVbmRlcmNvdmVyLmVtcGwsIEhpZGRlbi5taWNjYW0sIEZhbHNlLmlkZW50aXR5LFBheWluZy5mb3IuaW5mbyApCmFscGhhKGNvdmVydCkgIzAuNjksIGF2ZXJhZ2UgaW50ZXItaXRlbSBjb3JyZWxhdGlvbiA9IGF2ZXJhZ2Vfcj0uMzMgT0sKCnBlcnNvbmFsPC1kcGx5cjo6c2VsZWN0KHByZXRoaWNzLCBVc2luZy5jb25mLmRvY3VtZW50cywgUHJlc3N1cmUuaW5mb3JtYW50cywgVXNlLnBlcnNvbmFsLmRvYykKYWxwaGEocGVyc29uYWwpICMwLjU5LCBhdmVyYWdlX3I9LjMzCgpwZXJzb25hbDI8LWRwbHlyOjpzZWxlY3QocHJldGhpY3MsIFVzaW5nLmNvbmYuZG9jdW1lbnRzLCBQcmVzc3VyZS5pbmZvcm1hbnRzKQphbHBoYShwZXJzb25hbDIpICMwLjQKCm1vbmV5dW52ZXI8LWRwbHlyOjpzZWxlY3QocHJldGhpY3MsIFB1YmwudW52ZXJpZmllZCwgQWNjZXB0Lm1vbmV5KQphbHBoYShtb25leXVudmVyKSAjMC42NCwgYXZlcmFnZV9yPS40OAoKYGBgCgoK