Libraries

library(tidyverse)
library(plotly)
library(car)
library(rstatix)
library(SimComp)
library(readxl)

Datasets

dataset_exp_5_brain_weight <- read_excel (path = "/mnt/c/Users/Toshiya Matsushima/OneDrive/R projects/BM_project/data analysis using Rstudio/BM_project_dataset.xlsx", sheet = "exp_5_brain_weight")
dataset_exp_6_neuron_glia <- read_excel (path = "/mnt/c/Users/Toshiya Matsushima/OneDrive/R projects/BM_project/data analysis using Rstudio/BM_project_dataset.xlsx", sheet = "exp_6_neuron_glia")

dataset_exp_5_brain_weight
dataset_exp_6_neuron_glia

Analysis of brain and body weight

absolute brain weight, figure

dataset_exp_5_brain_weight %>% 
  ggplot(mapping = aes(x=drug, y=w_brain, colour = factor(sex))) +
  geom_boxplot() +
  geom_quasirandom()+
  theme_classic() +
  ylim(0.5, 1.25)
ggsave(filename = "exp_5_brain_weight.png", dpi = 300, height = 10, width = 10, units = "cm")

absolute brain weight, linear fitting

fit_exp_5_abs_w_brain <- lm (w_brain ~ sex * drug, data = dataset_exp_5_brain_weight)
summary (fit_exp_5_abs_w_brain)

Call:
lm(formula = w_brain ~ sex * drug, data = dataset_exp_5_brain_weight)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.41406 -0.03474  0.00594  0.04715  0.17926 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)      1.00174    0.01520  65.887  < 2e-16 ***
sex              0.03101    0.02135   1.453 0.148404    
drug01_vpa      -0.08410    0.02426  -3.467 0.000683 ***
drug02_keta     -0.04889    0.02891  -1.691 0.092845 .  
drug04_tubo     -0.03094    0.04246  -0.729 0.467397    
sex:drug01_vpa   0.02942    0.03266   0.901 0.369059    
sex:drug02_keta  0.01340    0.03939   0.340 0.734245    
sex:drug04_tubo  0.02419    0.06000   0.403 0.687336    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.08865 on 153 degrees of freedom
Multiple R-squared:  0.1514,    Adjusted R-squared:  0.1126 
F-statistic: 3.901 on 7 and 153 DF,  p-value: 0.0006117
car::Anova(fit_exp_5_abs_w_brain)
Anova Table (Type II tests)

Response: w_brain
           Sum Sq  Df F value   Pr(>F)    
sex       0.07864   1 10.0058 0.001882 ** 
drug      0.14299   3  6.0645 0.000629 ***
sex:drug  0.00669   3  0.2838 0.837068    
Residuals 1.20248 153                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

absolute body weight figure

dataset_exp_5_brain_weight %>% 
  ggplot(mapping = aes(x=drug, y=w_body, colour = factor(sex))) +
  geom_boxplot() +
  geom_quasirandom()+
  theme_classic()
ggsave(filename = "exp_5_body_weight.png", dpi = 300, height = 10, width = 10, units = "cm")

absolute body size, linear fitting

fit_exp_5_abs_w_body <- lm (w_body ~ sex * drug, data = dataset_exp_5_brain_weight)
summary (fit_exp_5_abs_w_body)

Call:
lm(formula = w_body ~ sex * drug, data = dataset_exp_5_brain_weight)

Residuals:
    Min      1Q  Median      3Q     Max 
-7.5484 -2.0371  0.1629  1.8077  9.7864 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)     39.65882    0.54955  72.166   <2e-16 ***
sex              0.17832    0.77161   0.231    0.818    
drug01_vpa      -1.34519    0.87678  -1.534    0.127    
drug02_keta     -0.06652    1.04492  -0.064    0.949    
drug04_tubo      1.10118    1.53481   0.717    0.474    
sex:drug01_vpa   0.85643    1.18040   0.726    0.469    
sex:drug02_keta -1.36438    1.42373  -0.958    0.339    
sex:drug04_tubo -1.91832    2.16856  -0.885    0.378    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.204 on 153 degrees of freedom
Multiple R-squared:  0.03717,   Adjusted R-squared:  -0.006877 
F-statistic: 0.8439 on 7 and 153 DF,  p-value: 0.5527
car::Anova(fit_exp_5_abs_w_body)
Anova Table (Type II tests)

