Load packages

library(scran)
library(scater)
library(scuttle)
library(ggplot2)
library(cowplot)
library(SingleCellExperiment)
load("~/workspace/c_moor_data/gastrulation/gastrulation_sce.rda") 
#dim: 29452 139331 

#log normalize
sce <- logNormCounts(sce)

RHD2 Orthologs:

##RHD2 Orthologs:
#Duox1
gene <- "ENSMUSG00000033268"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Duox2
gene <- "ENSMUSG00000068452"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Grouped plots for Duox1 and Duox2
gene_group <- c("ENSMUSG00000033268", "ENSMUSG00000068452")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 46038 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

RHD6 Orthologs

##RHD6 Orthologs
#Sohlh1
gene <- "ENSMUSG00000059625"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Sohlh2
gene <- "ENSMUSG00000027794"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Group Plots for Sohlh1 and Sohlh2
gene_group <- c("ENSMUSG00000059625", "ENSMUSG00000027794")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 46038 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

ACT2 and ACT7 Orthologs:

##ACT2/ACT7 Orthologs: 
#Actg2 (7/9)
#positive regulation of gene expression, mesenchyme migration   
gene <- "ENSMUSG00000059430"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Acta1 (7/9)
#response to mechanical stimulus, skeletal muscle fiber development, mesenchyme migration, Striated Muscle Contraction, Muscle contraction
gene <- "ENSMUSG00000031972"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Acta2 (7/9)
#regulation of wound healing, mesenchyme migration, Smooth Muscle Contraction
gene <- "ENSMUSG00000035783"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Actc1 (7/9)
#actin filament organization, cardiac muscle tissue morphogenesis, mesenchyme migration, multiple signaling, Striated Muscle Contraction
gene <- "ENSMUSG00000068614"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Group Plots for Actg2, Acta1, Acta2, Actc1
gene_group <- c("ENSMUSG00000059430", "ENSMUSG00000031972", "ENSMUSG00000035783", "ENSMUSG00000068614")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 92076 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

ATN1 Orthologs:

##ATN1 Orthologs:
#Lyn (1/9)
#positive regulation of neuron projection development, multiple signlaing, oligodendrocyte development, neuron projection development, positive regulation of glial cell proliferation, Nervous system development, immune system
gene <- "ENSMUSG00000042228"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Ptk6 (1/9)
#positive regulation of neuron projection development, signaling, immune system, 
gene <- "ENSMUSG00000038751"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Group Plots for Lyn and Ptk6
gene_group <- c("ENSMUSG00000042228", "ENSMUSG00000038751")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 46038 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

ARAC5 and ARAC4 Orthologs

##ARAC5/ARAC4 --  root hair initiation, root hairs play role in detecting mechanical stimulus from rain and guiding signaling toward plant to activate genes for immune response
#Rac2 (7/9)
#Ras signaling pathway, Rap1 signaling pathway, Pathways in cancer, literally every signaling pathway including many involved in immune response 
gene <- "ENSMUSG00000033220"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90))

