I. Preliminaries

Loading libraries

library("tidyverse")
library("tibble")
library("msigdbr")
library("ggplot2")
library("TCGAbiolinks")
library("RNAseqQC")
library("DESeq2")
library("ensembldb")
library("purrr")
library("magrittr")
library("vsn")
library("matrixStats")
library("dplyr")
library("grex")
library("survminer")
library("survival")

II. Downloading the TCGA gene expression data

Create a function for downloading TCGA gene expression data.

For more detailed documentation, refer to 2. Differential Gene Expression Analysis - TCGA.Rmd.

GDC_DIR = "../data/public/GDCdata"

query_and_filter_samples <- function(project) {
  query_tumor <- GDCquery(
    project = project,
    data.category = "Transcriptome Profiling",
    data.type = "Gene Expression Quantification",
    experimental.strategy = "RNA-Seq",
    workflow.type = "STAR - Counts",
    access = "open",
    sample.type = "Primary Tumor"
  )
  tumor <- getResults(query_tumor)

  query_normal <- GDCquery(
    project = project,
    data.category = "Transcriptome Profiling",
    data.type = "Gene Expression Quantification",
    experimental.strategy = "RNA-Seq",
    workflow.type = "STAR - Counts",
    access = "open",
    sample.type = "Solid Tissue Normal"
  )
  normal <- getResults(query_normal)

  submitter_ids <- inner_join(tumor, normal, by = "cases.submitter_id") %>%
    dplyr::select(cases.submitter_id)
  tumor <- tumor %>%
    dplyr::filter(cases.submitter_id %in% submitter_ids$cases.submitter_id)
  normal <- normal %>%
    dplyr::filter(cases.submitter_id %in% submitter_ids$cases.submitter_id)

  samples <- rbind(tumor, normal)
  unique(samples$sample_type)

  query_project <- GDCquery(
    project = project,
    data.category = "Transcriptome Profiling",
    data.type = "Gene Expression Quantification",
    experimental.strategy = "RNA-Seq",
    workflow.type = "STAR - Counts",
    access = "open",
    sample.type = c("Solid Tissue Normal", "Primary Tumor"),
    barcode = as.list(samples$sample.submitter_id)
  )

  # If this is your first time running this notebook (i.e., you have not yet downloaded the results of the query in the previous block),
  # uncomment the code block below

  # GDCdownload(
  #   query_coad,
  #   directory = GDC_DIR
  # )

  return(list(samples = samples, query_project = query_project))
}

Download the TCGA gene expression data for colorectal cancer (TCGA-COAD).

projects <- c("TCGA-COAD")

with_results_projects <- c()

samples <- list()
project_data <- list()

for (project in projects) {
  result <- tryCatch(
    {
      result <- query_and_filter_samples(project)
      samples[[project]] <- result$samples
      project_data[[project]] <- result$query_project

      with_results_projects <- c(with_results_projects, project)
    },
    error = function(e) {

    }
  )
}

Running the code block above should generate and populate a directory named GDCdata.

III. Data preprocessing

Construct the RNA-seq count matrix for each cancer type.

tcga_data <- list()
tcga_matrix <- list()

projects <- with_results_projects
for (project in projects) {
  tcga_data[[project]] <- GDCprepare(
    project_data[[project]], 
    directory = GDC_DIR,
    summarizedExperiment = TRUE
  )
}
for (project in projects) {
  count_matrix <- assay(tcga_data[[project]], "unstranded")

  # Remove duplicate entries
  count_matrix_df <- data.frame(count_matrix)
  count_matrix_df <- count_matrix_df[!duplicated(count_matrix_df), ]
  count_matrix <- data.matrix(count_matrix_df)
  rownames(count_matrix) <- cleanid(rownames(count_matrix))
  count_matrix <- count_matrix[!(duplicated(rownames(count_matrix)) | duplicated(rownames(count_matrix), fromLast = TRUE)), ]

  tcga_matrix[[project]] <- count_matrix
}

Format the samples table so that it can be fed as input to DESeq2.

for (project in projects) {
  rownames(samples[[project]]) <- samples[[project]]$cases
  samples[[project]] <- samples[[project]] %>%
    dplyr::select(case = "cases.submitter_id", type = "sample_type")
  samples[[project]]$type <- str_replace(samples[[project]]$type, "Solid Tissue Normal", "normal")
  samples[[project]]$type <- str_replace(samples[[project]]$type, "Primary Tumor", "tumor")
}

DESeq2 requires the row names of samples should be identical to the column names of count_matrix.

for (project in projects) {
  colnames(tcga_matrix[[project]]) <- gsub(x = colnames(tcga_matrix[[project]]), pattern = "\\.", replacement = "-")
  tcga_matrix[[project]] <- tcga_matrix[[project]][, rownames(samples[[project]])]

  # Sanity check
  print(all(colnames(tcga_matrix[[project]]) == rownames(samples[[project]])))
}

IV. Differential gene expression analysis

For more detailed documentation on obtaining the gene set, refer to 7. Differential Gene Expression Analysis - TCGA - Pan-cancer - Unique Genes.Rmd.

RCDdb <- "../data/public/rcd-gene-list/unique-genes/necroptosis-ferroptosis-pyroptosis/"

Write utility functions for filtering the gene sets, performing differential gene expression analysis, plotting the results, and performing variance-stabilizing transformation.

filter_gene_set_and_perform_dgea <- function(genes) {
  tcga_rcd <- list()

  for (project in projects) {
    rownames(genes) <- genes$gene_id
    tcga_rcd[[project]] <- tcga_matrix[[project]][rownames(tcga_matrix[[project]]) %in% genes$gene_id, ]
    tcga_rcd[[project]] <- tcga_rcd[[project]][, rownames(samples[[project]])]
  }

  dds_rcd <- list()
  res_rcd <- list()

  for (project in projects) {
    print(project)
    print("=============")
    dds <- DESeqDataSetFromMatrix(
      countData = tcga_rcd[[project]],
      colData = samples[[project]],
      design = ~type
    )
    dds <- filter_genes(dds, min_count = 10)
    dds$type <- relevel(dds$type, ref = "normal")
    dds_rcd[[project]] <- DESeq(dds)
    res_rcd[[project]] <- results(dds_rcd[[project]])
  }

  deseq.bbl.data <- list()

  for (project in projects) {
    deseq.results <- res_rcd[[project]]
    deseq.bbl.data[[project]] <- data.frame(
      row.names = rownames(deseq.results),
      baseMean = deseq.results$baseMean,
      log2FoldChange = deseq.results$log2FoldChange,
      lfcSE = deseq.results$lfcSE,
      stat = deseq.results$stat,
      pvalue = deseq.results$pvalue,
      padj = deseq.results$padj,
      cancer_type = project,
      gene_symbol = genes[rownames(deseq.results), "gene"]
    )
  }

  deseq.bbl.data.combined <- bind_rows(deseq.bbl.data)
  deseq.bbl.data.combined <- dplyr::filter(deseq.bbl.data.combined, abs(log2FoldChange) >= 1.5 & padj < 0.05)

  return(deseq.bbl.data.combined)
}
plot_dgea <- function(deseq.bbl.data.combined) {
  sizes <- c("<10^-15" = 4, "10^-10" = 3, "10^-5" = 2, "0.05" = 1)

  deseq.bbl.data.combined <- deseq.bbl.data.combined %>%
    mutate(fdr_category = cut(padj,
      breaks = c(-Inf, 1e-15, 1e-10, 1e-5, 0.05),
      labels = c("<10^-15", "10^-10", "10^-5", "0.05"),
      right = FALSE
    ))

  top_genes <- deseq.bbl.data.combined %>%
    group_by(cancer_type) %>%
    mutate(rank = rank(-abs(log2FoldChange))) %>%
    dplyr::filter(rank <= 10) %>%
    ungroup()

  ggplot(top_genes, aes(y = cancer_type, x = gene_symbol, size = fdr_category, fill = log2FoldChange)) +
    geom_point(alpha = 0.5, shape = 21, color = "black") +
    scale_size_manual(values = sizes) +
    scale_fill_gradient2(low = "blue", mid = "white", high = "red", limits = c(min(deseq.bbl.data.combined$log2FoldChange), max(deseq.bbl.data.combined$log2FoldChange))) +
    theme_minimal() +
    theme(
      axis.text.x = element_text(size = 9, angle = 90, hjust = 1)
    ) +
    theme(legend.position = "bottom") +
    theme(legend.position = "bottom") +
    labs(size = "Adjusted p-value", fill = "log2 FC", y = "Cancer type", x = "Gene")
}
perform_vsd <- function(genes) {
  tcga_rcd <- list()

  for (project in projects) {
    rownames(genes) <- genes$gene_id
    tcga_rcd[[project]] <- tcga_matrix[[project]][rownames(tcga_matrix[[project]]) %in% genes$gene_id, ]
    tcga_rcd[[project]] <- tcga_rcd[[project]][, rownames(samples[[project]])]
  }

  vsd_rcd <- list()

  for (project in projects) {
    print(project)
    print("=============")
    dds <- DESeqDataSetFromMatrix(
      countData = tcga_rcd[[project]],
      colData = samples[[project]],
      design = ~type
    )
    dds <- filter_genes(dds, min_count = 10)

    # Perform variance stabilization
    dds <- estimateSizeFactors(dds)
    nsub <- sum(rowMeans(counts(dds, normalized = TRUE)) > 10)
    vsd <- vst(dds, nsub = nsub)
    vsd_rcd[[project]] <- assay(vsd)
  }

  return(vsd_rcd)
}

Necroptosis

Fetch the gene set of interest.

genes <- read.csv(paste0(RCDdb, "Necroptosis.csv"))
print(genes)
genes$gene_id <- cleanid(genes$gene_id)
genes <- distinct(genes, gene_id, .keep_all = TRUE)
genes <- subset(genes, gene_id != "")
genes

Filter the genes to include only those in the gene set of interest, and then perform differential gene expression analysis.

deseq.bbl.data.combined <- filter_gene_set_and_perform_dgea(genes)
[1] "TCGA-COAD"
[1] "============="
Warning: some variables in design formula are characters, converting to factorsestimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
-- replacing outliers and refitting for 1 genes
-- DESeq argument 'minReplicatesForReplace' = 7 
-- original counts are preserved in counts(dds)
estimating dispersions
fitting model and testing
deseq.bbl.data.combined