Response: w_body
           Sum Sq  Df F value Pr(>F)
sex          0.31   1  0.0306 0.8615
drug        28.95   3  0.9396 0.4231
sex:drug    31.67   3  1.0281 0.3819
Residuals 1571.03 153               

Analysis of cell counts

total cell number, figure

dataset_exp_6_neuron_glia %>% 
  ggplot(mapping = aes(x=drug, y=cell_number, colour = factor(sex))) +
  geom_boxplot() +
  geom_quasirandom() +
  theme_classic()
ggsave(filename = "exp_6_cell_number.png", dpi = 300, height = 10, width = 10, units = "cm")

total cell number, ANOVA

dataset_exp_6_neuron_glia %>% 
  anova_test(cell_number ~ drug)
Coefficient covariances computed by hccm()
ANOVA Table (type II tests)

  Effect DFn DFd     F     p p<.05   ges
1   drug   3  36 0.283 0.838       0.023

total cell number, lineaer fitting

fit_exp_6_cell_count <- lm(cell_number ~ sex * drug, data = dataset_exp_6_neuron_glia)
summary (fit_exp_6_cell_count)

Call:
lm(formula = cell_number ~ sex * drug, data = dataset_exp_6_neuron_glia)

Residuals:
    Min      1Q  Median      3Q     Max 
-16.337  -2.595   0.220   5.439   9.073 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)       32.806      3.128  10.488 6.97e-12 ***
sex                3.626      4.424   0.820    0.418    
drug01_vpa        -0.599      4.424  -0.135    0.893    
drug02_keta       -1.412      4.424  -0.319    0.752    
drug04_tubo        2.088      4.424   0.472    0.640    
sex:drug01_vpa    -2.719      6.256  -0.435    0.667    
sex:drug02_keta   -2.004      6.256  -0.320    0.751    
sex:drug04_tubo   -5.436      6.256  -0.869    0.391    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.994 on 32 degrees of freedom
Multiple R-squared:  0.05307,   Adjusted R-squared:  -0.1541 
F-statistic: 0.2562 on 7 and 32 DF,  p-value: 0.9663
car::Anova(fit_exp_6_cell_count)
Anova Table (Type II tests)

Response: cell_number
           Sum Sq Df F value Pr(>F)
sex         11.80  1  0.2412 0.6267
drug        38.04  3  0.2592 0.8542
sex:drug    37.89  3  0.2582 0.8549
Residuals 1565.45 32               

neuron_glia ratio, figure

dataset_exp_6_neuron_glia %>% 
  ggplot(mapping = aes(x=drug, y=neuron_ratio, colour = factor(sex))) +
  geom_boxplot() +
  geom_point()+
  theme_classic()
ggsave(filename = "exp_6_neuron_ratio.png", dpi = 300, height = 10, width = 10, units = "cm")

neuron_glia ratio, ANOVA

dataset_exp_6_neuron_glia %>% 
  anova_test(neuron_ratio ~ drug)
Coefficient covariances computed by hccm()
ANOVA Table (type II tests)

  Effect DFn DFd     F     p p<.05   ges
1   drug   3  36 3.842 0.017     * 0.243

neuron_glia ratio, lineaer fitting

fit_exp_6_neuron_glia_ratio <- lm(neuron_ratio ~ sex * drug, data = dataset_exp_6_neuron_glia)
summary (fit_exp_6_neuron_glia_ratio)

