library(readxl)
hbat <- read_excel("hbat.xls")
# x6 a x18 variáveis
dados <- hbat[,7:19]
head(dados)
# Estatísticas Descritivas
describe(dados)
dados
13 Variables 100 Observations
------------------------------------------------------------------------------------------
X6
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 43 1 7.81 5.595 5.790 6.575 8.000 9.100 9.410
.95
9.900
lowest : 5.0 5.1 5.2 5.5 5.6, highest: 9.4 9.5 9.6 9.9 10.0
------------------------------------------------------------------------------------------
X7
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 27 1 3.672 2.595 2.800 3.275 3.600 3.925 4.530
.95
5.100
lowest : 2.2 2.4 2.5 2.6 2.7, highest: 4.9 5.1 5.5 5.6 5.7
------------------------------------------------------------------------------------------
X8
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 50 1 5.365 2.700 3.280 4.250 5.400 6.625 7.210
.95
7.605
lowest : 1.3 2.5 2.6 2.7 3.0, highest: 7.7 7.9 8.0 8.4 8.5
------------------------------------------------------------------------------------------
X9
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 45 1 5.442 3.595 3.900 4.600 5.450 6.325 7.010
.95
7.305
lowest : 2.6 3.0 3.2 3.5 3.6, highest: 7.4 7.5 7.6 7.7 7.8
------------------------------------------------------------------------------------------
X10
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 41 1 4.01 2.200 2.400 3.175 4.000 4.800 5.510
.95
5.800
lowest : 1.9 2.1 2.2 2.3 2.4, highest: 5.7 5.8 5.9 6.3 6.5
------------------------------------------------------------------------------------------
X11
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 42 1 5.805 3.900 4.190 4.700 5.750 6.800 7.600
.95
7.805
lowest : 2.3 2.9 3.3 3.6 3.9, highest: 7.7 7.8 7.9 8.3 8.4
------------------------------------------------------------------------------------------
X12
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 35 1 5.123 3.385 3.790 4.500 4.900 5.800 6.610
.95
7.100
lowest : 2.9 3.0 3.1 3.4 3.5, highest: 6.8 6.9 7.1 7.8 8.2
------------------------------------------------------------------------------------------
X13
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 45 1 6.974 4.500 4.800 5.875 7.100 8.400 8.810
.95
9.105
lowest : 3.7 3.8 4.4 4.5 4.6, highest: 9.2 9.3 9.6 9.7 9.9
------------------------------------------------------------------------------------------
X14
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 34 1 6.043 4.795 5.000 5.400 6.100 6.600 7.200
.95
7.305
lowest : 4.1 4.3 4.5 4.7 4.8, highest: 7.3 7.4 7.5 7.7 8.1
------------------------------------------------------------------------------------------
X15
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 50 1 5.15 2.785 3.500 4.100 5.000 6.300 7.110
.95
7.505
lowest : 1.7 2.4 2.5 2.8 3.0, highest: 7.5 7.6 7.7 9.2 9.5
------------------------------------------------------------------------------------------
X16
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 37 1 4.278 2.595 3.000 3.700 4.400 4.800 5.400
.95
5.605
lowest : 2.0 2.1 2.4 2.5 2.6, highest: 5.5 5.6 5.7 6.5 6.7
------------------------------------------------------------------------------------------
X17
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 40 1 4.61 2.89 3.09 3.70 4.35 5.60 6.30
.95
6.60
lowest : 2.6 2.7 2.9 3.0 3.1, highest: 6.5 6.6 6.7 6.9 7.3
------------------------------------------------------------------------------------------
X18
n missing unique Info Mean .05 .10 .25 .50 .75 .90
100 0 30 1 3.886 2.595 2.990 3.400 3.900 4.425 4.710
.95
4.900
lowest : 1.6 2.0 2.4 2.5 2.6, highest: 4.7 4.8 4.9 5.2 5.5
------------------------------------------------------------------------------------------
boxplot(dados)

dados.pad <- scale(dados)
boxplot(dados.pad)

# correlação
mcor <- rcorr(as.matrix(dados))
mcor
X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18
X6 1.00 -0.14 0.10 0.11 -0.05 0.48 -0.15 -0.40 0.09 0.03 0.10 -0.49 0.03
X7 -0.14 1.00 0.00 0.14 0.43 -0.05 0.79 0.23 0.05 -0.03 0.16 0.27 0.19
X8 0.10 0.00 1.00 0.10 -0.06 0.19 0.02 -0.27 0.80 -0.07 0.08 -0.19 0.03
X9 0.11 0.14 0.10 1.00 0.20 0.56 0.23 -0.13 0.14 0.06 0.76 0.39 0.87
X10 -0.05 0.43 -0.06 0.20 1.00 -0.01 0.54 0.13 0.01 0.08 0.18 0.33 0.28
X11 0.48 -0.05 0.19 0.56 -0.01 1.00 -0.06 -0.49 0.27 0.05 0.42 -0.38 0.60
X12 -0.15 0.79 0.02 0.23 0.54 -0.06 1.00 0.26 0.11 0.03 0.20 0.35 0.27
X13 -0.40 0.23 -0.27 -0.13 0.13 -0.49 0.26 1.00 -0.24 0.02 -0.11 0.47 -0.07
X14 0.09 0.05 0.80 0.14 0.01 0.27 0.11 -0.24 1.00 0.04 0.20 -0.17 0.11
X15 0.03 -0.03 -0.07 0.06 0.08 0.05 0.03 0.02 0.04 1.00 0.07 0.09 0.11
X16 0.10 0.16 0.08 0.76 0.18 0.42 0.20 -0.11 0.20 0.07 1.00 0.41 0.75
X17 -0.49 0.27 -0.19 0.39 0.33 -0.38 0.35 0.47 -0.17 0.09 0.41 1.00 0.50
X18 0.03 0.19 0.03 0.87 0.28 0.60 0.27 -0.07 0.11 0.11 0.75 0.50 1.00
n= 100
P
X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17
X6 0.1736 0.3441 0.2922 0.5972 0.0000 0.1316 0.0000 0.3823 0.7898 0.3017 0.0000
X7 0.1736 0.9932 0.1642 0.0000 0.6026 0.0000 0.0216 0.6081 0.7865 0.1208 0.0065
X8 0.3441 0.9932 0.3387 0.5343 0.0549 0.8668 0.0064 0.0000 0.4669 0.4282 0.0638
X9 0.2922 0.1642 0.3387 0.0496 0.0000 0.0215 0.2046 0.1635 0.5572 0.0000 0.0000
X10 0.5972 0.0000 0.5343 0.0496 0.9092 0.0000 0.1831 0.9151 0.4051 0.0665 0.0007
X11 0.0000 0.6026 0.0549 0.0000 0.9092 0.5445 0.0000 0.0060 0.6483 0.0000 0.0001
X12 0.1316 0.0000 0.8668 0.0215 0.0000 0.5445 0.0078 0.2873 0.7547 0.0517 0.0003
X13 0.0000 0.0216 0.0064 0.2046 0.1831 0.0000 0.0078 0.0140 0.8191 0.2564 0.0000
X14 0.3823 0.6081 0.0000 0.1635 0.9151 0.0060 0.2873 0.0140 0.7281 0.0494 0.0904
X15 0.7898 0.7865 0.4669 0.5572 0.4051 0.6483 0.7547 0.8191 0.7281 0.4980 0.3516
X16 0.3017 0.1208 0.4282 0.0000 0.0665 0.0000 0.0517 0.2564 0.0494 0.4980 0.0000
X17 0.0000 0.0065 0.0638 0.0000 0.0007 0.0001 0.0003 0.0000 0.0904 0.3516 0.0000
X18 0.7843 0.0561 0.8016 0.0000 0.0055 0.0000 0.0063 0.4712 0.2786 0.2950 0.0000 0.0000
X18
X6 0.7843
X7 0.0561
X8 0.8016
X9 0.0000
X10 0.0055
X11 0.0000
X12 0.0063
X13 0.4712
X14 0.2786
X15 0.2950
X16 0.0000
X17 0.0000
X18
R <- cor(dados)
corrplot(R, method="number",type="upper", tl.srt = 45)

corrplot(R, method="number",type="upper", order = "hclust", tl.srt = 45)

# corrplot(R, method="circle",type="full", order = "hclust", tl.srt = 45)
29 das 78 (37%) correlações são significativas a 1% de significância
################################################################
#Partial correlation matrix
################################################################
partial.cor <- function (x)
{
R <- cor(x)
RI <- solve(R)
D <- 1/sqrt(diag(RI))
Rp <- -RI * (D %o% D)
diag(Rp) <- 0
rownames(Rp) <- colnames(Rp) <- colnames(x)
Rp
}
mat_anti_imagem <- -partial.cor(dados)
corrplot(mat_anti_imagem, method="number",type="upper", order = "hclust", tl.srt = 45)