Plot the results.

plot_dgea(deseq.bbl.data.combined)

Perform variance-stabilizing transformation for further downstream analysis (i.e., for survival analysis).

vsd <- perform_vsd(genes)
[1] "TCGA-COAD"
[1] "============="

V. Downloading the clinical data

Download clinical data from TCGA, and perform some preprocessing: - The deceased column should be FALSE if the patient is alive and TRUE otherwise - The overall_survival column should reflect the follow-up time if the patient is alive and the days to death otherwise

download_clinical_data <- function(project) {
  clinical_data <- GDCquery_clinic(project)
  clinical_data$deceased <- ifelse(clinical_data$vital_status == "Alive", FALSE, TRUE)
  clinical_data$overall_survival <- ifelse(clinical_data$vital_status == "Alive",
    clinical_data$days_to_last_follow_up,
    clinical_data$days_to_death
  )

  return(clinical_data)
}
tcga_clinical <- list()
for (project in projects) {
  tcga_clinical[[project]] <- download_clinical_data(project)
}

VI. Performing survival analysis

Write utility functions for performing survival analysis.

construct_gene_df <- function(gene_of_interest, project) {
  gene_df <- vsd[[project]] %>%
    as.data.frame() %>%
    rownames_to_column(var = "gene_id") %>%
    gather(key = "case_id", value = "counts", -gene_id) %>%
    left_join(., genes, by = "gene_id") %>%
    dplyr::filter(gene == gene_of_interest) %>%
    dplyr::filter(case_id %in% rownames(samples[[project]] %>% dplyr::filter(type == "normal")))

  q1 <- quantile(gene_df$counts, probs = 0.25)
  q3 <- quantile(gene_df$counts, probs = 0.75)
  gene_df$strata <- ifelse(gene_df$counts >= q3, "HIGH", ifelse(gene_df$counts <= q1, "LOW", "MIDDLE"))
  gene_df <- gene_df %>% dplyr::filter(strata %in% c("LOW", "HIGH"))
  gene_df$case_id <- paste0(sapply(strsplit(as.character(gene_df$case_id), "-"), `[`, 1), '-',
                          sapply(strsplit(as.character(gene_df$case_id), "-"), `[`, 2), '-', 
                          sapply(strsplit(as.character(gene_df$case_id), "-"), `[`, 3))
  gene_df <- merge(gene_df, tcga_clinical[[project]], by.x = "case_id", by.y = "submitter_id")
  
  return(gene_df)
}
compute_surival_fit <- function(gene_df) {
  return (survfit(Surv(overall_survival, deceased) ~ strata, data = gene_df))
}
compute_cox <- function(gene_df) {
  return (coxph(Surv(overall_survival, deceased) ~ strata, data=gene_df))
}
plot_survival <- function(fit) {
  return(ggsurvplot(fit,
    data = gene_df,
    pval = T,
    risk.table = T,
    risk.table.height = 0.3
  ))
}
compute_survival_diff <- function(gene_df) {
  return(survdiff(Surv(overall_survival, deceased) ~ strata, data = gene_df))
}

Perform survival analysis by testing for the difference in the Kaplan-Meier curves using the G-rho family of Harrington and Fleming tests: https://rdrr.io/cran/survival/man/survdiff.html

MLKL is the primary executor of necroptosis.

significant_projects <- c()
significant_genes <- c()

ctr <- 1
for (project in projects) {
  for (gene in c("MLKL", genes$gene)) {
    cat(project, gene, "\n\n")
    error <- tryCatch (
      {
        gene_df <- construct_gene_df(gene, project)
      },
      error = function(e) {
        cat("\n\n============================\n\n")
        e
      }
    )
    
    if(inherits(error, "error")) next

    if (nrow(gene_df) > 0) {
      fit <- compute_surival_fit(gene_df)
      tryCatch (
        {
          survival <- compute_survival_diff(gene_df)
          cox <- compute_cox(gene_df)
          print(ctr)
          ctr <- ctr + 1
          print(survival)
          cat("\n")
          print(cox)
          print(plot_survival(fit))
          if (pchisq(survival$chisq, length(survival$n)-1, lower.tail = FALSE) < 0.05) {
            significant_projects <- c(significant_projects, project)
            significant_genes <- c(significant_genes, gene)
          }
        },
        error = function(e) {
        }
      )
      
    }
    
    cat("\n\n============================\n\n")
  }
}
TCGA-COAD MLKL 

[1] 1
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=9, 13 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 6        6     6.81    0.0973     0.446
strata=LOW  3        3     2.19    0.3034     0.446

 Chisq= 0.4  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.5083    1.6625   0.7688 0.661 0.509

Likelihood ratio test=0.42  on 1 df, p=0.5155
n= 9, number of events= 9 
   (13 observations deleted due to missingness)


============================

TCGA-COAD RBCK1 

[1] 2
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=10, 12 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 7        7     5.58     0.361     0.979
strata=LOW  3        3     4.42     0.456     0.979

 Chisq= 1  on 1 degrees of freedom, p= 0.3 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.7826    0.4572   0.8102 -0.966 0.334

Likelihood ratio test=1.06  on 1 df, p=0.3042
n= 10, number of events= 10 
   (12 observations deleted due to missingness)


============================

TCGA-COAD JAK2 

[1] 3
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     2.05     1.842      3.31
strata=LOW  3        3     4.95     0.765      3.31

 Chisq= 3.3  on 1 degrees of freedom, p= 0.07 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -1.8395    0.1589   1.1393 -1.615 0.106

Likelihood ratio test=3.35  on 1 df, p=0.06722
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD ZBP1 

[1] 4
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     5.89     0.134     0.566
strata=LOW  3        3     2.11     0.375     0.566

 Chisq= 0.6  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

           coef exp(coef) se(coef)     z     p
strataLOW 0.585     1.795    0.787 0.743 0.457

Likelihood ratio test=0.53  on 1 df, p=0.4654
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD RNF31 

[1] 5
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     4.14   0.00461    0.0131
strata=LOW  3        3     2.86   0.00666    0.0131

 Chisq= 0  on 1 degrees of freedom, p= 0.9 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)     z     p
strataLOW 0.09465   1.09927  0.82764 0.114 0.909

Likelihood ratio test=0.01  on 1 df, p=0.909
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD IFNB1 



============================

TCGA-COAD TRAF5 

[1] 6
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     5.46    0.0393     0.149
strata=LOW  3        3     2.54    0.0845     0.149

 Chisq= 0.1  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.3162    1.3719   0.8231 0.384 0.701

Likelihood ratio test=0.15  on 1 df, p=0.7014
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD BIRC2 

[1] 7
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 1        1    0.367    1.0939      1.34
strata=LOW  5        5    5.633    0.0712      1.34

 Chisq= 1.3  on 1 degrees of freedom, p= 0.2 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z    p
strataLOW -1.4979    0.2236   1.4164 -1.058 0.29

Likelihood ratio test=1.03  on 1 df, p=0.3107
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD TRAF2 

[1] 8
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5    7.173     0.658      8.18
strata=LOW  3        3    0.827     5.705      8.18

 Chisq= 8.2  on 1 degrees of freedom, p= 0.004 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

               coef exp(coef)  se(coef)     z     p
strataLOW 2.189e+01 3.219e+09 1.874e+04 0.001 0.999

Likelihood ratio test=8.05  on 1 df, p=0.004549
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD BCL2 

[1] 9
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     4.59    0.0754     0.248
strata=LOW  3        3     2.41    0.1434     0.248

 Chisq= 0.2  on 1 degrees of freedom, p= 0.6 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.4115    1.5090   0.8315 0.495 0.621

Likelihood ratio test=0.24  on 1 df, p=0.6217
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD STAT4 

[1] 10
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=4, 18 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 1        1     1.08   0.00641    0.0105
strata=LOW  3        3     2.92   0.00238    0.0105

 Chisq= 0  on 1 degrees of freedom, p= 0.9 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.1285    1.1372   1.2535 0.103 0.918

Likelihood ratio test=0.01  on 1 df, p=0.9178
n= 4, number of events= 4 
   (18 observations deleted due to missingness)


============================

TCGA-COAD BIRC3 

[1] 11
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2     2.82     0.237     0.594
strata=LOW  4        4     3.18     0.210     0.594

 Chisq= 0.6  on 1 degrees of freedom, p= 0.4 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)    z     p
strataLOW 0.8475    2.3338   1.1303 0.75 0.453

Likelihood ratio test=0.65  on 1 df, p=0.4198
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD STAT1 

[1] 12
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     5.05  0.000495   0.00353
strata=LOW  1        1     0.95  0.002632   0.00353

 Chisq= 0  on 1 degrees of freedom, p= 1 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)     z     p
strataLOW 0.06936   1.07182  1.16790 0.059 0.953

Likelihood ratio test=0  on 1 df, p=0.9529
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD STAT2 

[1] 13
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     4.43    0.0734     0.192
strata=LOW  3        3     3.57    0.0911     0.192

 Chisq= 0.2  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.3391    0.7124   0.7767 -0.437 0.662

Likelihood ratio test=0.19  on 1 df, p=0.6607
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD TNFSF10 

[1] 14
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=10, 12 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.41    0.1440     0.209
strata=LOW  7        7     7.59    0.0458     0.209

 Chisq= 0.2  on 1 degrees of freedom, p= 0.6 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.3347    0.7155   0.7357 -0.455 0.649

Likelihood ratio test=0.2  on 1 df, p=0.6541
n= 10, number of events= 10 
   (12 observations deleted due to missingness)


============================

TCGA-COAD TYK2 

[1] 15
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     5.09     0.233      1.03
strata=LOW  3        3     1.91     0.619      1.03

 Chisq= 1  on 1 degrees of freedom, p= 0.3 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.9149    2.4966   0.9283 0.986 0.324

Likelihood ratio test=1  on 1 df, p=0.3178
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD PPIA 

[1] 16
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=5, 17 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2     1.73    0.0410    0.0739
strata=LOW  3        3     3.27    0.0218    0.0739

 Chisq= 0.1  on 1 degrees of freedom, p= 0.8 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.2739    0.7604   1.0107 -0.271 0.786

