This notebook presents summaries of trait distributions across 5 regions, Grampians Vic, South and east of the Hume Highway, the Victorian Mallee and Stirling Range, WA.

knitr::opts_chunk$set(cache = TRUE, dev = c("png", "pdf"))
library(eucs)
library(tidyverse)

Compare traits from the 4 regions.

First we need to summarise by taxon and create new data frames.

gt <- medians_grampians
gt$taxon <- as.factor(gt$taxon)
se_t <- medians_southeast
se_t$taxon <- as.factor(se_t$taxon)
wt <- summarise_traits_by(traits_stirling, c(tree, taxon))
wt$taxon <- as.factor(wt$taxon)
mt <- summarise_traits_by(traits_mallee, c(tree, taxon))
mt$taxon <- as.factor(mt$taxon)
hist_data <- do.call(
  rbind,
  list(
    with(
      mt,
      data.frame(
        Region = "Mallee",
        sla = sla_mm2_per_mg,
        sm = seed_mass_mg
      )
    ),
    with(
      gt,
      data.frame(
        Region = "Grampians",
        sla = sla_mm2_per_mg,
        sm = seed_mass_mg
      )
    ),
    with(
      wt,
      data.frame(
        Region = "Stirlings",
        sla = sla_mm2_per_mg,
        sm = seed_mass_mg
      )
    ),
    with(
      se_t,
      data.frame(
        Region = "South-east Australia",
        sla = sla_mm2_per_mg,
        sm = seed_mass_mg
      )
    )
  )
)
hist_data <- gather(hist_data, type, value, -Region)
hist_data$type <- factor(hist_data$type, rev(levels(factor(hist_data$type))))
hist_data$Region <- factor(hist_data$Region, rev(levels(hist_data$Region)))

ggplot(na.omit(hist_data)) +
aes(value, fill = Region) +
geom_histogram(bins = 11) +
scale_fill_grey() +
scale_x_sqrt(breaks = c(.2, 1, 2, 4, 6, 8, 10)) +
facet_grid(
  ~type,
  labeller = as_labeller(
    c(
      sla = "Specific leaf area (mm\u00b2 mg\u207b\u00b9)",
      sm = "Seed mass (mg)"
    )
  ),
  scales = "free_x"
) +
xlab("") +
ylab("Species") +
theme_bw(base_size = 14) +
theme(
  legend.position = c(.55, .95),
  legend.justification = c("left", "top"),
  legend.title = element_blank()
)
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
conversion failure on 'Specific leaf area (mm² mg⁻¹)' in 'mbcsToSbcs': dot
substituted for <e2>
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
conversion failure on 'Specific leaf area (mm² mg⁻¹)' in 'mbcsToSbcs': dot
substituted for <81>
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
conversion failure on 'Specific leaf area (mm² mg⁻¹)' in 'mbcsToSbcs': dot
substituted for <bb>
Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
conversion failure on 'Specific leaf area (mm² mg⁻¹)' in 'mbcsToSbcs': dot
substituted for <e2>
Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
conversion failure on 'Specific leaf area (mm² mg⁻¹)' in 'mbcsToSbcs': dot
substituted for <81>
Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
conversion failure on 'Specific leaf area (mm² mg⁻¹)' in 'mbcsToSbcs': dot
substituted for <bb>

Sqrt scale works well for SLA, but not so well for Seed mass, still long right tail.

se_H <- traits_euclid[
  na.omit(match(
    names(occupancy_southeast$occupancy[[1]]),
    traits_euclid$taxon
  )),
]

w_H <- traits_euclid[
  na.omit(match(
    wt$taxon,
    traits_euclid$taxon
  )),
]

m_H <- traits_euclid[
  na.omit(match(
    mt$taxon,
    traits_euclid$taxon
  )),
]

g_H <- traits_euclid[
  na.omit(match(
    gt$taxon,
    traits_euclid$taxon
  )),
]

hist_data <- do.call(
  rbind,
  list(
    with(
      m_H,
      data.frame(
        Region = "Mallee",
        H = max_height_m
      )
    ),
    with(
      g_H,
      data.frame(
        Region = "Grampians",
        H = max_height_m
      )
    ),
    with(
      w_H,
      data.frame(
        Region = "Stirlings",
        H = max_height_m
      )
    ),
    with(
      se_H,
      data.frame(
        Region = "South-east Australia",
        H = max_height_m
      )
    )
  )
)

hist_data <- gather(hist_data, type, value, -Region)
hist_data$type <- factor(hist_data$type, rev(levels(factor(hist_data$type))))
hist_data$Region <- factor(hist_data$Region, rev(levels(hist_data$Region)))

ggplot(na.omit(hist_data)) +
aes(value, fill = Region) +
geom_histogram(bins = 11) +
scale_fill_grey() +
scale_x_sqrt(breaks = c(5, 10, 20, 30, 50, 75, 100)) +
facet_grid(
  ~type,
  labeller = as_labeller(
    c(sla = "Specific Leaf Area (mm2mg-1)", H = "Maximum Height (m)")
  ),
  scales = "free_x"
) +
xlab("") +
ylab("Species") +
theme_bw(base_size = 14) +
theme(
  legend.position = c(.65, .95), legend.justification = c("left", "top"),
  legend.title = element_blank()
)

Other traits

hist_data <- do.call(
  rbind,
  list(
    with(
      mt,
      data.frame(
        Region = "Mallee",
        la = leaf_area_cm2,
        fm = fruit_mass_mg #,
      )
    ),
    with(
      gt,
      data.frame(
        Region = "Grampians",
        la = leaf_area_cm2,
        fm = fruit_mass_mg #,
      )
    ),
    with(
      wt,
      data.frame(
        Region = "Stirlings",
        la = leaf_area_cm2,
        fm = fruit_mass_mg #,
      )
    ),
    with(
      se_t,
      data.frame(
        Region = "South-east Australia",
        la = leaf_area_cm2,
        fm = fruit_mass_mg
      )
    )
  )
)

hist_data <- gather(hist_data, type, value, -Region)
hist_data$type <- factor(hist_data$type, rev(levels(factor(hist_data$type))))
hist_data$Region <- factor(hist_data$Region, rev(levels(hist_data$Region)))

ggplot(na.omit(hist_data)) +
aes(value, fill = Region) +
geom_histogram(bins = 11) +
scale_fill_grey() +
scale_x_log10() +
facet_grid(
  ~type,
  labeller = as_labeller(c(la = "Leaf area cm\u00b2)", fm = "Fruit mass (mg)")),
  scales = "free_x"
) +
xlab("") +
ylab("Species") +
theme_bw(base_size = 14) +
theme(
  legend.position = c(.05, .95), legend.justification = c("left", "top"),
  legend.title = element_blank()
)