Call:
lm(formula = neuron_ratio ~ sex * drug, data = dataset_exp_6_neuron_glia)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.084514 -0.022167  0.008942  0.027854  0.062633 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)      0.522874   0.019104  27.370   <2e-16 ***
sex              0.017086   0.027017   0.632   0.5316    
drug01_vpa      -0.073903   0.027017  -2.735   0.0101 *  
drug02_keta      0.008096   0.027017   0.300   0.7664    
drug04_tubo     -0.001942   0.027017  -0.072   0.9431    
sex:drug01_vpa   0.025310   0.038208   0.662   0.5124    
sex:drug02_keta -0.055518   0.038208  -1.453   0.1559    
sex:drug04_tubo -0.017455   0.038208  -0.457   0.6509    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.04272 on 32 degrees of freedom
Multiple R-squared:  0.3429,    Adjusted R-squared:  0.1991 
F-statistic: 2.385 on 7 and 32 DF,  p-value: 0.04411
car::Anova(fit_exp_6_neuron_glia_ratio)
Anova Table (Type II tests)

Response: neuron_ratio
            Sum Sq Df F value  Pr(>F)  
sex       0.000267  1  0.1465 0.70445  
drug      0.021550  3  3.9365 0.01692 *
sex:drug  0.008649  3  1.5799 0.21343  
Residuals 0.058394 32                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Analysis of behavioral data

BM, figure

dataset_exp_6_neuron_glia %>% 
  ggplot(mapping = aes(x = drug, y = bm)) +
  geom_boxplot() +
  geom_quasirandom(shape=16, size=3, colour= "black") +
  ylim(-600, 600)+
  theme_classic()
Warning: Removed 4 rows containing non-finite values (stat_boxplot).
Warning: Removed 4 rows containing missing values (position_quasirandom).
ggsave(filename = "exp_6_bm_drug.png", dpi = 300, height = 10, width = 7, units = "cm")
Warning: Removed 4 rows containing non-finite values (stat_boxplot).
Warning: Removed 4 rows containing missing values (position_quasirandom).

BM, linear fitting

fit_exp_6_bm <- lm(bm ~ drug, data = dataset_exp_6_neuron_glia)
summary(fit_exp_6_bm)

Call:
lm(formula = bm ~ drug, data = dataset_exp_6_neuron_glia)

Residuals:
    Min      1Q  Median      3Q     Max 
-597.90  -90.98   32.63  112.93  341.10 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   383.70      63.62   6.031 9.92e-07 ***
drug01_vpa   -281.80      89.97  -3.132 0.003697 ** 
drug02_keta  -352.50      89.97  -3.918 0.000441 ***
drug04_tubo  -387.87     103.89  -3.733 0.000736 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 201.2 on 32 degrees of freedom
  (4 observations deleted due to missingness)
Multiple R-squared:  0.3966,    Adjusted R-squared:   0.34 
F-statistic:  7.01 on 3 and 32 DF,  p-value: 0.0009377
car::Anova(fit_exp_6_bm)
Anova Table (Type II tests)

Response: bm
           Sum Sq Df F value    Pr(>F)    
drug       851197  3  7.0099 0.0009377 ***
Residuals 1295235 32                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

imprint, figure

dataset_exp_6_neuron_glia %>% 
  ggplot(mapping = aes(x = drug, y = imprint)) +
  geom_boxplot() +
  geom_point(shape=16, size=3, colour= "black") +
  ylim(-600, 600)+
  theme_classic()
Warning: Removed 4 rows containing non-finite values (stat_boxplot).
Warning: Removed 4 rows containing missing values (geom_point).
ggsave(filename = "exp_6_imprint_drug.png", dpi = 300, height = 10, width = 7, units = "cm")
Warning: Removed 4 rows containing non-finite values (stat_boxplot).
Warning: Removed 4 rows containing missing values (geom_point).

imprint, linear fitting

fit_exp_6_imprint <- lm(imprint ~ drug, data = dataset_exp_6_neuron_glia)
summary(fit_exp_6_imprint)

