require (ggplot2)
require (GGally)
require (CCA)

El articulo toma 1 paquetes de datos de datos psicometricos como (el autocontrol, el concepto, la motivacion) intervienen o influyen de alguna u otra forma en el resultado de un analisis academicos como (lectura, escritura, matematicas, ciencias y el finalmente el sexo)

mm <- read.csv("https://stats.idre.ucla.edu/stat/data/mmreg.csv")
colnames(mm) <- c("Control", "Concept", "Motivation", "Read", "Write", "Math", 
    "Science", "Sex")

#VARIABLES PSICOLOGICAS U1 = locus_of_control, self_concept y motivation #VARIABLES ACADEMICAS V1 = lectura ( read), escritura ( write), matemáticas ( math) y ciencias ( science)

Para el estudio existen 272 hombres y 327 mujeres

xtabs(~Sex, data = mm)
Sex
  0   1 
273 327 

Se utiliza la siguiente herramienta para visualizar las distribuciones de frecuencias de las variables psicologicas

entre este conjunto de datos las correlaciones no exceden el 0.3 inclusive entre ellas mismas

psych <- mm[, 1:3]
acad <- mm[, 4:8]

ggpairs(psych)

Seguido se visualiza las variables academicas

Se puede afirmar que las correlaciones aumentaron entre directas e indirectas

se resalta que el genero sexo y mas especificamente el genero femenino tiene un descenso importante como lo son en la lectura las matematicas y las ciencias

ggpairs(acad)

Se realiza la division con la siguiente herramiente para las variables psicologicas (psych) y academicas (acad)

primero se visualiza dentro del vectores mas especificamente del resultado de los graficos anteriores, esta funcion tambien permite ya visualizar los coeficientes de las correlaciones en conjunto es decir entre las variables XY , en este caso las variables psicologicas y academicas

las correlaciones psicologicas y academicas no son relativamente altas o con alto impacto, solo se evidencia que el conjunto de variable psicologica lectura le va mejor en escritura matematicas y ciencia

# correlations
matcor(psych, acad)
$Xcor
             Control   Concept Motivation
Control    1.0000000 0.1711878  0.2451323
Concept    0.1711878 1.0000000  0.2885707
Motivation 0.2451323 0.2885707  1.0000000

$Ycor
               Read     Write       Math    Science         Sex
Read     1.00000000 0.6285909  0.6792757  0.6906929 -0.04174278
Write    0.62859089 1.0000000  0.6326664  0.5691498  0.24433183
Math     0.67927568 0.6326664  1.0000000  0.6495261 -0.04821830
Science  0.69069291 0.5691498  0.6495261  1.0000000 -0.13818587
Sex     -0.04174278 0.2443318 -0.0482183 -0.1381859  1.00000000

$XYcor
             Control     Concept Motivation        Read      Write       Math     Science         Sex
Control    1.0000000  0.17118778 0.24513227  0.37356505 0.35887684  0.3372690  0.32462694  0.11341075
Concept    0.1711878  1.00000000 0.28857075  0.06065584 0.01944856  0.0535977  0.06982633 -0.12595132
Motivation 0.2451323  0.28857075 1.00000000  0.21060992 0.25424818  0.1950135  0.11566948  0.09810277
Read       0.3735650  0.06065584 0.21060992  1.00000000 0.62859089  0.6792757  0.69069291 -0.04174278
Write      0.3588768  0.01944856 0.25424818  0.62859089 1.00000000  0.6326664  0.56914983  0.24433183
Math       0.3372690  0.05359770 0.19501347  0.67927568 0.63266640  1.0000000  0.64952612 -0.04821830
Science    0.3246269  0.06982633 0.11566948  0.69069291 0.56914983  0.6495261  1.00000000 -0.13818587
Sex        0.1134108 -0.12595132 0.09810277 -0.04174278 0.24433183 -0.0482183 -0.13818587  1.00000000

Ya ingresando al tema e especifico se analizaron de primera mano los coeficiente de las correlaciones canonicas

u1 <- cc(psych, acad)
u1$cor
[1] 0.4640861 0.1675092 0.1039911
names(u1)
[1] "cor"    "names"  "xcoef"  "ycoef"  "scores"

El siguiente es el resultado para la primera dimension

se encontraron 3 dimensiones canonicas, asi

\(U1 = a11X1 + a12X2 + ⋯ + a1pXp\)