Stem Density

hist_data <- do.call(
  rbind,
  list(
    with(
      gt,
      data.frame(
        Region = "Grampians",
        sd = stem_density_g_per_ml
      )
    ),
    with(
      wt,
      data.frame(
        Region = "Stirlings",
        sd = stem_density_g_per_ml
      )
    ),
    with(
      se_t,
      data.frame(
        Region = "South-east Australia",
        sd = stem_density_g_per_ml
      )
    )
  )
)

hist_data <- gather(hist_data, type, value, -Region)
hist_data$type <- factor(hist_data$type, rev(levels(factor(hist_data$type))))
hist_data$Region <- factor(hist_data$Region, rev(levels(hist_data$Region)))

ggplot(na.omit(hist_data)) +
aes(value, fill = Region) +
geom_histogram(bins = 11) +
scale_fill_grey() +
scale_x_sqrt() +
facet_grid(
  ~type,
  labeller = as_labeller(c(sd = "Stem specific density (g.ml-1)")),
  scales = "free_x"
) +
xlab("") +
ylab("Species") +
theme_bw(base_size = 14) +
theme(
  legend.position = c(.65, .95), legend.justification = c("left", "top"),
  legend.title = element_blank()
)

Next, need to work on the allometries of height and bark thickness on girth. See separate notebook. Suffice to say, use HT/Girth and BT/Girth.

se_rH <- pi * traits_southeast$height_m / traits_southeast$girth_cm
w_rH <- pi * traits_stirling$height_m / traits_stirling$girth_cm

se_rbt<- pi * traits_southeast$bark_thickness_mm / traits_southeast$girth_cm
w_rbt <- pi * traits_stirling$bark_thickness_mm / traits_stirling$girth_cm

stt <- cbind(traits_southeast, se_rH, se_rbt)
st <- summarise_traits_by(stt, c(tree, taxon))

wtt <- cbind(traits_stirling,w_rH,w_rbt)
wt <- summarise_traits_by(wtt, c(tree, taxon))

hist_data <- do.call(
  rbind,
  list(
    with(
      wt,
      data.frame(
        Region = "Stirlings",
        rbt = w_rbt,
        rH = w_rH
      )
    ),
    with(
      st,
      data.frame(
        Region = "South-east Australia",
        rbt = se_rbt,
        rH = se_rH
      )
    )
  )
)

hist_data <- gather(hist_data, type, value, -Region)
hist_data$type <- factor(hist_data$type, rev(levels(factor(hist_data$type))))
hist_data$Region <- factor(hist_data$Region, rev(levels(hist_data$Region)))

ggplot(na.omit(hist_data)) +
aes(value, fill = Region) +
geom_histogram(bins = 11) +
scale_fill_grey() +
facet_grid(
  ~type,
  labeller = as_labeller(
    c(rbt = "Relative Bark Thickness (mm.cm-1)", rH = "Height:Girth (m.cm-1)")
  ),
 scales = "free_x"
) +
xlab("") +
ylab("Species") +
theme_bw(base_size = 14) +
theme(
  legend.position = c(.65, .95), legend.justification = c("left", "top"),
  legend.title = element_blank()
)

ggplot(data = hist_data, aes(x = Region, y = value)) +
geom_boxplot() +
facet_wrap(~type) +
coord_flip()
Warning: Removed 648 rows containing non-finite values (stat_boxplot).

Overall though we have varible trait coverage. We have:

Trait SLA LA SM maxH SSD RBT RH FM
SE 1 1 1 1 1 1 1 1
WA 1 1 1 1 1 1 1 1
Gramps 1 1 1 1 0.5 0 0 1
Mallee 1 1 1 1 0 0 0 1

PCA

pairs

pairs(st[, 2:10])

Let’s use prcomp, and get a summary of how much variance is explained.

M <- st[, c(4:5, 7, 8, 10, 2:3)]
pca1 = prcomp(na.omit(M), scale. = TRUE)
summary(pca1)
Importance of components:
                          PC1    PC2    PC3    PC4     PC5     PC6     PC7
Standard deviation     1.3343 1.2146 1.1104 0.9535 0.82564 0.76630 0.57752
Proportion of Variance 0.2543 0.2107 0.1761 0.1299 0.09738 0.08389 0.04765
Cumulative Proportion  0.2543 0.4651 0.6412 0.7711 0.86847 0.95235 1.00000

So the first 2 PCs explain nearly half the variance. Four expalin 75%. Need to transform some variables. transform

colnames(M) <- c('SLA', 'LA', "SD", "FM", "SM", "rH", "RBT")
M$SLA = (M$SLA)^0.25
M$LA = (M$LA)^0.5
M$SD = (M$SD)^0.5
M$FM = log10(M$FM)
M$SM = log10(M$SM)

Rerun:

pca1 = prcomp(na.omit(M), scale. = TRUE)
summary(pca1)
Importance of components:
                          PC1    PC2    PC3    PC4     PC5     PC6     PC7
Standard deviation     1.4335 1.1886 1.1258 0.9496 0.83571 0.68342 0.44448
Proportion of Variance 0.2935 0.2018 0.1811 0.1288 0.09977 0.06672 0.02822
Cumulative Proportion  0.2935 0.4954 0.6764 0.8053 0.90505 0.97178 1.00000

We can also extract factor loadings and scores

(pca1$rotation)
            PC1         PC2          PC3          PC4         PC5          PC6
SLA -0.34782083  0.56997025 -0.137748448  0.069693056 -0.38218379 -0.565129338
LA   0.34875040  0.11237975  0.191831872  0.804007055 -0.35758997  0.097063280
SD  -0.08143739 -0.73308715  0.006099917  0.177915564 -0.05832862 -0.647485805
FM   0.64944407 -0.01542211 -0.099727141 -0.005192618  0.09153597 -0.120727312
SM   0.53824414  0.22586712 -0.325799368 -0.264644493  0.07320817 -0.369498581
rH  -0.01437387 -0.25949555 -0.696330478 -0.078989009 -0.58238119  0.317525654
RBT -0.19766340  0.08059900 -0.585851367  0.490671633  0.60807616  0.006546563
            PC7
SLA  0.25472968
LA  -0.21266234
SD  -0.04024839
FM   0.73828055
SM  -0.58412903
rH   0.03673765
RBT  0.02555455
(pca1$x)
            PC1          PC2         PC3         PC4          PC5          PC6
1    2.66427587  2.457002555 -1.66319341 -1.60113818 -0.214324036 -1.186227565
2    0.21428643  3.197239366 -1.61403458 -0.76875746 -0.034814550 -0.892653407
3    2.97210800  1.704990406 -1.02019453 -0.92747560  0.889073316 -1.385389419
4    2.94540130  1.713302306 -0.97275134 -0.77393524 -1.203913783 -1.072094415
5   -0.49880095 -0.988309947 -1.11100331  0.24972778  0.864105771  0.038999600
6    0.79621979 -1.228011744  1.17545113  0.04626052  0.541198320 -0.002642452
7   -1.97259013 -0.303322014  1.05726377  0.11136466 -0.032307167 -0.200877196
8   -0.59162151  2.012380888  0.33032003  0.47736002 -1.261056122  0.792026836
9   -0.82561183  0.184542457 -0.94137391  1.45385238  0.156288857  0.702240371
10   2.30980693  0.364103093 -0.04683795  0.69126334  2.106104675  0.317672232
11  -0.12177117  0.191066314  0.71613458 -1.05891324  1.587718389 -0.073014970
13  -2.34675876  0.588917079  0.72096017  0.44679256 -1.152922855 -0.676091447
14  -2.24533169  0.280323009  1.17718987  1.07304434 -0.671180432 -1.024773498
15   1.67940488 -0.845373080 -0.87032629  0.31196977  0.044098529  0.073877754
16  -1.87708035 -4.064464673  0.07389921  0.15808312 -1.129915975 -0.521796344
17  -2.69795863 -1.363924232 -3.04327597  2.66087605  1.349903155  0.335916862
18  -1.53122636 -1.423734430  1.72979998  0.20396988  0.012444475  0.018868303
19  -1.29477028 -1.126346547  0.37682791  0.11717468  0.637796919 -0.267924255
20   0.23052687  2.025952261  0.27102802  1.31000322 -0.222515590  0.743366407
21  -0.24261082 -0.599761163  0.88179734  0.30315970  0.537392916 -0.026814519
22  -1.05528910 -0.770703114  0.23819721  0.32264047 -1.582982424 -0.405337369
23  -1.19569018  1.012095512  2.10831884 -1.45854930  0.772943983  1.005315700
24  -0.88253196  0.888875577  0.73455501  0.83696294 -0.200068893  0.966532920
25   1.04080149 -1.613608898 -1.18197639  0.87192286  1.989265490 -0.288113891
26   1.08338440  0.501241755  0.88989210  1.40563433  0.824974503  0.194467412
27  -0.23954372  1.232109905 -0.07607049  1.19784832  1.474309982  0.009976541
28   1.49508809  0.651976825  0.92686819  1.40460855 -1.309483402 -0.339689433
29  -2.40470049  2.351914374 -0.64398778  0.19711651  1.147515284 -0.828866389
30  -2.49310137  0.839264275 -0.84729349 -0.40018979  0.535818021  0.413150115
31   0.22453224 -0.267152749 -0.77280766  0.70366544 -0.011179275  0.613796251
32  -0.72881699  1.277884795 -1.14110799  1.59052633  0.946843571  1.484902691
33  -2.27332666  1.597207095 -1.37941451  0.51633555 -1.613492693 -1.051298476
34   1.30487622 -0.372147195  0.83343309  1.16125115 -1.210003983  0.219411774
35   0.21807319  0.802756986  1.18865955  0.64168943 -0.406369648  0.211776557
36   1.46342312  0.426520380  0.36231313 -0.31361837 -0.715380348  0.247144334
37  -1.03966489 -0.081856601 -1.41597874  0.39021824  0.186156962  0.143025653
38  -2.03334533  0.826090293 -1.52918416 -0.73953925 -1.640460440 -0.698702853
39   0.12148005 -0.255188035 -0.68626179 -0.54980959 -0.342792975  0.570542131
40  -0.11811461  1.139061812  0.29077060 -0.74754638 -0.599069812  0.427070330
41   0.25774730 -1.404293482 -1.76819879  1.19837425 -0.600207376  0.392767177
42   0.70384340  1.049284827 -0.04616496 -0.95383270  0.529072928  0.528193352
43  -0.97309834  1.439130667  0.18020750  0.64482163  1.085701855 -0.262992489
44   2.15527832  0.407607955 -0.58196415 -0.63903733 -1.425862745  0.468779324
45  -0.33842905 -0.172322205 -0.16546924 -0.70903371  0.207412503  0.368798645
46   4.40655390  0.243986396  1.97735110  2.94766501 -0.994625985  0.087016820
47   3.23434784 -2.209761663  0.64911988  0.27813073 -0.256512818 -1.410230180
48   1.90593827 -0.294813935  0.31963429  0.14278332  0.338316142  0.379243427
49   2.37794637 -1.233608551  0.90812939  0.51074184 -0.063330641 -0.440023701
50   0.82809605  0.392425596  0.65970714  0.21791276  0.833645791  0.536565408
51  -1.82928309  0.592943227 -0.77909641  0.67399245  0.534838387 -0.632915844
52  -0.34730975 -1.170456987 -2.12157182  0.67868670  0.788695116  0.118340295
53  -0.13165610 -2.326498228  0.02136870  1.16789949 -0.134897790 -0.052959914
54   0.03056444 -2.115956132 -3.62201281 -2.44559907 -2.345587505  2.406801966
56  -0.29854016 -1.312446281 -0.13404178 -0.68111574 -0.007109422 -0.188195520
57   0.10590385 -1.413635969  0.55760288 -0.69076231  0.958876143 -0.286304169
58   1.30753943  0.396686813 -0.73152326  1.40728056 -0.858924125  0.607792720
59   0.86805631  0.024012458 -0.28304228  0.01341885  0.154580376  0.265050186
60   1.31271801 -0.626783034 -0.76761715 -0.54327539  0.720857044 -0.918683430
61  -1.29412326 -0.260346055 -1.20115924  0.18273989 -0.015812369  0.542547442
62  -1.76988058 -0.802240565  0.23864854 -0.05078272 -0.488251961 -0.328028727
63  -1.37862300 -2.489855223  0.84530558 -0.03501479 -0.331453492 -0.472384063
64   1.77199286 -0.321586885 -0.45141930 -0.36005793 -0.170198656 -0.164525782
65  -0.24925202 -0.862692783  0.58899283 -1.46323079 -0.006111797  0.688632002
66   2.02647284  0.027362621  0.89762747  1.77015653 -0.615649120  0.322335897
67   0.12946882  0.474936615 -0.28467990  0.95279652 -1.041429624  0.063216226
68  -0.47682614  0.316328779  0.82028651  0.99974781 -0.713808905 -0.180130392
69  -0.59076178 -1.506988055 -0.45649930  0.17125572  0.152451284 -1.551424358
71   0.63722095 -0.432773802  1.75851284 -1.22432244  0.500133052  0.729270645
72   1.70456400  0.637274661  0.34845651 -0.08459504 -0.076213022 -0.004870400
73   2.38905885 -0.610300497  1.35083592 -1.38355479  0.205621471  0.563998966
74   1.03921483  0.530527461  1.13193179 -1.72978382  0.207545469  0.213995977
75   0.87543382 -0.645531221 -0.42049652  0.32834032  1.357276151 -0.470040659
76  -0.45921882 -0.027679473 -0.75380780 -0.16815458 -1.119264332  0.302186280
77   1.17097052  0.387578177 -2.63374973 -0.38710548 -0.241672375  0.083377846
78  -0.24967567  1.476723437  0.80774444 -0.61336868  0.120322582  0.362677232
79  -1.77165544 -1.297723844  0.85586470  0.68252823 -0.578663628 -0.445619153
80   0.14952429 -0.540570161  0.51867060  0.25493790  0.102230125 -0.352240053
81  -0.40188482  0.002113276  1.27692217 -0.40846592  0.364033936  1.336505389
82  -1.66763922  1.195141320  0.27909941 -0.97825464 -0.702736634 -0.684161863
83  -1.27894527  0.887263881 -0.04660879 -0.74743189 -0.328958864 -0.766565584
84  -0.36667574 -0.768331551  0.48352537 -0.79933490 -1.345502068 -0.532367418
85  -0.59796356 -1.105463934  0.99748945 -1.17204287  0.340436591 -0.214996294
86  -0.50126695  1.353764630  0.81248416  0.49136478  0.019117150  0.808692964
87   0.05625454  1.795737304  0.79943916  0.61994062 -0.199135933  0.795395107
88   1.14712125  0.362982449 -1.77808913  1.48317921  0.158998967  0.486147318
89  -0.51424886 -0.813165742  1.51424136 -0.58010863  0.644888623 -0.987841289
90   0.81678755 -0.745223786 -0.60525471 -0.10480165 -0.601378776 -0.460304067
91  -1.24419859  0.483153520 -0.96299681 -0.70618704  0.199322944 -0.369986150
92  -1.85478527  0.040866824  1.70485902 -1.06013860  0.356629219  0.258569002
93   1.05728206 -0.129006563 -1.35062460 -0.14984845 -0.337574417 -1.000816626
94   0.81949406 -1.972642614 -1.90222049 -1.93992860  0.125129343  0.971526632
95  -0.75226424  0.995575642  2.21863526 -0.57219142 -0.865355996  0.443988380
96   0.33095926 -0.492291079 -0.42475638 -0.60631626  1.048937319  0.165964040
97  -0.70403319  0.425742264  0.16599277 -0.94882847  0.226965976  1.414101375
98  -0.98475530  0.018591638  1.08012442  0.02983342 -0.699749469 -0.383571980
99   1.06846969 -1.412892026  0.66409996 -0.58097638 -0.113275532 -1.039744107
100  1.51173205 -0.690893569 -0.29153007 -1.42412739  1.045331682  0.280810457
101 -0.76910254  0.491783219  0.66294456 -0.47851642  0.831045656 -0.537541539
102 -0.09062449  0.972546470  0.96977035 -0.56608019 -0.827840287 -0.008807736
103 -1.32533539  0.319335847  0.58922191 -0.45785724  0.711297947 -0.603488616
104 -0.34029606 -0.326289522  1.11018386 -0.46585439  0.726521767  0.702260685
105 -1.86102798  0.082306590  0.18213733  0.22248040  0.412703727  0.518821892
106 -0.83660618  1.748435957 -1.50917917 -0.67694005  1.048439685 -1.050381849
             PC7