Call:
lm(formula = imprint ~ drug, data = dataset_exp_6_neuron_glia)

Residuals:
   Min     1Q Median     3Q    Max 
-711.9 -182.7   25.2  181.9  652.3 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   536.80      85.99   6.242 5.39e-07 ***
drug01_vpa   -763.10     121.61  -6.275 4.91e-07 ***
drug02_keta  -323.90     121.61  -2.663    0.012 *  
drug04_tubo  -249.63     140.42  -1.778    0.085 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 271.9 on 32 degrees of freedom
  (4 observations deleted due to missingness)
Multiple R-squared:  0.5588,    Adjusted R-squared:  0.5175 
F-statistic: 13.51 on 3 and 32 DF,  p-value: 7.273e-06
car::Anova(fit_exp_6_imprint)
Anova Table (Type II tests)

Response: imprint
           Sum Sq Df F value    Pr(>F)    
drug      2997271  3  13.511 7.273e-06 ***
Residuals 2366281 32                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

sessionInfo

sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8        LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8   
 [6] LC_MESSAGES=C.UTF-8    LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C           LC_TELEPHONE=C        
[11] LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ggsci_2.9        pwr_1.3-0        plotly_4.10.0    readxl_1.3.1     SimComp_3.3      rstatix_0.7.0    car_3.0-12      
 [8] carData_3.0-5    plotrix_3.8-2    ggbeeswarm_0.6.0 forcats_0.5.1    stringr_1.4.0    dplyr_1.0.7      purrr_0.3.4     
[15] readr_2.1.1      tidyr_1.1.4      tibble_3.1.6     ggplot2_3.3.5    tidyverse_1.3.1 

loaded via a namespace (and not attached):
 [1] nlme_3.1-144         fs_1.5.2             lubridate_1.8.0      httr_1.4.2           tools_3.6.3          backports_1.4.1     
 [7] utf8_1.2.2           R6_2.5.1             vipor_0.4.5          mgcv_1.8-31          DBI_1.1.1            lazyeval_0.2.2      