plotExpression(object = sce, features = gene, x = "celltype", colour_by = "celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 23019 rows containing missing values (geom_point).

ACT8 and ACT2 Orthologs

##ACT8/ACT2: root hair cell tip growth % intercellular transport
#Actrt3 ----  e! (48%, many to many, certainty:NO) 
gene <- "ENSMUSG00000037737"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

plotExpression(object = sce, features = gene, x = "celltype", colour_by = "celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 23019 rows containing missing values (geom_point).

COW1 Orthologs

##COW1: cell tip growth, root epidermal cell differentiation, protein transport, root hair elongation   
#Sec14l2 ---- Flybase (4/9 YY) --- e!(24%, many to many, certainty:NO)
# positive regulation of cholesterol biosynthetic process, regulation of catalytic activity 
gene <- "ENSMUSG00000003585"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Sec14l3 ---- Flybase (4/9 YY) --- e!(24%, many to many, certainty:NO)
gene <- "ENSMUSG00000054986"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Group plots for Sec14l2 and Sec14l3
gene_group <- c("ENSMUSG00000003585", "ENSMUSG00000054986")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 46038 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

VLN4 Orthologs

##VLN4 --  actin filament organization  root hair elongation    everything actin
#Gsn -- FlyBase (8/9 YY) e!(30%, m:m, certaintiy:no)
#central nervous system development actin polymerization or depolymerization    striated muscle atrophy cell projection organization     
gene <- "ENSMUSG00000026879"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Scin -- FlyBase (8/9 YY) e!(30%, m:m, certaintiy:no)
#central nervous system development actin polymerization or depolymerization    striated cell projection assembly       cell projection organization     regulation of chondrocyte differentiation  Viral carcinogenesis    
gene <- "ENSMUSG00000002565"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Vil1 -- FlyBase (8/9 YY) e!(30%, m:m, certaintiy:no)
#epidermal growth factor receptor signaling pathway     actin polymerization or depolymerization     
gene <- "ENSMUSG00000026175"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Group plots for Gsn, Scin, and Vil1
gene_group <- c("ENSMUSG00000026879", "ENSMUSG00000002565", "ENSMUSG00000026175")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 69057 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

NRAMP2 Orthologs

##NRAMP2: ion transport root morphogenesis  root hair elongation    positive regulation of unidimensional cell growth   
#Slc11a1 ----  Flybase (8/9 YY) e! (43%, many to many, certainty:NO) 
# MAPK cascade  regulation of cytokine production  immune response  ion transport    inflammatory response    defense response to bacterium and protozoan 
gene <- "ENSMUSG00000026177"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

plotExpression(object = sce, features = gene, x = "celltype", colour_by = "celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 23019 rows containing missing values (geom_point).

PIP2-4 Orthologs

##PIP2-4: water transport    response to abscisic acid   root hair elongation     transmembrane 
#Aqp5 ----  Flybase (6/9 NN) e! (30%, many to many, certainty:NO) 
# water transport    pancreatic juice secretion  odontogenesis  transmembrane transport  cellular hypotonic response     Salivary secretion 
gene <- "ENSMUSG00000044217"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Aqp4 ----  Flybase (6/9 NN) e! (30%, many to many, certainty:NO) 
# water transport    sensory perception of sound         regulation of vascular endothelial growth factor production      transmembrane transport    water homeostasis  Bile secretion  Vasopressin-regulated water reabsorption         
gene <- "ENSMUSG00000024411"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Aqp1 ----  Flybase (7/9 YN) e! (30%, many to many, certainty:NO) 
# water transport    glomerular filtration       cellular water homeostasis   transmembrane transport    cellular response to mechanical stimulus    Bile secretion  Renin secretion     Proximal tubule bicarbonate reclamation    
gene <- "ENSMUSG00000004655"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

#Group plots for Aqp5, Aqp4, and Aqp1
gene_group <- c("ENSMUSG00000044217", "ENSMUSG00000024411", "ENSMUSG00000004655")
plotExpression(object = sce, features = gene_group, x = "celltype", colour_by ="celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 69057 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene_group, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

PIN6 Orthologs

##PIN6: auxin-activated signaling pathway    negative regulation of ethylene-activated signaling pathway     root hair elongation    transmembrane transport     negative regulation of lateral root development        
#Gpr155 ----  Flybase (1/9 YY)  
# intracellular signal transduction  cognition  transmembrane transport  
gene <- "ENSMUSG00000041762"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

plotExpression(object = sce, features = gene, x = "celltype", colour_by = "celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 23019 rows containing missing values (geom_point).

ABCB4 Orthologs

##ABCB4: gravitropism   response to auxin     response to cytokinin   xenobiotic transport   root hair elongation    transmembrane  ABC transporters             
#Abcb1a ----  Flybase (9/9 YY)  e!(41%, many to many, certainity: NO)
# placenta development   brain development   circadian rhythm    hormone transport   response to organic substance   maintenance of blood-brain barrier  MicroRNAs in cancer    ABC transporters         
gene <- "ENSMUSG00000040584"
plotReducedDim(object = sce, dimred = "umap", colour_by = gene)
Warning: Removed 23019 rows containing missing values (geom_point).

plotExpression(object = sce, features = gene, x = "stage", colour_by = "stage") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")

plotExpression(object = sce, features = gene, x = "celltype", colour_by = "celltype") +
  theme(axis.text.x = element_text(angle = 90), legend.position = "none")
Warning: Removed 23019 rows containing missing values (geom_point).

sessionInfo()
R version 4.1.2 (2021-11-01)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 8 (Core)

Matrix products: default
BLAS:   /home/idies/R/lib64/R/lib/libRblas.so
LAPACK: /home/idies/R/lib64/R/lib/libRlapack.so

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

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

other attached packages:
 [1] cowplot_1.1.1               scater_1.22.0              
 [3] ggplot2_3.3.5               scran_1.22.1               
 [5] scuttle_1.4.0               SingleCellExperiment_1.16.0
 [7] SummarizedExperiment_1.24.0 Biobase_2.54.0             
 [9] GenomicRanges_1.46.1        GenomeInfoDb_1.30.0        
[11] IRanges_2.28.0              S4Vectors_0.32.3           
[13] BiocGenerics_0.40.0         MatrixGenerics_1.6.0       
[15] matrixStats_0.61.0         

loaded via a namespace (and not attached):
 [1] bitops_1.0-7              tools_4.1.2               bslib_0.3.1              
 [4] utf8_1.2.2                R6_2.5.1                  irlba_2.3.5              
 [7] vipor_0.4.5               DBI_1.1.2                 colorspace_2.0-2         
[10] withr_2.4.3               tidyselect_1.1.1          gridExtra_2.3            
[13] compiler_4.1.2            BiocNeighbors_1.12.0      DelayedArray_0.20.0      
[16] sass_0.4.0                labeling_0.4.2            scales_1.1.1             
[19] stringr_1.4.0             digest_0.6.29             rmarkdown_2.11           
[22] XVector_0.34.0            pkgconfig_2.0.3           htmltools_0.5.2          
[25] sparseMatrixStats_1.6.0   fastmap_1.1.0             limma_3.50.0             
[28] rlang_0.4.12              DelayedMatrixStats_1.16.0 jquerylib_0.1.4          
[31] generics_0.1.1            farver_2.1.0              jsonlite_1.7.3           
[34] BiocParallel_1.28.3       dplyr_1.0.7               RCurl_1.98-1.5           
[37] magrittr_2.0.1            BiocSingular_1.10.0       GenomeInfoDbData_1.2.7   
[40] Matrix_1.3-4              Rcpp_1.0.8                ggbeeswarm_0.6.0         
[43] munsell_0.5.0             fansi_1.0.2               viridis_0.6.2            
[46] lifecycle_1.0.1           stringi_1.7.6             yaml_2.2.1               
[49] edgeR_3.36.0              zlibbioc_1.40.0           grid_4.1.2               
[52] parallel_4.1.2            ggrepel_0.9.1             dqrng_0.3.0              
[55] crayon_1.4.2              lattice_0.20-45           beachmat_2.10.0          
[58] locfit_1.5-9.4            metapod_1.2.0             knitr_1.37               
[61] pillar_1.6.4              igraph_1.2.11             ScaledMatrix_1.2.0       
[64] glue_1.6.0                evaluate_0.14             vctrs_0.3.8              
[67] gtable_0.3.0              purrr_0.3.4               assertthat_0.2.1         
[70] xfun_0.29                 rsvd_1.0.5                viridisLite_0.4.0        
[73] tibble_3.1.6              beeswarm_0.4.0            cluster_2.1.2            
[76] bluster_1.4.0             statmod_1.4.36            ellipsis_0.3.2           
LS0tCnRpdGxlOiAiQXJhYmlkb3BzaXMgVGguIFJvb3QgSGFpciBhbmQgTXVzIE11c2N1bHVzIE5ldXJhbCBTcGVjaWZpYyBHZW5lIE9ydGhvbG9ncyIKb3V0cHV0OiBodG1sX25vdGVib29rCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKIyBMb2FkIHBhY2thZ2VzCgpgYGB7ciBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHNjcmFuKQpsaWJyYXJ5KHNjYXRlcikKbGlicmFyeShzY3V0dGxlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShTaW5nbGVDZWxsRXhwZXJpbWVudCkKYGBgCgpgYGB7cn0KbG9hZCgifi93b3Jrc3BhY2UvY19tb29yX2RhdGEvZ2FzdHJ1bGF0aW9uL2dhc3RydWxhdGlvbl9zY2UucmRhIikgCiNkaW06IDI5NDUyIDEzOTMzMSAKCiNsb2cgbm9ybWFsaXplCnNjZSA8LSBsb2dOb3JtQ291bnRzKHNjZSkKYGBgCgojIyMgUkhEMiBPcnRob2xvZ3M6CgpgYGB7cn0KIyNSSEQyIE9ydGhvbG9nczoKI0R1b3gxCmdlbmUgPC0gIkVOU01VU0cwMDAwMDAzMzI2OCIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCgojRHVveDIKZ2VuZSA8LSAiRU5TTVVTRzAwMDAwMDY4NDUyIgpwbG90UmVkdWNlZERpbShvYmplY3QgPSBzY2UsIGRpbXJlZCA9ICJ1bWFwIiwgY29sb3VyX2J5ID0gZ2VuZSkKCiNHcm91cGVkIHBsb3RzIGZvciBEdW94MSBhbmQgRHVveDIKZ2VuZV9ncm91cCA8LSBjKCJFTlNNVVNHMDAwMDAwMzMyNjgiLCAiRU5TTVVTRzAwMDAwMDY4NDUyIikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmVfZ3JvdXAsIHggPSAiY2VsbHR5cGUiLCBjb2xvdXJfYnkgPSJjZWxsdHlwZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZV9ncm91cCwgeCA9ICJzdGFnZSIsIGNvbG91cl9ieSA9ICJzdGFnZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIyBSSEQ2IE9ydGhvbG9ncwoKYGBge3J9CiMjUkhENiBPcnRob2xvZ3MKI1NvaGxoMQpnZW5lIDwtICJFTlNNVVNHMDAwMDAwNTk2MjUiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI1NvaGxoMgpnZW5lIDwtICJFTlNNVVNHMDAwMDAwMjc3OTQiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI0dyb3VwIFBsb3RzIGZvciBTb2hsaDEgYW5kIFNvaGxoMgpnZW5lX2dyb3VwIDwtIGMoIkVOU01VU0cwMDAwMDA1OTYyNSIsICJFTlNNVVNHMDAwMDAwMjc3OTQiKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZV9ncm91cCwgeCA9ICJjZWxsdHlwZSIsIGNvbG91cl9ieSA9ImNlbGx0eXBlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lX2dyb3VwLCB4ID0gInN0YWdlIiwgY29sb3VyX2J5ID0gInN0YWdlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKIyMjIEFDVDIgYW5kIEFDVDcgT3J0aG9sb2dzOgoKYGBge3J9CiMjQUNUMi9BQ1Q3IE9ydGhvbG9nczogCiNBY3RnMiAoNy85KQojcG9zaXRpdmUgcmVndWxhdGlvbiBvZiBnZW5lIGV4cHJlc3Npb24sIG1lc2VuY2h5bWUgbWlncmF0aW9uCQpnZW5lIDwtICJFTlNNVVNHMDAwMDAwNTk0MzAiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI0FjdGExICg3LzkpCiNyZXNwb25zZSB0byBtZWNoYW5pY2FsIHN0aW11bHVzLCBza2VsZXRhbCBtdXNjbGUgZmliZXIgZGV2ZWxvcG1lbnQsIG1lc2VuY2h5bWUgbWlncmF0aW9uLCBTdHJpYXRlZCBNdXNjbGUgQ29udHJhY3Rpb24sIE11c2NsZSBjb250cmFjdGlvbgpnZW5lIDwtICJFTlNNVVNHMDAwMDAwMzE5NzIiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI0FjdGEyICg3LzkpCiNyZWd1bGF0aW9uIG9mIHdvdW5kIGhlYWxpbmcsIG1lc2VuY2h5bWUgbWlncmF0aW9uLCBTbW9vdGggTXVzY2xlIENvbnRyYWN0aW9uCmdlbmUgPC0gIkVOU01VU0cwMDAwMDAzNTc4MyIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCgojQWN0YzEgKDcvOSkKI2FjdGluIGZpbGFtZW50IG9yZ2FuaXphdGlvbiwgY2FyZGlhYyBtdXNjbGUgdGlzc3VlIG1vcnBob2dlbmVzaXMsIG1lc2VuY2h5bWUgbWlncmF0aW9uLCBtdWx0aXBsZSBzaWduYWxpbmcsIFN0cmlhdGVkIE11c2NsZSBDb250cmFjdGlvbgpnZW5lIDwtICJFTlNNVVNHMDAwMDAwNjg2MTQiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI0dyb3VwIFBsb3RzIGZvciBBY3RnMiwgQWN0YTEsIEFjdGEyLCBBY3RjMQpnZW5lX2dyb3VwIDwtIGMoIkVOU01VU0cwMDAwMDA1OTQzMCIsICJFTlNNVVNHMDAwMDAwMzE5NzIiLCAiRU5TTVVTRzAwMDAwMDM1NzgzIiwgIkVOU01VU0cwMDAwMDA2ODYxNCIpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lX2dyb3VwLCB4ID0gImNlbGx0eXBlIiwgY29sb3VyX2J5ID0iY2VsbHR5cGUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmVfZ3JvdXAsIHggPSAic3RhZ2UiLCBjb2xvdXJfYnkgPSAic3RhZ2UiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgojIyMgQVROMSBPcnRob2xvZ3M6CgpgYGB7cn0KIyNBVE4xIE9ydGhvbG9nczoKI0x5biAoMS85KQojcG9zaXRpdmUgcmVndWxhdGlvbiBvZiBuZXVyb24gcHJvamVjdGlvbiBkZXZlbG9wbWVudCwgbXVsdGlwbGUgc2lnbmxhaW5nLCBvbGlnb2RlbmRyb2N5dGUgZGV2ZWxvcG1lbnQsIG5ldXJvbiBwcm9qZWN0aW9uIGRldmVsb3BtZW50LCBwb3NpdGl2ZSByZWd1bGF0aW9uIG9mIGdsaWFsIGNlbGwgcHJvbGlmZXJhdGlvbiwgTmVydm91cyBzeXN0ZW0gZGV2ZWxvcG1lbnQsIGltbXVuZSBzeXN0ZW0KZ2VuZSA8LSAiRU5TTVVTRzAwMDAwMDQyMjI4IgpwbG90UmVkdWNlZERpbShvYmplY3QgPSBzY2UsIGRpbXJlZCA9ICJ1bWFwIiwgY29sb3VyX2J5ID0gZ2VuZSkKCiNQdGs2ICgxLzkpCiNwb3NpdGl2ZSByZWd1bGF0aW9uIG9mIG5ldXJvbiBwcm9qZWN0aW9uIGRldmVsb3BtZW50LCBzaWduYWxpbmcsIGltbXVuZSBzeXN0ZW0sIApnZW5lIDwtICJFTlNNVVNHMDAwMDAwMzg3NTEiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI0dyb3VwIFBsb3RzIGZvciBMeW4gYW5kIFB0azYKZ2VuZV9ncm91cCA8LSBjKCJFTlNNVVNHMDAwMDAwNDIyMjgiLCAiRU5TTVVTRzAwMDAwMDM4NzUxIikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmVfZ3JvdXAsIHggPSAiY2VsbHR5cGUiLCBjb2xvdXJfYnkgPSJjZWxsdHlwZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZV9ncm91cCwgeCA9ICJzdGFnZSIsIGNvbG91cl9ieSA9ICJzdGFnZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIyBBUkFDNSBhbmQgQVJBQzQgT3J0aG9sb2dzCgpgYGB7cn0KIyNBUkFDNS9BUkFDNCAtLSAgcm9vdCBoYWlyIGluaXRpYXRpb24sIHJvb3QgaGFpcnMgcGxheSByb2xlIGluIGRldGVjdGluZyBtZWNoYW5pY2FsIHN0aW11bHVzIGZyb20gcmFpbiBhbmQgZ3VpZGluZyBzaWduYWxpbmcgdG93YXJkIHBsYW50IHRvIGFjdGl2YXRlIGdlbmVzIGZvciBpbW11bmUgcmVzcG9uc2UKI1JhYzIgKDcvOSkKI1JhcyBzaWduYWxpbmcgcGF0aHdheSwgUmFwMSBzaWduYWxpbmcgcGF0aHdheSwgUGF0aHdheXMgaW4gY2FuY2VyLCBsaXRlcmFsbHkgZXZlcnkgc2lnbmFsaW5nIHBhdGh3YXkgaW5jbHVkaW5nIG1hbnkgaW52b2x2ZWQgaW4gaW1tdW5lIHJlc3BvbnNlIApnZW5lIDwtICJFTlNNVVNHMDAwMDAwMzMyMjAiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZSwgeCA9ICJzdGFnZSIsIGNvbG91cl9ieSA9ICJzdGFnZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmUsIHggPSAiY2VsbHR5cGUiLCBjb2xvdXJfYnkgPSAiY2VsbHR5cGUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgojIyMgQUNUOCBhbmQgQUNUMiBPcnRob2xvZ3MKCmBgYHtyfQojI0FDVDgvQUNUMjogcm9vdCBoYWlyIGNlbGwgdGlwIGdyb3d0aCAlIGludGVyY2VsbHVsYXIgdHJhbnNwb3J0CiNBY3RydDMgLS0tLSAgZSEgKDQ4JSwgbWFueSB0byBtYW55LCBjZXJ0YWludHk6Tk8pIApnZW5lIDwtICJFTlNNVVNHMDAwMDAwMzc3MzciCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZSwgeCA9ICJzdGFnZSIsIGNvbG91cl9ieSA9ICJzdGFnZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZSwgeCA9ICJjZWxsdHlwZSIsIGNvbG91cl9ieSA9ICJjZWxsdHlwZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIyBDT1cxIE9ydGhvbG9ncwoKYGBge3J9CiMjQ09XMTogY2VsbCB0aXAgZ3Jvd3RoLCByb290IGVwaWRlcm1hbCBjZWxsIGRpZmZlcmVudGlhdGlvbiwgcHJvdGVpbiB0cmFuc3BvcnQsIHJvb3QgaGFpciBlbG9uZ2F0aW9uCQojU2VjMTRsMiAtLS0tIEZseWJhc2UgKDQvOSBZWSkgLS0tIGUhKDI0JSwgbWFueSB0byBtYW55LCBjZXJ0YWludHk6Tk8pCiMgcG9zaXRpdmUgcmVndWxhdGlvbiBvZiBjaG9sZXN0ZXJvbCBiaW9zeW50aGV0aWMgcHJvY2VzcywgcmVndWxhdGlvbiBvZiBjYXRhbHl0aWMgYWN0aXZpdHkJCmdlbmUgPC0gIkVOU01VU0cwMDAwMDAwMzU4NSIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCgojU2VjMTRsMyAtLS0tIEZseWJhc2UgKDQvOSBZWSkgLS0tIGUhKDI0JSwgbWFueSB0byBtYW55LCBjZXJ0YWludHk6Tk8pCmdlbmUgPC0gIkVOU01VU0cwMDAwMDA1NDk4NiIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCgojR3JvdXAgcGxvdHMgZm9yIFNlYzE0bDIgYW5kIFNlYzE0bDMKZ2VuZV9ncm91cCA8LSBjKCJFTlNNVVNHMDAwMDAwMDM1ODUiLCAiRU5TTVVTRzAwMDAwMDU0OTg2IikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmVfZ3JvdXAsIHggPSAiY2VsbHR5cGUiLCBjb2xvdXJfYnkgPSJjZWxsdHlwZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZV9ncm91cCwgeCA9ICJzdGFnZSIsIGNvbG91cl9ieSA9ICJzdGFnZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIyBWTE40IE9ydGhvbG9ncwoKYGBge3J9CiMjVkxONCAtLSAgYWN0aW4gZmlsYW1lbnQgb3JnYW5pemF0aW9uCXJvb3QgaGFpciBlbG9uZ2F0aW9uCWV2ZXJ5dGhpbmcgYWN0aW4KI0dzbiAtLSBGbHlCYXNlICg4LzkgWVkpIGUhKDMwJSwgbTptLCBjZXJ0YWludGl5Om5vKQojY2VudHJhbCBuZXJ2b3VzIHN5c3RlbSBkZXZlbG9wbWVudAlhY3RpbiBwb2x5bWVyaXphdGlvbiBvciBkZXBvbHltZXJpemF0aW9uCXN0cmlhdGVkIG11c2NsZSBhdHJvcGh5CWNlbGwgcHJvamVjdGlvbiBvcmdhbml6YXRpb24JIApnZW5lIDwtICJFTlNNVVNHMDAwMDAwMjY4NzkiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI1NjaW4gLS0gRmx5QmFzZSAoOC85IFlZKSBlISgzMCUsIG06bSwgY2VydGFpbnRpeTpubykKI2NlbnRyYWwgbmVydm91cyBzeXN0ZW0gZGV2ZWxvcG1lbnQJYWN0aW4gcG9seW1lcml6YXRpb24gb3IgZGVwb2x5bWVyaXphdGlvbglzdHJpYXRlZCBjZWxsIHByb2plY3Rpb24gYXNzZW1ibHkJCWNlbGwgcHJvamVjdGlvbiBvcmdhbml6YXRpb24JIHJlZ3VsYXRpb24gb2YgY2hvbmRyb2N5dGUgZGlmZmVyZW50aWF0aW9uCVZpcmFsIGNhcmNpbm9nZW5lc2lzCQpnZW5lIDwtICJFTlNNVVNHMDAwMDAwMDI1NjUiCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI1ZpbDEgLS0gRmx5QmFzZSAoOC85IFlZKSBlISgzMCUsIG06bSwgY2VydGFpbnRpeTpubykKI2VwaWRlcm1hbCBncm93dGggZmFjdG9yIHJlY2VwdG9yIHNpZ25hbGluZyBwYXRod2F5CQlhY3RpbiBwb2x5bWVyaXphdGlvbiBvciBkZXBvbHltZXJpemF0aW9uCSAKZ2VuZSA8LSAiRU5TTVVTRzAwMDAwMDI2MTc1IgpwbG90UmVkdWNlZERpbShvYmplY3QgPSBzY2UsIGRpbXJlZCA9ICJ1bWFwIiwgY29sb3VyX2J5ID0gZ2VuZSkKCiNHcm91cCBwbG90cyBmb3IgR3NuLCBTY2luLCBhbmQgVmlsMQpnZW5lX2dyb3VwIDwtIGMoIkVOU01VU0cwMDAwMDAyNjg3OSIsICJFTlNNVVNHMDAwMDAwMDI1NjUiLCAiRU5TTVVTRzAwMDAwMDI2MTc1IikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmVfZ3JvdXAsIHggPSAiY2VsbHR5cGUiLCBjb2xvdXJfYnkgPSJjZWxsdHlwZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpwbG90RXhwcmVzc2lvbihvYmplY3QgPSBzY2UsIGZlYXR1cmVzID0gZ2VuZV9ncm91cCwgeCA9ICJzdGFnZSIsIGNvbG91cl9ieSA9ICJzdGFnZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCiMjIyBOUkFNUDIgT3J0aG9sb2dzCgpgYGB7cn0KIyNOUkFNUDI6IGlvbiB0cmFuc3BvcnQJcm9vdCBtb3JwaG9nZW5lc2lzCXJvb3QgaGFpciBlbG9uZ2F0aW9uCXBvc2l0aXZlIHJlZ3VsYXRpb24gb2YgdW5pZGltZW5zaW9uYWwgY2VsbCBncm93dGgJCiNTbGMxMWExIC0tLS0gIEZseWJhc2UgKDgvOSBZWSkgZSEgKDQzJSwgbWFueSB0byBtYW55LCBjZXJ0YWludHk6Tk8pIAojIE1BUEsgY2FzY2FkZQlyZWd1bGF0aW9uIG9mIGN5dG9raW5lIHByb2R1Y3Rpb24gIGltbXVuZSByZXNwb25zZSAgaW9uIHRyYW5zcG9ydAkgaW5mbGFtbWF0b3J5IHJlc3BvbnNlCSAgZGVmZW5zZSByZXNwb25zZSB0byBiYWN0ZXJpdW0gYW5kIHByb3Rvem9hbiAKZ2VuZSA8LSAiRU5TTVVTRzAwMDAwMDI2MTc3IgpwbG90UmVkdWNlZERpbShvYmplY3QgPSBzY2UsIGRpbXJlZCA9ICJ1bWFwIiwgY29sb3VyX2J5ID0gZ2VuZSkKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmUsIHggPSAic3RhZ2UiLCBjb2xvdXJfYnkgPSAic3RhZ2UiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmUsIHggPSAiY2VsbHR5cGUiLCBjb2xvdXJfYnkgPSAiY2VsbHR5cGUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgojIyMgUElQMi00IE9ydGhvbG9ncwoKYGBge3J9CiMjUElQMi00OiB3YXRlciB0cmFuc3BvcnQJIHJlc3BvbnNlIHRvIGFic2Npc2ljIGFjaWQJIHJvb3QgaGFpciBlbG9uZ2F0aW9uCSAgdHJhbnNtZW1icmFuZSAKI0FxcDUgLS0tLSAgRmx5YmFzZSAoNi85IE5OKSBlISAoMzAlLCBtYW55IHRvIG1hbnksIGNlcnRhaW50eTpOTykgCiMgd2F0ZXIgdHJhbnNwb3J0CSBwYW5jcmVhdGljIGp1aWNlIHNlY3JldGlvbgkgb2RvbnRvZ2VuZXNpcyAgdHJhbnNtZW1icmFuZSB0cmFuc3BvcnQJIGNlbGx1bGFyIGh5cG90b25pYyByZXNwb25zZQkgU2FsaXZhcnkgc2VjcmV0aW9uCQpnZW5lIDwtICJFTlNNVVNHMDAwMDAwNDQyMTciCnBsb3RSZWR1Y2VkRGltKG9iamVjdCA9IHNjZSwgZGltcmVkID0gInVtYXAiLCBjb2xvdXJfYnkgPSBnZW5lKQoKI0FxcDQgLS0tLSAgRmx5YmFzZSAoNi85IE5OKSBlISAoMzAlLCBtYW55IHRvIG1hbnksIGNlcnRhaW50eTpOTykgCiMgd2F0ZXIgdHJhbnNwb3J0CSBzZW5zb3J5IHBlcmNlcHRpb24gb2Ygc291bmQJCSByZWd1bGF0aW9uIG9mIHZhc2N1bGFyIGVuZG90aGVsaWFsIGdyb3d0aCBmYWN0b3IgcHJvZHVjdGlvbgkgIHRyYW5zbWVtYnJhbmUgdHJhbnNwb3J0CSB3YXRlciBob21lb3N0YXNpcwlCaWxlIHNlY3JldGlvbglWYXNvcHJlc3Npbi1yZWd1bGF0ZWQgd2F0ZXIgcmVhYnNvcnB0aW9uCQkgCmdlbmUgPC0gIkVOU01VU0cwMDAwMDAyNDQxMSIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCgojQXFwMSAtLS0tICBGbHliYXNlICg3LzkgWU4pIGUhICgzMCUsIG1hbnkgdG8gbWFueSwgY2VydGFpbnR5Ok5PKSAKIyB3YXRlciB0cmFuc3BvcnQJIGdsb21lcnVsYXIgZmlsdHJhdGlvbgkJIGNlbGx1bGFyIHdhdGVyIGhvbWVvc3Rhc2lzCSAgdHJhbnNtZW1icmFuZSB0cmFuc3BvcnQJIGNlbGx1bGFyIHJlc3BvbnNlIHRvIG1lY2hhbmljYWwgc3RpbXVsdXMJIEJpbGUgc2VjcmV0aW9uCSBSZW5pbiBzZWNyZXRpb24JIFByb3hpbWFsIHR1YnVsZSBiaWNhcmJvbmF0ZSByZWNsYW1hdGlvbgkKZ2VuZSA8LSAiRU5TTVVTRzAwMDAwMDA0NjU1IgpwbG90UmVkdWNlZERpbShvYmplY3QgPSBzY2UsIGRpbXJlZCA9ICJ1bWFwIiwgY29sb3VyX2J5ID0gZ2VuZSkKCiNHcm91cCBwbG90cyBmb3IgQXFwNSwgQXFwNCwgYW5kIEFxcDEKZ2VuZV9ncm91cCA8LSBjKCJFTlNNVVNHMDAwMDAwNDQyMTciLCAiRU5TTVVTRzAwMDAwMDI0NDExIiwgIkVOU01VU0cwMDAwMDAwNDY1NSIpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lX2dyb3VwLCB4ID0gImNlbGx0eXBlIiwgY29sb3VyX2J5ID0iY2VsbHR5cGUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKcGxvdEV4cHJlc3Npb24ob2JqZWN0ID0gc2NlLCBmZWF0dXJlcyA9IGdlbmVfZ3JvdXAsIHggPSAic3RhZ2UiLCBjb2xvdXJfYnkgPSAic3RhZ2UiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgojIyMgUElONiBPcnRob2xvZ3MKCmBgYHtyfQojI1BJTjY6IGF1eGluLWFjdGl2YXRlZCBzaWduYWxpbmcgcGF0aHdheQkgbmVnYXRpdmUgcmVndWxhdGlvbiBvZiBldGh5bGVuZS1hY3RpdmF0ZWQgc2lnbmFsaW5nIHBhdGh3YXkJIHJvb3QgaGFpciBlbG9uZ2F0aW9uCSB0cmFuc21lbWJyYW5lIHRyYW5zcG9ydAkgbmVnYXRpdmUgcmVndWxhdGlvbiBvZiBsYXRlcmFsIHJvb3QgZGV2ZWxvcG1lbnQJCQojR3ByMTU1IC0tLS0gIEZseWJhc2UgKDEvOSBZWSkgIAojIGludHJhY2VsbHVsYXIgc2lnbmFsIHRyYW5zZHVjdGlvbgkgY29nbml0aW9uICB0cmFuc21lbWJyYW5lIHRyYW5zcG9ydAkgCmdlbmUgPC0gIkVOU01VU0cwMDAwMDA0MTc2MiIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lLCB4ID0gInN0YWdlIiwgY29sb3VyX2J5ID0gInN0YWdlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lLCB4ID0gImNlbGx0eXBlIiwgY29sb3VyX2J5ID0gImNlbGx0eXBlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKIyMjIEFCQ0I0IE9ydGhvbG9ncwoKYGBge3J9CiMjQUJDQjQ6IGdyYXZpdHJvcGlzbSAgIHJlc3BvbnNlIHRvIGF1eGluCSAgcmVzcG9uc2UgdG8gY3l0b2tpbmluCSAgeGVub2Jpb3RpYyB0cmFuc3BvcnQJIHJvb3QgaGFpciBlbG9uZ2F0aW9uCSB0cmFuc21lbWJyYW5lICBBQkMgdHJhbnNwb3J0ZXJzCQkJIAojQWJjYjFhIC0tLS0gIEZseWJhc2UgKDkvOSBZWSkgIGUhKDQxJSwgbWFueSB0byBtYW55LCBjZXJ0YWluaXR5OiBOTykKIyBwbGFjZW50YSBkZXZlbG9wbWVudAkgYnJhaW4gZGV2ZWxvcG1lbnQJIGNpcmNhZGlhbiByaHl0aG0JIGhvcm1vbmUgdHJhbnNwb3J0CSByZXNwb25zZSB0byBvcmdhbmljIHN1YnN0YW5jZQkgbWFpbnRlbmFuY2Ugb2YgYmxvb2QtYnJhaW4gYmFycmllcgkgTWljcm9STkFzIGluIGNhbmNlcglBQkMgdHJhbnNwb3J0ZXJzCQkgCmdlbmUgPC0gIkVOU01VU0cwMDAwMDA0MDU4NCIKcGxvdFJlZHVjZWREaW0ob2JqZWN0ID0gc2NlLCBkaW1yZWQgPSAidW1hcCIsIGNvbG91cl9ieSA9IGdlbmUpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lLCB4ID0gInN0YWdlIiwgY29sb3VyX2J5ID0gInN0YWdlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCnBsb3RFeHByZXNzaW9uKG9iamVjdCA9IHNjZSwgZmVhdHVyZXMgPSBnZW5lLCB4ID0gImNlbGx0eXBlIiwgY29sb3VyX2J5ID0gImNlbGx0eXBlIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKPGRldGFpbHM+CgpgYGB7cn0Kc2Vzc2lvbkluZm8oKQpgYGAKCjwvZGV0YWlscz4K