1   -0.285722575
2   -0.716010153
3   -0.092636132
4   -0.634790640
5   -0.320266854
6   -0.400882538
7    0.166305027
8    0.298608626
9   -0.254561969
10  -0.791938011
11  -0.240891160
13  -0.114353669
14   0.079179355
15   0.215022700
16  -0.761250794
17  -0.050329772
18   0.196202765
19   0.035859938
20   0.305254550
21  -0.226933796
22  -0.366240289
23   0.057755898
24  -0.072525856
25  -0.106544228
26  -0.138230162
27   0.065241782
28  -0.199400348
29   1.174625470
30   0.384956253
31  -0.581955665
32   0.154581262
33  -0.009341258
34  -0.445551615
35   0.241130949
36   0.069976367
37  -0.168431815
38  -0.261373441
39   0.237304919
40  -0.339076885
41  -0.001613206
42  -0.171235972
43  -0.040549500
44   0.849493585
45  -0.303763511
46  -0.202903080
47   0.819209389
48  -0.468942615
49  -0.160221512
50  -0.111240476
51  -0.015489714
52  -0.413797129
53   0.030704134
54   0.211585738
56   0.357015808
57   1.269636132
58   1.873327776
59  -0.182056218
60   0.015842159
61  -0.206907034
62   0.071464648
63   0.083110153
64  -0.016401570
65  -0.480926873
66  -0.742252405
67  -0.333122585
68  -0.184142264
69   0.401482671
71  -0.110870141
72  -0.202521220
73   0.566366480
74   0.409035165
75  -0.142623590
76  -0.305188485
77   0.570728749
78  -0.208320427
79  -0.437182373
80   0.441875826
81  -0.625041778
82   0.068254088
83  -0.249722853
84  -0.172177153
85  -0.474083258
86  -0.104472121
87   0.484434275
88   1.036876715
89   0.751098874
90  -0.469100431
91   0.071906629
92  -0.141028318
93  -0.236699955
94  -0.047105634
95  -0.321440545
96  -0.120870101
97   0.195488795
98   0.655292427
99   0.812230009
100 -0.040491077
101  0.202053215
102  0.420472886
103 -0.065775060
104 -0.020757556
105  0.253466338
106 -0.494181159

Suggests PC1: FM, SM & LA PC2: SLA & RBT vs SD PC3: rH & SD But let’s plot:

par(mfrow=c(1, 1))
biplot(pca1, choices = 1:2, scale = 1)

par(mfrow=c(1,2))
biplot(pca1, choices = 1:2, scale = 1, cex = .7)
biplot(pca1, choices = c(1, 3), scale = 1, cex = .7)