################################################################
# The Bartlett's test statistic indicates to what extent we deviate from the reference situation |R| = 1.
################################################################
Bartlett.sphericity.test <- function(x)
{
method <- "Bartlett's test of sphericity"
data.name <- deparse(substitute(x))
x <- subset(x, complete.cases(x)) # Omit missing values
n <- nrow(x)
p <- ncol(x)
chisq <- (1-n+(2*p+5)/6)*log(det(cor(x)))
df <- p*(p-1)/2
p.value <- pchisq(chisq, df, lower.tail=FALSE)
names(chisq) <- "X-squared"
names(df) <- "df"
return(structure(list(statistic=chisq, parameter=df, p.value=p.value,
method=method, data.name=data.name), class="htest"))
}
Bartlett.sphericity.test(dados)
Bartlett's test of sphericity
data: dados
X-squared = 948.98, df = 78, p-value < 2.2e-16
################################################################
# KMO index
################################################################
kmo <- function(x)
{
x <- subset(x, complete.cases(x)) # Omit missing values
r <- cor(x) # Correlation matrix
r2 <- r^2 # Squared correlation coefficients
i <- solve(r) # Inverse matrix of correlation matrix
d <- diag(i) # Diagonal elements of inverse matrix
p2 <- (-i/sqrt(outer(d, d)))^2 # Squared partial correlation coefficients
diag(r2) <- diag(p2) <- 0 # Delete diagonal elements
KMO <- sum(r2)/(sum(r2)+sum(p2))
MSA <- colSums(r2)/(colSums(r2)+colSums(p2))
return(list(KMO=KMO, MSA=MSA))
}
kmo(dados)
$KMO
[1] 0.6087046
$MSA
X6 X7 X8 X9 X10 X11 X12 X13 X14
0.8733349 0.6201707 0.5270181 0.8895112 0.8066328 0.4478469 0.5862796 0.8791773 0.5293082
X15 X16 X17 X18
0.3144405 0.8588912 0.4423739 0.5331944
X11 X15 e X17 MSA < 0,50
estratégia: omitir X15 (menor MSA)
dados <- dados[,-10] #rodar apenas uma vez!
dados
kmo(dados)
$KMO
[1] 0.6121225
$MSA
X6 X7 X8 X9 X10 X11 X12 X13 X14
0.8843310 0.6244785 0.5310965 0.8898236 0.8009663 0.4492636 0.5873693 0.8799355 0.5328693
X16 X17 X18
0.8584831 0.4440650 0.5328216
estratégia: omitir X17 (menor MSA)
dados <- dados[,-11] #rodar apenas uma vez!
dados
kmo(dados)
$KMO
[1] 0.6531422
$MSA
X6 X7 X8 X9 X10 X11 X12 X13 X14
0.5087065 0.6255547 0.5190081 0.7865552 0.7793615 0.6223277 0.6218422 0.7528265 0.5107613
X16 X18
0.7600148 0.6655768
mat_anti_imagem <- -partial.cor(dados)
corrplot(mat_anti_imagem, method="number",type="upper", tl.srt = 45)

n.dados <- length(dados)
fit <- principal(dados, nfactors=n.dados, rotate="none")
print(fit, sort=T)
Principal Components Analysis
Call: principal(r = dados, nfactors = n.dados, rotate = "none")
Standardized loadings (pattern matrix) based upon correlation matrix
item PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 h2 u2
X18 11 0.88 0.12 -0.30 -0.21 -0.03 -0.02 0.15 -0.03 0.01 0.04 -0.24 1 7.8e-16
X9 4 0.87 0.03 -0.27 -0.22 0.02 0.02 0.01 -0.26 -0.04 -0.19 0.11 1 1.3e-15
X16 10 0.81 0.04 -0.22 -0.25 0.02 0.09 -0.42 0.18 0.04 0.11 0.06 1 1.6e-15
X11 6 0.72 -0.45 -0.15 0.21 0.09 -0.07 0.39 0.17 0.04 0.09 0.12 1 7.8e-16
X12 7 0.38 0.75 0.31 0.23 0.16 -0.08 0.00 -0.08 -0.29 0.13 0.03 1 -4.4e-16
X7 2 0.31 0.71 0.31 0.28 0.33 -0.20 -0.04 0.06 0.24 -0.10 -0.02 1 -1.8e-15
X13 8 -0.28 0.66 -0.07 -0.35 0.19 0.53 0.20 0.05 0.04 0.02 0.03 1 1.2e-15
X8 3 0.29 -0.37 0.79 -0.20 -0.02 0.08 0.01 -0.23 0.16 0.14 0.02 1 1.9e-15
X14 9 0.39 -0.31 0.78 -0.19 -0.03 0.10 0.02 0.22 -0.14 -0.16 -0.04 1 1.9e-15
X6 1 0.25 -0.50 -0.08 0.67 0.18 0.42 -0.12 -0.07 -0.01 -0.02 -0.06 1 -2.2e-16
X10 5 0.34 0.58 0.11 0.33 -0.63 0.15 0.04 0.03 0.07 -0.01 0.03 1 -4.4e-16
com
X18 1.7
X9 1.7
X16 2.1
X11 3.0
X12 2.8
X7 3.3
X13 3.4
X8 2.3
X14 2.5
X6 3.3
X10 3.4
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11
SS loadings 3.43 2.55 1.69 1.09 0.61 0.55 0.40 0.25 0.20 0.13 0.10
Proportion Var 0.31 0.23 0.15 0.10 0.06 0.05 0.04 0.02 0.02 0.01 0.01
Cumulative Var 0.31 0.54 0.70 0.80 0.85 0.90 0.94 0.96 0.98 0.99 1.00
Proportion Explained 0.31 0.23 0.15 0.10 0.06 0.05 0.04 0.02 0.02 0.01 0.01
Cumulative Proportion 0.31 0.54 0.70 0.80 0.85 0.90 0.94 0.96 0.98 0.99 1.00
Mean item complexity = 2.7
Test of the hypothesis that 11 components are sufficient.
The root mean square of the residuals (RMSR) is 0
with the empirical chi square 0 with prob < NA
Fit based upon off diagonal values = 1
#fit$values
#fit$scores
#fit$weights
#fit$loadings
#fit$communality
# Escolha a quantidade de fatores
fit1 <- principal(dados, nfactors=4, rotate="none")
print(fit1, sort=T)
Principal Components Analysis
Call: principal(r = dados, nfactors = 4, rotate = "none")
Standardized loadings (pattern matrix) based upon correlation matrix
item PC1 PC2 PC3 PC4 h2 u2 com
X18 11 0.88 0.12 -0.30 -0.21 0.91 0.086 1.4
X9 4 0.87 0.03 -0.27 -0.22 0.88 0.119 1.3
X16 10 0.81 0.04 -0.22 -0.25 0.77 0.234 1.3
X11 6 0.72 -0.45 -0.15 0.21 0.79 0.213 2.0
X12 7 0.38 0.75 0.31 0.23 0.86 0.141 2.1
X7 2 0.31 0.71 0.31 0.28 0.78 0.223 2.1
X13 8 -0.28 0.66 -0.07 -0.35 0.64 0.359 1.9
X10 5 0.34 0.58 0.11 0.33 0.58 0.424 2.4
X8 3 0.29 -0.37 0.79 -0.20 0.89 0.107 1.9
X14 9 0.39 -0.31 0.78 -0.19 0.89 0.108 2.0
X6 1 0.25 -0.50 -0.08 0.67 0.77 0.232 2.2
PC1 PC2 PC3 PC4
SS loadings 3.43 2.55 1.69 1.09
Proportion Var 0.31 0.23 0.15 0.10
Cumulative Var 0.31 0.54 0.70 0.80
Proportion Explained 0.39 0.29 0.19 0.12
Cumulative Proportion 0.39 0.68 0.88 1.00
Mean item complexity = 1.9
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.06
with the empirical chi square 39.02 with prob < 0.0018
Fit based upon off diagonal values = 0.97
#fit1$values
#fit1$scores
#fit1$weights
#fit1$loadings
#fit1$communality
# varimax rotation
fit2 <- principal(dados, nfactors=4, rotate="varimax")
print(fit2, sort=T)
Principal Components Analysis
Call: principal(r = dados, nfactors = 4, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
item RC1 RC2 RC3 RC4 h2 u2 com
X18 11 0.94 0.18 0.00 0.05 0.91 0.086 1.1
X9 4 0.93 0.12 0.05 0.09 0.88 0.119 1.1
X16 10 0.86 0.11 0.08 0.04 0.77 0.234 1.1
X12 7 0.13 0.90 0.08 -0.16 0.86 0.141 1.1
X7 2 0.06 0.87 0.05 -0.12 0.78 0.223 1.1
X10 5 0.14 0.74 -0.08 0.01 0.58 0.424 1.1
X8 3 0.02 -0.02 0.94 0.10 0.89 0.107 1.0
X14 9 0.11 0.05 0.93 0.10 0.89 0.108 1.1
X6 1 0.00 -0.01 -0.03 0.88 0.77 0.232 1.0
X13 8 -0.09 0.23 -0.25 -0.72 0.64 0.359 1.5
X11 6 0.59 -0.06 0.15 0.64 0.79 0.213 2.1
RC1 RC2 RC3 RC4
SS loadings 2.89 2.23 1.86 1.77
Proportion Var 0.26 0.20 0.17 0.16
Cumulative Var 0.26 0.47 0.63 0.80
Proportion Explained 0.33 0.26 0.21 0.20
Cumulative Proportion 0.33 0.59 0.80 1.00
Mean item complexity = 1.2
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.06
with the empirical chi square 39.02 with prob < 0.0018
Fit based upon off diagonal values = 0.97
#fit2$values
#fit2$scores
#fit2$weights
#fit2$loadings
#fit2$communality
eliminar X11 pois ainda há carga cruzada
dados <- dados[,-6]
# varimax rotation
fit3 <- principal(dados, nfactors=4, rotate="varimax")
print(fit3, sort=T)
Principal Components Analysis
Call: principal(r = dados, nfactors = 4, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
item RC1 RC2 RC3 RC4 h2 u2 com
X9 4 0.93 0.10 0.06 0.08 0.89 0.11 1.0
X18 10 0.93 0.17 0.00 0.01 0.89 0.11 1.1
X16 9 0.89 0.10 0.09 0.07 0.81 0.19 1.1
X12 6 0.14 0.90 0.08 -0.17 0.86 0.14 1.1
X7 2 0.06 0.87 0.05 -0.14 0.78 0.22 1.1
X10 5 0.16 0.74 -0.08 0.04 0.58 0.42 1.1
X8 3 0.02 -0.02 0.94 0.10 0.89 0.11 1.0
X14 8 0.10 0.05 0.93 0.08 0.89 0.11 1.0
X6 1 0.03 -0.01 -0.02 0.89 0.80 0.20 1.0
X13 7 -0.10 0.23 -0.26 -0.73 0.66 0.34 1.5
RC1 RC2 RC3 RC4
SS loadings 2.59 2.22 1.85 1.41
Proportion Var 0.26 0.22 0.18 0.14
Cumulative Var 0.26 0.48 0.67 0.81
Proportion Explained 0.32 0.28 0.23 0.17
Cumulative Proportion 0.32 0.60 0.83 1.00
Mean item complexity = 1.1
Test of the hypothesis that 4 components are sufficient.
The root mean square of the residuals (RMSR) is 0.06
with the empirical chi square 35.71 with prob < 0.00019
Fit based upon off diagonal values = 0.96
#fit2$values
#fit2$scores
#fit2$weights
#fit2$loadings # cargas fatoriais
#fit2$communality
Escores Fatoriais
fit2$weights
RC1 RC2 RC3 RC4
X6 -0.13906658 0.147235978 -0.131782402 0.60690554
X7 -0.07975823 0.421013424 0.021541189 0.05589414
X8 -0.04000256 -0.017857872 0.527173116 -0.05913410
X9 0.34848625 -0.053278604 -0.020396958 -0.07376774
X10 -0.04492535 0.368809456 -0.069941866 0.12791365
X11 0.14231359 -0.005697205 -0.019329512 0.31728383
X12 -0.04695514 0.418071580 0.039751067 0.01627490
X13 0.06046002 0.007312344 -0.049627429 -0.41425781
X14 -0.01328373 0.010973416 0.517162446 -0.05794101
X16 0.33135641 -0.059245362 0.009101153 -0.10569317
X18 0.35339032 -0.028889175 -0.047766436 -0.08508483
# 10 primeiros escores
fit2$scores[1:10,]
RC1 RC2 RC3 RC4
[1,] 0.1274910 0.7698686 -1.878446273 0.3664848
[2,] 1.2216666 -1.6458617 -0.614030010 0.8130648
[3,] 0.6158214 0.5800037 0.003689252 1.5699769
[4,] -0.8446267 -0.2719218 1.267493254 -1.2541645
[5,] -0.3197943 -0.8340650 -0.008096627 0.4475377
[6,] -0.6470292 -1.0672683 -1.303198892 -1.0527792
[7,] -2.6267985 -0.2458827 -0.555423494 -1.2260147
[8,] -0.2793639 -0.1573204 -0.749311481 -1.0146418
[9,] 1.0515134 -0.1722883 -0.092252815 -1.6580963
[10,] 0.4287538 0.7635327 -0.450377116 -0.8911659
Análise de fatores comuns
LS0tDQp0aXRsZTogIkFuw6FsaXNlIEZhdG9yaWFsIC0gSEJBVCINCmF1dGhvcjogIkxlb25pLCBSLiBDLiBQcm9mZXNzb3IgRHIuIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazogDQogICAgdGhlbWU6IHJlYWRhYmxlDQotLS0NCioqKg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRikNCmBgYA0KDQpgYGB7ciBwYWNvdGVzLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0Kcm0obGlzdD1scyhhbGw9VFJVRSkpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShNVk4pDQpsaWJyYXJ5KE1WQSkNCmxpYnJhcnkoY29ycnBsb3QpDQpsaWJyYXJ5KEhtaXNjKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHJvYnVzdFgpDQpsaWJyYXJ5KGdncGxvdDIpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KHJlYWR4bCkNCmhiYXQgPC0gcmVhZF9leGNlbCgiaGJhdC54bHMiKQ0KIyB4NiBhIHgxOCB2YXJpw6F2ZWlzDQpkYWRvcyA8LSBoYmF0Wyw3OjE5XQ0KaGVhZChkYWRvcykNCmBgYA0KDQpgYGB7ciwgZmlnLmhlaWdodD04LCBmaWcud2lkdGg9MTB9DQojIEVzdGF0w61zdGljYXMgRGVzY3JpdGl2YXMNCmRlc2NyaWJlKGRhZG9zKQ0KYm94cGxvdChkYWRvcykNCmRhZG9zLnBhZCA8LSBzY2FsZShkYWRvcykNCmJveHBsb3QoZGFkb3MucGFkKQ0KYGBgDQoNCg0KYGBge3IsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD0xMn0NCiMgY29ycmVsYcOnw6NvIA0KbWNvciA8LSByY29ycihhcy5tYXRyaXgoZGFkb3MpKQ0KbWNvcg0KDQpSIDwtIGNvcihkYWRvcykNCmNvcnJwbG90KFIsIG1ldGhvZD0ibnVtYmVyIix0eXBlPSJ1cHBlciIsIHRsLnNydCA9IDQ1KQ0KY29ycnBsb3QoUiwgbWV0aG9kPSJudW1iZXIiLHR5cGU9InVwcGVyIiwgb3JkZXIgPSAiaGNsdXN0IiwgdGwuc3J0ID0gNDUpDQojIGNvcnJwbG90KFIsIG1ldGhvZD0iY2lyY2xlIix0eXBlPSJmdWxsIiwgb3JkZXIgPSAiaGNsdXN0IiwgdGwuc3J0ID0gNDUpDQpgYGANCg0KIyMjIDI5IGRhcyA3OCAoMzclKSBjb3JyZWxhw6fDtWVzIHPDo28gc2lnbmlmaWNhdGl2YXMgYSAxJSBkZSBzaWduaWZpY8OibmNpYSANCmBgYHtyLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD04fQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojUGFydGlhbCBjb3JyZWxhdGlvbiBtYXRyaXgNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcGFydGlhbC5jb3IgPC0gZnVuY3Rpb24gKHgpDQp7DQpSIDwtIGNvcih4KQ0KUkkgPC0gc29sdmUoUikNCkQgPC0gMS9zcXJ0KGRpYWcoUkkpKQ0KUnAgPC0gLVJJICogKEQgJW8lIEQpDQpkaWFnKFJwKSA8LSAwDQpyb3duYW1lcyhScCkgPC0gY29sbmFtZXMoUnApIDwtIGNvbG5hbWVzKHgpDQpScA0KfQ0KbWF0X2FudGlfaW1hZ2VtIDwtIC1wYXJ0aWFsLmNvcihkYWRvcykNCg0KY29ycnBsb3QobWF0X2FudGlfaW1hZ2VtLCBtZXRob2Q9Im51bWJlciIsdHlwZT0idXBwZXIiLCBvcmRlciA9ICJoY2x1c3QiLCB0bC5zcnQgPSA0NSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBUaGUgQmFydGxldHQncyB0ZXN0IHN0YXRpc3RpYyBpbmRpY2F0ZXMgdG8gd2hhdCBleHRlbnQgd2UgZGV2aWF0ZSBmcm9tIHRoZSByZWZlcmVuY2Ugc2l0dWF0aW9uIHxSfCA9IDEuDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCkJhcnRsZXR0LnNwaGVyaWNpdHkudGVzdCA8LSBmdW5jdGlvbih4KQ0Kew0KICBtZXRob2QgPC0gIkJhcnRsZXR0J3MgdGVzdCBvZiBzcGhlcmljaXR5Ig0KICBkYXRhLm5hbWUgPC0gZGVwYXJzZShzdWJzdGl0dXRlKHgpKQ0KICB4IDwtIHN1YnNldCh4LCBjb21wbGV0ZS5jYXNlcyh4KSkgIyBPbWl0IG1pc3NpbmcgdmFsdWVzDQogIG4gPC0gbnJvdyh4KQ0KICBwIDwtIG5jb2woeCkNCiAgY2hpc3EgPC0gKDEtbisoMipwKzUpLzYpKmxvZyhkZXQoY29yKHgpKSkNCiAgZGYgPC0gcCoocC0xKS8yDQogIHAudmFsdWUgPC0gcGNoaXNxKGNoaXNxLCBkZiwgbG93ZXIudGFpbD1GQUxTRSkNCiAgbmFtZXMoY2hpc3EpIDwtICJYLXNxdWFyZWQiDQogIG5hbWVzKGRmKSA8LSAiZGYiDQogIHJldHVybihzdHJ1Y3R1cmUobGlzdChzdGF0aXN0aWM9Y2hpc3EsIHBhcmFtZXRlcj1kZiwgcC52YWx1ZT1wLnZhbHVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPW1ldGhvZCwgZGF0YS5uYW1lPWRhdGEubmFtZSksIGNsYXNzPSJodGVzdCIpKQ0KfQ0KDQoNCkJhcnRsZXR0LnNwaGVyaWNpdHkudGVzdChkYWRvcykNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBLTU8gaW5kZXgNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmttbyA8LSBmdW5jdGlvbih4KQ0Kew0KICB4IDwtIHN1YnNldCh4LCBjb21wbGV0ZS5jYXNlcyh4KSkgIyBPbWl0IG1pc3NpbmcgdmFsdWVzDQogIHIgPC0gY29yKHgpICMgQ29ycmVsYXRpb24gbWF0cml4DQogIHIyIDwtIHJeMiAjIFNxdWFyZWQgY29ycmVsYXRpb24gY29lZmZpY2llbnRzDQogIGkgPC0gc29sdmUocikgIyBJbnZlcnNlIG1hdHJpeCBvZiBjb3JyZWxhdGlvbiBtYXRyaXgNCiAgZCA8LSBkaWFnKGkpICMgRGlhZ29uYWwgZWxlbWVudHMgb2YgaW52ZXJzZSBtYXRyaXgNCiAgcDIgPC0gKC1pL3NxcnQob3V0ZXIoZCwgZCkpKV4yICMgU3F1YXJlZCBwYXJ0aWFsIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cw0KICBkaWFnKHIyKSA8LSBkaWFnKHAyKSA8LSAwICMgRGVsZXRlIGRpYWdvbmFsIGVsZW1lbnRzDQogIEtNTyA8LSBzdW0ocjIpLyhzdW0ocjIpK3N1bShwMikpDQogIE1TQSA8LSBjb2xTdW1zKHIyKS8oY29sU3VtcyhyMikrY29sU3VtcyhwMikpDQogIHJldHVybihsaXN0KEtNTz1LTU8sIE1TQT1NU0EpKQ0KfQ0KDQoNCmttbyhkYWRvcykNCmBgYA0KDQojIyMgWDExIFgxNSBlIFgxNyBNU0EgPCAwLDUwDQojIyMgZXN0cmF0w6lnaWE6IG9taXRpciBYMTUgKG1lbm9yIE1TQSkNCg0KYGBge3J9DQpkYWRvcyA8LSBkYWRvc1ssLTEwXSAjcm9kYXIgYXBlbmFzIHVtYSB2ZXohDQpkYWRvcw0Ka21vKGRhZG9zKQ0KYGBgDQoNCiMjIyBlc3RyYXTDqWdpYTogb21pdGlyIFgxNyAobWVub3IgTVNBKQ0KDQpgYGB7cn0NCmRhZG9zIDwtIGRhZG9zWywtMTFdICNyb2RhciBhcGVuYXMgdW1hIHZleiENCmRhZG9zDQprbW8oZGFkb3MpDQpgYGANCmBgYHtyLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD04fQ0KbWF0X2FudGlfaW1hZ2VtIDwtIC1wYXJ0aWFsLmNvcihkYWRvcykNCmNvcnJwbG90KG1hdF9hbnRpX2ltYWdlbSwgbWV0aG9kPSJudW1iZXIiLHR5cGU9InVwcGVyIiwgdGwuc3J0ID0gNDUpDQpgYGANCg0KDQpgYGB7ciBBRn0NCm4uZGFkb3MgPC0gbGVuZ3RoKGRhZG9zKQ0KDQpmaXQgPC0gcHJpbmNpcGFsKGRhZG9zLCBuZmFjdG9ycz1uLmRhZG9zLCByb3RhdGU9Im5vbmUiKQ0KcHJpbnQoZml0LCBzb3J0PVQpDQoNCiNmaXQkdmFsdWVzDQojZml0JHNjb3Jlcw0KI2ZpdCR3ZWlnaHRzDQojZml0JGxvYWRpbmdzDQojZml0JGNvbW11bmFsaXR5DQoNCiMgRXNjb2xoYSBhIHF1YW50aWRhZGUgZGUgZmF0b3Jlcw0KZml0MSA8LSBwcmluY2lwYWwoZGFkb3MsIG5mYWN0b3JzPTQsIHJvdGF0ZT0ibm9uZSIpDQpwcmludChmaXQxLCBzb3J0PVQpDQoNCiNmaXQxJHZhbHVlcw0KI2ZpdDEkc2NvcmVzDQojZml0MSR3ZWlnaHRzDQojZml0MSRsb2FkaW5ncw0KI2ZpdDEkY29tbXVuYWxpdHkNCmBgYA0KDQoNCg0KYGBge3J9DQojIHZhcmltYXggcm90YXRpb24NCmZpdDIgPC0gcHJpbmNpcGFsKGRhZG9zLCBuZmFjdG9ycz00LCByb3RhdGU9InZhcmltYXgiKQ0KcHJpbnQoZml0Miwgc29ydD1UKQ0KDQoNCiNmaXQyJHZhbHVlcw0KI2ZpdDIkc2NvcmVzDQojZml0MiR3ZWlnaHRzDQojZml0MiRsb2FkaW5ncw0KI2ZpdDIkY29tbXVuYWxpdHkNCmBgYA0KDQojIyMgZWxpbWluYXIgWDExIHBvaXMgYWluZGEgaMOhIGNhcmdhIGNydXphZGENCmBgYHtyfQ0KDQpkYWRvcyA8LSBkYWRvc1ssLTZdDQojIHZhcmltYXggcm90YXRpb24NCmZpdDMgPC0gcHJpbmNpcGFsKGRhZG9zLCBuZmFjdG9ycz00LCByb3RhdGU9InZhcmltYXgiKQ0KcHJpbnQoZml0Mywgc29ydD1UKQ0KDQojZml0MiR2YWx1ZXMNCiNmaXQyJHNjb3Jlcw0KI2ZpdDIkd2VpZ2h0cw0KI2ZpdDIkbG9hZGluZ3MgIyBjYXJnYXMgZmF0b3JpYWlzDQojZml0MiRjb21tdW5hbGl0eQ0KYGBgDQoNCiMjIyBFc2NvcmVzIEZhdG9yaWFpcw0KYGBge3J9DQpmaXQyJHdlaWdodHMNCg0KIyAxMCBwcmltZWlyb3MgZXNjb3Jlcw0KZml0MiRzY29yZXNbMToxMCxdDQpgYGANCg0KDQoNCiMjIEFuw6FsaXNlIGRlIGZhdG9yZXMgY29tdW5zIA0KIyMjIGEgbWF0cml6IGRlIGNvcnJlbGHDp8OjbyDDqSByZWR1emlkYSBjb20gY29tdW5hbGlkYWRlcyBpbmljaWFpcyBlc3RpbWFkYXMgbmEgZGlhZ29uYWwgZW0gdmV6IGRlIHVuaWRhZGVzDQoNCmBgYHtyfQ0KcGEgPC0gZmEoZGFkb3MsIG5mYWN0b3JzPTQsIGZtPSJwYSIsIHJvdGF0ZT0idmFyaW1heCIpDQpwcmludChwYSwgc29ydD1UKQ0KYGBgDQoNCg==