Parameters:
suffix = "top_25"
threshold = 25
data_to_read = "acc1_cancer_cells_15KnCount_V3.RDS"
- suffix = top_25
- data_to_read = acc1_cancer_cells_15KnCount_V3.RDS
- threshold = 25
functions
source("./.Rprofile")
Welcome to HMSC project.
source_from_github(repositoy = "DEG_functions",version = "0.2.1")
ℹ SHA-1 hash of file is 4aae7e1f13306aa81aa2d8e76dec76035a4dac8f
top_correlated <- function(genes, threshold) {
markers_expression = FetchData(object = acc1_cancer_cells,vars = genes,slot = "data")
markers_average = rowMeans(markers_expression) %>% as.data.frame() %>% rename("average" = 1)
cor_mat = cor(expression %>% t(), markers_average)%>% as.data.frame()
cor_mat = cor_mat[complete.cases(cor_mat),,drop=F] %>% as.data.frame %>% rename("corr" = 1) #remove rows with NA in at least one col
if (threshold<1){
top_genes = cor_mat %>% as.data.frame %>% select(1) %>% dplyr::filter(.> threshold) %>% rownames()
}else{
top_genes = cor_mat %>% top_n(threshold,corr) %>% rownames()
}
return(top_genes)
}
top_genes_cor_heatmap <- function(top_genes) {
top_expression = expression %>% dplyr::filter(rownames(expression) %in% top_genes)
colors <- c(seq(-1,1,by=0.01))
my_palette <- c("blue",colorRampPalette(colors = c("blue", "white", "red"))
(n = length(colors)-3), "red")
pht = pheatmap(mat = cor(top_expression %>% t(), top_expression %>% t()),color = my_palette, breaks = colors)
return(pht)
}
enriched_score_umap <- function(enrich_res, genes,col) {
rownames(enrich_res) = enrich_res$pathway_name
enriched_genes = enrich_res[col,"geneID"] %>% strsplit(split = "/") %>% .[[1]] %>% c(.,genes) #add original markers
enriched_genes_score=apply(acc1_cancer_cells@assays$RNA@data[enriched_genes,],2,mean)
acc1_cancer_cells=AddMetaData(acc1_cancer_cells,enriched_genes_score,"enriched_genes_score")
print(
FeaturePlot(object = acc1_cancer_cells,features = "enriched_genes_score")
)
return(enriched_genes_score)
}
Data
acc1_cancer_cells = readRDS("./Data/" %>% paste0(data_to_read))
expression = GetAssayData(object = acc1_cancer_cells,assay = "RNA",slot = "data") %>% as.data.frame()
luminal_pathways = c("CHARAFE_BREAST_CANCER_LUMINAL_VS_BASAL_DN","CHARAFE_BREAST_CANCER_LUMINAL_VS_BASAL_UP","CHARAFE_BREAST_CANCER_LUMINAL_VS_MESENCHYMAL_DN","CHARAFE_BREAST_CANCER_LUMINAL_VS_MESENCHYMAL_UP","HUPER_BREAST_BASAL_VS_LUMINAL_DN","LIM_MAMMARY_LUMINAL_PROGENITOR_UP","SMID_BREAST_CANCER_LUMINAL_B_UP" )
# add luminal pathways
msigdb_gene_set = msigdbr(species = "Homo sapiens")
msigdb_gene_set = msigdb_gene_set %>%as.data.frame()
luminal_gs = msigdb_gene_set %>% dplyr::filter(gs_name %in% luminal_pathways)
luminal_gs = luminal_gs %>% dplyr::distinct(gs_name, gene_symbol) %>% as.data.frame()
1.Myo markers
1.a) expression
myo_protein_markers = c("CNN1", "IL12B", "TP63","ACTA2")
FeaturePlot(object = acc1_cancer_cells,features = myo_protein_markers,min.cutoff = 0)
Warning in FeaturePlot(object = acc1_cancer_cells, features = myo_protein_markers, :
All cells have the same value (0) of IL12B.

IL12B is 0 in all cells
myo_protein_markers = c("CNN1", "TP63","ACTA2")
2. Luminal markers
2.a) expression
lum_protein_markers = c("KIT")
FeaturePlot(object = acc1_cancer_cells,features = lum_protein_markers,min.cutoff = 0)

Correlation between luminal and myo scores
cor(luminal_score,myo_score)
[1] -0.1540176
# res = FindAllMarkers(object = acc1_cancer_cells)
# markers_cluster3 = res[res$cluster == 3 & res$p_val<0.00001,"gene"]
# genes_vec_enrichment(genes = markers_cluster3,background = rownames(acc1_cancer_cells),homer = T,title = "myo top enrichment",custom_pathways = luminal_gs)
LS0tCnRpdGxlOiAiTXlvX2x1bV9zY29yZSIKYXV0aG9yOiAiQXZpc2hhaSBXaXplbCIKZGF0ZTogNy4xMi4yMgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgY29kZV9mb2xkaW5nOiBoaWRlCi0tLQoKIyMgUGFyYW1ldGVyczoKCmBgYHtyfQpzdWZmaXggPSAidG9wXzI1Igp0aHJlc2hvbGQgPSAyNQpkYXRhX3RvX3JlYWQgPSAiYWNjMV9jYW5jZXJfY2VsbHNfMTVLbkNvdW50X1YzLlJEUyIKYGBgCgotICAgc3VmZml4ID0gYHIgc3VmZml4YAotICAgZGF0YV90b19yZWFkID0gYHIgZGF0YV90b19yZWFkYAotICAgdGhyZXNob2xkID0gYHIgdGhyZXNob2xkYAoKIyMgZnVuY3Rpb25zCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQpzb3VyY2UoIi4vLlJwcm9maWxlIikKc291cmNlX2Zyb21fZ2l0aHViKHJlcG9zaXRveSA9ICJERUdfZnVuY3Rpb25zIix2ZXJzaW9uID0gIjAuMi4xIikKCnRvcF9jb3JyZWxhdGVkIDwtIGZ1bmN0aW9uKGdlbmVzLCB0aHJlc2hvbGQpIHsKICBtYXJrZXJzX2V4cHJlc3Npb24gPSBGZXRjaERhdGEob2JqZWN0ID0gYWNjMV9jYW5jZXJfY2VsbHMsdmFycyA9IGdlbmVzLHNsb3QgPSAiZGF0YSIpCiAgbWFya2Vyc19hdmVyYWdlID0gcm93TWVhbnMobWFya2Vyc19leHByZXNzaW9uKSAlPiUgYXMuZGF0YS5mcmFtZSgpICU+JSByZW5hbWUoImF2ZXJhZ2UiID0gMSkKICBjb3JfbWF0ID0gY29yKGV4cHJlc3Npb24gJT4lIHQoKSwgbWFya2Vyc19hdmVyYWdlKSU+JSBhcy5kYXRhLmZyYW1lKCkgCiAgY29yX21hdCA9IGNvcl9tYXRbY29tcGxldGUuY2FzZXMoY29yX21hdCksLGRyb3A9Rl0gICU+JSBhcy5kYXRhLmZyYW1lICU+JSAgcmVuYW1lKCJjb3JyIiA9IDEpICNyZW1vdmUgcm93cyB3aXRoIE5BIGluIGF0IGxlYXN0IG9uZSBjb2wKICBpZiAodGhyZXNob2xkPDEpewogICAgdG9wX2dlbmVzID0gICBjb3JfbWF0ICU+JSBhcy5kYXRhLmZyYW1lICU+JSBzZWxlY3QoMSkgJT4lIGRwbHlyOjpmaWx0ZXIoLj4gdGhyZXNob2xkKSAlPiUgcm93bmFtZXMoKQogIH1lbHNlewogICAgdG9wX2dlbmVzID0gICBjb3JfbWF0ICU+JSAgdG9wX24odGhyZXNob2xkLGNvcnIpICU+JSByb3duYW1lcygpCiAgfQogIHJldHVybih0b3BfZ2VuZXMpCn0KCnRvcF9nZW5lc19jb3JfaGVhdG1hcCA8LSBmdW5jdGlvbih0b3BfZ2VuZXMpIHsKICB0b3BfZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24gJT4lIGRwbHlyOjpmaWx0ZXIocm93bmFtZXMoZXhwcmVzc2lvbikgJWluJSB0b3BfZ2VuZXMpCmNvbG9ycyA8LSBjKHNlcSgtMSwxLGJ5PTAuMDEpKQpteV9wYWxldHRlIDwtIGMoImJsdWUiLGNvbG9yUmFtcFBhbGV0dGUoY29sb3JzID0gYygiYmx1ZSIsICJ3aGl0ZSIsICJyZWQiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG4gPSBsZW5ndGgoY29sb3JzKS0zKSwgInJlZCIpCnBodCA9IHBoZWF0bWFwKG1hdCA9IGNvcih0b3BfZXhwcmVzc2lvbiAlPiUgdCgpLCB0b3BfZXhwcmVzc2lvbiAlPiUgdCgpKSxjb2xvciA9IG15X3BhbGV0dGUsIGJyZWFrcyA9IGNvbG9ycykKcmV0dXJuKHBodCkKfQoKIAplbnJpY2hlZF9zY29yZV91bWFwIDwtIGZ1bmN0aW9uKGVucmljaF9yZXMsIGdlbmVzLGNvbCkgewogIHJvd25hbWVzKGVucmljaF9yZXMpID0gZW5yaWNoX3JlcyRwYXRod2F5X25hbWUKICBlbnJpY2hlZF9nZW5lcyA9IGVucmljaF9yZXNbY29sLCJnZW5lSUQiXSAlPiUgc3Ryc3BsaXQoc3BsaXQgPSAiLyIpICU+JSAuW1sxXV0gJT4lIGMoLixnZW5lcykgI2FkZCBvcmlnaW5hbCBtYXJrZXJzCiAgZW5yaWNoZWRfZ2VuZXNfc2NvcmU9YXBwbHkoYWNjMV9jYW5jZXJfY2VsbHNAYXNzYXlzJFJOQUBkYXRhW2VucmljaGVkX2dlbmVzLF0sMixtZWFuKQogIGFjYzFfY2FuY2VyX2NlbGxzPUFkZE1ldGFEYXRhKGFjYzFfY2FuY2VyX2NlbGxzLGVucmljaGVkX2dlbmVzX3Njb3JlLCJlbnJpY2hlZF9nZW5lc19zY29yZSIpCiAgcHJpbnQoCiAgICBGZWF0dXJlUGxvdChvYmplY3QgPSBhY2MxX2NhbmNlcl9jZWxscyxmZWF0dXJlcyA9ICJlbnJpY2hlZF9nZW5lc19zY29yZSIpCiAgKQogICAgcmV0dXJuKGxpc3QoIHNjb3JlID0gZW5yaWNoZWRfZ2VuZXNfc2NvcmUsZ2VuZXMgPSBlbnJpY2hlZF9nZW5lcykpCn0KCmBgYAoKIyMgRGF0YQoKYGBge3J9CmFjYzFfY2FuY2VyX2NlbGxzID0gcmVhZFJEUygiLi9EYXRhLyIgJT4lIHBhc3RlMChkYXRhX3RvX3JlYWQpKQpleHByZXNzaW9uID0gR2V0QXNzYXlEYXRhKG9iamVjdCA9IGFjYzFfY2FuY2VyX2NlbGxzLGFzc2F5ID0gIlJOQSIsc2xvdCA9ICJkYXRhIikgJT4lIGFzLmRhdGEuZnJhbWUoKQoKbHVtaW5hbF9wYXRod2F5cyA9IGMoIkNIQVJBRkVfQlJFQVNUX0NBTkNFUl9MVU1JTkFMX1ZTX0JBU0FMX0ROIiwiQ0hBUkFGRV9CUkVBU1RfQ0FOQ0VSX0xVTUlOQUxfVlNfQkFTQUxfVVAiLCJDSEFSQUZFX0JSRUFTVF9DQU5DRVJfTFVNSU5BTF9WU19NRVNFTkNIWU1BTF9ETiIsIkNIQVJBRkVfQlJFQVNUX0NBTkNFUl9MVU1JTkFMX1ZTX01FU0VOQ0hZTUFMX1VQIiwiSFVQRVJfQlJFQVNUX0JBU0FMX1ZTX0xVTUlOQUxfRE4iLCJMSU1fTUFNTUFSWV9MVU1JTkFMX1BST0dFTklUT1JfVVAiLCJTTUlEX0JSRUFTVF9DQU5DRVJfTFVNSU5BTF9CX1VQIiApCgojIGFkZCBsdW1pbmFsIHBhdGh3YXlzCm1zaWdkYl9nZW5lX3NldCA9IG1zaWdkYnIoc3BlY2llcyA9ICJIb21vIHNhcGllbnMiKSAKbXNpZ2RiX2dlbmVfc2V0ID0gbXNpZ2RiX2dlbmVfc2V0ICU+JWFzLmRhdGEuZnJhbWUoKSAKbHVtaW5hbF9ncyA9IG1zaWdkYl9nZW5lX3NldCAlPiUgIGRwbHlyOjpmaWx0ZXIoZ3NfbmFtZSAlaW4lIGx1bWluYWxfcGF0aHdheXMpCmx1bWluYWxfZ3MgPSBsdW1pbmFsX2dzICU+JSBkcGx5cjo6ZGlzdGluY3QoZ3NfbmFtZSwgZ2VuZV9zeW1ib2wpICU+JSBhcy5kYXRhLmZyYW1lKCkKYGBgCgoKIyAqKjEuTXlvIG1hcmtlcnMqKgoKIyMgMS5hKSBleHByZXNzaW9uCgpgYGB7cn0KbXlvX3Byb3RlaW5fbWFya2VycyA9IGMoIkNOTjEiLCAiSUwxMkIiLCAiVFA2MyIsIkFDVEEyIikKRmVhdHVyZVBsb3Qob2JqZWN0ID0gYWNjMV9jYW5jZXJfY2VsbHMsZmVhdHVyZXMgPSBteW9fcHJvdGVpbl9tYXJrZXJzLG1pbi5jdXRvZmYgPSAwKQpgYGAKCklMMTJCIGlzIDAgaW4gYWxsIGNlbGxzCmBgYHtyfQpteW9fcHJvdGVpbl9tYXJrZXJzID0gYygiQ05OMSIsICJUUDYzIiwiQUNUQTIiKQpgYGAKCiMjIDEuYikgdG9wIDMwIGNvcnJlbGF0ZWQgZ2VuZXMgd2l0aCBUUDYzK0FDVEEyK0NOTjEgey50YWJzZXR9CgpgYGB7cn0KdG9wX215byAgPSB0b3BfY29ycmVsYXRlZChnZW5lcyA9IG15b19wcm90ZWluX21hcmtlcnMsdGhyZXNob2xkID0gMjUpCmBgYAoKIyMjIFRvcCBjb3JyZWxhdGVkIGdlbmVzCgpgYGB7cn0KcHJpbnQoIiNnZW5lcyA9ICIgJT4lIHBhc3RlKGxlbmd0aCh0b3BfbXlvKSkpCnRvcF9teW8gJT4lIGhlYWQoMzApCmBgYAoKIyMjIENvcnJlbGF0aW9uCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQp0b3BfZ2VuZXNfY29yX2hlYXRtYXAodG9wX2dlbmVzID0gdG9wX215bykKYGBgCgojIyMgRW5yaWNobWVudCBhbmFseXNpcwoKYGBge3IgcmVzdWx0cz0naGlkZSd9CmVucmljaF9yZXMgPSBnZW5lc192ZWNfZW5yaWNobWVudChnZW5lcyA9IHRvcF9teW8sYmFja2dyb3VuZCA9IHJvd25hbWVzKGFjYzFfY2FuY2VyX2NlbGxzKSxob21lciA9IFQsdGl0bGUgPSAibXlvIHRvcCBlbnJpY2htZW50IikKZW5yaWNoX3JlcwpgYGAKCiMjIyBVTUFQIHNjb3JlIG9mIGVucmljaGVkIGdlbmVzCgpgYGB7cn0KbHN0ID0gZW5yaWNoZWRfc2NvcmVfdW1hcChlbnJpY2hfcmVzID0gZW5yaWNoX3JlcyxnZW5lcyA9IG15b19wcm90ZWluX21hcmtlcnMsY29sID0gMSkKbXlvX3Njb3JlID0gbHN0W1sic2NvcmUiXV0KZW5yaWNoZWRfZ2VuZXMgPSBsc3RbWyJnZW5lcyJdXQpgYGAKZ2VuZXMgaW4gc2NvcmU6CmBgYHtyfQpsc3RbWyJnZW5lcyJdXQpgYGAKW0NBTEQxXShodHRwczovL2pvdXJuYWxzLnNhZ2VwdWIuY29tL2RvaS9lcGRmLzEwLjExNzcvMTA2Njg5NjkwNTAxMzAwMTA4KQpbTHlzeWwgb3hpZGFzZSBnZW5lIChMT1hMMikgZXhwcmVzc2lvbiBpbiB0aGUgc3Ryb21hbCByZWFjdGlvbiB0byBpbiBzaXR1IGFuZCBpbnZhc2l2ZSBkdWN0YWwgYnJlYXN0IGNhcmNpbm9tYV0oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DMTg1ODI2OC8pClRQTTIgPSB0cm9wb215b3NpbiAKIyMgIHsudW5udW1iZXJlZH0KCgojICoqMi4gTHVtaW5hbCBtYXJrZXJzKioKCiMjIDIuYSkgZXhwcmVzc2lvbgoKYGBge3J9Cmx1bV9wcm90ZWluX21hcmtlcnMgPSBjKCJLSVQiKQpGZWF0dXJlUGxvdChvYmplY3QgPSBhY2MxX2NhbmNlcl9jZWxscyxmZWF0dXJlcyA9IGx1bV9wcm90ZWluX21hcmtlcnMsbWluLmN1dG9mZiA9IDApCmBgYAoKIyMgMiB0b3AgIGNvcnJlbGF0ZWQgZ2VuZXMgd2l0aCBLSVQgey50YWJzZXR9CgpgYGB7cn0KdG9wX2tpdCA9IHRvcF9jb3JyZWxhdGVkKGdlbmVzID0gbHVtX3Byb3RlaW5fbWFya2Vycyx0aHJlc2hvbGQgPSAyNSkKYGBgCgojIyMgVG9wIGNvcnJlbGF0ZWQgZ2VuZXMKCmBgYHtyfQpwcmludCgiI2dlbmVzID0gIiAlPiUgcGFzdGUobGVuZ3RoKHRvcF9raXQpKSkKdG9wX2tpdApgYGAKCiMjIyBDb3JyZWxhdGlvbgoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KdG9wX2dlbmVzX2Nvcl9oZWF0bWFwKHRvcF9nZW5lcyA9IHRvcF9raXQpCmBgYAoKIyMjIEVucmljaG1lbnQgYW5hbHlzaXMKCmBgYHtyIHJlc3VsdHM9J2hpZGUnfQplbnJpY2hfcmVzID0gZ2VuZXNfdmVjX2VucmljaG1lbnQoZ2VuZXMgPSB0b3Bfa2l0LGJhY2tncm91bmQgPSByb3duYW1lcyhleHByZXNzaW9uKSxob21lciA9IFQsdGl0bGUgPSAibHVtIHRvcCBlbnJpY2htZW50IixjdXN0b21fcGF0aHdheXMgPSBsdW1pbmFsX2dzKQplbnJpY2hfcmVzCmBgYAoKIyMjIFVNQVAgc2NvcmUgb2YgZW5yaWNoZWQgZ2VuZXMKCmBgYHtyfQpsc3QgPSBlbnJpY2hlZF9zY29yZV91bWFwKGVucmljaF9yZXMgPSBlbnJpY2hfcmVzLGdlbmVzID0gbHVtX3Byb3RlaW5fbWFya2Vycyxjb2wgPSAxKQpsdW1fc2NvcmUgPSBsc3RbWyJzY29yZSJdXQplbnJpY2hlZF9nZW5lcyA9IGxzdFtbImdlbmVzIl1dCmBgYAoKZ2VuZXMgaW4gc2NvcmU6CmBgYHtyfQpsc3RbWyJnZW5lcyJdXQpgYGAKW0NDTkQxIENvcHkgTnVtYmVyIFZhcmlhdGlvbiBpbiBDaXJjdWxhdGluZyBUdW1vciBETkEgZnJvbSBMdW1pbmFsIEIgQnJlYXN0IENhbmNlciBQYXRpZW50c10oaHR0cHM6Ly9wdWJtZWQubmNiaS5ubG0ubmloLmdvdi8zNTg5NjI1MS8pCgojIyAgey51bm51bWJlcmVkfQoKIyMgQ29ycmVsYXRpb24gYmV0d2VlbiBsdW1pbmFsIGFuZCBteW8gc2NvcmVzCmBgYHtyfQpjb3IobHVtaW5hbF9zY29yZSxteW9fc2NvcmUpCmBgYApgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojc2F2ZSBub3RlYm9vazoKcnN0dWRpb2FwaTo6ZG9jdW1lbnRTYXZlKCkgI3NhdmUgZG9jCnRoaXNfbm90ZWJvb2tlX3BhdGggPSByc3R1ZGlvYXBpOjpnZXRTb3VyY2VFZGl0b3JDb250ZXh0KCkkcGF0aApwcmV2aWV3ZWRfbm90ZWJvb2sgPSBnc3ViKHBhdHRlcm4gPSAiLlJtZCIscmVwbGFjZW1lbnQgPSAiLm5iLmh0bWwiLHggPSB0aGlzX25vdGVib29rZV9wYXRoKQpmaW5hbF9ub3RlYm9vayAgPSBiYXNlbmFtZSh0aGlzX25vdGVib29rZV9wYXRoKSAlPiUgZ3N1YihwYXR0ZXJuID0gIi5SbWQiLHJlcGxhY2VtZW50ID0gIiIpCm5ld19ub3RlYm9va19wYXRoID0gZGlybmFtZSh0aGlzX25vdGVib29rZV9wYXRoKSAlPiUgcGFzdGUoZmluYWxfbm90ZWJvb2ssc2VwID0gIi8iKSAlPiUgcGFzdGUoc3VmZml4LHNlcCA9ICJfIikgJT4lIHBhc3RlMCgiLmh0bWwiKQpvdmVyd3JpdGUgPSBGCmlmKGZpbGUuZXhpc3RzKG5ld19ub3RlYm9va19wYXRoKSl7CiAgY2F0ICgiRmlsZSBleGlzdHMsIG92ZXJyaWRlPyIgKQogIGNob3NlbiA8LSByZWFkbGluZShwcm9tcHQ9IiAxIHllcyBcbiAyIG5vXG4iKQogICAgaWYoY2hvc2VuID09IDEpe292ZXJ3cml0ZSA9IFR9ZWxzZXtvdmVyd3JpdGUgPSBGfQogIH0KZmlsZS5jb3B5KGZyb20gPSBwcmV2aWV3ZWRfbm90ZWJvb2ssIHRvID0gZGlybmFtZSh0aGlzX25vdGVib29rZV9wYXRoKSAlPiUgcGFzdGUoZmluYWxfbm90ZWJvb2ssc2VwID0gIi8iKSAlPiUgcGFzdGUoc3VmZml4LHNlcCA9ICJfIikgJT4lIHBhc3RlMCgiLmh0bWwiKSxvdmVyd3JpdGUgPSBvdmVyd3JpdGUpCmBgYAoKYGBge3J9CiMgcmVzID0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gYWNjMV9jYW5jZXJfY2VsbHMpCmBgYAoKYGBge3J9CiMgbWFya2Vyc19jbHVzdGVyMyA9IHJlc1tyZXMkY2x1c3RlciA9PSAzICYgcmVzJHBfdmFsPDAuMDAwMDEsImdlbmUiXQpgYGAKCmBgYHtyIHJlc3VsdHM9J2hpZGUnfQojIGdlbmVzX3ZlY19lbnJpY2htZW50KGdlbmVzID0gbWFya2Vyc19jbHVzdGVyMyxiYWNrZ3JvdW5kID0gcm93bmFtZXMoYWNjMV9jYW5jZXJfY2VsbHMpLGhvbWVyID0gVCx0aXRsZSA9ICJteW8gdG9wIGVucmljaG1lbnQiLGN1c3RvbV9wYXRod2F5cyA9IGx1bWluYWxfZ3MpCmBgYAo=