Likelihood ratio test=0.07  on 1 df, p=0.7866
n= 5, number of events= 5 
   (17 observations deleted due to missingness)


============================

TCGA-COAD TNFRSF1A 

[1] 17
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     2.81      1.70       4.2
strata=LOW  2        2     4.19      1.14       4.2

 Chisq= 4.2  on 1 degrees of freedom, p= 0.04 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

                coef  exp(coef)   se(coef)      z     p
strataLOW -2.118e+01  6.332e-10  1.860e+04 -0.001 0.999

Likelihood ratio test=6.09  on 1 df, p=0.0136
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD CAPN2 

[1] 18
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=9, 13 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3      3.9     0.209     0.427
strata=LOW  6        6      5.1     0.160     0.427

 Chisq= 0.4  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.4829    1.6208   0.7457 0.648 0.517

Likelihood ratio test=0.43  on 1 df, p=0.5111
n= 9, number of events= 9 
   (13 observations deleted due to missingness)


============================

TCGA-COAD FAS 

[1] 19
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 1        1    0.367    1.0939      1.34
strata=LOW  5        5    5.633    0.0712      1.34

 Chisq= 1.3  on 1 degrees of freedom, p= 0.2 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z    p
strataLOW -1.4979    0.2236   1.4164 -1.058 0.29

Likelihood ratio test=1.03  on 1 df, p=0.3107
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD PGAM5 

[1] 20
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     5.76     0.101      0.64
strata=LOW  2        2     1.24     0.473      0.64

 Chisq= 0.6  on 1 degrees of freedom, p= 0.4 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.7244    2.0636   0.9243 0.784 0.433

Likelihood ratio test=0.58  on 1 df, p=0.4477
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD MLKL 

[1] 21
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=9, 13 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 6        6     6.81    0.0973     0.446
strata=LOW  3        3     2.19    0.3034     0.446

 Chisq= 0.4  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.5083    1.6625   0.7688 0.661 0.509

Likelihood ratio test=0.42  on 1 df, p=0.5155
n= 9, number of events= 9 
   (13 observations deleted due to missingness)


============================

TCGA-COAD FADD 

[1] 22
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     2.67     0.661       1.5
strata=LOW  3        3     4.33     0.408       1.5

 Chisq= 1.5  on 1 degrees of freedom, p= 0.2 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z    p
strataLOW -1.3134    0.2689   1.1415 -1.151 0.25

Likelihood ratio test=1.62  on 1 df, p=0.2028
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD TRPM7 

[1] 23
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2      1.4    0.2547     0.359
strata=LOW  5        5      5.6    0.0638     0.359

 Chisq= 0.4  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.5445    0.5801   0.9202 -0.592 0.554

Likelihood ratio test=0.33  on 1 df, p=0.5629
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD FASLG 

[1] 24
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.77    0.0197    0.0449
strata=LOW  3        3     3.23    0.0168    0.0449

 Chisq= 0  on 1 degrees of freedom, p= 0.8 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.1950    0.8229   0.9213 -0.212 0.832

Likelihood ratio test=0.05  on 1 df, p=0.8315
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD TNFRSF10B 

[1] 25
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=9, 13 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     7.11     0.627      3.55
strata=LOW  4        4     1.89     2.361      3.55

 Chisq= 3.6  on 1 degrees of freedom, p= 0.06 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)    z      p
strataLOW 1.5219    4.5809   0.8798 1.73 0.0837

Likelihood ratio test=3.23  on 1 df, p=0.07236
n= 9, number of events= 9 
   (13 observations deleted due to missingness)


============================

TCGA-COAD VPS4A 

[1] 26
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3      3.5    0.0702     0.172
strata=LOW  4        4      3.5    0.0700     0.172

 Chisq= 0.2  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z    p
strataLOW 0.3601    1.4335   0.8738 0.412 0.68

Likelihood ratio test=0.18  on 1 df, p=0.6751
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD TNFRSF10A 

[1] 27
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4      4.3    0.0216    0.0544
strata=LOW  4        4      3.7    0.0251    0.0544

 Chisq= 0.1  on 1 degrees of freedom, p= 0.8 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.1798    1.1970   0.7718 0.233 0.816

Likelihood ratio test=0.05  on 1 df, p=0.8152
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD GLUD1 

[1] 28
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     1.15     2.976      5.05
strata=LOW  3        3     4.85     0.706      5.05

 Chisq= 5.1  on 1 degrees of freedom, p= 0.02 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

                coef  exp(coef)   se(coef)      z     p
strataLOW -2.194e+01  2.957e-10  2.480e+04 -0.001 0.999

Likelihood ratio test=5.99  on 1 df, p=0.01438
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD EIF2AK2 

[1] 29
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     3.93   0.00113   0.00375
strata=LOW  2        2     2.07   0.00215   0.00375

 Chisq= 0  on 1 degrees of freedom, p= 1 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

              coef exp(coef) se(coef)      z     p
strataLOW -0.05656   0.94501  0.92349 -0.061 0.951

Likelihood ratio test=0  on 1 df, p=0.9511
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD CYLD 

[1] 30
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.25     0.254     0.417
strata=LOW  4        4     4.75     0.120     0.417

 Chisq= 0.4  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.5293    0.5890   0.8287 -0.639 0.523

Likelihood ratio test=0.4  on 1 df, p=0.5252
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD SPATA2 

[1] 31
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     4.24     0.361     0.904
strata=LOW  5        5     3.76     0.407     0.904

 Chisq= 0.9  on 1 degrees of freedom, p= 0.3 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.7860    2.1947   0.8464 0.929 0.353

Likelihood ratio test=0.94  on 1 df, p=0.3319
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD DNM1L 

[1] 32
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     4.65    0.0267    0.0894
strata=LOW  2        2     2.35    0.0528    0.0894

 Chisq= 0.1  on 1 degrees of freedom, p= 0.8 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.2619    0.7696   0.8781 -0.298 0.766

Likelihood ratio test=0.09  on 1 df, p=0.7626
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD CFLAR 

[1] 33
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     4.59    0.0754     0.248
strata=LOW  3        3     2.41    0.1434     0.248

 Chisq= 0.2  on 1 degrees of freedom, p= 0.6 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.4115    1.5090   0.8315 0.495 0.621

Likelihood ratio test=0.24  on 1 df, p=0.6217
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD TICAM1 

[1] 34
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2      3.4     0.576      1.65
strata=LOW  4        4      2.6     0.754      1.65

 Chisq= 1.7  on 1 degrees of freedom, p= 0.2 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

           coef exp(coef) se(coef)     z     p
strataLOW 1.370     3.934    1.139 1.202 0.229

Likelihood ratio test=1.78  on 1 df, p=0.1818
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD HSP90AA1 

[1] 35
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.23     0.263     0.485
strata=LOW  3        3     3.77     0.156     0.485

 Chisq= 0.5  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.6321    0.5315   0.9220 -0.686 0.493

Likelihood ratio test=0.48  on 1 df, p=0.4874
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD IL33 

[1] 36
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     5.15   0.00423    0.0191
strata=LOW  2        2     1.85   0.01176    0.0191

 Chisq= 0  on 1 degrees of freedom, p= 0.9 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z    p
strataLOW 0.1278    1.1363   0.9241 0.138 0.89

Likelihood ratio test=0.02  on 1 df, p=0.8905
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD IRF9 

[1] 37
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=9, 13 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     4.55    0.0443     0.105
strata=LOW  4        4     4.45    0.0454     0.105

 Chisq= 0.1  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.2313    0.7935   0.7162 -0.323 0.747

Likelihood ratio test=0.1  on 1 df, p=0.7469
n= 9, number of events= 9 
   (13 observations deleted due to missingness)


============================

TCGA-COAD SHARPIN 

[1] 38
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     5.42     0.373      2.19
strata=LOW  3        3     1.58     1.280      2.19

 Chisq= 2.2  on 1 degrees of freedom, p= 0.1 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

           coef exp(coef) se(coef)    z     p
strataLOW 1.586     4.883    1.174 1.35 0.177

Likelihood ratio test=2.17  on 1 df, p=0.1411
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD IFNAR1 

[1] 39
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.57    0.0732     0.155
strata=LOW  3        3     3.43    0.0547     0.155

 Chisq= 0.2  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.3625    0.6960   0.9256 -0.392 0.695

Likelihood ratio test=0.16  on 1 df, p=0.6928
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD XIAP 

[1] 40
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     5.25     0.300     0.974
strata=LOW  4        4     2.75     0.574     0.974

 Chisq= 1  on 1 degrees of freedom, p= 0.3 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.7504    2.1178   0.7767 0.966 0.334

Likelihood ratio test=0.95  on 1 df, p=0.3309
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD VDAC3 

[1] 41
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     3.23    0.0168    0.0449
strata=LOW  3        3     2.77    0.0197    0.0449

 Chisq= 0  on 1 degrees of freedom, p= 0.8 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.1950    1.2153   0.9213 0.212 0.832

Likelihood ratio test=0.05  on 1 df, p=0.8315
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD CAMK2A 

[1] 42
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     5.71     0.089     0.369
strata=LOW  3        3     2.29     0.222     0.369

 Chisq= 0.4  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.4981    1.6456   0.8281 0.601 0.548

Likelihood ratio test=0.36  on 1 df, p=0.5493
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD VDAC1 

[1] 43
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     3.24    0.0173    0.0332
strata=LOW  5        5     4.76    0.0118    0.0332

 Chisq= 0  on 1 degrees of freedom, p= 0.9 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.1410    1.1514   0.7745 0.182 0.856

Likelihood ratio test=0.03  on 1 df, p=0.8552
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD RIPK3 

[1] 44
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2     2.35    0.0528     0.082
strata=LOW  6        6     5.65    0.0220     0.082

 Chisq= 0.1  on 1 degrees of freedom, p= 0.8 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.2427    1.2746   0.8491 0.286 0.775

Likelihood ratio test=0.08  on 1 df, p=0.7716
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD CAPN1 

[1] 45
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     4.52     0.509      2.56
strata=LOW  3        3     1.48     1.551      2.56

 Chisq= 2.6  on 1 degrees of freedom, p= 0.1 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

           coef exp(coef) se(coef)    z    p
strataLOW 1.688     5.408    1.172 1.44 0.15

Likelihood ratio test=2.47  on 1 df, p=0.1159
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD USP21 

[1] 46
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=4, 18 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2     2.33    0.0476     0.154
strata=LOW  2        2     1.67    0.0667     0.154

 Chisq= 0.2  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

            coef exp(coef) se(coef)     z     p
strataLOW 0.4812    1.6180   1.2380 0.389 0.697

Likelihood ratio test=0.16  on 1 df, p=0.6913
n= 4, number of events= 4 
   (18 observations deleted due to missingness)


============================

TCGA-COAD AIFM1 

[1] 47
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     4.95     0.765      3.31
strata=LOW  4        4     2.05     1.842      3.31

 Chisq= 3.3  on 1 degrees of freedom, p= 0.07 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

           coef exp(coef) se(coef)     z     p
strataLOW 1.840     6.294    1.139 1.615 0.106

Likelihood ratio test=3.35  on 1 df, p=0.06722
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD TRADD 

[1] 48
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.23     0.263     0.485
strata=LOW  3        3     3.77     0.156     0.485

 Chisq= 0.5  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.6321    0.5315   0.9220 -0.686 0.493

Likelihood ratio test=0.48  on 1 df, p=0.4874
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================

TCGA-COAD OPTN 

[1] 49
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=9, 13 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     2.56     0.803      1.29
strata=LOW  5        5     6.44     0.320      1.29

 Chisq= 1.3  on 1 degrees of freedom, p= 0.3 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z    p
strataLOW -0.8509    0.4270   0.7710 -1.104 0.27

Likelihood ratio test=1.23  on 1 df, p=0.2671
n= 9, number of events= 9 
   (13 observations deleted due to missingness)


============================

TCGA-COAD PPID 

[1] 50
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2      1.6    0.0987     0.147
strata=LOW  5        5      5.4    0.0293     0.147

 Chisq= 0.1  on 1 degrees of freedom, p= 0.7 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.3505    0.7044   0.9188 -0.381 0.703

Likelihood ratio test=0.14  on 1 df, p=0.7067
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD RIPK1 

[1] 51
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4     3.17     0.216      0.48
strata=LOW  4        4     4.83     0.142      0.48

 Chisq= 0.5  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.6053    0.5459   0.8851 -0.684 0.494

Likelihood ratio test=0.49  on 1 df, p=0.483
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD TLR3 

[1] 52
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 4        4      2.5     0.893      1.85
strata=LOW  3        3      4.5     0.497      1.85

 Chisq= 1.9  on 1 degrees of freedom, p= 0.2 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -1.4295    0.2394   1.1334 -1.261 0.207

Likelihood ratio test=1.98  on 1 df, p=0.159
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD FAF1 

[1] 53
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=4, 18 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 2        2    0.833      1.63      2.88
strata=LOW  2        2    3.167      0.43      2.88

 Chisq= 2.9  on 1 degrees of freedom, p= 0.09 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

                coef  exp(coef)   se(coef)      z     p
strataLOW -2.168e+01  3.848e-10  2.943e+04 -0.001 0.999

Likelihood ratio test=3.58  on 1 df, p=0.05836
n= 4, number of events= 4 
   (18 observations deleted due to missingness)


============================

TCGA-COAD JAK1 

[1] 54
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=5, 17 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     2.27     0.237     0.559
strata=LOW  2        2     2.73     0.197     0.559

 Chisq= 0.6  on 1 degrees of freedom, p= 0.5 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

             coef exp(coef) se(coef)      z     p
strataLOW -0.8455    0.4293   1.1634 -0.727 0.467

Likelihood ratio test=0.59  on 1 df, p=0.4413
n= 5, number of events= 5 
   (17 observations deleted due to missingness)


============================

Display the results only for genes where a significant difference in survival has been reported.

significant_genes
[1] "TRAF2"    "TNFRSF1A" "GLUD1"   
num_significant_genes <- length(significant_genes)

if (num_significant_genes > 0) {
  for (i in 1 : num_significant_genes) {
    project <- significant_projects[[i]]
    gene <- significant_genes[[i]]
    
    cat(project, gene, "\n\n")
    gene_df <- construct_gene_df(gene, project)
    
    fit <- compute_surival_fit(gene_df)
    survival <- compute_survival_diff(gene_df)
    cox <- compute_cox(gene_df)
    print(survival)
    cat("\n")
    print(cox)
    print(plot_survival(fit))
    
    cat("\n\n============================\n\n")
  } 
}
TCGA-COAD TRAF2 
Warning: Loglik converged before variable  1 ; coefficient may be infinite. 
Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=8, 14 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5    7.173     0.658      8.18
strata=LOW  3        3    0.827     5.705      8.18

 Chisq= 8.2  on 1 degrees of freedom, p= 0.004 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

               coef exp(coef)  se(coef)     z     p
strataLOW 2.189e+01 3.219e+09 1.874e+04 0.001 0.999

Likelihood ratio test=8.05  on 1 df, p=0.004549
n= 8, number of events= 8 
   (14 observations deleted due to missingness)


============================

TCGA-COAD TNFRSF1A 

Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=7, 15 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 5        5     2.81      1.70       4.2
strata=LOW  2        2     4.19      1.14       4.2

 Chisq= 4.2  on 1 degrees of freedom, p= 0.04 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

                coef  exp(coef)   se(coef)      z     p
strataLOW -2.118e+01  6.332e-10  1.860e+04 -0.001 0.999

Likelihood ratio test=6.09  on 1 df, p=0.0136
n= 7, number of events= 7 
   (15 observations deleted due to missingness)


============================

TCGA-COAD GLUD1 

Call:
survdiff(formula = Surv(overall_survival, deceased) ~ strata, 
    data = gene_df)

n=6, 16 observations deleted due to missingness.

            N Observed Expected (O-E)^2/E (O-E)^2/V
strata=HIGH 3        3     1.15     2.976      5.05
strata=LOW  3        3     4.85     0.706      5.05

 Chisq= 5.1  on 1 degrees of freedom, p= 0.02 

Call:
coxph(formula = Surv(overall_survival, deceased) ~ strata, data = gene_df)

                coef  exp(coef)   se(coef)      z     p
strataLOW -2.194e+01  2.957e-10  2.480e+04 -0.001 0.999

Likelihood ratio test=5.99  on 1 df, p=0.01438
n= 6, number of events= 6 
   (16 observations deleted due to missingness)


============================


  1. De La Salle University, Manila, Philippines, ↩︎

  2. De La Salle University, Manila, Philippines, ↩︎