U1=-1.26control+0.35concepto+-1.26motivacion

es decir que si el control crece en 1 unidad el u1 decrece en -1.26, que se necesita para finalmente realizar el calculo

hasta ahora no describe en realidad mucho el resultado, solo se identifica la maxima variabilidad entre las variables, y con el coeficiente en y se describe el performance (desempeño) academico y se explica lo que no se puede observar puede y todas las variables construidas explican esa variables no observables

u1[3:4]
$xcoef
                 [,1]       [,2]       [,3]
Control    -1.2538339 -0.6214776 -0.6616896
Concept     0.3513499 -1.1876866  0.8267210
Motivation -1.2624204  2.0272641  2.0002283

$ycoef
                [,1]         [,2]         [,3]
Read    -0.044620600 -0.004910024  0.021380576
Write   -0.035877112  0.042071478  0.091307329
Math    -0.023417185  0.004229478  0.009398182
Science -0.005025152 -0.085162184 -0.109835014
Sex     -0.632119234  1.084642326 -1.794647036

Finalmente el resultado es el siguiente:

$corr.X.xscores:

la variable control se encuentra en -0.90 y representativamente la motivacion ubicandose en -0.56 las cuales serian dentro de esa dimension las que mas explican, quedando considerablemente resagada la variable concepto con -0.02

# compute canonical loadings
v1 <- comput(psych, acad, u1)

# display canonical loadings
v1[3:6]#VARIABLES ACADEMICAS   V1 = lectura ( read), escritura ( write), matemáticas ( math) y ciencias ( science)
$corr.X.xscores
                  [,1]       [,2]       [,3]
Control    -0.90404631 -0.3896883 -0.1756227
Concept    -0.02084327 -0.7087386  0.7051632
Motivation -0.56715106  0.3508882  0.7451289

$corr.Y.xscores
              [,1]        [,2]        [,3]
Read    -0.3900402 -0.06010654  0.01407661
Write   -0.4067914  0.01086075  0.02647207
Math    -0.3545378 -0.04990916  0.01536585
Science -0.3055607 -0.11336980 -0.02395489
Sex     -0.1689796  0.12645737 -0.05650916

$corr.X.yscores
                   [,1]        [,2]        [,3]
Control    -0.419555307 -0.06527635 -0.01826320
Concept    -0.009673069 -0.11872021  0.07333073
Motivation -0.263206910  0.05877699  0.07748681

$corr.Y.yscores
              [,1]        [,2]       [,3]
Read    -0.8404480 -0.35882541  0.1353635
Write   -0.8765429  0.06483674  0.2545608
Math    -0.7639483 -0.29794884  0.1477611
Science -0.6584139 -0.67679761 -0.2303551
Sex     -0.3641127  0.75492811 -0.5434036

Si tomamos la primer dimension para explicar la u1 tenemos un p-value de 0.00 y un tenemos un valor de f de 11.71 Si tomamos la segunda dimension para explicar la u1 tenemos un p-value de 0.002 y un tenemos un valor de f de 2.94 Si tomamos la tercera dimension para explicar la u1 tenemos un p-value de 0.09 y un tenemos un valor de f de 2.16

las dimensiones que explican en gran manera toda la variabilidad es la uno y la dos

# tests of canonical dimensions
rho <- u1$cor
## Define number of observations, number of variables in first set, and number of variables in the second set.
n <- dim(psych)[1]
p <- length(psych)
q <- length(acad)

## Calculate p-values using the F-approximations of different test statistics:
library(CCP)
p.asym(rho, n, p, q, tstat = "Wilks")
Wilks' Lambda, using F-approximation (Rao's F):
              stat    approx df1      df2     p.value
1 to 3:  0.7543611 11.715733  15 1634.653 0.000000000
2 to 3:  0.9614300  2.944459   8 1186.000 0.002905057
3 to 3:  0.9891858  2.164612   3  594.000 0.091092180

se realizara la estandarizacion

Se analiza la estandarizacion con el siguiente resultado

cuando x1 aumenta en una unidad la dimension decrece en -0.84 en terminos de desviacion standar es decir que el control es bastante significativa, lo mismo pasa en la dimension 2 que el concepto es bastante relevante, y el termino de la motivacion no impacta en gran manera, lo que en resumen es:

cuando una persona tiene autocontrol y entiende los conceptos puede que en terminos academicos los resultados sean favorables

variable x

# standardized psych canonical coefficients diagonal matrix of psych sd's
s1 <- diag(sqrt(diag(cov(psych))))
s1 %*% u1$xcoef
           [,1]       [,2]       [,3]
[1,] -0.8404196 -0.4165639 -0.4435172
[2,]  0.2478818 -0.8379278  0.5832620
[3,] -0.4326685  0.6948029  0.6855370

variable y

# standardized acad canonical coefficients diagonal matrix of acad sd's
s2 <- diag(sqrt(diag(cov(acad))))
s2 %*% u1$ycoef
            [,1]        [,2]        [,3]
[1,] -0.45080116 -0.04960589  0.21600760
[2,] -0.34895712  0.40920634  0.88809662
[3,] -0.22046662  0.03981942  0.08848141
[4,] -0.04877502 -0.82659938 -1.06607828
[5,] -0.31503962  0.54057096 -0.89442764
LS0tCnRpdGxlOiAiQU5BTElTSVMgREUgQ09SUkVMQUNJT05FUyBDQU5PTklDQVMgMiAvIEVKRU1QTE9TIERFIEFOw4FMSVNJUyBERSBEQVRPUyBSIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3J9CnJlcXVpcmUgKGdncGxvdDIpCnJlcXVpcmUgKEdHYWxseSkKcmVxdWlyZSAoQ0NBKQpgYGAKCgpFbCBhcnRpY3VsbyB0b21hIDEgcGFxdWV0ZXMgZGUgZGF0b3MgZGUgZGF0b3MgcHNpY29tZXRyaWNvcyBjb21vIChlbCBhdXRvY29udHJvbCwgIGVsIGNvbmNlcHRvLCBsYSBtb3RpdmFjaW9uKSBpbnRlcnZpZW5lbiBvIGluZmx1eWVuIGRlIGFsZ3VuYSB1IG90cmEgZm9ybWEgZW4gZWwgcmVzdWx0YWRvICBkZSB1biBhbmFsaXNpcyBhY2FkZW1pY29zIGNvbW8gKGxlY3R1cmEsIGVzY3JpdHVyYSwgbWF0ZW1hdGljYXMsIGNpZW5jaWFzIHkgZWwgZmluYWxtZW50ZSBlbCBzZXhvKQoKCgpgYGB7cn0KbW0gPC0gcmVhZC5jc3YoImh0dHBzOi8vc3RhdHMuaWRyZS51Y2xhLmVkdS9zdGF0L2RhdGEvbW1yZWcuY3N2IikKY29sbmFtZXMobW0pIDwtIGMoIkNvbnRyb2wiLCAiQ29uY2VwdCIsICJNb3RpdmF0aW9uIiwgIlJlYWQiLCAiV3JpdGUiLCAiTWF0aCIsIAogICAgIlNjaWVuY2UiLCAiU2V4IikKYGBgCgojVkFSSUFCTEVTIFBTSUNPTE9HSUNBUyBVMSA9IGxvY3VzX29mX2NvbnRyb2wsIHNlbGZfY29uY2VwdCB5IG1vdGl2YXRpb24KI1ZBUklBQkxFUyBBQ0FERU1JQ0FTICAgVjEgPSBsZWN0dXJhICggcmVhZCksIGVzY3JpdHVyYSAoIHdyaXRlKSwgbWF0ZW3DoXRpY2FzICggbWF0aCkgeSBjaWVuY2lhcyAoIHNjaWVuY2UpCgoKUGFyYSBlbCBlc3R1ZGlvIGV4aXN0ZW4gMjcyIGhvbWJyZXMgeSAzMjcgbXVqZXJlcwoKYGBge3J9Cnh0YWJzKH5TZXgsIGRhdGEgPSBtbSkKYGBgCgoKU2UgdXRpbGl6YSBsYSBzaWd1aWVudGUgaGVycmFtaWVudGEgcGFyYSB2aXN1YWxpemFyIGxhcyBkaXN0cmlidWNpb25lcyBkZSBmcmVjdWVuY2lhcyBkZSBsYXMgdmFyaWFibGVzIHBzaWNvbG9naWNhcwoKZW50cmUgZXN0ZSBjb25qdW50byBkZSBkYXRvcyBsYXMgY29ycmVsYWNpb25lcyBubyBleGNlZGVuIGVsIDAuMyBpbmNsdXNpdmUgZW50cmUgZWxsYXMgbWlzbWFzCmBgYHtyfQpwc3ljaCA8LSBtbVssIDE6M10KYWNhZCA8LSBtbVssIDQ6OF0KCmdncGFpcnMocHN5Y2gpCmBgYAoKU2VndWlkbyBzZSB2aXN1YWxpemEgbGFzIHZhcmlhYmxlcyBhY2FkZW1pY2FzCgpTZSBwdWVkZSBhZmlybWFyIHF1ZSBsYXMgY29ycmVsYWNpb25lcyBhdW1lbnRhcm9uIGVudHJlIGRpcmVjdGFzIGUgaW5kaXJlY3RhcwoKc2UgcmVzYWx0YSBxdWUgZWwgZ2VuZXJvIHNleG8geSBtYXMgZXNwZWNpZmljYW1lbnRlIGVsIGdlbmVybyBmZW1lbmlubyB0aWVuZSB1biBkZXNjZW5zbyBpbXBvcnRhbnRlIGNvbW8gbG8gc29uIGVuIGxhIGxlY3R1cmEgbGFzIG1hdGVtYXRpY2FzIHkgbGFzIGNpZW5jaWFzCmBgYHtyfQpnZ3BhaXJzKGFjYWQpCmBgYAoKClNlIHJlYWxpemEgbGEgZGl2aXNpb24gY29uIGxhIHNpZ3VpZW50ZSBoZXJyYW1pZW50ZSBwYXJhIGxhcyB2YXJpYWJsZXMgcHNpY29sb2dpY2FzIChwc3ljaCkgeSBhY2FkZW1pY2FzIChhY2FkKQoKcHJpbWVybyBzZSB2aXN1YWxpemEgZGVudHJvIGRlbCB2ZWN0b3JlcyBtYXMgZXNwZWNpZmljYW1lbnRlIGRlbCByZXN1bHRhZG8gZGUgbG9zIGdyYWZpY29zIGFudGVyaW9yZXMsIGVzdGEgZnVuY2lvbiB0YW1iaWVuIHBlcm1pdGUgeWEgdmlzdWFsaXphciBsb3MgY29lZmljaWVudGVzIGRlIGxhcyBjb3JyZWxhY2lvbmVzIGVuIGNvbmp1bnRvIGVzIGRlY2lyIGVudHJlIGxhcyB2YXJpYWJsZXMgIFhZICwgZW4gZXN0ZSBjYXNvIGxhcyB2YXJpYWJsZXMgcHNpY29sb2dpY2FzIHkgYWNhZGVtaWNhcwoKbGFzIGNvcnJlbGFjaW9uZXMgcHNpY29sb2dpY2FzIHkgYWNhZGVtaWNhcyBubyBzb24gcmVsYXRpdmFtZW50ZSBhbHRhcyBvIGNvbiBhbHRvIGltcGFjdG8sIHNvbG8gc2UgZXZpZGVuY2lhIHF1ZSBlbCBjb25qdW50byBkZSB2YXJpYWJsZSBwc2ljb2xvZ2ljYSBsZWN0dXJhIGxlIHZhIG1lam9yIGVuIGVzY3JpdHVyYSBtYXRlbWF0aWNhcyB5IGNpZW5jaWEKCgpgYGB7cn0KIyBjb3JyZWxhdGlvbnMKbWF0Y29yKHBzeWNoLCBhY2FkKQpgYGAKCgpZYSBpbmdyZXNhbmRvIGFsIHRlbWEgZSBlc3BlY2lmaWNvIHNlIGFuYWxpemFyb24gZGUgcHJpbWVyYSBtYW5vIGxvcyBjb2VmaWNpZW50ZSBkZSBsYXMgY29ycmVsYWNpb25lcyBjYW5vbmljYXMKCmBgYHtyfQp1MSA8LSBjYyhwc3ljaCwgYWNhZCkKdTEkY29yCm5hbWVzKHUxKQoKYGBgCgpFbCBzaWd1aWVudGUgZXMgZWwgcmVzdWx0YWRvIHBhcmEgbGEgcHJpbWVyYSBkaW1lbnNpb24KCnNlIGVuY29udHJhcm9uIDMgZGltZW5zaW9uZXMgY2Fub25pY2FzLCBhc2kKCiRVMSA9IGExMVgxICsgYTEyWDIgKyDii68gKyBhMXBYcCQKClUxPS0xLjI2Y29udHJvbCswLjM1Y29uY2VwdG8rLTEuMjZtb3RpdmFjaW9uCgplcyBkZWNpciBxdWUgc2kgZWwgY29udHJvbCBjcmVjZSBlbiAxIHVuaWRhZCBlbCB1MSBkZWNyZWNlIGVuIC0xLjI2LCBxdWUgc2UgbmVjZXNpdGEgcGFyYSBmaW5hbG1lbnRlIHJlYWxpemFyIGVsIGNhbGN1bG8KCmhhc3RhIGFob3JhIG5vIGRlc2NyaWJlIGVuIHJlYWxpZGFkIG11Y2hvIGVsIHJlc3VsdGFkbywgc29sbyBzZSBpZGVudGlmaWNhIGxhIG1heGltYSB2YXJpYWJpbGlkYWQgZW50cmUgbGFzIHZhcmlhYmxlcywgeSBjb24gZWwgY29lZmljaWVudGUgZW4geSBzZSBkZXNjcmliZSBlbCBwZXJmb3JtYW5jZSAoZGVzZW1wZcOxbykgYWNhZGVtaWNvIHkgc2UgZXhwbGljYSBsbyBxdWUgbm8gc2UgcHVlZGUgb2JzZXJ2YXIgcHVlZGUgeSB0b2RhcyBsYXMgdmFyaWFibGVzIGNvbnN0cnVpZGFzIGV4cGxpY2FuIGVzYSB2YXJpYWJsZXMgbm8gb2JzZXJ2YWJsZXMKCmBgYHtyfQp1MVszOjRdICNWQVJJQUJMRVMgUFNJQ09MT0dJQ0FTIFUxID0gbG9jdXNfb2ZfY29udHJvbCwgc2VsZl9jb25jZXB0IHkgbW90aXZhdGlvbgpgYGAKCgpGaW5hbG1lbnRlIGVsIHJlc3VsdGFkbyBlcyBlbCBzaWd1aWVudGU6CgokY29yci5YLnhzY29yZXM6CgpsYSB2YXJpYWJsZSBjb250cm9sIHNlIGVuY3VlbnRyYSBlbiAtMC45MCB5IHJlcHJlc2VudGF0aXZhbWVudGUgbGEgbW90aXZhY2lvbiB1YmljYW5kb3NlIGVuIC0wLjU2IGxhcyBjdWFsZXMgc2VyaWFuIGRlbnRybyBkZSBlc2EgZGltZW5zaW9uIGxhcyBxdWUgbWFzIGV4cGxpY2FuLCBxdWVkYW5kbyBjb25zaWRlcmFibGVtZW50ZSByZXNhZ2FkYSBsYSB2YXJpYWJsZSBjb25jZXB0byBjb24gLTAuMDIKCgpgYGB7cn0KIyBjb21wdXRlIGNhbm9uaWNhbCBsb2FkaW5ncwp2MSA8LSBjb21wdXQocHN5Y2gsIGFjYWQsIHUxKQoKIyBkaXNwbGF5IGNhbm9uaWNhbCBsb2FkaW5ncwp2MVszOjZdI1ZBUklBQkxFUyBBQ0FERU1JQ0FTICAgVjEgPSBsZWN0dXJhICggcmVhZCksIGVzY3JpdHVyYSAoIHdyaXRlKSwgbWF0ZW3DoXRpY2FzICggbWF0aCkgeSBjaWVuY2lhcyAoIHNjaWVuY2UpCmBgYAoKU2kgdG9tYW1vcyBsYSBwcmltZXIgZGltZW5zaW9uIHBhcmEgZXhwbGljYXIgbGEgdTEgdGVuZW1vcyB1biBwLXZhbHVlIGRlIDAuMDAgeSB1biB0ZW5lbW9zIHVuIHZhbG9yIGRlIGYgZGUgMTEuNzEKU2kgdG9tYW1vcyBsYSBzZWd1bmRhIGRpbWVuc2lvbiBwYXJhIGV4cGxpY2FyIGxhIHUxIHRlbmVtb3MgdW4gcC12YWx1ZSBkZSAwLjAwMiB5IHVuIHRlbmVtb3MgdW4gdmFsb3IgZGUgZiBkZSAyLjk0ClNpIHRvbWFtb3MgbGEgdGVyY2VyYSBkaW1lbnNpb24gcGFyYSBleHBsaWNhciBsYSB1MSB0ZW5lbW9zIHVuIHAtdmFsdWUgZGUgMC4wOSB5IHVuIHRlbmVtb3MgdW4gdmFsb3IgZGUgZiBkZSAyLjE2CgpsYXMgZGltZW5zaW9uZXMgcXVlIGV4cGxpY2FuIGVuIGdyYW4gbWFuZXJhIHRvZGEgbGEgdmFyaWFiaWxpZGFkIGVzIGxhIHVubyB5IGxhIGRvcwoKCmBgYHtyfQojIHRlc3RzIG9mIGNhbm9uaWNhbCBkaW1lbnNpb25zCnJobyA8LSB1MSRjb3IKIyMgRGVmaW5lIG51bWJlciBvZiBvYnNlcnZhdGlvbnMsIG51bWJlciBvZiB2YXJpYWJsZXMgaW4gZmlyc3Qgc2V0LCBhbmQgbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgc2Vjb25kIHNldC4KbiA8LSBkaW0ocHN5Y2gpWzFdCnAgPC0gbGVuZ3RoKHBzeWNoKQpxIDwtIGxlbmd0aChhY2FkKQoKIyMgQ2FsY3VsYXRlIHAtdmFsdWVzIHVzaW5nIHRoZSBGLWFwcHJveGltYXRpb25zIG9mIGRpZmZlcmVudCB0ZXN0IHN0YXRpc3RpY3M6CmxpYnJhcnkoQ0NQKQpwLmFzeW0ocmhvLCBuLCBwLCBxLCB0c3RhdCA9ICJXaWxrcyIpCmBgYAoKCgpzZSByZWFsaXphcmEgbGEgZXN0YW5kYXJpemFjaW9uCgpTZSBhbmFsaXphIGxhIGVzdGFuZGFyaXphY2lvbiBjb24gZWwgc2lndWllbnRlIHJlc3VsdGFkbwoKY3VhbmRvIHgxIGF1bWVudGEgZW4gdW5hIHVuaWRhZCBsYSBkaW1lbnNpb24gZGVjcmVjZSBlbiAtMC44NCBlbiB0ZXJtaW5vcyBkZSBkZXN2aWFjaW9uIHN0YW5kYXIKZXMgZGVjaXIgcXVlIGVsIGNvbnRyb2wgZXMgYmFzdGFudGUgc2lnbmlmaWNhdGl2YSwgCmxvIG1pc21vIHBhc2EgZW4gbGEgZGltZW5zaW9uIDIgcXVlIGVsIGNvbmNlcHRvIGVzIGJhc3RhbnRlIHJlbGV2YW50ZSwgeSBlbCB0ZXJtaW5vIGRlIGxhIG1vdGl2YWNpb24gbm8gaW1wYWN0YSBlbiBncmFuIG1hbmVyYSwgbG8gcXVlIGVuIHJlc3VtZW4gZXM6CgpjdWFuZG8gdW5hIHBlcnNvbmEgdGllbmUgYXV0b2NvbnRyb2wgeSBlbnRpZW5kZSBsb3MgY29uY2VwdG9zIHB1ZWRlIHF1ZSBlbiB0ZXJtaW5vcyBhY2FkZW1pY29zIGxvcyByZXN1bHRhZG9zIHNlYW4gZmF2b3JhYmxlcwoKdmFyaWFibGUgeApgYGB7cn0KIyBzdGFuZGFyZGl6ZWQgcHN5Y2ggY2Fub25pY2FsIGNvZWZmaWNpZW50cyBkaWFnb25hbCBtYXRyaXggb2YgcHN5Y2ggc2QncwpzMSA8LSBkaWFnKHNxcnQoZGlhZyhjb3YocHN5Y2gpKSkpCnMxICUqJSB1MSR4Y29lZgpgYGAKCnZhcmlhYmxlIHkKYGBge3J9CiMgc3RhbmRhcmRpemVkIGFjYWQgY2Fub25pY2FsIGNvZWZmaWNpZW50cyBkaWFnb25hbCBtYXRyaXggb2YgYWNhZCBzZCdzCnMyIDwtIGRpYWcoc3FydChkaWFnKGNvdihhY2FkKSkpKQpzMiAlKiUgdTEkeWNvZWYKYGBgCgoKCg==