par(mfrow=c(1, 1))
IycgLS0tCiMnIHRpdGxlOiAiRXVjYWx5cHQgdHJhaXQgZGlzdHJpYnV0aW9ucyBhY3Jvc3MgcmVnaW9ucyIKIycgYXV0aG9yOiAiV2lsbGlhbSBLLiBNb3JyaXMgJiBQZXRlciBBLiBWZXNrIgojJyBkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCiMnIG91dHB1dDoKIycgICBybWFya2Rvd246Omh0bWxfbm90ZWJvb2s6CiMnICAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKIycgLS0tCgojJyBUaGlzIG5vdGVib29rIHByZXNlbnRzIHN1bW1hcmllcyBvZiB0cmFpdCBkaXN0cmlidXRpb25zIGFjcm9zcyA1IHJlZ2lvbnMsCiMnIEdyYW1waWFucyBWaWMsIFNvdXRoIGFuZCBlYXN0IG9mIHRoZSBIdW1lIEhpZ2h3YXksIHRoZSBWaWN0b3JpYW4gTWFsbGVlCiMnIGFuZCBTdGlybGluZyBSYW5nZSwgV0EuCgojKyBzZXR1cCwgbWVzc2FnZSA9IEZBTFNFCmtuaXRyOjpvcHRzX2NodW5rJHNldChjYWNoZSA9IFRSVUUsIGRldiA9IGMoInBuZyIsICJwZGYiKSkKbGlicmFyeShldWNzKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKCiMnICMjIENvbXBhcmUgdHJhaXRzIGZyb20gdGhlIDQgcmVnaW9ucy4KIycgRmlyc3Qgd2UgbmVlZCB0byBzdW1tYXJpc2UgYnkgdGF4b24gYW5kIGNyZWF0ZSBuZXcgZGF0YSBmcmFtZXMuCiMrIHJlYWQtaW4tZGF0YQpndCA8LSBtZWRpYW5zX2dyYW1waWFucwpndCR0YXhvbiA8LSBhcy5mYWN0b3IoZ3QkdGF4b24pCnNlX3QgPC0gbWVkaWFuc19zb3V0aGVhc3QKc2VfdCR0YXhvbiA8LSBhcy5mYWN0b3Ioc2VfdCR0YXhvbikKd3QgPC0gc3VtbWFyaXNlX3RyYWl0c19ieSh0cmFpdHNfc3RpcmxpbmcsIGModHJlZSwgdGF4b24pKQp3dCR0YXhvbiA8LSBhcy5mYWN0b3Iod3QkdGF4b24pCm10IDwtIHN1bW1hcmlzZV90cmFpdHNfYnkodHJhaXRzX21hbGxlZSwgYyh0cmVlLCB0YXhvbikpCm10JHRheG9uIDwtIGFzLmZhY3RvcihtdCR0YXhvbikKCiMrIHRyYWl0LWhpc3RzCmhpc3RfZGF0YSA8LSBkby5jYWxsKAogIHJiaW5kLAogIGxpc3QoCiAgICB3aXRoKAogICAgICBtdCwKICAgICAgZGF0YS5mcmFtZSgKICAgICAgICBSZWdpb24gPSAiTWFsbGVlIiwKICAgICAgICBzbGEgPSBzbGFfbW0yX3Blcl9tZywKICAgICAgICBzbSA9IHNlZWRfbWFzc19tZwogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgZ3QsCiAgICAgIGRhdGEuZnJhbWUoCiAgICAgICAgUmVnaW9uID0gIkdyYW1waWFucyIsCiAgICAgICAgc2xhID0gc2xhX21tMl9wZXJfbWcsCiAgICAgICAgc20gPSBzZWVkX21hc3NfbWcKICAgICAgKQogICAgKSwKICAgIHdpdGgoCiAgICAgIHd0LAogICAgICBkYXRhLmZyYW1lKAogICAgICAgIFJlZ2lvbiA9ICJTdGlybGluZ3MiLAogICAgICAgIHNsYSA9IHNsYV9tbTJfcGVyX21nLAogICAgICAgIHNtID0gc2VlZF9tYXNzX21nCiAgICAgICkKICAgICksCiAgICB3aXRoKAogICAgICBzZV90LAogICAgICBkYXRhLmZyYW1lKAogICAgICAgIFJlZ2lvbiA9ICJTb3V0aC1lYXN0IEF1c3RyYWxpYSIsCiAgICAgICAgc2xhID0gc2xhX21tMl9wZXJfbWcsCiAgICAgICAgc20gPSBzZWVkX21hc3NfbWcKICAgICAgKQogICAgKQogICkKKQpoaXN0X2RhdGEgPC0gZ2F0aGVyKGhpc3RfZGF0YSwgdHlwZSwgdmFsdWUsIC1SZWdpb24pCmhpc3RfZGF0YSR0eXBlIDwtIGZhY3RvcihoaXN0X2RhdGEkdHlwZSwgcmV2KGxldmVscyhmYWN0b3IoaGlzdF9kYXRhJHR5cGUpKSkpCmhpc3RfZGF0YSRSZWdpb24gPC0gZmFjdG9yKGhpc3RfZGF0YSRSZWdpb24sIHJldihsZXZlbHMoaGlzdF9kYXRhJFJlZ2lvbikpKQoKZ2dwbG90KG5hLm9taXQoaGlzdF9kYXRhKSkgKwphZXModmFsdWUsIGZpbGwgPSBSZWdpb24pICsKZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDExKSArCnNjYWxlX2ZpbGxfZ3JleSgpICsKc2NhbGVfeF9zcXJ0KGJyZWFrcyA9IGMoLjIsIDEsIDIsIDQsIDYsIDgsIDEwKSkgKwpmYWNldF9ncmlkKAogIH50eXBlLAogIGxhYmVsbGVyID0gYXNfbGFiZWxsZXIoCiAgICBjKAogICAgICBzbGEgPSAiU3BlY2lmaWMgbGVhZiBhcmVhIChtbVx1MDBiMiBtZ1x1MjA3Ylx1MDBiOSkiLAogICAgICBzbSA9ICJTZWVkIG1hc3MgKG1nKSIKICAgICkKICApLAogIHNjYWxlcyA9ICJmcmVlX3giCikgKwp4bGFiKCIiKSArCnlsYWIoIlNwZWNpZXMiKSArCnRoZW1lX2J3KGJhc2Vfc2l6ZSA9IDE0KSArCnRoZW1lKAogIGxlZ2VuZC5wb3NpdGlvbiA9IGMoLjU1LCAuOTUpLAogIGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gYygibGVmdCIsICJ0b3AiKSwKICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkKKQoKIycgU3FydCBzY2FsZSB3b3JrcyB3ZWxsIGZvciBTTEEsIGJ1dCBub3Qgc28gd2VsbCBmb3IgU2VlZCBtYXNzLCBzdGlsbCBsb25nCiMnIHJpZ2h0IHRhaWwuCiMrICBoaXN0LWhlaWdodApzZV9IIDwtIHRyYWl0c19ldWNsaWRbCiAgbmEub21pdChtYXRjaCgKICAgIG5hbWVzKG9jY3VwYW5jeV9zb3V0aGVhc3Qkb2NjdXBhbmN5W1sxXV0pLAogICAgdHJhaXRzX2V1Y2xpZCR0YXhvbgogICkpLApdCgp3X0ggPC0gdHJhaXRzX2V1Y2xpZFsKICBuYS5vbWl0KG1hdGNoKAogICAgd3QkdGF4b24sCiAgICB0cmFpdHNfZXVjbGlkJHRheG9uCiAgKSksCl0KCm1fSCA8LSB0cmFpdHNfZXVjbGlkWwogIG5hLm9taXQobWF0Y2goCiAgICBtdCR0YXhvbiwKICAgIHRyYWl0c19ldWNsaWQkdGF4b24KICApKSwKXQoKZ19IIDwtIHRyYWl0c19ldWNsaWRbCiAgbmEub21pdChtYXRjaCgKICAgIGd0JHRheG9uLAogICAgdHJhaXRzX2V1Y2xpZCR0YXhvbgogICkpLApdCgpoaXN0X2RhdGEgPC0gZG8uY2FsbCgKICByYmluZCwKICBsaXN0KAogICAgd2l0aCgKICAgICAgbV9ILAogICAgICBkYXRhLmZyYW1lKAogICAgICAgIFJlZ2lvbiA9ICJNYWxsZWUiLAogICAgICAgIEggPSBtYXhfaGVpZ2h0X20KICAgICAgKQogICAgKSwKICAgIHdpdGgoCiAgICAgIGdfSCwKICAgICAgZGF0YS5mcmFtZSgKICAgICAgICBSZWdpb24gPSAiR3JhbXBpYW5zIiwKICAgICAgICBIID0gbWF4X2hlaWdodF9tCiAgICAgICkKICAgICksCiAgICB3aXRoKAogICAgICB3X0gsCiAgICAgIGRhdGEuZnJhbWUoCiAgICAgICAgUmVnaW9uID0gIlN0aXJsaW5ncyIsCiAgICAgICAgSCA9IG1heF9oZWlnaHRfbQogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgc2VfSCwKICAgICAgZGF0YS5mcmFtZSgKICAgICAgICBSZWdpb24gPSAiU291dGgtZWFzdCBBdXN0cmFsaWEiLAogICAgICAgIEggPSBtYXhfaGVpZ2h0X20KICAgICAgKQogICAgKQogICkKKQoKaGlzdF9kYXRhIDwtIGdhdGhlcihoaXN0X2RhdGEsIHR5cGUsIHZhbHVlLCAtUmVnaW9uKQpoaXN0X2RhdGEkdHlwZSA8LSBmYWN0b3IoaGlzdF9kYXRhJHR5cGUsIHJldihsZXZlbHMoZmFjdG9yKGhpc3RfZGF0YSR0eXBlKSkpKQpoaXN0X2RhdGEkUmVnaW9uIDwtIGZhY3RvcihoaXN0X2RhdGEkUmVnaW9uLCByZXYobGV2ZWxzKGhpc3RfZGF0YSRSZWdpb24pKSkKCmdncGxvdChuYS5vbWl0KGhpc3RfZGF0YSkpICsKYWVzKHZhbHVlLCBmaWxsID0gUmVnaW9uKSArCmdlb21faGlzdG9ncmFtKGJpbnMgPSAxMSkgKwpzY2FsZV9maWxsX2dyZXkoKSArCnNjYWxlX3hfc3FydChicmVha3MgPSBjKDUsIDEwLCAyMCwgMzAsIDUwLCA3NSwgMTAwKSkgKwpmYWNldF9ncmlkKAogIH50eXBlLAogIGxhYmVsbGVyID0gYXNfbGFiZWxsZXIoCiAgICBjKHNsYSA9ICJTcGVjaWZpYyBMZWFmIEFyZWEgKG1tMm1nLTEpIiwgSCA9ICJNYXhpbXVtIEhlaWdodCAobSkiKQogICksCiAgc2NhbGVzID0gImZyZWVfeCIKKSArCnhsYWIoIiIpICsKeWxhYigiU3BlY2llcyIpICsKdGhlbWVfYncoYmFzZV9zaXplID0gMTQpICsKdGhlbWUoCiAgbGVnZW5kLnBvc2l0aW9uID0gYyguNjUsIC45NSksIGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gYygibGVmdCIsICJ0b3AiKSwKICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkKKQoKIycgIyMgT3RoZXIgdHJhaXRzCiMrIHRyYWl0LWhpc3RzMgpoaXN0X2RhdGEgPC0gZG8uY2FsbCgKICByYmluZCwKICBsaXN0KAogICAgd2l0aCgKICAgICAgbXQsCiAgICAgIGRhdGEuZnJhbWUoCiAgICAgICAgUmVnaW9uID0gIk1hbGxlZSIsCiAgICAgICAgbGEgPSBsZWFmX2FyZWFfY20yLAogICAgICAgIGZtID0gZnJ1aXRfbWFzc19tZyAjLAogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgZ3QsCiAgICAgIGRhdGEuZnJhbWUoCiAgICAgICAgUmVnaW9uID0gIkdyYW1waWFucyIsCiAgICAgICAgbGEgPSBsZWFmX2FyZWFfY20yLAogICAgICAgIGZtID0gZnJ1aXRfbWFzc19tZyAjLAogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgd3QsCiAgICAgIGRhdGEuZnJhbWUoCiAgICAgICAgUmVnaW9uID0gIlN0aXJsaW5ncyIsCiAgICAgICAgbGEgPSBsZWFmX2FyZWFfY20yLAogICAgICAgIGZtID0gZnJ1aXRfbWFzc19tZyAjLAogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgc2VfdCwKICAgICAgZGF0YS5mcmFtZSgKICAgICAgICBSZWdpb24gPSAiU291dGgtZWFzdCBBdXN0cmFsaWEiLAogICAgICAgIGxhID0gbGVhZl9hcmVhX2NtMiwKICAgICAgICBmbSA9IGZydWl0X21hc3NfbWcKICAgICAgKQogICAgKQogICkKKQoKaGlzdF9kYXRhIDwtIGdhdGhlcihoaXN0X2RhdGEsIHR5cGUsIHZhbHVlLCAtUmVnaW9uKQpoaXN0X2RhdGEkdHlwZSA8LSBmYWN0b3IoaGlzdF9kYXRhJHR5cGUsIHJldihsZXZlbHMoZmFjdG9yKGhpc3RfZGF0YSR0eXBlKSkpKQpoaXN0X2RhdGEkUmVnaW9uIDwtIGZhY3RvcihoaXN0X2RhdGEkUmVnaW9uLCByZXYobGV2ZWxzKGhpc3RfZGF0YSRSZWdpb24pKSkKCmdncGxvdChuYS5vbWl0KGhpc3RfZGF0YSkpICsKYWVzKHZhbHVlLCBmaWxsID0gUmVnaW9uKSArCmdlb21faGlzdG9ncmFtKGJpbnMgPSAxMSkgKwpzY2FsZV9maWxsX2dyZXkoKSArCnNjYWxlX3hfbG9nMTAoKSArCmZhY2V0X2dyaWQoCiAgfnR5cGUsCiAgbGFiZWxsZXIgPSBhc19sYWJlbGxlcihjKGxhID0gIkxlYWYgYXJlYSBjbVx1MDBiMikiLCBmbSA9ICJGcnVpdCBtYXNzIChtZykiKSksCiAgc2NhbGVzID0gImZyZWVfeCIKKSArCnhsYWIoIiIpICsKeWxhYigiU3BlY2llcyIpICsKdGhlbWVfYncoYmFzZV9zaXplID0gMTQpICsKdGhlbWUoCiAgbGVnZW5kLnBvc2l0aW9uID0gYyguMDUsIC45NSksIGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gYygibGVmdCIsICJ0b3AiKSwKICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkKKQoKCiMnICMjIFN0ZW0gRGVuc2l0eQojKyB0cmFpdC1oaXN0czMKaGlzdF9kYXRhIDwtIGRvLmNhbGwoCiAgcmJpbmQsCiAgbGlzdCgKICAgIHdpdGgoCiAgICAgIGd0LAogICAgICBkYXRhLmZyYW1lKAogICAgICAgIFJlZ2lvbiA9ICJHcmFtcGlhbnMiLAogICAgICAgIHNkID0gc3RlbV9kZW5zaXR5X2dfcGVyX21sCiAgICAgICkKICAgICksCiAgICB3aXRoKAogICAgICB3dCwKICAgICAgZGF0YS5mcmFtZSgKICAgICAgICBSZWdpb24gPSAiU3RpcmxpbmdzIiwKICAgICAgICBzZCA9IHN0ZW1fZGVuc2l0eV9nX3Blcl9tbAogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgc2VfdCwKICAgICAgZGF0YS5mcmFtZSgKICAgICAgICBSZWdpb24gPSAiU291dGgtZWFzdCBBdXN0cmFsaWEiLAogICAgICAgIHNkID0gc3RlbV9kZW5zaXR5X2dfcGVyX21sCiAgICAgICkKICAgICkKICApCikKCmhpc3RfZGF0YSA8LSBnYXRoZXIoaGlzdF9kYXRhLCB0eXBlLCB2YWx1ZSwgLVJlZ2lvbikKaGlzdF9kYXRhJHR5cGUgPC0gZmFjdG9yKGhpc3RfZGF0YSR0eXBlLCByZXYobGV2ZWxzKGZhY3RvcihoaXN0X2RhdGEkdHlwZSkpKSkKaGlzdF9kYXRhJFJlZ2lvbiA8LSBmYWN0b3IoaGlzdF9kYXRhJFJlZ2lvbiwgcmV2KGxldmVscyhoaXN0X2RhdGEkUmVnaW9uKSkpCgpnZ3Bsb3QobmEub21pdChoaXN0X2RhdGEpKSArCmFlcyh2YWx1ZSwgZmlsbCA9IFJlZ2lvbikgKwpnZW9tX2hpc3RvZ3JhbShiaW5zID0gMTEpICsKc2NhbGVfZmlsbF9ncmV5KCkgKwpzY2FsZV94X3NxcnQoKSArCmZhY2V0X2dyaWQoCiAgfnR5cGUsCiAgbGFiZWxsZXIgPSBhc19sYWJlbGxlcihjKHNkID0gIlN0ZW0gc3BlY2lmaWMgZGVuc2l0eSAoZy5tbC0xKSIpKSwKICBzY2FsZXMgPSAiZnJlZV94IgopICsKeGxhYigiIikgKwp5bGFiKCJTcGVjaWVzIikgKwp0aGVtZV9idyhiYXNlX3NpemUgPSAxNCkgKwp0aGVtZSgKICBsZWdlbmQucG9zaXRpb24gPSBjKC42NSwgLjk1KSwgbGVnZW5kLmp1c3RpZmljYXRpb24gPSBjKCJsZWZ0IiwgInRvcCIpLAogIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKQopCgojJyBOZXh0LCBuZWVkIHRvIHdvcmsgb24gdGhlIGFsbG9tZXRyaWVzIG9mIGhlaWdodCBhbmQgYmFyayB0aGlja25lc3Mgb24gZ2lydGguCiMnIFNlZSBzZXBhcmF0ZSBub3RlYm9vay4gU3VmZmljZSB0byBzYXksIHVzZSBIVC9HaXJ0aCBhbmQgQlQvR2lydGguCiMrIGhpc3RvLXJlbEh0CnNlX3JIIDwtIHBpICogdHJhaXRzX3NvdXRoZWFzdCRoZWlnaHRfbSAvIHRyYWl0c19zb3V0aGVhc3QkZ2lydGhfY20Kd19ySCA8LSBwaSAqIHRyYWl0c19zdGlybGluZyRoZWlnaHRfbSAvIHRyYWl0c19zdGlybGluZyRnaXJ0aF9jbQoKc2VfcmJ0PC0gcGkgKiB0cmFpdHNfc291dGhlYXN0JGJhcmtfdGhpY2tuZXNzX21tIC8gdHJhaXRzX3NvdXRoZWFzdCRnaXJ0aF9jbQp3X3JidCA8LSBwaSAqIHRyYWl0c19zdGlybGluZyRiYXJrX3RoaWNrbmVzc19tbSAvIHRyYWl0c19zdGlybGluZyRnaXJ0aF9jbQoKc3R0IDwtIGNiaW5kKHRyYWl0c19zb3V0aGVhc3QsIHNlX3JILCBzZV9yYnQpCnN0IDwtIHN1bW1hcmlzZV90cmFpdHNfYnkoc3R0LCBjKHRyZWUsIHRheG9uKSkKCnd0dCA8LSBjYmluZCh0cmFpdHNfc3Rpcmxpbmcsd19ySCx3X3JidCkKd3QgPC0gc3VtbWFyaXNlX3RyYWl0c19ieSh3dHQsIGModHJlZSwgdGF4b24pKQoKaGlzdF9kYXRhIDwtIGRvLmNhbGwoCiAgcmJpbmQsCiAgbGlzdCgKICAgIHdpdGgoCiAgICAgIHd0LAogICAgICBkYXRhLmZyYW1lKAogICAgICAgIFJlZ2lvbiA9ICJTdGlybGluZ3MiLAogICAgICAgIHJidCA9IHdfcmJ0LAogICAgICAgIHJIID0gd19ySAogICAgICApCiAgICApLAogICAgd2l0aCgKICAgICAgc3QsCiAgICAgIGRhdGEuZnJhbWUoCiAgICAgICAgUmVnaW9uID0gIlNvdXRoLWVhc3QgQXVzdHJhbGlhIiwKICAgICAgICByYnQgPSBzZV9yYnQsCiAgICAgICAgckggPSBzZV9ySAogICAgICApCiAgICApCiAgKQopCgpoaXN0X2RhdGEgPC0gZ2F0aGVyKGhpc3RfZGF0YSwgdHlwZSwgdmFsdWUsIC1SZWdpb24pCmhpc3RfZGF0YSR0eXBlIDwtIGZhY3RvcihoaXN0X2RhdGEkdHlwZSwgcmV2KGxldmVscyhmYWN0b3IoaGlzdF9kYXRhJHR5cGUpKSkpCmhpc3RfZGF0YSRSZWdpb24gPC0gZmFjdG9yKGhpc3RfZGF0YSRSZWdpb24sIHJldihsZXZlbHMoaGlzdF9kYXRhJFJlZ2lvbikpKQoKZ2dwbG90KG5hLm9taXQoaGlzdF9kYXRhKSkgKwphZXModmFsdWUsIGZpbGwgPSBSZWdpb24pICsKZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDExKSArCnNjYWxlX2ZpbGxfZ3JleSgpICsKZmFjZXRfZ3JpZCgKICB+dHlwZSwKICBsYWJlbGxlciA9IGFzX2xhYmVsbGVyKAogICAgYyhyYnQgPSAiUmVsYXRpdmUgQmFyayBUaGlja25lc3MgKG1tLmNtLTEpIiwgckggPSAiSGVpZ2h0OkdpcnRoIChtLmNtLTEpIikKICApLAogc2NhbGVzID0gImZyZWVfeCIKKSArCnhsYWIoIiIpICsKeWxhYigiU3BlY2llcyIpICsKdGhlbWVfYncoYmFzZV9zaXplID0gMTQpICsKdGhlbWUoCiAgbGVnZW5kLnBvc2l0aW9uID0gYyguNjUsIC45NSksIGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gYygibGVmdCIsICJ0b3AiKSwKICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkKKQoKIysgYm94cGxvdApnZ3Bsb3QoZGF0YSA9IGhpc3RfZGF0YSwgYWVzKHggPSBSZWdpb24sIHkgPSB2YWx1ZSkpICsKZ2VvbV9ib3hwbG90KCkgKwpmYWNldF93cmFwKH50eXBlKSArCmNvb3JkX2ZsaXAoKQoKIycgT3ZlcmFsbCB0aG91Z2ggd2UgaGF2ZSB2YXJpYmxlIHRyYWl0IGNvdmVyYWdlLgojJyBXZSBoYXZlOgojJwojJyBUcmFpdCAgfCBTTEEgfCBMQSB8IFNNIHwgbWF4SCB8IFNTRCB8IFJCVCB8IFJIIHwgRk0KIycgLS0tLS0tIHwgLS0tIHwgLS0gfCAtLSB8IC0tLS0gfCAtLS0gfCAtLS0gfCAtLSB8IC0tCiMnIFNFICAgICB8ICAxICB8IDEgIHwgMSAgfCAxICAgIHwgMSAgIHwgMSAgIHwgMSAgfCAxCiMnIFdBICAgICB8ICAxICB8IDEgIHwgMSAgfCAxICAgIHwgMSAgIHwgMSAgIHwgMSAgfCAxCiMnIEdyYW1wcyB8ICAxICB8IDEgIHwgMSAgfCAxICAgIHwgMC41IHwgMCAgIHwgMCAgfCAxCiMnIE1hbGxlZSB8ICAxICB8IDEgIHwgMSAgfCAxICAgIHwgMCAgIHwgMCAgIHwgMCAgfCAxCgojJyAjIyBQQ0EKIycgcGFpcnMKcGFpcnMoc3RbLCAyOjEwXSkKCiMnIExldCdzIHVzZSBwcmNvbXAsIGFuZCBnZXQgYSBzdW1tYXJ5IG9mIGhvdyBtdWNoIHZhcmlhbmNlIGlzIGV4cGxhaW5lZC4KIysgcHJpbgpNIDwtIHN0WywgYyg0OjUsIDcsIDgsIDEwLCAyOjMpXQpwY2ExID0gcHJjb21wKG5hLm9taXQoTSksIHNjYWxlLiA9IFRSVUUpCnN1bW1hcnkocGNhMSkKCiMnIFNvIHRoZSBmaXJzdCAyIFBDcyBleHBsYWluIG5lYXJseSBoYWxmIHRoZSB2YXJpYW5jZS4gRm91ciBleHBhbGluIDc1JS4KIycgTmVlZCB0byB0cmFuc2Zvcm0gc29tZSB2YXJpYWJsZXMuCiMnIHRyYW5zZm9ybQpjb2xuYW1lcyhNKSA8LSBjKCdTTEEnLCAnTEEnLCAiU0QiLCAiRk0iLCAiU00iLCAickgiLCAiUkJUIikKTSRTTEEgPSAoTSRTTEEpXjAuMjUKTSRMQSA9IChNJExBKV4wLjUKTSRTRCA9IChNJFNEKV4wLjUKTSRGTSA9IGxvZzEwKE0kRk0pCk0kU00gPSBsb2cxMChNJFNNKQoKIycgUmVydW46CiMrIHByaW4xCnBjYTEgPSBwcmNvbXAobmEub21pdChNKSwgc2NhbGUuID0gVFJVRSkKc3VtbWFyeShwY2ExKQoKIycgV2UgY2FuIGFsc28gZXh0cmFjdCBmYWN0b3IgbG9hZGluZ3MgYW5kIHNjb3JlcwojKyBsb2FkaW5ncwoocGNhMSRyb3RhdGlvbikKKHBjYTEkeCkKCiMnIFN1Z2dlc3RzCiMnIFBDMTogRk0sIFNNICYgTEEKIycgUEMyOiBTTEEgJiBSQlQgdnMgU0QKIycgUEMzOiBySCAmIFNECgojJyBCdXQgbGV0J3MgcGxvdDoKIysgcHJjb21wcGxvdApwYXIobWZyb3c9YygxLCAxKSkKYmlwbG90KHBjYTEsIGNob2ljZXMgPSAxOjIsIHNjYWxlID0gMSkKCiMrIHByY29tcHBsb3QyCnBhcihtZnJvdz1jKDEsMikpCmJpcGxvdChwY2ExLCBjaG9pY2VzID0gMToyLCBzY2FsZSA9IDEsIGNleCA9IC43KQpiaXBsb3QocGNhMSwgY2hvaWNlcyA9IGMoMSwgMyksIHNjYWxlID0gMSwgY2V4ID0gLjcpCnBhcihtZnJvdz1jKDEsIDEpKQo=