LS0tDQp0aXRsZTogIlN1cnZpdmFsIEFuYWx5c2lzIg0Kc3VidGl0bGU6ICJDb2xvcmVjdGFsIENhbmNlciB8IE5lY3JvcHRvc2lzIHwgVW5pcXVlIEdlbmVzIHBlciBSQ0QgVHlwZSB8IEdlbmUgRXhwcmVzc2lvbiBvZiBOb3JtYWwgU2FtcGxlcyINCmF1dGhvcjogDQogIC0gTWFyayBFZHdhcmQgTS4gR29uemFsZXNeW0RlIExhIFNhbGxlIFVuaXZlcnNpdHksIE1hbmlsYSwgUGhpbGlwcGluZXMsIGdvbnphbGVzLm1hcmtlZHdhcmRAZ21haWwuY29tXQ0KICAtIERyLiBBbmlzaCBNLlMuIFNocmVzdGhhXltEZSBMYSBTYWxsZSBVbml2ZXJzaXR5LCBNYW5pbGEsIFBoaWxpcHBpbmVzLCBhbmlzaC5zaHJlc3RoYUBkbHN1LmVkdS5waF0NCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIEkuIFByZWxpbWluYXJpZXMNCg0KIyMjIExvYWRpbmcgbGlicmFyaWVzDQoNCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCmxpYnJhcnkoInRpYmJsZSIpDQpsaWJyYXJ5KCJtc2lnZGJyIikNCmxpYnJhcnkoImdncGxvdDIiKQ0KbGlicmFyeSgiVENHQWJpb2xpbmtzIikNCmxpYnJhcnkoIlJOQXNlcVFDIikNCmxpYnJhcnkoIkRFU2VxMiIpDQpsaWJyYXJ5KCJlbnNlbWJsZGIiKQ0KbGlicmFyeSgicHVycnIiKQ0KbGlicmFyeSgibWFncml0dHIiKQ0KbGlicmFyeSgidnNuIikNCmxpYnJhcnkoIm1hdHJpeFN0YXRzIikNCmxpYnJhcnkoImRwbHlyIikNCmxpYnJhcnkoImdyZXgiKQ0KbGlicmFyeSgic3Vydm1pbmVyIikNCmxpYnJhcnkoInN1cnZpdmFsIikNCmBgYA0KDQojIyBJSS4gRG93bmxvYWRpbmcgdGhlIFRDR0EgZ2VuZSBleHByZXNzaW9uIGRhdGEgDQoNCkNyZWF0ZSBhIGZ1bmN0aW9uIGZvciBkb3dubG9hZGluZyBUQ0dBIGdlbmUgZXhwcmVzc2lvbiBkYXRhLiANCg0KRm9yIG1vcmUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiwgcmVmZXIgdG8gYDIuIERpZmZlcmVudGlhbCBHZW5lIEV4cHJlc3Npb24gQW5hbHlzaXMgLSBUQ0dBLlJtZGAuDQoNCmBgYHtyfQ0KR0RDX0RJUiA9ICIuLi9kYXRhL3B1YmxpYy9HRENkYXRhIg0KDQpxdWVyeV9hbmRfZmlsdGVyX3NhbXBsZXMgPC0gZnVuY3Rpb24ocHJvamVjdCkgew0KICBxdWVyeV90dW1vciA8LSBHRENxdWVyeSgNCiAgICBwcm9qZWN0ID0gcHJvamVjdCwNCiAgICBkYXRhLmNhdGVnb3J5ID0gIlRyYW5zY3JpcHRvbWUgUHJvZmlsaW5nIiwNCiAgICBkYXRhLnR5cGUgPSAiR2VuZSBFeHByZXNzaW9uIFF1YW50aWZpY2F0aW9uIiwNCiAgICBleHBlcmltZW50YWwuc3RyYXRlZ3kgPSAiUk5BLVNlcSIsDQogICAgd29ya2Zsb3cudHlwZSA9ICJTVEFSIC0gQ291bnRzIiwNCiAgICBhY2Nlc3MgPSAib3BlbiIsDQogICAgc2FtcGxlLnR5cGUgPSAiUHJpbWFyeSBUdW1vciINCiAgKQ0KICB0dW1vciA8LSBnZXRSZXN1bHRzKHF1ZXJ5X3R1bW9yKQ0KDQogIHF1ZXJ5X25vcm1hbCA8LSBHRENxdWVyeSgNCiAgICBwcm9qZWN0ID0gcHJvamVjdCwNCiAgICBkYXRhLmNhdGVnb3J5ID0gIlRyYW5zY3JpcHRvbWUgUHJvZmlsaW5nIiwNCiAgICBkYXRhLnR5cGUgPSAiR2VuZSBFeHByZXNzaW9uIFF1YW50aWZpY2F0aW9uIiwNCiAgICBleHBlcmltZW50YWwuc3RyYXRlZ3kgPSAiUk5BLVNlcSIsDQogICAgd29ya2Zsb3cudHlwZSA9ICJTVEFSIC0gQ291bnRzIiwNCiAgICBhY2Nlc3MgPSAib3BlbiIsDQogICAgc2FtcGxlLnR5cGUgPSAiU29saWQgVGlzc3VlIE5vcm1hbCINCiAgKQ0KICBub3JtYWwgPC0gZ2V0UmVzdWx0cyhxdWVyeV9ub3JtYWwpDQoNCiAgc3VibWl0dGVyX2lkcyA8LSBpbm5lcl9qb2luKHR1bW9yLCBub3JtYWwsIGJ5ID0gImNhc2VzLnN1Ym1pdHRlcl9pZCIpICU+JQ0KICAgIGRwbHlyOjpzZWxlY3QoY2FzZXMuc3VibWl0dGVyX2lkKQ0KICB0dW1vciA8LSB0dW1vciAlPiUNCiAgICBkcGx5cjo6ZmlsdGVyKGNhc2VzLnN1Ym1pdHRlcl9pZCAlaW4lIHN1Ym1pdHRlcl9pZHMkY2FzZXMuc3VibWl0dGVyX2lkKQ0KICBub3JtYWwgPC0gbm9ybWFsICU+JQ0KICAgIGRwbHlyOjpmaWx0ZXIoY2FzZXMuc3VibWl0dGVyX2lkICVpbiUgc3VibWl0dGVyX2lkcyRjYXNlcy5zdWJtaXR0ZXJfaWQpDQoNCiAgc2FtcGxlcyA8LSByYmluZCh0dW1vciwgbm9ybWFsKQ0KICB1bmlxdWUoc2FtcGxlcyRzYW1wbGVfdHlwZSkNCg0KICBxdWVyeV9wcm9qZWN0IDwtIEdEQ3F1ZXJ5KA0KICAgIHByb2plY3QgPSBwcm9qZWN0LA0KICAgIGRhdGEuY2F0ZWdvcnkgPSAiVHJhbnNjcmlwdG9tZSBQcm9maWxpbmciLA0KICAgIGRhdGEudHlwZSA9ICJHZW5lIEV4cHJlc3Npb24gUXVhbnRpZmljYXRpb24iLA0KICAgIGV4cGVyaW1lbnRhbC5zdHJhdGVneSA9ICJSTkEtU2VxIiwNCiAgICB3b3JrZmxvdy50eXBlID0gIlNUQVIgLSBDb3VudHMiLA0KICAgIGFjY2VzcyA9ICJvcGVuIiwNCiAgICBzYW1wbGUudHlwZSA9IGMoIlNvbGlkIFRpc3N1ZSBOb3JtYWwiLCAiUHJpbWFyeSBUdW1vciIpLA0KICAgIGJhcmNvZGUgPSBhcy5saXN0KHNhbXBsZXMkc2FtcGxlLnN1Ym1pdHRlcl9pZCkNCiAgKQ0KDQogICMgSWYgdGhpcyBpcyB5b3VyIGZpcnN0IHRpbWUgcnVubmluZyB0aGlzIG5vdGVib29rIChpLmUuLCB5b3UgaGF2ZSBub3QgeWV0IGRvd25sb2FkZWQgdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IGluIHRoZSBwcmV2aW91cyBibG9jayksDQogICMgdW5jb21tZW50IHRoZSBjb2RlIGJsb2NrIGJlbG93DQoNCiAgIyBHRENkb3dubG9hZCgNCiAgIyAgIHF1ZXJ5X2NvYWQsDQogICMgICBkaXJlY3RvcnkgPSBHRENfRElSDQogICMgKQ0KDQogIHJldHVybihsaXN0KHNhbXBsZXMgPSBzYW1wbGVzLCBxdWVyeV9wcm9qZWN0ID0gcXVlcnlfcHJvamVjdCkpDQp9DQpgYGANCg0KRG93bmxvYWQgdGhlIFRDR0EgZ2VuZSBleHByZXNzaW9uIGRhdGEgZm9yIGNvbG9yZWN0YWwgY2FuY2VyIChUQ0dBLUNPQUQpLg0KDQpgYGB7ciwgZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgcmVzdWx0cz0iaGlkZSJ9DQpwcm9qZWN0cyA8LSBjKCJUQ0dBLUNPQUQiKQ0KDQp3aXRoX3Jlc3VsdHNfcHJvamVjdHMgPC0gYygpDQoNCnNhbXBsZXMgPC0gbGlzdCgpDQpwcm9qZWN0X2RhdGEgPC0gbGlzdCgpDQoNCmZvciAocHJvamVjdCBpbiBwcm9qZWN0cykgew0KICByZXN1bHQgPC0gdHJ5Q2F0Y2goDQogICAgew0KICAgICAgcmVzdWx0IDwtIHF1ZXJ5X2FuZF9maWx0ZXJfc2FtcGxlcyhwcm9qZWN0KQ0KICAgICAgc2FtcGxlc1tbcHJvamVjdF1dIDwtIHJlc3VsdCRzYW1wbGVzDQogICAgICBwcm9qZWN0X2RhdGFbW3Byb2plY3RdXSA8LSByZXN1bHQkcXVlcnlfcHJvamVjdA0KDQogICAgICB3aXRoX3Jlc3VsdHNfcHJvamVjdHMgPC0gYyh3aXRoX3Jlc3VsdHNfcHJvamVjdHMsIHByb2plY3QpDQogICAgfSwNCiAgICBlcnJvciA9IGZ1bmN0aW9uKGUpIHsNCg0KICAgIH0NCiAgKQ0KfQ0KYGBgDQoNClJ1bm5pbmcgdGhlIGNvZGUgYmxvY2sgYWJvdmUgc2hvdWxkIGdlbmVyYXRlIGFuZCBwb3B1bGF0ZSBhIGRpcmVjdG9yeSBuYW1lZCBgR0RDZGF0YWAuDQoNCiMjIElJSS4gRGF0YSBwcmVwcm9jZXNzaW5nDQoNCkNvbnN0cnVjdCB0aGUgUk5BLXNlcSBjb3VudCBtYXRyaXggZm9yIGVhY2ggY2FuY2VyIHR5cGUuDQoNCmBgYHtyLCBlY2hvID0gVFJVRSwgbWVzc2FnZSA9IEZBTFNFLCByZXN1bHRzPSJoaWRlIn0NCnRjZ2FfZGF0YSA8LSBsaXN0KCkNCnRjZ2FfbWF0cml4IDwtIGxpc3QoKQ0KDQpwcm9qZWN0cyA8LSB3aXRoX3Jlc3VsdHNfcHJvamVjdHMNCmZvciAocHJvamVjdCBpbiBwcm9qZWN0cykgew0KICB0Y2dhX2RhdGFbW3Byb2plY3RdXSA8LSBHRENwcmVwYXJlKA0KICAgIHByb2plY3RfZGF0YVtbcHJvamVjdF1dLCANCiAgICBkaXJlY3RvcnkgPSBHRENfRElSLA0KICAgIHN1bW1hcml6ZWRFeHBlcmltZW50ID0gVFJVRQ0KICApDQp9DQpgYGANCg0KYGBge3J9DQpmb3IgKHByb2plY3QgaW4gcHJvamVjdHMpIHsNCiAgY291bnRfbWF0cml4IDwtIGFzc2F5KHRjZ2FfZGF0YVtbcHJvamVjdF1dLCAidW5zdHJhbmRlZCIpDQoNCiAgIyBSZW1vdmUgZHVwbGljYXRlIGVudHJpZXMNCiAgY291bnRfbWF0cml4X2RmIDwtIGRhdGEuZnJhbWUoY291bnRfbWF0cml4KQ0KICBjb3VudF9tYXRyaXhfZGYgPC0gY291bnRfbWF0cml4X2RmWyFkdXBsaWNhdGVkKGNvdW50X21hdHJpeF9kZiksIF0NCiAgY291bnRfbWF0cml4IDwtIGRhdGEubWF0cml4KGNvdW50X21hdHJpeF9kZikNCiAgcm93bmFtZXMoY291bnRfbWF0cml4KSA8LSBjbGVhbmlkKHJvd25hbWVzKGNvdW50X21hdHJpeCkpDQogIGNvdW50X21hdHJpeCA8LSBjb3VudF9tYXRyaXhbIShkdXBsaWNhdGVkKHJvd25hbWVzKGNvdW50X21hdHJpeCkpIHwgZHVwbGljYXRlZChyb3duYW1lcyhjb3VudF9tYXRyaXgpLCBmcm9tTGFzdCA9IFRSVUUpKSwgXQ0KDQogIHRjZ2FfbWF0cml4W1twcm9qZWN0XV0gPC0gY291bnRfbWF0cml4DQp9DQpgYGANCkZvcm1hdCB0aGUgYHNhbXBsZXNgIHRhYmxlIHNvIHRoYXQgaXQgY2FuIGJlIGZlZCBhcyBpbnB1dCB0byBERVNlcTIuDQoNCmBgYHtyfQ0KZm9yIChwcm9qZWN0IGluIHByb2plY3RzKSB7DQogIHJvd25hbWVzKHNhbXBsZXNbW3Byb2plY3RdXSkgPC0gc2FtcGxlc1tbcHJvamVjdF1dJGNhc2VzDQogIHNhbXBsZXNbW3Byb2plY3RdXSA8LSBzYW1wbGVzW1twcm9qZWN0XV0gJT4lDQogICAgZHBseXI6OnNlbGVjdChjYXNlID0gImNhc2VzLnN1Ym1pdHRlcl9pZCIsIHR5cGUgPSAic2FtcGxlX3R5cGUiKQ0KICBzYW1wbGVzW1twcm9qZWN0XV0kdHlwZSA8LSBzdHJfcmVwbGFjZShzYW1wbGVzW1twcm9qZWN0XV0kdHlwZSwgIlNvbGlkIFRpc3N1ZSBOb3JtYWwiLCAibm9ybWFsIikNCiAgc2FtcGxlc1tbcHJvamVjdF1dJHR5cGUgPC0gc3RyX3JlcGxhY2Uoc2FtcGxlc1tbcHJvamVjdF1dJHR5cGUsICJQcmltYXJ5IFR1bW9yIiwgInR1bW9yIikNCn0NCmBgYA0KDQpERVNlcTIgcmVxdWlyZXMgdGhlIHJvdyBuYW1lcyBvZiBgc2FtcGxlc2Agc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgY29sdW1uIG5hbWVzIG9mIGBjb3VudF9tYXRyaXhgLg0KDQpgYGB7ciwgZWNobyA9IFRSVUUsIHJlc3VsdHM9ImhpZGUifQ0KZm9yIChwcm9qZWN0IGluIHByb2plY3RzKSB7DQogIGNvbG5hbWVzKHRjZ2FfbWF0cml4W1twcm9qZWN0XV0pIDwtIGdzdWIoeCA9IGNvbG5hbWVzKHRjZ2FfbWF0cml4W1twcm9qZWN0XV0pLCBwYXR0ZXJuID0gIlxcLiIsIHJlcGxhY2VtZW50ID0gIi0iKQ0KICB0Y2dhX21hdHJpeFtbcHJvamVjdF1dIDwtIHRjZ2FfbWF0cml4W1twcm9qZWN0XV1bLCByb3duYW1lcyhzYW1wbGVzW1twcm9qZWN0XV0pXQ0KDQogICMgU2FuaXR5IGNoZWNrDQogIHByaW50KGFsbChjb2xuYW1lcyh0Y2dhX21hdHJpeFtbcHJvamVjdF1dKSA9PSByb3duYW1lcyhzYW1wbGVzW1twcm9qZWN0XV0pKSkNCn0NCmBgYA0KDQojIyBJVi4gRGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbiBhbmFseXNpcw0KDQpGb3IgbW9yZSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9uIG9idGFpbmluZyB0aGUgZ2VuZSBzZXQsIHJlZmVyIHRvIGA3LiBEaWZmZXJlbnRpYWwgR2VuZSBFeHByZXNzaW9uIEFuYWx5c2lzIC0gVENHQSAtIFBhbi1jYW5jZXIgLSBVbmlxdWUgR2VuZXMuUm1kYC4NCg0KYGBge3J9DQpSQ0RkYiA8LSAiLi4vZGF0YS9wdWJsaWMvcmNkLWdlbmUtbGlzdC91bmlxdWUtZ2VuZXMvbmVjcm9wdG9zaXMtZmVycm9wdG9zaXMtcHlyb3B0b3Npcy8iDQpgYGANCg0KV3JpdGUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZpbHRlcmluZyB0aGUgZ2VuZSBzZXRzLCBwZXJmb3JtaW5nIGRpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb24gYW5hbHlzaXMsIHBsb3R0aW5nIHRoZSByZXN1bHRzLCBhbmQgcGVyZm9ybWluZyB2YXJpYW5jZS1zdGFiaWxpemluZyB0cmFuc2Zvcm1hdGlvbi4NCg0KYGBge3J9DQpmaWx0ZXJfZ2VuZV9zZXRfYW5kX3BlcmZvcm1fZGdlYSA8LSBmdW5jdGlvbihnZW5lcykgew0KICB0Y2dhX3JjZCA8LSBsaXN0KCkNCg0KICBmb3IgKHByb2plY3QgaW4gcHJvamVjdHMpIHsNCiAgICByb3duYW1lcyhnZW5lcykgPC0gZ2VuZXMkZ2VuZV9pZA0KICAgIHRjZ2FfcmNkW1twcm9qZWN0XV0gPC0gdGNnYV9tYXRyaXhbW3Byb2plY3RdXVtyb3duYW1lcyh0Y2dhX21hdHJpeFtbcHJvamVjdF1dKSAlaW4lIGdlbmVzJGdlbmVfaWQsIF0NCiAgICB0Y2dhX3JjZFtbcHJvamVjdF1dIDwtIHRjZ2FfcmNkW1twcm9qZWN0XV1bLCByb3duYW1lcyhzYW1wbGVzW1twcm9qZWN0XV0pXQ0KICB9DQoNCiAgZGRzX3JjZCA8LSBsaXN0KCkNCiAgcmVzX3JjZCA8LSBsaXN0KCkNCg0KICBmb3IgKHByb2plY3QgaW4gcHJvamVjdHMpIHsNCiAgICBwcmludChwcm9qZWN0KQ0KICAgIHByaW50KCI9PT09PT09PT09PT09IikNCiAgICBkZHMgPC0gREVTZXFEYXRhU2V0RnJvbU1hdHJpeCgNCiAgICAgIGNvdW50RGF0YSA9IHRjZ2FfcmNkW1twcm9qZWN0XV0sDQogICAgICBjb2xEYXRhID0gc2FtcGxlc1tbcHJvamVjdF1dLA0KICAgICAgZGVzaWduID0gfnR5cGUNCiAgICApDQogICAgZGRzIDwtIGZpbHRlcl9nZW5lcyhkZHMsIG1pbl9jb3VudCA9IDEwKQ0KICAgIGRkcyR0eXBlIDwtIHJlbGV2ZWwoZGRzJHR5cGUsIHJlZiA9ICJub3JtYWwiKQ0KICAgIGRkc19yY2RbW3Byb2plY3RdXSA8LSBERVNlcShkZHMpDQogICAgcmVzX3JjZFtbcHJvamVjdF1dIDwtIHJlc3VsdHMoZGRzX3JjZFtbcHJvamVjdF1dKQ0KICB9DQoNCiAgZGVzZXEuYmJsLmRhdGEgPC0gbGlzdCgpDQoNCiAgZm9yIChwcm9qZWN0IGluIHByb2plY3RzKSB7DQogICAgZGVzZXEucmVzdWx0cyA8LSByZXNfcmNkW1twcm9qZWN0XV0NCiAgICBkZXNlcS5iYmwuZGF0YVtbcHJvamVjdF1dIDwtIGRhdGEuZnJhbWUoDQogICAgICByb3cubmFtZXMgPSByb3duYW1lcyhkZXNlcS5yZXN1bHRzKSwNCiAgICAgIGJhc2VNZWFuID0gZGVzZXEucmVzdWx0cyRiYXNlTWVhbiwNCiAgICAgIGxvZzJGb2xkQ2hhbmdlID0gZGVzZXEucmVzdWx0cyRsb2cyRm9sZENoYW5nZSwNCiAgICAgIGxmY1NFID0gZGVzZXEucmVzdWx0cyRsZmNTRSwNCiAgICAgIHN0YXQgPSBkZXNlcS5yZXN1bHRzJHN0YXQsDQogICAgICBwdmFsdWUgPSBkZXNlcS5yZXN1bHRzJHB2YWx1ZSwNCiAgICAgIHBhZGogPSBkZXNlcS5yZXN1bHRzJHBhZGosDQogICAgICBjYW5jZXJfdHlwZSA9IHByb2plY3QsDQogICAgICBnZW5lX3N5bWJvbCA9IGdlbmVzW3Jvd25hbWVzKGRlc2VxLnJlc3VsdHMpLCAiZ2VuZSJdDQogICAgKQ0KICB9DQoNCiAgZGVzZXEuYmJsLmRhdGEuY29tYmluZWQgPC0gYmluZF9yb3dzKGRlc2VxLmJibC5kYXRhKQ0KICBkZXNlcS5iYmwuZGF0YS5jb21iaW5lZCA8LSBkcGx5cjo6ZmlsdGVyKGRlc2VxLmJibC5kYXRhLmNvbWJpbmVkLCBhYnMobG9nMkZvbGRDaGFuZ2UpID49IDEuNSAmIHBhZGogPCAwLjA1KQ0KDQogIHJldHVybihkZXNlcS5iYmwuZGF0YS5jb21iaW5lZCkNCn0NCmBgYA0KDQpgYGB7cn0NCnBsb3RfZGdlYSA8LSBmdW5jdGlvbihkZXNlcS5iYmwuZGF0YS5jb21iaW5lZCkgew0KICBzaXplcyA8LSBjKCI8MTBeLTE1IiA9IDQsICIxMF4tMTAiID0gMywgIjEwXi01IiA9IDIsICIwLjA1IiA9IDEpDQoNCiAgZGVzZXEuYmJsLmRhdGEuY29tYmluZWQgPC0gZGVzZXEuYmJsLmRhdGEuY29tYmluZWQgJT4lDQogICAgbXV0YXRlKGZkcl9jYXRlZ29yeSA9IGN1dChwYWRqLA0KICAgICAgYnJlYWtzID0gYygtSW5mLCAxZS0xNSwgMWUtMTAsIDFlLTUsIDAuMDUpLA0KICAgICAgbGFiZWxzID0gYygiPDEwXi0xNSIsICIxMF4tMTAiLCAiMTBeLTUiLCAiMC4wNSIpLA0KICAgICAgcmlnaHQgPSBGQUxTRQ0KICAgICkpDQoNCiAgdG9wX2dlbmVzIDwtIGRlc2VxLmJibC5kYXRhLmNvbWJpbmVkICU+JQ0KICAgIGdyb3VwX2J5KGNhbmNlcl90eXBlKSAlPiUNCiAgICBtdXRhdGUocmFuayA9IHJhbmsoLWFicyhsb2cyRm9sZENoYW5nZSkpKSAlPiUNCiAgICBkcGx5cjo6ZmlsdGVyKHJhbmsgPD0gMTApICU+JQ0KICAgIHVuZ3JvdXAoKQ0KDQogIGdncGxvdCh0b3BfZ2VuZXMsIGFlcyh5ID0gY2FuY2VyX3R5cGUsIHggPSBnZW5lX3N5bWJvbCwgc2l6ZSA9IGZkcl9jYXRlZ29yeSwgZmlsbCA9IGxvZzJGb2xkQ2hhbmdlKSkgKw0KICAgIGdlb21fcG9pbnQoYWxwaGEgPSAwLjUsIHNoYXBlID0gMjEsIGNvbG9yID0gImJsYWNrIikgKw0KICAgIHNjYWxlX3NpemVfbWFudWFsKHZhbHVlcyA9IHNpemVzKSArDQogICAgc2NhbGVfZmlsbF9ncmFkaWVudDIobG93ID0gImJsdWUiLCBtaWQgPSAid2hpdGUiLCBoaWdoID0gInJlZCIsIGxpbWl0cyA9IGMobWluKGRlc2VxLmJibC5kYXRhLmNvbWJpbmVkJGxvZzJGb2xkQ2hhbmdlKSwgbWF4KGRlc2VxLmJibC5kYXRhLmNvbWJpbmVkJGxvZzJGb2xkQ2hhbmdlKSkpICsNCiAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgIHRoZW1lKA0KICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkNCiAgICApICsNCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArDQogICAgbGFicyhzaXplID0gIkFkanVzdGVkIHAtdmFsdWUiLCBmaWxsID0gImxvZzIgRkMiLCB5ID0gIkNhbmNlciB0eXBlIiwgeCA9ICJHZW5lIikNCn0NCmBgYA0KDQpgYGB7cn0NCnBlcmZvcm1fdnNkIDwtIGZ1bmN0aW9uKGdlbmVzKSB7DQogIHRjZ2FfcmNkIDwtIGxpc3QoKQ0KDQogIGZvciAocHJvamVjdCBpbiBwcm9qZWN0cykgew0KICAgIHJvd25hbWVzKGdlbmVzKSA8LSBnZW5lcyRnZW5lX2lkDQogICAgdGNnYV9yY2RbW3Byb2plY3RdXSA8LSB0Y2dhX21hdHJpeFtbcHJvamVjdF1dW3Jvd25hbWVzKHRjZ2FfbWF0cml4W1twcm9qZWN0XV0pICVpbiUgZ2VuZXMkZ2VuZV9pZCwgXQ0KICAgIHRjZ2FfcmNkW1twcm9qZWN0XV0gPC0gdGNnYV9yY2RbW3Byb2plY3RdXVssIHJvd25hbWVzKHNhbXBsZXNbW3Byb2plY3RdXSldDQogIH0NCg0KICB2c2RfcmNkIDwtIGxpc3QoKQ0KDQogIGZvciAocHJvamVjdCBpbiBwcm9qZWN0cykgew0KICAgIHByaW50KHByb2plY3QpDQogICAgcHJpbnQoIj09PT09PT09PT09PT0iKQ0KICAgIGRkcyA8LSBERVNlcURhdGFTZXRGcm9tTWF0cml4KA0KICAgICAgY291bnREYXRhID0gdGNnYV9yY2RbW3Byb2plY3RdXSwNCiAgICAgIGNvbERhdGEgPSBzYW1wbGVzW1twcm9qZWN0XV0sDQogICAgICBkZXNpZ24gPSB+dHlwZQ0KICAgICkNCiAgICBkZHMgPC0gZmlsdGVyX2dlbmVzKGRkcywgbWluX2NvdW50ID0gMTApDQoNCiAgICAjIFBlcmZvcm0gdmFyaWFuY2Ugc3RhYmlsaXphdGlvbg0KICAgIGRkcyA8LSBlc3RpbWF0ZVNpemVGYWN0b3JzKGRkcykNCiAgICBuc3ViIDwtIHN1bShyb3dNZWFucyhjb3VudHMoZGRzLCBub3JtYWxpemVkID0gVFJVRSkpID4gMTApDQogICAgdnNkIDwtIHZzdChkZHMsIG5zdWIgPSBuc3ViKQ0KICAgIHZzZF9yY2RbW3Byb2plY3RdXSA8LSBhc3NheSh2c2QpDQogIH0NCg0KICByZXR1cm4odnNkX3JjZCkNCn0NCmBgYA0KDQoNCiMjIyMgTmVjcm9wdG9zaXMNCg0KRmV0Y2ggdGhlIGdlbmUgc2V0IG9mIGludGVyZXN0Lg0KDQpgYGB7cn0NCmdlbmVzIDwtIHJlYWQuY3N2KHBhc3RlMChSQ0RkYiwgIk5lY3JvcHRvc2lzLmNzdiIpKQ0KcHJpbnQoZ2VuZXMpDQpnZW5lcyRnZW5lX2lkIDwtIGNsZWFuaWQoZ2VuZXMkZ2VuZV9pZCkNCmdlbmVzIDwtIGRpc3RpbmN0KGdlbmVzLCBnZW5lX2lkLCAua2VlcF9hbGwgPSBUUlVFKQ0KZ2VuZXMgPC0gc3Vic2V0KGdlbmVzLCBnZW5lX2lkICE9ICIiKQ0KZ2VuZXMNCmBgYA0KDQpGaWx0ZXIgdGhlIGdlbmVzIHRvIGluY2x1ZGUgb25seSB0aG9zZSBpbiB0aGUgZ2VuZSBzZXQgb2YgaW50ZXJlc3QsIGFuZCB0aGVuIHBlcmZvcm0gZGlmZmVyZW50aWFsIGdlbmUgZXhwcmVzc2lvbiBhbmFseXNpcy4NCg0KYGBge3J9DQpkZXNlcS5iYmwuZGF0YS5jb21iaW5lZCA8LSBmaWx0ZXJfZ2VuZV9zZXRfYW5kX3BlcmZvcm1fZGdlYShnZW5lcykNCmRlc2VxLmJibC5kYXRhLmNvbWJpbmVkDQpgYGANCg0KUGxvdCB0aGUgcmVzdWx0cy4NCg0KYGBge3J9DQpwbG90X2RnZWEoZGVzZXEuYmJsLmRhdGEuY29tYmluZWQpDQpgYGANClBlcmZvcm0gdmFyaWFuY2Utc3RhYmlsaXppbmcgdHJhbnNmb3JtYXRpb24gZm9yIGZ1cnRoZXIgZG93bnN0cmVhbSBhbmFseXNpcyAoaS5lLiwgZm9yIHN1cnZpdmFsIGFuYWx5c2lzKS4NCg0KYGBge3IsIHdhcm5pbmc9RkFMU0V9DQp2c2QgPC0gcGVyZm9ybV92c2QoZ2VuZXMpDQpgYGANCg0KIyMgVi4gRG93bmxvYWRpbmcgdGhlIGNsaW5pY2FsIGRhdGENCg0KRG93bmxvYWQgY2xpbmljYWwgZGF0YSBmcm9tIFRDR0EsIGFuZCBwZXJmb3JtIHNvbWUgcHJlcHJvY2Vzc2luZzoNCi0gVGhlIGBkZWNlYXNlZGAgY29sdW1uIHNob3VsZCBiZSBgRkFMU0VgIGlmIHRoZSBwYXRpZW50IGlzIGFsaXZlIGFuZCBgVFJVRWAgb3RoZXJ3aXNlDQotIFRoZSBgb3ZlcmFsbF9zdXJ2aXZhbGAgY29sdW1uIHNob3VsZCByZWZsZWN0IHRoZSBmb2xsb3ctdXAgdGltZSBpZiB0aGUgcGF0aWVudCBpcyBhbGl2ZSBhbmQgdGhlIGRheXMgdG8gZGVhdGggb3RoZXJ3aXNlDQoNCmBgYHtyfQ0KZG93bmxvYWRfY2xpbmljYWxfZGF0YSA8LSBmdW5jdGlvbihwcm9qZWN0KSB7DQogIGNsaW5pY2FsX2RhdGEgPC0gR0RDcXVlcnlfY2xpbmljKHByb2plY3QpDQogIGNsaW5pY2FsX2RhdGEkZGVjZWFzZWQgPC0gaWZlbHNlKGNsaW5pY2FsX2RhdGEkdml0YWxfc3RhdHVzID09ICJBbGl2ZSIsIEZBTFNFLCBUUlVFKQ0KICBjbGluaWNhbF9kYXRhJG92ZXJhbGxfc3Vydml2YWwgPC0gaWZlbHNlKGNsaW5pY2FsX2RhdGEkdml0YWxfc3RhdHVzID09ICJBbGl2ZSIsDQogICAgY2xpbmljYWxfZGF0YSRkYXlzX3RvX2xhc3RfZm9sbG93X3VwLA0KICAgIGNsaW5pY2FsX2RhdGEkZGF5c190b19kZWF0aA0KICApDQoNCiAgcmV0dXJuKGNsaW5pY2FsX2RhdGEpDQp9DQpgYGANCg0KYGBge3J9DQp0Y2dhX2NsaW5pY2FsIDwtIGxpc3QoKQ0KZm9yIChwcm9qZWN0IGluIHByb2plY3RzKSB7DQogIHRjZ2FfY2xpbmljYWxbW3Byb2plY3RdXSA8LSBkb3dubG9hZF9jbGluaWNhbF9kYXRhKHByb2plY3QpDQp9DQpgYGANCg0KIyMgVkkuIFBlcmZvcm1pbmcgc3Vydml2YWwgYW5hbHlzaXMNCg0KV3JpdGUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBlcmZvcm1pbmcgc3Vydml2YWwgYW5hbHlzaXMuDQoNCg0KYGBge3J9DQpjb25zdHJ1Y3RfZ2VuZV9kZiA8LSBmdW5jdGlvbihnZW5lX29mX2ludGVyZXN0LCBwcm9qZWN0KSB7DQogIGdlbmVfZGYgPC0gdnNkW1twcm9qZWN0XV0gJT4lDQogICAgYXMuZGF0YS5mcmFtZSgpICU+JQ0KICAgIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiZ2VuZV9pZCIpICU+JQ0KICAgIGdhdGhlcihrZXkgPSAiY2FzZV9pZCIsIHZhbHVlID0gImNvdW50cyIsIC1nZW5lX2lkKSAlPiUNCiAgICBsZWZ0X2pvaW4oLiwgZ2VuZXMsIGJ5ID0gImdlbmVfaWQiKSAlPiUNCiAgICBkcGx5cjo6ZmlsdGVyKGdlbmUgPT0gZ2VuZV9vZl9pbnRlcmVzdCkgJT4lDQogICAgZHBseXI6OmZpbHRlcihjYXNlX2lkICVpbiUgcm93bmFtZXMoc2FtcGxlc1tbcHJvamVjdF1dICU+JSBkcGx5cjo6ZmlsdGVyKHR5cGUgPT0gIm5vcm1hbCIpKSkNCg0KICBxMSA8LSBxdWFudGlsZShnZW5lX2RmJGNvdW50cywgcHJvYnMgPSAwLjI1KQ0KICBxMyA8LSBxdWFudGlsZShnZW5lX2RmJGNvdW50cywgcHJvYnMgPSAwLjc1KQ0KICBnZW5lX2RmJHN0cmF0YSA8LSBpZmVsc2UoZ2VuZV9kZiRjb3VudHMgPj0gcTMsICJISUdIIiwgaWZlbHNlKGdlbmVfZGYkY291bnRzIDw9IHExLCAiTE9XIiwgIk1JRERMRSIpKQ0KICBnZW5lX2RmIDwtIGdlbmVfZGYgJT4lIGRwbHlyOjpmaWx0ZXIoc3RyYXRhICVpbiUgYygiTE9XIiwgIkhJR0giKSkNCiAgZ2VuZV9kZiRjYXNlX2lkIDwtIHBhc3RlMChzYXBwbHkoc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKGdlbmVfZGYkY2FzZV9pZCksICItIiksIGBbYCwgMSksICctJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FwcGx5KHN0cnNwbGl0KGFzLmNoYXJhY3RlcihnZW5lX2RmJGNhc2VfaWQpLCAiLSIpLCBgW2AsIDIpLCAnLScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzYXBwbHkoc3Ryc3BsaXQoYXMuY2hhcmFjdGVyKGdlbmVfZGYkY2FzZV9pZCksICItIiksIGBbYCwgMykpDQogIGdlbmVfZGYgPC0gbWVyZ2UoZ2VuZV9kZiwgdGNnYV9jbGluaWNhbFtbcHJvamVjdF1dLCBieS54ID0gImNhc2VfaWQiLCBieS55ID0gInN1Ym1pdHRlcl9pZCIpDQogIA0KICByZXR1cm4oZ2VuZV9kZikNCn0NCmBgYA0KDQpgYGB7cn0NCmNvbXB1dGVfc3VyaXZhbF9maXQgPC0gZnVuY3Rpb24oZ2VuZV9kZikgew0KICByZXR1cm4gKHN1cnZmaXQoU3VydihvdmVyYWxsX3N1cnZpdmFsLCBkZWNlYXNlZCkgfiBzdHJhdGEsIGRhdGEgPSBnZW5lX2RmKSkNCn0NCmBgYA0KDQpgYGB7cn0NCmNvbXB1dGVfY294IDwtIGZ1bmN0aW9uKGdlbmVfZGYpIHsNCiAgcmV0dXJuIChjb3hwaChTdXJ2KG92ZXJhbGxfc3Vydml2YWwsIGRlY2Vhc2VkKSB+IHN0cmF0YSwgZGF0YT1nZW5lX2RmKSkNCn0NCmBgYA0KDQpgYGB7cn0NCnBsb3Rfc3Vydml2YWwgPC0gZnVuY3Rpb24oZml0KSB7DQogIHJldHVybihnZ3N1cnZwbG90KGZpdCwNCiAgICBkYXRhID0gZ2VuZV9kZiwNCiAgICBwdmFsID0gVCwNCiAgICByaXNrLnRhYmxlID0gVCwNCiAgICByaXNrLnRhYmxlLmhlaWdodCA9IDAuMw0KICApKQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KY29tcHV0ZV9zdXJ2aXZhbF9kaWZmIDwtIGZ1bmN0aW9uKGdlbmVfZGYpIHsNCiAgcmV0dXJuKHN1cnZkaWZmKFN1cnYob3ZlcmFsbF9zdXJ2aXZhbCwgZGVjZWFzZWQpIH4gc3RyYXRhLCBkYXRhID0gZ2VuZV9kZikpDQp9DQpgYGANCg0KUGVyZm9ybSBzdXJ2aXZhbCBhbmFseXNpcyBieSB0ZXN0aW5nIGZvciB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgS2FwbGFuLU1laWVyIGN1cnZlcyB1c2luZyB0aGUgRy1yaG8gZmFtaWx5IG9mIEhhcnJpbmd0b24gYW5kIEZsZW1pbmcgdGVzdHM6IGh0dHBzOi8vcmRyci5pby9jcmFuL3N1cnZpdmFsL21hbi9zdXJ2ZGlmZi5odG1sDQoNCk1MS0wgaXMgdGhlIHByaW1hcnkgZXhlY3V0b3Igb2YgbmVjcm9wdG9zaXMuDQoNCmBgYHtyfQ0Kc2lnbmlmaWNhbnRfcHJvamVjdHMgPC0gYygpDQpzaWduaWZpY2FudF9nZW5lcyA8LSBjKCkNCg0KY3RyIDwtIDENCmZvciAocHJvamVjdCBpbiBwcm9qZWN0cykgew0KICBmb3IgKGdlbmUgaW4gYygiTUxLTCIsIGdlbmVzJGdlbmUpKSB7DQogICAgY2F0KHByb2plY3QsIGdlbmUsICJcblxuIikNCiAgICBlcnJvciA8LSB0cnlDYXRjaCAoDQogICAgICB7DQogICAgICAgIGdlbmVfZGYgPC0gY29uc3RydWN0X2dlbmVfZGYoZ2VuZSwgcHJvamVjdCkNCiAgICAgIH0sDQogICAgICBlcnJvciA9IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgY2F0KCJcblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKQ0KICAgICAgICBlDQogICAgICB9DQogICAgKQ0KICAgIA0KICAgIGlmKGluaGVyaXRzKGVycm9yLCAiZXJyb3IiKSkgbmV4dA0KDQogICAgaWYgKG5yb3coZ2VuZV9kZikgPiAwKSB7DQogICAgICBmaXQgPC0gY29tcHV0ZV9zdXJpdmFsX2ZpdChnZW5lX2RmKQ0KICAgICAgdHJ5Q2F0Y2ggKA0KICAgICAgICB7DQogICAgICAgICAgc3Vydml2YWwgPC0gY29tcHV0ZV9zdXJ2aXZhbF9kaWZmKGdlbmVfZGYpDQogICAgICAgICAgY294IDwtIGNvbXB1dGVfY294KGdlbmVfZGYpDQogICAgICAgICAgcHJpbnQoY3RyKQ0KICAgICAgICAgIGN0ciA8LSBjdHIgKyAxDQogICAgICAgICAgcHJpbnQoc3Vydml2YWwpDQogICAgICAgICAgY2F0KCJcbiIpDQogICAgICAgICAgcHJpbnQoY294KQ0KICAgICAgICAgIHByaW50KHBsb3Rfc3Vydml2YWwoZml0KSkNCiAgICAgICAgICBpZiAocGNoaXNxKHN1cnZpdmFsJGNoaXNxLCBsZW5ndGgoc3Vydml2YWwkbiktMSwgbG93ZXIudGFpbCA9IEZBTFNFKSA8IDAuMDUpIHsNCiAgICAgICAgICAgIHNpZ25pZmljYW50X3Byb2plY3RzIDwtIGMoc2lnbmlmaWNhbnRfcHJvamVjdHMsIHByb2plY3QpDQogICAgICAgICAgICBzaWduaWZpY2FudF9nZW5lcyA8LSBjKHNpZ25pZmljYW50X2dlbmVzLCBnZW5lKQ0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgZXJyb3IgPSBmdW5jdGlvbihlKSB7DQogICAgICAgIH0NCiAgICAgICkNCiAgICAgIA0KICAgIH0NCiAgICANCiAgICBjYXQoIlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiIpDQogIH0NCn0NCmBgYA0KDQpEaXNwbGF5IHRoZSByZXN1bHRzIG9ubHkgZm9yIGdlbmVzIHdoZXJlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBzdXJ2aXZhbCBoYXMgYmVlbiByZXBvcnRlZC4NCg0KYGBge3J9DQpzaWduaWZpY2FudF9nZW5lcw0KYGBgDQoNCmBgYHtyfQ0KbnVtX3NpZ25pZmljYW50X2dlbmVzIDwtIGxlbmd0aChzaWduaWZpY2FudF9nZW5lcykNCg0KaWYgKG51bV9zaWduaWZpY2FudF9nZW5lcyA+IDApIHsNCiAgZm9yIChpIGluIDEgOiBudW1fc2lnbmlmaWNhbnRfZ2VuZXMpIHsNCiAgICBwcm9qZWN0IDwtIHNpZ25pZmljYW50X3Byb2plY3RzW1tpXV0NCiAgICBnZW5lIDwtIHNpZ25pZmljYW50X2dlbmVzW1tpXV0NCiAgICANCiAgICBjYXQocHJvamVjdCwgZ2VuZSwgIlxuXG4iKQ0KICAgIGdlbmVfZGYgPC0gY29uc3RydWN0X2dlbmVfZGYoZ2VuZSwgcHJvamVjdCkNCiAgICANCiAgICBmaXQgPC0gY29tcHV0ZV9zdXJpdmFsX2ZpdChnZW5lX2RmKQ0KICAgIHN1cnZpdmFsIDwtIGNvbXB1dGVfc3Vydml2YWxfZGlmZihnZW5lX2RmKQ0KICAgIGNveCA8LSBjb21wdXRlX2NveChnZW5lX2RmKQ0KICAgIHByaW50KHN1cnZpdmFsKQ0KICAgIGNhdCgiXG4iKQ0KICAgIHByaW50KGNveCkNCiAgICBwcmludChwbG90X3N1cnZpdmFsKGZpdCkpDQogICAgDQogICAgY2F0KCJcblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKQ0KICB9IA0KfQ0KYGBg