[13] colorspace_2.0-2     withr_2.4.3          tidyselect_1.1.1     compiler_3.6.3       survPresmooth_1.1-11 mratios_1.4.2       
[19] cli_3.1.0            rvest_1.0.2          xml2_1.3.3           sandwich_3.0-1       labeling_0.4.2       scales_1.1.1        
[25] mvtnorm_1.1-3        digest_0.6.29        rmarkdown_2.11       pkgconfig_2.0.3      htmltools_0.5.2      dbplyr_2.1.1        
[31] fastmap_1.1.0        htmlwidgets_1.5.4    rlang_0.4.12         rstudioapi_0.13      jquerylib_0.1.4      generics_0.1.1      
[37] farver_2.1.0         zoo_1.8-9            jsonlite_1.7.2       magrittr_2.0.1       Matrix_1.2-18        Rcpp_1.0.7          
[43] munsell_0.5.0        fansi_0.5.0          abind_1.4-5          lifecycle_1.0.1      stringi_1.7.6        multcomp_1.4-18     
[49] yaml_2.2.1           MASS_7.3-51.5        grid_3.6.3           crayon_1.4.2         lattice_0.20-40      haven_2.4.3         
[55] splines_3.6.3        hms_1.1.1            knitr_1.37           pillar_1.6.4         codetools_0.2-16     reprex_2.0.1        
[61] glue_1.6.0           evaluate_0.14        data.table_1.14.2    modelr_0.1.8         vctrs_0.3.8          tzdb_0.2.0          
[67] cellranger_1.1.0     gtable_0.3.0         assertthat_0.2.1     xfun_0.29            broom_0.7.10         survival_3.1-8      
[73] viridisLite_0.4.0    beeswarm_0.4.0       TH.data_1.1-0        ellipsis_0.3.2      
LS0tCnRpdGxlOiAiQk1fcHJvamVjdF9leHBfNV82X2JyYWluX3dlaWdodF9OZXVOIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKYXV0aG9yOiAiVG9zaGl5YSBNYXRzdXNoaW1hIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCkpYCIKLS0tCgojIExpYnJhcmllcwpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGNhcikKbGlicmFyeShyc3RhdGl4KQpsaWJyYXJ5KFNpbUNvbXApCmxpYnJhcnkocmVhZHhsKQpgYGAKCgojIERhdGFzZXRzCmBgYHtyfQpkYXRhc2V0X2V4cF81X2JyYWluX3dlaWdodCA8LSByZWFkX2V4Y2VsIChwYXRoID0gIi9tbnQvYy9Vc2Vycy9Ub3NoaXlhIE1hdHN1c2hpbWEvT25lRHJpdmUvUiBwcm9qZWN0cy9CTV9wcm9qZWN0L2RhdGEgYW5hbHlzaXMgdXNpbmcgUnN0dWRpby9CTV9wcm9qZWN0X2RhdGFzZXQueGxzeCIsIHNoZWV0ID0gImV4cF81X2JyYWluX3dlaWdodCIpCmRhdGFzZXRfZXhwXzZfbmV1cm9uX2dsaWEgPC0gcmVhZF9leGNlbCAocGF0aCA9ICIvbW50L2MvVXNlcnMvVG9zaGl5YSBNYXRzdXNoaW1hL09uZURyaXZlL1IgcHJvamVjdHMvQk1fcHJvamVjdC9kYXRhIGFuYWx5c2lzIHVzaW5nIFJzdHVkaW8vQk1fcHJvamVjdF9kYXRhc2V0Lnhsc3giLCBzaGVldCA9ICJleHBfNl9uZXVyb25fZ2xpYSIpCgpkYXRhc2V0X2V4cF81X2JyYWluX3dlaWdodApkYXRhc2V0X2V4cF82X25ldXJvbl9nbGlhCmBgYAoKIyBBbmFseXNpcyBvZiBicmFpbiBhbmQgYm9keSB3ZWlnaHQKIyMgYWJzb2x1dGUgYnJhaW4gd2VpZ2h0LCBmaWd1cmUKYGBge3J9CmRhdGFzZXRfZXhwXzVfYnJhaW5fd2VpZ2h0ICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4PWRydWcsIHk9d19icmFpbiwgY29sb3VyID0gZmFjdG9yKHNleCkpKSArCiAgZ2VvbV9ib3hwbG90KCkgKwogIGdlb21fcXVhc2lyYW5kb20oKSsKICB0aGVtZV9jbGFzc2ljKCkgKwogIHlsaW0oMC41LCAxLjI1KQpnZ3NhdmUoZmlsZW5hbWUgPSAiZXhwXzVfYnJhaW5fd2VpZ2h0LnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gMTAsIHdpZHRoID0gMTAsIHVuaXRzID0gImNtIikKYGBgCgojIyBhYnNvbHV0ZSBicmFpbiB3ZWlnaHQsIGxpbmVhciBmaXR0aW5nCmBgYHtyfQpmaXRfZXhwXzVfYWJzX3dfYnJhaW4gPC0gbG0gKHdfYnJhaW4gfiBzZXggKiBkcnVnLCBkYXRhID0gZGF0YXNldF9leHBfNV9icmFpbl93ZWlnaHQpCnN1bW1hcnkgKGZpdF9leHBfNV9hYnNfd19icmFpbikKY2FyOjpBbm92YShmaXRfZXhwXzVfYWJzX3dfYnJhaW4pCmBgYAoKIyMgYWJzb2x1dGUgYm9keSB3ZWlnaHQgZmlndXJlCmBgYHtyfQpkYXRhc2V0X2V4cF81X2JyYWluX3dlaWdodCAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeD1kcnVnLCB5PXdfYm9keSwgY29sb3VyID0gZmFjdG9yKHNleCkpKSArCiAgZ2VvbV9ib3hwbG90KCkgKwogIGdlb21fcXVhc2lyYW5kb20oKSsKICB0aGVtZV9jbGFzc2ljKCkKZ2dzYXZlKGZpbGVuYW1lID0gImV4cF81X2JvZHlfd2VpZ2h0LnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gMTAsIHdpZHRoID0gMTAsIHVuaXRzID0gImNtIikKYGBgCgojIyBhYnNvbHV0ZSBib2R5IHNpemUsIGxpbmVhciBmaXR0aW5nCmBgYHtyfQpmaXRfZXhwXzVfYWJzX3dfYm9keSA8LSBsbSAod19ib2R5IH4gc2V4ICogZHJ1ZywgZGF0YSA9IGRhdGFzZXRfZXhwXzVfYnJhaW5fd2VpZ2h0KQpzdW1tYXJ5IChmaXRfZXhwXzVfYWJzX3dfYm9keSkKY2FyOjpBbm92YShmaXRfZXhwXzVfYWJzX3dfYm9keSkKYGBgCgoKIyBBbmFseXNpcyBvZiBjZWxsIGNvdW50cwoKIyMgdG90YWwgY2VsbCBudW1iZXIsIGZpZ3VyZQpgYGB7cn0KZGF0YXNldF9leHBfNl9uZXVyb25fZ2xpYSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeD1kcnVnLCB5PWNlbGxfbnVtYmVyLCBjb2xvdXIgPSBmYWN0b3Ioc2V4KSkpICsKICBnZW9tX2JveHBsb3QoKSArCiAgZ2VvbV9xdWFzaXJhbmRvbSgpICsKICB0aGVtZV9jbGFzc2ljKCkKZ2dzYXZlKGZpbGVuYW1lID0gImV4cF82X2NlbGxfbnVtYmVyLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gMTAsIHdpZHRoID0gMTAsIHVuaXRzID0gImNtIikKYGBgCgoKIyMgdG90YWwgY2VsbCBudW1iZXIsIEFOT1ZBCmBgYHtyfQpkYXRhc2V0X2V4cF82X25ldXJvbl9nbGlhICU+JSAKICBhbm92YV90ZXN0KGNlbGxfbnVtYmVyIH4gZHJ1ZykKYGBgCgojIyB0b3RhbCBjZWxsIG51bWJlciwgbGluZWFlciBmaXR0aW5nCmBgYHtyfQpmaXRfZXhwXzZfY2VsbF9jb3VudCA8LSBsbShjZWxsX251bWJlciB+IHNleCAqIGRydWcsIGRhdGEgPSBkYXRhc2V0X2V4cF82X25ldXJvbl9nbGlhKQpzdW1tYXJ5IChmaXRfZXhwXzZfY2VsbF9jb3VudCkKY2FyOjpBbm92YShmaXRfZXhwXzZfY2VsbF9jb3VudCkKYGBgCgojIyBuZXVyb25fZ2xpYSByYXRpbywgZmlndXJlCmBgYHtyfQpkYXRhc2V0X2V4cF82X25ldXJvbl9nbGlhICU+JSAKICBnZ3Bsb3QobWFwcGluZyA9IGFlcyh4PWRydWcsIHk9bmV1cm9uX3JhdGlvLCBjb2xvdXIgPSBmYWN0b3Ioc2V4KSkpICsKICBnZW9tX2JveHBsb3QoKSArCiAgZ2VvbV9wb2ludCgpKwogIHRoZW1lX2NsYXNzaWMoKQpnZ3NhdmUoZmlsZW5hbWUgPSAiZXhwXzZfbmV1cm9uX3JhdGlvLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gMTAsIHdpZHRoID0gMTAsIHVuaXRzID0gImNtIikKYGBgCgojIyBuZXVyb25fZ2xpYSByYXRpbywgQU5PVkEKYGBge3J9CmRhdGFzZXRfZXhwXzZfbmV1cm9uX2dsaWEgJT4lIAogIGFub3ZhX3Rlc3QobmV1cm9uX3JhdGlvIH4gZHJ1ZykKYGBgCgojIyBuZXVyb25fZ2xpYSByYXRpbywgbGluZWFlciBmaXR0aW5nCmBgYHtyfQpmaXRfZXhwXzZfbmV1cm9uX2dsaWFfcmF0aW8gPC0gbG0obmV1cm9uX3JhdGlvIH4gc2V4ICogZHJ1ZywgZGF0YSA9IGRhdGFzZXRfZXhwXzZfbmV1cm9uX2dsaWEpCnN1bW1hcnkgKGZpdF9leHBfNl9uZXVyb25fZ2xpYV9yYXRpbykKY2FyOjpBbm92YShmaXRfZXhwXzZfbmV1cm9uX2dsaWFfcmF0aW8pCmBgYAoKCiMgQW5hbHlzaXMgb2YgYmVoYXZpb3JhbCBkYXRhCiMjIEJNLCBmaWd1cmUKYGBge3J9CmRhdGFzZXRfZXhwXzZfbmV1cm9uX2dsaWEgJT4lIAogIGdncGxvdChtYXBwaW5nID0gYWVzKHggPSBkcnVnLCB5ID0gYm0pKSArCiAgZ2VvbV9ib3hwbG90KCkgKwogIGdlb21fcXVhc2lyYW5kb20oc2hhcGU9MTYsIHNpemU9MywgY29sb3VyPSAiYmxhY2siKSArCiAgeWxpbSgtNjAwLCA2MDApKwogIHRoZW1lX2NsYXNzaWMoKQpnZ3NhdmUoZmlsZW5hbWUgPSAiZXhwXzZfYm1fZHJ1Zy5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDEwLCB3aWR0aCA9IDcsIHVuaXRzID0gImNtIikKYGBgCgoKIyMgQk0sIGxpbmVhciBmaXR0aW5nCmBgYHtyfQpmaXRfZXhwXzZfYm0gPC0gbG0oYm0gfiBkcnVnLCBkYXRhID0gZGF0YXNldF9leHBfNl9uZXVyb25fZ2xpYSkKc3VtbWFyeShmaXRfZXhwXzZfYm0pCmNhcjo6QW5vdmEoZml0X2V4cF82X2JtKQpgYGAKCiMjIGltcHJpbnQsIGZpZ3VyZQpgYGB7cn0KZGF0YXNldF9leHBfNl9uZXVyb25fZ2xpYSAlPiUgCiAgZ2dwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGRydWcsIHkgPSBpbXByaW50KSkgKwogIGdlb21fYm94cGxvdCgpICsKICBnZW9tX3BvaW50KHNoYXBlPTE2LCBzaXplPTMsIGNvbG91cj0gImJsYWNrIikgKwogIHlsaW0oLTYwMCwgNjAwKSsKICB0aGVtZV9jbGFzc2ljKCkKZ2dzYXZlKGZpbGVuYW1lID0gImV4cF82X2ltcHJpbnRfZHJ1Zy5wbmciLCBkcGkgPSAzMDAsIGhlaWdodCA9IDEwLCB3aWR0aCA9IDcsIHVuaXRzID0gImNtIikKYGBgCgojIyBpbXByaW50LCBsaW5lYXIgZml0dGluZwpgYGB7cn0KZml0X2V4cF82X2ltcHJpbnQgPC0gbG0oaW1wcmludCB+IGRydWcsIGRhdGEgPSBkYXRhc2V0X2V4cF82X25ldXJvbl9nbGlhKQpzdW1tYXJ5KGZpdF9leHBfNl9pbXByaW50KQpjYXI6OkFub3ZhKGZpdF9leHBfNl9pbXByaW50KQpgYGAKCgojIHNlc3Npb25JbmZvCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYA==