1 Arrange folders, sort files, read and merge

1.1 Create folders by conditions, copy files to them

##################### Read file names ##################################################################################
file_names <- dir(pattern = "\\.xls$")
## if above isn't good enough try the following:
# file_names <- list.files(wd)
# file_names <- sop_files[!file.info(sop_files)$isdir]   # exclude directories
# file_names <- sop_files[grep(".xls", sop_files, fixed = TRUE)]


##################### Create folders with Condition names ###############################################################
# this part of script may be re-run if files from wd are updated
dir_names <- c("Repetat_CTRL_Instr", "Repetat_CTRL_Solo", "Repetat_OGL_Instr", "Repetat_OGL_Solo")
             
for(dir in dir_names){
  if(!dir.exists(file.path(wd, dir)))
  dir.create(file.path(wd, dir), showWarnings = FALSE)
}


##################### Use file names to sort them to folders ############################################################
sort_files_to_dirs <- function(wd, pattern, dir) {
  check_pattern <- outer(file_names, pattern, stringr::str_detect)               # if all TRUE bye row then it has full pattern
  index <- which(apply(check_pattern, 1, function(x) all(x==TRUE)))              # get index of file_names where all are TRUE
  sorted_files <- file_names[index]                                              # get names of files from indexes
  
  for(files in sorted_files) {                                                   # copy the files to corresponding folder
    file.copy(from = file.path(wd, files), to = file.path(wd, dir))
  }  
}


sort_files_to_dirs(wd = wd, pattern = c("repetat", "ecran", "instructor"), dir = "Repetat_CTRL_Instr")
sort_files_to_dirs(wd = wd, pattern = c("repetat", "ecran", "solo"), dir = "Repetat_CTRL_Solo")
sort_files_to_dirs(wd = wd, pattern = c("repetat", "oglinda", "instructor"), dir = "Repetat_OGL_Instr")
sort_files_to_dirs(wd = wd, pattern = c("repetat", "oglinda", "solo"), dir = "Repetat_OGL_Solo")

1.2 Reading the data

############ Read in all the .xls from folders and merge them in datasets named after corresponding folder ##############
# this part of script may be re-run if files from wd are updated
# RE-RUN FROM HERE IF FOLDERS AND SORTING WAS ALREADY DONE
wd <- "E:/CINETIC diverse/O.4c (EEG)/02.09.2019 15sub EEG Repetate/Date de procesat"
setwd(wd)
folders <- list.files(wd)
folders <- folders[file.info(folders)$isdir]   # luam doar folderele
datasetnames <- NULL
for (i in 1:length(folders)) {
  datasetname <- folders[i]
  datasetnames <- c(datasetnames, datasetname)
  current_dir <- setwd(file.path(wd, folders[i]))
  print(paste0("current_dir: ", current_dir))
  
  paths <- dir(pattern = "\\.xls$")
  names(paths) <- basename(paths)
  assign( paste(datasetname), plyr::ldply(paths, rio::import) )
}
[1] "current_dir: E:/CINETIC diverse/O.4c (EEG)/02.09.2019 15sub EEG Repetate/Date de procesat"
[1] "current_dir: E:/CINETIC diverse/O.4c (EEG)/02.09.2019 15sub EEG Repetate/Date de procesat/Repetat_CTRL_Instr"
[1] "current_dir: E:/CINETIC diverse/O.4c (EEG)/02.09.2019 15sub EEG Repetate/Date de procesat/Repetat_CTRL_Solo"
[1] "current_dir: E:/CINETIC diverse/O.4c (EEG)/02.09.2019 15sub EEG Repetate/Date de procesat/Repetat_OGL_Instr"
setwd(wd)
# detach("package:plyr", unload=TRUE)                                                   # detach plyr because of conflicts with dplyr

1.3 Cleaning the data

#################################### Data Cleaning #####################################################################
# Check if ids have > 1 row of data (empty .xls have only 1 row)
# Careful! This function modfies the datasets in the global envinronment
delete_empty_id <- function(df){
  list_empty_id <- 
    df %>%
    dplyr::group_by(.id) %>%
    dplyr::summarise(row_count = n()) %>%
    dplyr::rename("empty_id" = .id) %>%
    mutate(delete_id = if_else(row_count < 3, TRUE, FALSE)) %>%
    filter(delete_id == TRUE)
  
  df_modif <- 
    df %>%
    filter(!.id %in% list_empty_id$empty_id)
  
  if(!identical(df, df_modif)){
    df <- deparse(substitute(df))
    cat("Deleting from ", print(as.name(df))); print(list_empty_id)                    # print out which ids are deleted from which dataset
    assign(df, df_modif, envir = globalenv())                                          # assign modified df to original dataset from Global
  }else cat("No empty datasets. Nothing to delete")
}
delete_empty_id(Repetat_CTRL_Instr)
No empty datasets. Nothing to delete
delete_empty_id(Repetat_CTRL_Solo)
No empty datasets. Nothing to delete
delete_empty_id(Repetat_OGL_Instr)
No empty datasets. Nothing to delete
delete_empty_id(Repetat_OGL_Solo)
No empty datasets. Nothing to delete

1.4 Exclude SAM_resp based on RT outliers - not used here

############################### Exclude Outliers based on RT (by subject and stimulus type) #######################################
## DONT RUN (unless it is needed) ----> eval=FALSE
# Exclude RT outliers (=- 2SD) - instead of simple filter, makeing them NA  is better for paired comparison
remove_outliers <- function(df) {
  df_modif <-
    df %>%
    dplyr::group_by(.id, `Stimulus type`) %>%                  # we could have done before:  dplyr::rename("Stim_type" = `Stimulus type`) 
    mutate(SAM_Resp = if_else(abs(SAM_RT - mean(SAM_RT, na.rm=TRUE)) > 2*sd(SAM_RT, na.rm=TRUE), as.numeric(NA), SAM_Resp))
  
  if(!identical(df, df_modif)){
    df <- deparse(substitute(df))
    cat("Deleting outliers from ", print(as.name(df)));                               # print out datasets which have been modified
    assign(df, df_modif, envir = globalenv())                                          # assign modified df to original dataset from Global
  }else cat("No outlier")
}


remove_outliers(Repetat_CTRL_Instr)
remove_outliers(Repetat_CTRL_Solo)
remove_outliers(Repetat_OGL_Instr)
remove_outliers(Repetat_OGL_Solo)

1.5 Test if datasets have same columns

repetat_df_obj <- mget(c("Repetat_CTRL_Instr", "Repetat_CTRL_Solo", "Repetat_OGL_Instr", "Repetat_OGL_Solo"))
repetat_df_obj <-lapply(repetat_df_obj, colnames)
outer(repetat_df_obj, repetat_df_obj, Vectorize(identical))                           # if all are TRUE, all df have same columns
                   Repetat_CTRL_Instr Repetat_CTRL_Solo Repetat_OGL_Instr Repetat_OGL_Solo
Repetat_CTRL_Instr               TRUE              TRUE              TRUE             TRUE
Repetat_CTRL_Solo                TRUE              TRUE              TRUE             TRUE
Repetat_OGL_Instr                TRUE              TRUE              TRUE             TRUE
Repetat_OGL_Solo                 TRUE              TRUE              TRUE             TRUE



2 Analysis - REPETATE

2.1 Descriptives

##########################################################################################################################
#################################### Analyses - REPETATE #################################################################
## Descriptives by condition dataset
descriptive_func <- function(df, Stim_type, By_ID = FALSE){
  df_name <- deparse(substitute(df))
  suppressWarnings({                                                                # if all NAs in SAM_Resp, NaNs and Infs will be produced
    df_modif <- 
      df %>%
      dplyr::rename("ID" = .id) %>%
      select_all(~gsub("\\s+|\\.", "_", .)) %>%                                     # replaces blancks with "_" in colnames 
      filter(Stimulus_type == Stim_type)                                            # filter by stimulus type
    
    if(isTRUE(By_ID)){                                                              # if true group by id, if not return descriptives for all ids
      df_modif %>%
        dplyr::group_by(ID) %>%
        tidystats::describe_data(SAM_Resp, SAM_RT, na.rm = TRUE) %>%
        knitr::kable(caption = as.name(df_name), format = "pandoc", digits = 2)
    }else{ 
      df_modif %>%
        tidystats::describe_data(SAM_Resp, SAM_RT, na.rm = TRUE) %>%
        knitr::kable(caption = as.name(df_name), format = "pandoc", digits = 2)
    }
  })
}  
descriptive_func(df = Repetat_CTRL_Instr, Stim_type = "negativ", By_ID = FALSE)           # Negative - General

Repetat_CTRL_Instr
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1080 2.68 1.85 0.06 1 8.00 7.00 2.00 1 0.88 2.97
SAM_RT 0 1080 1.35 0.43 0.01 1 4.51 3.51 1.21 1 2.40 10.62

descriptive_func(df = Repetat_CTRL_Solo, Stim_type = "negativ", By_ID = FALSE)

Repetat_CTRL_Solo
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1080 2.77 1.82 0.06 1 9.00 8.00 2.00 1 0.72 2.72
SAM_RT 0 1080 1.48 0.78 0.02 1 6.92 5.92 1.23 1 3.23 16.08

descriptive_func(df = Repetat_OGL_Instr, Stim_type = "negativ", By_ID = FALSE)

Repetat_OGL_Instr
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1060 2.80 1.79 0.05 1 9.00 8.00 2.00 1.00 0.66 2.74
SAM_RT 0 1060 1.53 0.91 0.03 1 10.24 9.24 1.23 2.33 4.22 27.44

descriptive_func(df = Repetat_OGL_Solo, Stim_type = "negativ", By_ID = FALSE)

Repetat_OGL_Solo
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1060 2.66 1.78 0.05 1 8.00 7.00 2.00 1.00 0.65 2.23
SAM_RT 0 1060 1.42 0.56 0.02 1 5.94 4.94 1.26 1.71 2.98 16.48

descriptive_func(df = Repetat_CTRL_Instr, Stim_type = "negativ", By_ID = TRUE)            # Negative - by id

Repetat_CTRL_Instr
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222ecraninstructorrepetat.xls 0 80 2.79 1.60 0.18 1 6.00 5.00 2.00 2.00 0.63 2.14
SAM_Resp O4c_Run1_ID25ecraninstructorrepetat.xls 0 60 1.00 0.00 0.00 1 1.00 0.00 1.00 1.00 NaN NaN
SAM_Resp O4c_Run1_ID31ecraninstructorrepetat.xls 0 60 2.30 2.21 0.29 1 7.00 6.00 1.00 1.00 1.13 2.33
SAM_Resp O4c_Run1ID21ecraninstructorrepetat.xls 0 80 3.30 1.15 0.13 1 5.00 4.00 4.00 4.00 -0.80 2.64
SAM_Resp O4c_Run2_ID14ecraninstructorrepetat.xls 0 80 3.34 0.90 0.10 2 6.00 4.00 4.00 4.00 -0.19 2.49
SAM_Resp O4c_Run2_ID18ecraninstructorrepetat.xls 0 80 4.09 3.16 0.35 1 8.00 7.00 3.00 1.00 0.09 1.11
SAM_Resp O4c_Run2_ID19ecraninstructorrepetat.xls 0 80 1.00 0.00 0.00 1 1.00 0.00 1.00 1.00 NaN NaN
SAM_Resp O4c_Run2_ID32ecraninstructorrepetat.xls 0 60 2.85 1.20 0.16 1 4.00 3.00 3.00 4.00 -0.53 1.72
SAM_Resp O4c_Run2_ID35ecraninstructorrepetat.xls 0 60 1.43 0.79 0.10 1 3.00 2.00 1.00 1.00 1.37 3.04
SAM_Resp O4c_Run2_ID38ecraninstructorrepetat.xls 0 60 1.00 0.00 0.00 1 1.00 0.00 1.00 1.00 NaN NaN
SAM_Resp O4c_Run24_ID24ecraninstructorrepetat.xls 0 80 3.40 1.13 0.13 1 6.00 5.00 4.00 4.00 0.01 2.53
SAM_Resp O4c_Run30_ID30ecraninstructorrepetat.xls 0 80 3.65 1.02 0.11 2 5.00 3.00 4.00 4.00 -0.70 2.24
SAM_Resp O4c_RunN(modifica N!)_ID07ecraninstructorrepetatX.xls 0 80 3.91 1.44 0.16 1 5.00 4.00 5.00 5.00 -0.99 2.53
SAM_Resp O4c_RunN(modifica N!)_ID2020ecraninstructorrepetat.xls 0 60 2.08 1.21 0.16 1 5.00 4.00 2.00 1.00 0.82 2.26
SAM_Resp O4c_RunN_ID2323ecraninstructorrepetat.xls 0 80 2.74 2.60 0.29 1 8.00 7.00 1.00 1.00 1.10 2.34
SAM_RT O4c_ID2222ecraninstructorrepetat.xls 0 80 1.38 0.36 0.04 1 3.05 2.05 1.29 1.00 1.87 8.42
SAM_RT O4c_Run1_ID25ecraninstructorrepetat.xls 0 60 1.39 0.57 0.07 1 3.36 2.36 1.17 1.40 2.32 7.66
SAM_RT O4c_Run1_ID31ecraninstructorrepetat.xls 0 60 1.49 0.72 0.09 1 4.51 3.50 1.24 1.24 2.15 7.62
SAM_RT O4c_Run1ID21ecraninstructorrepetat.xls 0 80 1.60 0.57 0.06 1 3.89 2.89 1.38 1.26 1.40 5.12
SAM_RT O4c_Run2_ID14ecraninstructorrepetat.xls 0 80 1.33 0.40 0.04 1 2.80 1.80 1.22 1.10 1.93 6.65
SAM_RT O4c_Run2_ID18ecraninstructorrepetat.xls 0 80 1.30 0.29 0.03 1 2.72 1.72 1.23 1.00 2.05 9.39
SAM_RT O4c_Run2_ID19ecraninstructorrepetat.xls 0 80 1.29 0.43 0.05 1 3.22 2.22 1.14 1.00 2.67 11.06
SAM_RT O4c_Run2_ID32ecraninstructorrepetat.xls 0 60 1.32 0.33 0.04 1 2.51 1.51 1.27 1.08 1.74 6.22
SAM_RT O4c_Run2_ID35ecraninstructorrepetat.xls 0 60 1.17 0.21 0.03 1 1.88 0.88 1.08 1.07 1.89 6.39
SAM_RT O4c_Run2_ID38ecraninstructorrepetat.xls 0 60 1.49 0.50 0.07 1 2.81 1.81 1.31 1.00 0.96 2.85
SAM_RT O4c_Run24_ID24ecraninstructorrepetat.xls 0 80 1.37 0.39 0.04 1 3.06 2.06 1.23 1.88 1.73 6.82
SAM_RT O4c_Run30_ID30ecraninstructorrepetat.xls 0 80 1.41 0.44 0.05 1 2.91 1.91 1.27 1.01 1.53 5.09
SAM_RT O4c_RunN(modifica N!)_ID07ecraninstructorrepetatX.xls 0 80 1.28 0.34 0.04 1 2.92 1.92 1.17 2.01 2.04 8.55
SAM_RT O4c_RunN(modifica N!)_ID2020ecraninstructorrepetat.xls 0 60 1.15 0.17 0.02 1 1.58 0.58 1.10 1.24 0.87 2.58
SAM_RT O4c_RunN_ID2323ecraninstructorrepetat.xls 0 80 1.21 0.30 0.03 1 3.29 2.29 1.14 1.61 4.58 31.68

descriptive_func(df = Repetat_CTRL_Solo, Stim_type = "negativ", By_ID = TRUE)

Repetat_CTRL_Solo
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222ecransolo repetat.xls 0 80 2.88 1.72 0.19 1 6.00 5.00 2.00 2.00 0.69 2.17
SAM_Resp O4c_Run1_ID14ecransolo repetat.xls 0 80 3.55 0.86 0.10 2 6.00 4.00 4.00 4.00 -0.46 3.06
SAM_Resp O4c_Run1_ID18ecransolo repetat.xls 0 80 4.08 3.11 0.35 1 9.00 8.00 3.50 1.00 0.10 1.15
SAM_Resp O4c_Run1_ID19ecransolo repetat.xls 0 80 1.19 0.87 0.10 1 8.00 7.00 1.00 1.00 6.41 48.30
SAM_Resp O4c_Run1_ID32ecransolo repetat.xls 0 60 2.82 1.28 0.17 1 7.00 6.00 3.00 3.00 0.54 3.73
SAM_Resp O4c_Run1_ID35ecransolo repetat.xls 0 60 1.40 0.74 0.10 1 3.00 2.00 1.00 1.00 1.48 3.48
SAM_Resp O4c_Run1_ID38ecransolo repetat.xls 0 60 1.08 0.53 0.07 1 5.00 4.00 1.00 1.00 6.98 51.50
SAM_Resp O4c_Run1ID21ecransolo repetat.xls 0 80 3.50 1.27 0.14 1 5.00 4.00 4.00 4.00 -0.74 2.51
SAM_Resp O4c_Run2_ID25ecransolo repetat.xls 0 60 1.07 0.52 0.07 1 5.00 4.00 1.00 1.00 7.55 58.02
SAM_Resp O4c_Run2_ID31ecransolo repetat.xls 0 60 2.00 1.69 0.22 1 5.00 4.00 1.00 1.00 1.11 2.30
SAM_Resp O4c_Run24_ID24ecransolo repetat.xls 0 80 3.55 1.04 0.12 2 6.00 4.00 4.00 4.00 -0.23 2.40
SAM_Resp O4c_Run30_ID30ecransolo repetatX.xls 0 80 3.77 0.99 0.11 2 5.00 3.00 4.00 4.00 -0.55 2.32
SAM_Resp O4c_RunN(modifica N!)_ID07ecransolo repetat.xls 0 80 4.34 1.08 0.12 1 5.00 4.00 5.00 5.00 -1.80 5.57
SAM_Resp O4c_RunN(modifica N!)_ID2020ecransolo repetat.xls 0 60 2.78 1.35 0.17 1 5.00 4.00 3.00 2.00 0.27 1.88
SAM_Resp O4c_RunN_ID2323ecransolo repetat.xls 0 80 2.21 2.10 0.23 1 8.00 7.00 1.00 1.00 1.71 4.41
SAM_RT O4c_ID2222ecransolo repetat.xls 0 80 1.32 0.55 0.06 1 4.68 3.68 1.22 1.32 4.32 23.39
SAM_RT O4c_Run1_ID14ecransolo repetat.xls 0 80 1.61 0.71 0.08 1 4.97 3.97 1.40 1.28 2.18 9.09
SAM_RT O4c_Run1_ID18ecransolo repetat.xls 0 80 1.47 0.68 0.08 1 5.94 4.94 1.26 1.57 4.07 25.01
SAM_RT O4c_Run1_ID19ecransolo repetat.xls 0 80 1.48 0.98 0.11 1 5.93 4.93 1.06 1.63 2.69 10.13
SAM_RT O4c_Run1_ID32ecransolo repetat.xls 0 60 1.28 0.29 0.04 1 2.16 1.16 1.20 1.00 1.21 3.76
SAM_RT O4c_Run1_ID35ecransolo repetat.xls 0 60 1.16 0.25 0.03 1 2.77 1.77 1.09 1.35 4.57 29.10
SAM_RT O4c_Run1_ID38ecransolo repetat.xls 0 60 1.86 0.95 0.12 1 4.85 3.85 1.47 1.87 1.10 3.29
SAM_RT O4c_Run1ID21ecransolo repetat.xls 0 80 1.51 0.62 0.07 1 3.26 2.25 1.28 2.57 1.38 3.85
SAM_RT O4c_Run2_ID25ecransolo repetat.xls 0 60 1.54 0.66 0.09 1 4.06 3.06 1.33 1.35 2.02 6.64
SAM_RT O4c_Run2_ID31ecransolo repetat.xls 0 60 2.02 1.43 0.18 1 6.48 5.48 1.36 1.40 1.78 5.15
SAM_RT O4c_Run24_ID24ecransolo repetat.xls 0 80 1.23 0.29 0.03 1 2.89 1.89 1.18 1.69 2.88 15.56
SAM_RT O4c_Run30_ID30ecransolo repetatX.xls 0 80 1.84 1.09 0.12 1 6.92 5.92 1.50 3.61 2.82 12.29
SAM_RT O4c_RunN(modifica N!)_ID07ecransolo repetat.xls 0 80 1.18 0.25 0.03 1 2.09 1.09 1.08 1.11 1.85 5.87
SAM_RT O4c_RunN(modifica N!)_ID2020ecransolo repetat.xls 0 60 1.14 0.20 0.03 1 1.76 0.76 1.01 1.02 1.30 3.69
SAM_RT O4c_RunN_ID2323ecransolo repetat.xls 0 80 1.62 0.85 0.09 1 4.97 3.97 1.35 1.12 2.27 8.23

descriptive_func(df = Repetat_OGL_Instr, Stim_type = "negativ", By_ID = TRUE)

Repetat_OGL_Instr
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222oglindainstructorrepetat.xls 0 80 2.56 1.63 0.18 1.00 6.00 5.00 2.00 2.00 0.99 2.46
SAM_Resp O4c_Run1_ID19oglindainstructorrepetat.xls 0 80 1.00 0.00 0.00 1.00 1.00 0.00 1.00 1.00 NaN NaN
SAM_Resp O4c_Run1_ID21oglindainstructorrepetat.xls 0 60 3.37 1.12 0.14 1.00 5.00 4.00 4.00 4.00 -0.32 2.24
SAM_Resp O4c_Run1_ID23oglindainstructorrepetat.xls 0 80 4.26 2.75 0.31 1.00 9.00 8.00 5.00 1.00 0.23 1.69
SAM_Resp O4c_Run1_ID30oglindainstructorrepetat.xls 0 80 3.88 0.64 0.07 2.00 5.00 3.00 4.00 4.00 -0.17 3.07
SAM_Resp O4c_Run1_ID32oglindainstructorrepetat.xls 0 60 3.07 1.15 0.15 1.00 4.00 3.00 3.50 4.00 -0.88 2.27
SAM_Resp O4c_Run1_ID38oglindainstructorrepetat.xls 0 60 1.08 0.28 0.04 1.00 2.00 1.00 1.00 1.00 3.02 10.09
SAM_Resp O4c_Run14_IDz214oglindainstructorrepetat.xls 0 80 3.08 1.05 0.12 2.00 5.00 3.00 3.00 2.00 0.11 1.36
SAM_Resp O4c_Run2_ID20oglindainstructorrepetat.xls 0 60 1.87 1.32 0.17 1.00 5.00 4.00 1.00 1.00 1.18 2.84
SAM_Resp O4c_Run2_ID25oglindainstructorrepetat.xls 0 60 1.00 0.00 0.00 1.00 1.00 0.00 1.00 1.00 NaN NaN
SAM_Resp O4c_Run2_ID31oglindainstructorrepetat.xls 0 60 3.13 2.01 0.26 1.00 5.00 4.00 5.00 5.00 -0.13 1.02
SAM_Resp O4c_Run35_ID35oglindainstructorrepetat.xls 0 60 1.72 0.88 0.11 1.00 3.00 2.00 1.00 1.00 0.58 1.55
SAM_Resp O4c_RunN(modifica N!)_ID0707oglindainstructorrepetat.xls 0 80 4.01 1.19 0.13 1.00 5.00 4.00 4.00 5.00 -0.94 2.79
SAM_Resp O4c_RunN_ID1818oglindainstructorrepetat.xls 0 80 3.27 2.33 0.26 1.00 7.00 6.00 3.50 1.00 0.22 1.34
SAM_Resp O4c_RunN_ID2424oglindainstructorrepetat.xls 0 80 3.56 1.27 0.14 1.00 5.00 4.00 4.00 4.00 -0.88 2.57
SAM_RT O4c_ID2222oglindainstructorrepetat.xls 0 80 1.45 0.52 0.06 1.00 3.94 2.94 1.29 2.33 2.12 8.81
SAM_RT O4c_Run1_ID19oglindainstructorrepetat.xls 0 80 1.32 0.52 0.06 1.00 3.91 2.91 1.09 3.91 2.79 11.60
SAM_RT O4c_Run1_ID21oglindainstructorrepetat.xls 0 60 1.58 0.65 0.08 1.00 3.95 2.95 1.41 1.61 1.96 6.90
SAM_RT O4c_Run1_ID23oglindainstructorrepetat.xls 0 80 1.60 0.58 0.06 1.00 4.29 3.29 1.44 1.00 1.54 7.35
SAM_RT O4c_Run1_ID30oglindainstructorrepetat.xls 0 80 1.25 0.46 0.05 1.00 3.10 2.10 1.07 2.41 2.65 9.55
SAM_RT O4c_Run1_ID32oglindainstructorrepetat.xls 0 60 1.37 0.55 0.07 1.00 3.88 2.88 1.19 1.03 2.85 12.30
SAM_RT O4c_Run1_ID38oglindainstructorrepetat.xls 0 60 1.38 0.52 0.07 1.00 3.19 2.19 1.14 1.29 1.63 4.90
SAM_RT O4c_Run14_IDz214oglindainstructorrepetat.xls 0 80 1.33 0.34 0.04 1.00 2.55 1.55 1.24 1.29 1.80 6.31
SAM_RT O4c_Run2_ID20oglindainstructorrepetat.xls 0 60 1.10 0.15 0.02 1.00 1.83 0.83 1.01 1.27 2.42 11.27
SAM_RT O4c_Run2_ID25oglindainstructorrepetat.xls 0 60 1.44 0.49 0.06 1.00 3.57 2.56 1.32 1.31 2.45 9.91
SAM_RT O4c_Run2_ID31oglindainstructorrepetat.xls 0 60 1.30 0.44 0.06 1.00 3.46 2.46 1.15 1.00 2.92 13.41
SAM_RT O4c_Run35_ID35oglindainstructorrepetat.xls 0 60 1.49 0.82 0.11 1.00 5.30 4.30 1.18 1.32 2.75 11.10
SAM_RT O4c_RunN(modifica N!)_ID0707oglindainstructorrepetat.xls 0 80 1.31 0.31 0.03 1.00 2.56 1.56 1.24 1.01 1.45 5.48
SAM_RT O4c_RunN_ID1818oglindainstructorrepetat.xls 0 80 3.48 1.97 0.22 1.12 10.24 9.12 2.72 5.94 1.35 4.39
SAM_RT O4c_RunN_ID2424oglindainstructorrepetat.xls 0 80 1.27 0.27 0.03 1.00 2.27 1.27 1.18 1.01 1.34 4.68

descriptive_func(df = Repetat_OGL_Solo, Stim_type = "negativ", By_ID = TRUE)

Repetat_OGL_Solo
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222oglindasolo repetat.xls 0 80 2.61 1.61 0.18 1.00 6.00 5.00 2.00 2.00 0.83 2.14
SAM_Resp O4c_Run1_ID20oglindasolo repetat.xls 0 60 1.58 1.06 0.14 1.00 5.00 4.00 1.00 1.00 1.75 4.79
SAM_Resp O4c_Run1_ID25oglindasolo repetat.xls 0 60 1.07 0.52 0.07 1.00 5.00 4.00 1.00 1.00 7.55 58.02
SAM_Resp O4c_Run1_ID31oglindasolo repetat.xls 0 60 2.65 1.93 0.25 1.00 5.00 4.00 1.00 1.00 0.36 1.18
SAM_Resp O4c_Run14z2_ID14oglindasolo repetatX.xls 0 80 2.59 1.22 0.14 1.00 5.00 4.00 2.50 4.00 0.07 1.68
SAM_Resp O4c_Run2_ID19oglindasolo repetat.xls 0 80 1.00 0.00 0.00 1.00 1.00 0.00 1.00 1.00 NaN NaN
SAM_Resp O4c_Run2_ID21oglindasolo repetat.xls 0 60 3.17 1.21 0.16 1.00 5.00 4.00 3.00 4.00 -0.32 2.12
SAM_Resp O4c_Run2_ID23oglindasolo repetat.xls 0 80 2.81 2.39 0.27 1.00 8.00 7.00 2.00 1.00 0.90 2.05
SAM_Resp O4c_Run2_ID30oglindasolo repetat.xls 0 80 4.54 0.84 0.09 2.00 5.00 3.00 5.00 5.00 -1.53 3.93
SAM_Resp O4c_Run2_ID32oglindasolo repetat.xls 0 60 3.13 1.27 0.16 1.00 5.00 4.00 4.00 4.00 -0.91 2.15
SAM_Resp O4c_Run2_ID38oglindasolo repetat.xls 0 60 1.22 0.42 0.05 1.00 2.00 1.00 1.00 1.00 1.38 2.89
SAM_Resp O4c_Run35_ID35oglindasolo repetat.xls 0 60 1.58 0.98 0.13 1.00 5.00 4.00 1.00 1.00 1.46 4.19
SAM_Resp O4c_RunN(modifica N!)_ID07067oglindasolo repetat.xls 0 80 3.92 1.02 0.11 1.00 5.00 4.00 4.00 5.00 -0.72 3.05
SAM_Resp O4c_RunN_ID18oglindasolo repetat.xls 0 80 3.44 2.67 0.30 1.00 8.00 7.00 1.50 1.00 0.35 1.37
SAM_Resp O4c_RunN_ID2424oglindasolo repetat.xls 0 80 3.49 1.31 0.15 1.00 5.00 4.00 4.00 4.00 -0.72 2.29
SAM_RT O4c_ID2222oglindasolo repetat.xls 0 80 1.81 0.84 0.09 1.00 5.94 4.94 1.61 1.71 2.18 9.71
SAM_RT O4c_Run1_ID20oglindasolo repetat.xls 0 60 1.36 0.37 0.05 1.00 2.92 1.92 1.29 1.08 1.84 7.39
SAM_RT O4c_Run1_ID25oglindasolo repetat.xls 0 60 1.71 0.74 0.10 1.01 3.92 2.92 1.41 2.62 1.31 4.09
SAM_RT O4c_Run1_ID31oglindasolo repetat.xls 0 60 1.54 0.99 0.13 1.00 5.59 4.59 1.17 2.79 2.77 10.44
SAM_RT O4c_Run14z2_ID14oglindasolo repetatX.xls 0 80 1.35 0.41 0.05 1.00 3.24 2.24 1.28 3.24 2.22 8.95
SAM_RT O4c_Run2_ID19oglindasolo repetat.xls 0 80 1.15 0.17 0.02 1.00 1.66 0.66 1.11 1.01 1.22 3.96
SAM_RT O4c_Run2_ID21oglindasolo repetat.xls 0 60 1.72 0.67 0.09 1.00 3.58 2.58 1.50 2.27 1.03 3.23
SAM_RT O4c_Run2_ID23oglindasolo repetat.xls 0 80 1.24 0.32 0.04 1.00 2.68 1.68 1.15 1.75 2.36 9.19
SAM_RT O4c_Run2_ID30oglindasolo repetat.xls 0 80 1.41 0.60 0.07 1.00 4.89 3.89 1.20 1.41 3.17 16.22
SAM_RT O4c_Run2_ID32oglindasolo repetat.xls 0 60 1.34 0.29 0.04 1.00 2.13 1.13 1.24 2.12 0.84 3.01
SAM_RT O4c_Run2_ID38oglindasolo repetat.xls 0 60 1.20 0.27 0.03 1.00 2.15 1.15 1.10 1.00 1.75 6.07
SAM_RT O4c_Run35_ID35oglindasolo repetat.xls 0 60 1.18 0.25 0.03 1.00 2.14 1.14 1.07 2.14 1.85 6.31
SAM_RT O4c_RunN(modifica N!)_ID07067oglindasolo repetat.xls 0 80 1.31 0.36 0.04 1.00 2.92 1.92 1.22 1.39 1.89 7.35
SAM_RT O4c_RunN_ID18oglindasolo repetat.xls 0 80 1.48 0.47 0.05 1.00 3.12 2.12 1.37 2.44 1.34 4.42
SAM_RT O4c_RunN_ID2424oglindasolo repetat.xls 0 80 1.53 0.45 0.05 1.00 3.49 2.49 1.44 1.00 1.65 7.12

descriptive_func(df = Repetat_CTRL_Instr, Stim_type = "pozitiv", By_ID = FALSE)           # Positive - General

Repetat_CTRL_Instr
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1080 6.85 1.68 0.05 1 9.00 8.00 7.00 8.00 -0.70 3.39
SAM_RT 0 1080 1.36 0.49 0.01 1 5.11 4.11 1.21 1.45 2.91 14.54

descriptive_func(df = Repetat_CTRL_Solo, Stim_type = "pozitiv", By_ID = FALSE)

Repetat_CTRL_Solo
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1080 6.71 1.63 0.05 2 9.00 7.00 7.00 5.00 -0.28 2.32
SAM_RT 0 1080 1.53 0.80 0.02 1 8.38 7.38 1.24 1.26 3.10 16.15

descriptive_func(df = Repetat_OGL_Instr, Stim_type = "pozitiv", By_ID = FALSE)

Repetat_OGL_Instr
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1060 6.84 1.54 0.05 2 9.00 7.00 7.00 8.00 -0.44 2.51
SAM_RT 0 1060 1.59 1.04 0.03 1 10.11 9.11 1.24 1.01 3.73 20.90

descriptive_func(df = Repetat_OGL_Solo, Stim_type = "pozitiv", By_ID = FALSE)

Repetat_OGL_Solo
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1060 6.89 1.53 0.05 3 9.00 6.00 7.0 8.0 -0.36 2.23
SAM_RT 0 1060 1.44 0.69 0.02 1 8.89 7.89 1.2 1.4 3.85 26.04

descriptive_func(df = Repetat_CTRL_Instr, Stim_type = "pozitiv", By_ID = TRUE)            # Positive - by id

Repetat_CTRL_Instr
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222ecraninstructorrepetat.xls 0 80 6.69 1.14 0.13 5.00 9.00 4.00 7.00 8.00 -0.03 1.87
SAM_Resp O4c_Run1_ID25ecraninstructorrepetat.xls 0 60 7.98 0.13 0.02 7.00 8.00 1.00 8.00 8.00 -7.55 58.02
SAM_Resp O4c_Run1_ID31ecraninstructorrepetat.xls 0 60 8.35 1.22 0.16 6.00 9.00 3.00 9.00 9.00 -1.37 2.95
SAM_Resp O4c_Run1ID21ecraninstructorrepetat.xls 0 80 5.71 0.86 0.10 5.00 8.00 3.00 5.00 5.00 0.83 2.51
SAM_Resp O4c_Run2_ID14ecraninstructorrepetat.xls 0 80 6.88 1.31 0.15 5.00 9.00 4.00 7.00 6.00 0.47 2.05
SAM_Resp O4c_Run2_ID18ecraninstructorrepetat.xls 0 80 6.78 1.52 0.17 4.00 9.00 5.00 7.00 5.00 -0.01 1.64
SAM_Resp O4c_Run2_ID19ecraninstructorrepetat.xls 0 80 8.40 0.95 0.11 6.00 9.00 3.00 9.00 9.00 -1.14 2.72
SAM_Resp O4c_Run2_ID32ecraninstructorrepetat.xls 0 60 7.38 0.69 0.09 5.00 9.00 4.00 7.00 7.00 -0.66 4.11
SAM_Resp O4c_Run2_ID35ecraninstructorrepetat.xls 0 60 8.38 0.85 0.11 6.00 9.00 3.00 9.00 9.00 -0.99 2.63
SAM_Resp O4c_Run2_ID38ecraninstructorrepetat.xls 0 60 5.77 1.89 0.24 3.00 8.00 5.00 5.50 8.00 -0.25 1.61
SAM_Resp O4c_Run24_ID24ecraninstructorrepetat.xls 0 80 7.45 0.95 0.11 4.00 8.00 4.00 8.00 8.00 -1.97 6.50
SAM_Resp O4c_Run30_ID30ecraninstructorrepetat.xls 0 80 5.85 1.23 0.14 5.00 8.00 3.00 5.00 5.00 1.02 2.28
SAM_Resp O4c_RunN(modifica N!)_ID07ecraninstructorrepetatX.xls 0 80 5.36 2.29 0.26 1.00 9.00 8.00 5.00 5.00 -0.18 2.35
SAM_Resp O4c_RunN(modifica N!)_ID2020ecraninstructorrepetat.xls 0 60 5.70 2.09 0.27 1.00 9.00 8.00 6.00 7.00 -0.92 2.53
SAM_Resp O4c_RunN_ID2323ecraninstructorrepetat.xls 0 80 6.74 1.36 0.15 4.00 9.00 5.00 6.00 6.00 0.79 2.32
SAM_RT O4c_ID2222ecraninstructorrepetat.xls 0 80 1.47 0.50 0.06 1.01 4.30 3.29 1.39 1.45 3.47 18.40
SAM_RT O4c_Run1_ID25ecraninstructorrepetat.xls 0 60 1.51 0.70 0.09 1.00 4.38 3.38 1.28 1.25 2.27 8.35
SAM_RT O4c_Run1_ID31ecraninstructorrepetat.xls 0 60 1.57 0.89 0.12 1.00 5.11 4.11 1.12 3.02 1.93 6.44
SAM_RT O4c_Run1ID21ecraninstructorrepetat.xls 0 80 1.48 0.55 0.06 1.00 3.61 2.61 1.30 1.58 1.68 5.97
SAM_RT O4c_Run2_ID14ecraninstructorrepetat.xls 0 80 1.29 0.32 0.04 1.00 2.72 1.72 1.19 2.09 2.16 8.54
SAM_RT O4c_Run2_ID18ecraninstructorrepetat.xls 0 80 1.50 0.45 0.05 1.00 3.20 2.20 1.40 1.15 1.71 6.36
SAM_RT O4c_Run2_ID19ecraninstructorrepetat.xls 0 80 1.33 0.54 0.06 1.00 4.22 3.22 1.19 3.59 3.36 15.93
SAM_RT O4c_Run2_ID32ecraninstructorrepetat.xls 0 60 1.31 0.37 0.05 1.00 3.03 2.03 1.18 1.01 2.26 9.73
SAM_RT O4c_Run2_ID35ecraninstructorrepetat.xls 0 60 1.13 0.16 0.02 1.00 1.62 0.62 1.05 1.20 1.34 4.22
SAM_RT O4c_Run2_ID38ecraninstructorrepetat.xls 0 60 1.57 0.65 0.08 1.00 4.06 3.06 1.33 1.26 1.83 6.67
SAM_RT O4c_Run24_ID24ecraninstructorrepetat.xls 0 80 1.36 0.34 0.04 1.00 2.34 1.33 1.26 1.65 1.07 3.31
SAM_RT O4c_Run30_ID30ecraninstructorrepetat.xls 0 80 1.44 0.47 0.05 1.00 3.22 2.22 1.30 1.76 1.76 6.39
SAM_RT O4c_RunN(modifica N!)_ID07ecraninstructorrepetatX.xls 0 80 1.20 0.26 0.03 1.00 2.45 1.45 1.09 1.00 1.92 8.07
SAM_RT O4c_RunN(modifica N!)_ID2020ecraninstructorrepetat.xls 0 60 1.12 0.15 0.02 1.00 1.53 0.53 1.05 1.23 1.30 3.96
SAM_RT O4c_RunN_ID2323ecraninstructorrepetat.xls 0 80 1.19 0.17 0.02 1.00 1.90 0.90 1.14 1.36 1.44 6.02

descriptive_func(df = Repetat_CTRL_Solo, Stim_type = "pozitiv", By_ID = TRUE)

Repetat_CTRL_Solo
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222ecransolo repetat.xls 0 80 6.81 1.15 0.13 5 9.00 4.00 7.00 7.00 -0.08 2.07
SAM_Resp O4c_Run1_ID14ecransolo repetat.xls 0 80 6.44 1.36 0.15 5 9.00 4.00 6.00 6.00 0.73 2.32
SAM_Resp O4c_Run1_ID18ecransolo repetat.xls 0 80 6.55 1.83 0.21 2 9.00 7.00 6.50 5.00 -0.26 2.22
SAM_Resp O4c_Run1_ID19ecransolo repetat.xls 0 80 8.20 0.85 0.09 6 9.00 3.00 8.00 9.00 -0.52 1.93
SAM_Resp O4c_Run1_ID32ecransolo repetat.xls 0 60 7.38 0.92 0.12 5 9.00 4.00 7.00 7.00 0.22 2.82
SAM_Resp O4c_Run1_ID35ecransolo repetat.xls 0 60 8.47 0.77 0.10 6 9.00 3.00 9.00 9.00 -1.24 3.59
SAM_Resp O4c_Run1_ID38ecransolo repetat.xls 0 60 5.85 1.73 0.22 3 9.00 6.00 5.50 8.00 0.01 1.73
SAM_Resp O4c_Run1ID21ecransolo repetat.xls 0 80 5.58 0.76 0.08 4 7.00 3.00 5.00 5.00 0.36 2.50
SAM_Resp O4c_Run2_ID25ecransolo repetat.xls 0 60 8.00 0.00 0.00 8 8.00 0.00 8.00 8.00 NaN NaN
SAM_Resp O4c_Run2_ID31ecransolo repetat.xls 0 60 7.88 1.88 0.24 4 9.00 5.00 9.00 9.00 -1.10 2.28
SAM_Resp O4c_Run24_ID24ecransolo repetat.xls 0 80 7.10 1.06 0.12 4 9.00 5.00 7.00 8.00 -0.65 2.66
SAM_Resp O4c_Run30_ID30ecransolo repetatX.xls 0 80 5.84 1.27 0.14 5 8.00 3.00 5.00 5.00 1.02 2.20
SAM_Resp O4c_RunN(modifica N!)_ID07ecransolo repetat.xls 0 80 5.29 1.32 0.15 2 9.00 7.00 5.00 5.00 0.38 3.69
SAM_Resp O4c_RunN(modifica N!)_ID2020ecransolo repetat.xls 0 60 4.73 1.36 0.18 2 7.00 5.00 5.00 6.00 -0.68 2.25
SAM_Resp O4c_RunN_ID2323ecransolo repetat.xls 0 80 7.11 1.17 0.13 5 9.00 4.00 7.00 7.00 0.64 2.09
SAM_RT O4c_ID2222ecransolo repetat.xls 0 80 1.46 0.92 0.10 1 6.46 5.46 1.27 1.26 4.26 21.22
SAM_RT O4c_Run1_ID14ecransolo repetat.xls 0 80 1.81 1.05 0.12 1 8.38 7.38 1.47 1.00 3.42 20.62
SAM_RT O4c_Run1_ID18ecransolo repetat.xls 0 80 1.80 0.81 0.09 1 5.08 4.08 1.51 1.13 1.61 5.83
SAM_RT O4c_Run1_ID19ecransolo repetat.xls 0 80 1.65 0.96 0.11 1 6.06 5.05 1.25 2.94 2.25 8.56
SAM_RT O4c_Run1_ID32ecransolo repetat.xls 0 60 1.31 0.43 0.06 1 2.82 1.82 1.15 1.40 1.99 6.38
SAM_RT O4c_Run1_ID35ecransolo repetat.xls 0 60 1.18 0.22 0.03 1 2.20 1.20 1.10 1.22 2.34 9.76
SAM_RT O4c_Run1_ID38ecransolo repetat.xls 0 60 1.75 0.88 0.11 1 4.51 3.51 1.38 1.31 1.53 4.62
SAM_RT O4c_Run1ID21ecransolo repetat.xls 0 80 1.52 0.78 0.09 1 6.78 5.78 1.30 1.41 4.30 27.55
SAM_RT O4c_Run2_ID25ecransolo repetat.xls 0 60 1.48 0.75 0.10 1 4.71 3.71 1.17 1.63 2.57 9.83
SAM_RT O4c_Run2_ID31ecransolo repetat.xls 0 60 1.95 1.31 0.17 1 6.58 5.58 1.35 1.15 1.60 4.80
SAM_RT O4c_Run24_ID24ecransolo repetat.xls 0 80 1.35 0.47 0.05 1 3.97 2.97 1.20 1.18 2.90 14.05
SAM_RT O4c_Run30_ID30ecransolo repetatX.xls 0 80 1.56 0.70 0.08 1 4.64 3.64 1.35 2.27 2.18 8.51
SAM_RT O4c_RunN(modifica N!)_ID07ecransolo repetat.xls 0 80 1.22 0.24 0.03 1 2.12 1.12 1.14 2.12 1.55 5.27
SAM_RT O4c_RunN(modifica N!)_ID2020ecransolo repetat.xls 0 60 1.19 0.29 0.04 1 2.50 1.50 1.06 1.00 2.29 9.02
SAM_RT O4c_RunN_ID2323ecransolo repetat.xls 0 80 1.59 0.86 0.10 1 4.11 3.11 1.25 2.90 1.82 5.14

descriptive_func(df = Repetat_OGL_Instr, Stim_type = "pozitiv", By_ID = TRUE)

Repetat_OGL_Instr
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222oglindainstructorrepetat.xls 0 80 6.96 1.05 0.12 5.00 8.00 3.00 7.00 8.00 -0.26 1.51
SAM_Resp O4c_Run1_ID19oglindainstructorrepetat.xls 0 80 7.21 1.12 0.13 6.00 9.00 3.00 7.00 7.00 0.66 2.06
SAM_Resp O4c_Run1_ID21oglindainstructorrepetat.xls 0 60 5.62 0.80 0.10 4.00 8.00 4.00 5.00 5.00 0.80 3.02
SAM_Resp O4c_Run1_ID23oglindainstructorrepetat.xls 0 80 6.40 1.68 0.19 4.00 9.00 5.00 6.00 6.00 0.34 1.93
SAM_Resp O4c_Run1_ID30oglindainstructorrepetat.xls 0 80 5.66 0.79 0.09 4.00 7.00 3.00 5.00 5.00 0.52 2.05
SAM_Resp O4c_Run1_ID32oglindainstructorrepetat.xls 0 60 6.60 0.99 0.13 4.00 8.00 4.00 7.00 7.00 -1.22 4.54
SAM_Resp O4c_Run1_ID38oglindainstructorrepetat.xls 0 60 6.32 2.23 0.29 3.00 9.00 6.00 6.00 8.00 -0.15 1.46
SAM_Resp O4c_Run14_IDz214oglindainstructorrepetat.xls 0 80 6.97 0.76 0.09 5.00 8.00 3.00 7.00 7.00 -0.48 3.04
SAM_Resp O4c_Run2_ID20oglindainstructorrepetat.xls 0 60 7.32 2.59 0.33 2.00 9.00 7.00 9.00 9.00 -1.10 2.35
SAM_Resp O4c_Run2_ID25oglindainstructorrepetat.xls 0 60 8.05 0.29 0.04 7.00 9.00 2.00 8.00 8.00 1.64 11.41
SAM_Resp O4c_Run2_ID31oglindainstructorrepetat.xls 0 60 7.82 1.77 0.23 5.00 9.00 4.00 9.00 9.00 -0.90 1.91
SAM_Resp O4c_Run35_ID35oglindainstructorrepetat.xls 0 60 7.32 0.93 0.12 4.00 9.00 5.00 7.00 7.00 -0.67 4.83
SAM_Resp O4c_RunN(modifica N!)_ID0707oglindainstructorrepetat.xls 0 80 6.05 1.68 0.19 3.00 9.00 6.00 5.50 5.00 0.21 1.67
SAM_Resp O4c_RunN_ID1818oglindainstructorrepetat.xls 0 80 6.70 1.41 0.16 3.00 9.00 6.00 7.00 7.00 -0.28 2.67
SAM_Resp O4c_RunN_ID2424oglindainstructorrepetat.xls 0 80 7.94 0.54 0.06 6.00 9.00 3.00 8.00 8.00 -0.56 5.10
SAM_RT O4c_ID2222oglindainstructorrepetat.xls 0 80 1.55 0.70 0.08 1.00 5.38 4.38 1.33 2.08 2.86 13.65
SAM_RT O4c_Run1_ID19oglindainstructorrepetat.xls 0 80 1.30 0.40 0.04 1.00 3.41 2.41 1.19 1.83 2.82 13.37
SAM_RT O4c_Run1_ID21oglindainstructorrepetat.xls 0 60 1.38 0.46 0.06 1.00 3.48 2.47 1.25 1.85 2.66 10.74
SAM_RT O4c_Run1_ID23oglindainstructorrepetat.xls 0 80 1.46 0.91 0.10 1.00 7.93 6.93 1.21 4.89 5.30 35.57
SAM_RT O4c_Run1_ID30oglindainstructorrepetat.xls 0 80 1.28 0.43 0.05 1.00 3.60 2.60 1.10 1.42 2.88 13.44
SAM_RT O4c_Run1_ID32oglindainstructorrepetat.xls 0 60 1.37 0.45 0.06 1.00 2.87 1.87 1.19 1.26 1.50 4.54
SAM_RT O4c_Run1_ID38oglindainstructorrepetat.xls 0 60 1.50 0.68 0.09 1.00 3.87 2.87 1.22 1.17 1.63 4.94
SAM_RT O4c_Run14_IDz214oglindainstructorrepetat.xls 0 80 1.43 0.51 0.06 1.00 3.12 2.12 1.28 1.06 1.62 5.25
SAM_RT O4c_Run2_ID20oglindainstructorrepetat.xls 0 60 1.16 0.21 0.03 1.00 1.84 0.84 1.05 1.40 1.66 5.49
SAM_RT O4c_Run2_ID25oglindainstructorrepetat.xls 0 60 1.77 0.97 0.12 1.00 4.37 3.36 1.32 1.33 1.36 3.55
SAM_RT O4c_Run2_ID31oglindainstructorrepetat.xls 0 60 1.48 0.71 0.09 1.00 4.75 3.75 1.23 3.12 2.69 10.86
SAM_RT O4c_Run35_ID35oglindainstructorrepetat.xls 0 60 1.45 0.81 0.11 1.00 5.12 4.12 1.17 1.49 3.27 14.10
SAM_RT O4c_RunN(modifica N!)_ID0707oglindainstructorrepetat.xls 0 80 1.19 0.24 0.03 1.00 2.15 1.15 1.13 1.67 1.71 6.13
SAM_RT O4c_RunN_ID1818oglindainstructorrepetat.xls 0 80 3.99 1.88 0.21 1.66 10.11 8.45 3.30 2.46 1.30 4.05
SAM_RT O4c_RunN_ID2424oglindainstructorrepetat.xls 0 80 1.34 0.31 0.03 1.00 2.68 1.68 1.27 1.86 1.57 6.49

descriptive_func(df = Repetat_OGL_Solo, Stim_type = "pozitiv", By_ID = TRUE)

Repetat_OGL_Solo
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222oglindasolo repetat.xls 0 80 6.90 1.09 0.12 5 8.00 3.00 7.00 8.00 -0.16 1.42
SAM_Resp O4c_Run1_ID20oglindasolo repetat.xls 0 60 7.17 2.23 0.29 3 9.00 6.00 8.00 8.00 -1.05 2.41
SAM_Resp O4c_Run1_ID25oglindasolo repetat.xls 0 60 8.00 0.18 0.02 7 9.00 2.00 8.00 8.00 0.00 30.00
SAM_Resp O4c_Run1_ID31oglindasolo repetat.xls 0 60 8.00 1.75 0.23 5 9.00 4.00 9.00 9.00 -1.15 2.33
SAM_Resp O4c_Run14z2_ID14oglindasolo repetatX.xls 0 80 7.17 0.57 0.06 5 8.00 3.00 7.00 7.00 -0.82 6.80
SAM_Resp O4c_Run2_ID19oglindasolo repetat.xls 0 80 7.24 1.12 0.12 6 9.00 3.00 7.00 7.00 0.62 2.02
SAM_Resp O4c_Run2_ID21oglindasolo repetat.xls 0 60 5.55 0.81 0.10 4 7.00 3.00 5.00 5.00 0.41 2.41
SAM_Resp O4c_Run2_ID23oglindasolo repetat.xls 0 80 6.84 1.34 0.15 5 9.00 4.00 6.00 6.00 0.59 2.08
SAM_Resp O4c_Run2_ID30oglindasolo repetat.xls 0 80 5.33 0.73 0.08 4 7.00 3.00 5.00 5.00 1.43 4.04
SAM_Resp O4c_Run2_ID32oglindasolo repetat.xls 0 60 6.38 1.57 0.20 4 9.00 5.00 7.00 7.00 -0.68 1.91
SAM_Resp O4c_Run2_ID38oglindasolo repetat.xls 0 60 6.50 2.31 0.30 3 9.00 6.00 6.50 9.00 -0.12 1.33
SAM_Resp O4c_Run35_ID35oglindasolo repetat.xls 0 60 7.98 0.93 0.12 5 9.00 4.00 8.00 9.00 -0.61 3.07
SAM_Resp O4c_RunN(modifica N!)_ID07067oglindasolo repetat.xls 0 80 5.79 0.91 0.10 4 9.00 5.00 6.00 5.00 1.04 4.18
SAM_Resp O4c_RunN_ID18oglindasolo repetat.xls 0 80 6.75 1.51 0.17 3 9.00 6.00 7.00 8.00 -0.31 2.39
SAM_Resp O4c_RunN_ID2424oglindasolo repetat.xls 0 80 8.14 0.50 0.06 7 9.00 2.00 8.00 8.00 0.29 3.63
SAM_RT O4c_ID2222oglindasolo repetat.xls 0 80 1.64 0.75 0.08 1 5.15 4.15 1.40 1.40 2.50 10.77
SAM_RT O4c_Run1_ID20oglindasolo repetat.xls 0 60 1.39 0.43 0.06 1 2.68 1.67 1.23 2.68 1.42 4.15
SAM_RT O4c_Run1_ID25oglindasolo repetat.xls 0 60 1.61 1.08 0.14 1 8.89 7.88 1.33 2.20 5.34 35.72
SAM_RT O4c_Run1_ID31oglindasolo repetat.xls 0 60 1.71 1.05 0.14 1 5.22 4.22 1.21 1.17 1.76 5.29
SAM_RT O4c_Run14z2_ID14oglindasolo repetatX.xls 0 80 1.55 0.86 0.10 1 6.76 5.76 1.26 1.13 3.49 19.15
SAM_RT O4c_Run2_ID19oglindasolo repetat.xls 0 80 1.13 0.14 0.02 1 1.84 0.84 1.10 1.19 1.93 9.73
SAM_RT O4c_Run2_ID21oglindasolo repetat.xls 0 60 1.54 0.68 0.09 1 3.78 2.78 1.26 1.80 1.64 4.91
SAM_RT O4c_Run2_ID23oglindasolo repetat.xls 0 80 1.23 0.41 0.05 1 3.81 2.81 1.11 1.03 4.07 22.81
SAM_RT O4c_Run2_ID30oglindasolo repetat.xls 0 80 1.26 0.34 0.04 1 2.76 1.76 1.15 1.58 2.20 8.71
SAM_RT O4c_Run2_ID32oglindasolo repetat.xls 0 60 1.23 0.28 0.04 1 2.46 1.46 1.15 1.27 2.08 8.39
SAM_RT O4c_Run2_ID38oglindasolo repetat.xls 0 60 1.30 0.57 0.07 1 3.73 2.73 1.12 1.35 3.35 13.63
SAM_RT O4c_Run35_ID35oglindasolo repetat.xls 0 60 1.15 0.22 0.03 1 2.17 1.17 1.07 1.51 2.75 11.73
SAM_RT O4c_RunN(modifica N!)_ID07067oglindasolo repetat.xls 0 80 1.32 0.36 0.04 1 3.15 2.15 1.21 1.00 2.30 10.94
SAM_RT O4c_RunN_ID18oglindasolo repetat.xls 0 80 2.01 1.08 0.12 1 5.61 4.61 1.61 2.25 1.57 5.19
SAM_RT O4c_RunN_ID2424oglindasolo repetat.xls 0 80 1.44 0.43 0.05 1 2.73 1.73 1.30 1.17 1.16 3.38

descriptive_func(df = Repetat_CTRL_Instr, Stim_type = "neutru", By_ID = FALSE)           # Neutral - General

Repetat_CTRL_Instr
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1080 5.33 1.09 0.03 2 9.00 7.00 5.00 5.00 1.01 5.58
SAM_RT 0 1080 1.37 0.54 0.02 1 6.19 5.19 1.23 1.17 3.56 20.41

descriptive_func(df = Repetat_CTRL_Solo, Stim_type = "neutru", By_ID = FALSE)

Repetat_CTRL_Solo
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1080 5.26 1.18 0.04 1 9 8 5.00 5.00 0.87 5.46
SAM_RT 0 1080 1.51 0.80 0.02 1 7 6 1.23 1.56 3.02 14.04

descriptive_func(df = Repetat_OGL_Instr, Stim_type = "neutru", By_ID = FALSE)

Repetat_OGL_Instr
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1060 5.17 1.07 0.03 1 9.00 8.00 5.00 5.00 -0.12 6.00
SAM_RT 0 1060 1.62 1.17 0.04 1 12.75 11.75 1.23 1.61 4.60 32.35

descriptive_func(df = Repetat_OGL_Solo, Stim_type = "neutru", By_ID = FALSE)

Repetat_OGL_Solo
var missing n M SD SE min max range median mode skew kurtosis
SAM_Resp 0 1060 5.34 1.15 0.04 1 9.0 8.0 5.00 5.00 0.57 5.93
SAM_RT 0 1060 1.43 0.63 0.02 1 7.7 6.7 1.22 1.94 3.47 21.12

descriptive_func(df = Repetat_CTRL_Instr, Stim_type = "neutru", By_ID = TRUE)            # Neutral - by id

Repetat_CTRL_Instr
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222ecraninstructorrepetat.xls 0 80 5.26 0.44 0.05 5 6.00 1.00 5.00 5.00 1.08 2.17
SAM_Resp O4c_Run1_ID25ecraninstructorrepetat.xls 0 60 4.75 0.44 0.06 4 5.00 1.00 5.00 5.00 -1.15 2.33
SAM_Resp O4c_Run1_ID31ecraninstructorrepetat.xls 0 60 5.18 0.60 0.08 2 6.00 4.00 5.00 5.00 -2.01 14.85
SAM_Resp O4c_Run1ID21ecraninstructorrepetat.xls 0 80 5.00 0.00 0.00 5 5.00 0.00 5.00 5.00 NaN NaN
SAM_Resp O4c_Run2_ID14ecraninstructorrepetat.xls 0 80 6.19 1.14 0.13 5 8.00 3.00 6.00 6.00 0.61 1.98
SAM_Resp O4c_Run2_ID18ecraninstructorrepetat.xls 0 80 5.65 1.89 0.21 2 9.00 7.00 6.00 6.00 -0.28 2.24
SAM_Resp O4c_Run2_ID19ecraninstructorrepetat.xls 0 80 6.05 2.15 0.24 3 9.00 6.00 6.00 6.00 -0.07 1.96
SAM_Resp O4c_Run2_ID32ecraninstructorrepetat.xls 0 60 5.15 0.99 0.13 4 8.00 4.00 5.00 5.00 0.86 3.21
SAM_Resp O4c_Run2_ID35ecraninstructorrepetat.xls 0 60 5.35 0.66 0.09 5 7.00 2.00 5.00 5.00 1.64 4.26
SAM_Resp O4c_Run2_ID38ecraninstructorrepetat.xls 0 60 5.52 1.14 0.15 4 7.00 3.00 5.50 7.00 -0.01 1.61
SAM_Resp O4c_Run24_ID24ecraninstructorrepetat.xls 0 80 5.00 0.48 0.05 4 7.00 3.00 5.00 5.00 0.70 7.41
SAM_Resp O4c_Run30_ID30ecraninstructorrepetat.xls 0 80 4.85 0.39 0.04 4 6.00 2.00 5.00 5.00 -1.31 4.61
SAM_Resp O4c_RunN(modifica N!)_ID07ecraninstructorrepetatX.xls 0 80 5.00 0.00 0.00 5 5.00 0.00 5.00 5.00 NaN NaN
SAM_Resp O4c_RunN(modifica N!)_ID2020ecraninstructorrepetat.xls 0 60 5.33 0.82 0.11 4 8.00 4.00 5.00 5.00 1.21 4.33
SAM_Resp O4c_RunN_ID2323ecraninstructorrepetat.xls 0 80 5.55 0.99 0.11 4 8.00 4.00 5.00 5.00 1.23 3.30
SAM_RT O4c_ID2222ecraninstructorrepetat.xls 0 80 1.40 0.38 0.04 1 3.34 2.34 1.31 1.17 2.34 11.08
SAM_RT O4c_Run1_ID25ecraninstructorrepetat.xls 0 60 1.57 0.87 0.11 1 6.19 5.19 1.26 1.61 3.28 16.13
SAM_RT O4c_Run1_ID31ecraninstructorrepetat.xls 0 60 1.84 1.20 0.15 1 5.03 4.03 1.21 1.01 1.42 3.61
SAM_RT O4c_Run1ID21ecraninstructorrepetat.xls 0 80 1.28 0.33 0.04 1 3.20 2.20 1.21 1.03 2.93 15.85
SAM_RT O4c_Run2_ID14ecraninstructorrepetat.xls 0 80 1.33 0.40 0.05 1 2.63 1.63 1.19 2.45 1.73 5.38
SAM_RT O4c_Run2_ID18ecraninstructorrepetat.xls 0 80 1.55 0.55 0.06 1 4.48 3.48 1.43 1.06 2.71 12.87
SAM_RT O4c_Run2_ID19ecraninstructorrepetat.xls 0 80 1.33 0.45 0.05 1 3.68 2.68 1.15 3.68 2.47 11.35
SAM_RT O4c_Run2_ID32ecraninstructorrepetat.xls 0 60 1.23 0.26 0.03 1 2.29 1.29 1.13 1.01 1.63 6.29
SAM_RT O4c_Run2_ID35ecraninstructorrepetat.xls 0 60 1.19 0.24 0.03 1 2.39 1.39 1.12 1.20 2.52 12.05
SAM_RT O4c_Run2_ID38ecraninstructorrepetat.xls 0 60 1.56 0.62 0.08 1 3.76 2.75 1.33 2.10 1.88 6.38
SAM_RT O4c_Run24_ID24ecraninstructorrepetat.xls 0 80 1.30 0.40 0.04 1 3.91 2.91 1.20 1.71 4.10 25.37
SAM_RT O4c_Run30_ID30ecraninstructorrepetat.xls 0 80 1.49 0.57 0.06 1 3.69 2.69 1.35 1.00 1.85 6.17
SAM_RT O4c_RunN(modifica N!)_ID07ecraninstructorrepetatX.xls 0 80 1.19 0.20 0.02 1 1.73 0.73 1.11 1.00 0.94 2.73
SAM_RT O4c_RunN(modifica N!)_ID2020ecraninstructorrepetat.xls 0 60 1.19 0.24 0.03 1 2.38 1.38 1.12 1.39 2.61 12.39
SAM_RT O4c_RunN_ID2323ecraninstructorrepetat.xls 0 80 1.23 0.22 0.03 1 2.06 1.06 1.18 1.08 1.76 6.47

descriptive_func(df = Repetat_CTRL_Solo, Stim_type = "neutru", By_ID = TRUE)

Repetat_CTRL_Solo
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222ecransolo repetat.xls 0 80 5.26 0.44 0.05 5 6.00 1.00 5.00 5.00 1.08 2.17
SAM_Resp O4c_Run1_ID14ecransolo repetat.xls 0 80 5.90 1.12 0.13 5 8.00 3.00 5.00 5.00 0.85 2.24
SAM_Resp O4c_Run1_ID18ecransolo repetat.xls 0 80 5.61 2.14 0.24 1 9.00 8.00 6.00 6.00 -0.41 2.20
SAM_Resp O4c_Run1_ID19ecransolo repetat.xls 0 80 6.58 2.38 0.27 2 9.00 7.00 7.00 9.00 -0.65 1.98
SAM_Resp O4c_Run1_ID32ecransolo repetat.xls 0 60 5.20 1.22 0.16 3 7.00 4.00 5.00 5.00 -0.05 2.26
SAM_Resp O4c_Run1_ID35ecransolo repetat.xls 0 60 5.37 0.69 0.09 4 7.00 3.00 5.00 5.00 1.28 3.75
SAM_Resp O4c_Run1_ID38ecransolo repetat.xls 0 60 5.30 0.98 0.13 3 7.00 4.00 5.00 6.00 -0.08 2.26
SAM_Resp O4c_Run1ID21ecransolo repetat.xls 0 80 5.00 0.00 0.00 5 5.00 0.00 5.00 5.00 NaN NaN
SAM_Resp O4c_Run2_ID25ecransolo repetat.xls 0 60 4.75 0.44 0.06 4 5.00 1.00 5.00 5.00 -1.15 2.33
SAM_Resp O4c_Run2_ID31ecransolo repetat.xls 0 60 4.92 0.33 0.04 3 5.00 2.00 5.00 5.00 -4.27 21.62
SAM_Resp O4c_Run24_ID24ecransolo repetat.xls 0 80 4.76 0.43 0.05 4 5.00 1.00 5.00 5.00 -1.23 2.52
SAM_Resp O4c_Run30_ID30ecransolo repetatX.xls 0 80 4.80 0.40 0.05 4 5.00 1.00 5.00 5.00 -1.50 3.25
SAM_Resp O4c_RunN(modifica N!)_ID07ecransolo repetat.xls 0 80 4.99 0.11 0.01 4 5.00 1.00 5.00 5.00 -8.78 78.01
SAM_Resp O4c_RunN(modifica N!)_ID2020ecransolo repetat.xls 0 60 4.77 0.56 0.07 3 6.00 3.00 5.00 5.00 -0.59 3.76
SAM_Resp O4c_RunN_ID2323ecransolo repetat.xls 0 80 5.42 0.91 0.10 3 8.00 5.00 5.00 5.00 0.58 3.73
SAM_RT O4c_ID2222ecransolo repetat.xls 0 80 1.37 0.77 0.09 1 5.93 4.93 1.21 1.56 5.10 29.57
SAM_RT O4c_Run1_ID14ecransolo repetat.xls 0 80 1.67 0.87 0.10 1 5.23 4.23 1.35 1.12 2.05 7.54
SAM_RT O4c_Run1_ID18ecransolo repetat.xls 0 80 1.67 0.79 0.09 1 4.95 3.95 1.39 1.45 2.21 8.24
SAM_RT O4c_Run1_ID19ecransolo repetat.xls 0 80 1.77 0.99 0.11 1 5.73 4.73 1.37 1.09 1.85 6.72
SAM_RT O4c_Run1_ID32ecransolo repetat.xls 0 60 1.28 0.37 0.05 1 3.26 2.26 1.16 1.12 3.07 15.34
SAM_RT O4c_Run1_ID35ecransolo repetat.xls 0 60 1.22 0.30 0.04 1 2.90 1.90 1.13 1.54 3.21 16.92
SAM_RT O4c_Run1_ID38ecransolo repetat.xls 0 60 1.58 0.73 0.09 1 4.09 3.08 1.31 1.62 1.90 5.98
SAM_RT O4c_Run1ID21ecransolo repetat.xls 0 80 1.41 0.59 0.07 1 3.82 2.82 1.14 1.00 2.17 7.65
SAM_RT O4c_Run2_ID25ecransolo repetat.xls 0 60 1.71 0.95 0.12 1 4.82 3.82 1.36 2.29 1.80 5.47
SAM_RT O4c_Run2_ID31ecransolo repetat.xls 0 60 1.94 1.36 0.18 1 6.38 5.38 1.16 1.04 1.53 4.36
SAM_RT O4c_Run24_ID24ecransolo repetat.xls 0 80 1.23 0.24 0.03 1 2.33 1.33 1.18 1.26 1.84 7.50
SAM_RT O4c_Run30_ID30ecransolo repetatX.xls 0 80 1.76 1.15 0.13 1 7.00 6.00 1.39 1.53 2.86 11.58
SAM_RT O4c_RunN(modifica N!)_ID07ecransolo repetat.xls 0 80 1.15 0.16 0.02 1 1.79 0.79 1.11 1.00 1.34 5.09
SAM_RT O4c_RunN(modifica N!)_ID2020ecransolo repetat.xls 0 60 1.11 0.14 0.02 1 1.52 0.52 1.02 1.14 1.22 3.19
SAM_RT O4c_RunN_ID2323ecransolo repetat.xls 0 80 1.68 0.74 0.08 1 4.99 3.99 1.43 1.82 1.74 6.96

descriptive_func(df = Repetat_OGL_Instr, Stim_type = "neutru", By_ID = TRUE)

Repetat_OGL_Instr
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222oglindainstructorrepetat.xls 0 80 5.44 0.52 0.06 4.00 6.00 2.00 5.00 5.00 -0.01 1.61
SAM_Resp O4c_Run1_ID19oglindainstructorrepetat.xls 0 80 4.64 1.68 0.19 2.00 7.00 5.00 5.00 5.00 -0.53 2.17
SAM_Resp O4c_Run1_ID21oglindainstructorrepetat.xls 0 60 5.07 0.25 0.03 5.00 6.00 1.00 5.00 5.00 3.47 13.07
SAM_Resp O4c_Run1_ID23oglindainstructorrepetat.xls 0 80 4.31 1.34 0.15 1.00 7.00 6.00 5.00 5.00 -0.71 2.86
SAM_Resp O4c_Run1_ID30oglindainstructorrepetat.xls 0 80 4.81 0.39 0.04 4.00 5.00 1.00 5.00 5.00 -1.60 3.56
SAM_Resp O4c_Run1_ID32oglindainstructorrepetat.xls 0 60 4.77 0.53 0.07 3.00 6.00 3.00 5.00 5.00 -0.85 4.14
SAM_Resp O4c_Run1_ID38oglindainstructorrepetat.xls 0 60 5.42 1.05 0.14 4.00 7.00 3.00 5.50 6.00 0.00 1.81
SAM_Resp O4c_Run14_IDz214oglindainstructorrepetat.xls 0 80 6.01 1.30 0.15 4.00 9.00 5.00 5.50 5.00 0.85 2.25
SAM_Resp O4c_Run2_ID20oglindainstructorrepetat.xls 0 60 5.72 1.26 0.16 5.00 8.00 3.00 5.00 5.00 1.21 2.51
SAM_Resp O4c_Run2_ID25oglindainstructorrepetat.xls 0 60 4.70 0.65 0.08 1.00 5.00 4.00 5.00 5.00 -3.44 18.95
SAM_Resp O4c_Run2_ID31oglindainstructorrepetat.xls 0 60 4.98 0.13 0.02 4.00 5.00 1.00 5.00 5.00 -7.55 58.02
SAM_Resp O4c_Run35_ID35oglindainstructorrepetat.xls 0 60 5.23 0.50 0.06 4.00 7.00 3.00 5.00 5.00 1.22 4.61
SAM_Resp O4c_RunN(modifica N!)_ID0707oglindainstructorrepetat.xls 0 80 5.05 0.22 0.02 5.00 6.00 1.00 5.00 5.00 4.13 18.05
SAM_Resp O4c_RunN_ID1818oglindainstructorrepetat.xls 0 80 5.75 1.61 0.18 2.00 8.00 6.00 6.00 7.00 -0.69 2.79
SAM_Resp O4c_RunN_ID2424oglindainstructorrepetat.xls 0 80 5.51 0.53 0.06 5.00 7.00 2.00 5.50 5.00 0.21 1.63
SAM_RT O4c_ID2222oglindainstructorrepetat.xls 0 80 1.52 0.56 0.06 1.00 4.59 3.59 1.42 1.61 2.61 13.22
SAM_RT O4c_Run1_ID19oglindainstructorrepetat.xls 0 80 1.26 0.32 0.04 1.00 2.51 1.51 1.16 1.56 1.81 6.34
SAM_RT O4c_Run1_ID21oglindainstructorrepetat.xls 0 60 1.69 0.90 0.12 1.00 4.48 3.48 1.24 1.42 1.56 4.44
SAM_RT O4c_Run1_ID23oglindainstructorrepetat.xls 0 80 1.43 0.47 0.05 1.00 3.46 2.46 1.26 1.27 1.66 6.26
SAM_RT O4c_Run1_ID30oglindainstructorrepetat.xls 0 80 1.21 0.38 0.04 1.00 3.59 2.59 1.07 1.12 3.84 21.59
SAM_RT O4c_Run1_ID32oglindainstructorrepetat.xls 0 60 1.44 0.59 0.08 1.00 4.17 3.17 1.19 4.17 2.35 9.83
SAM_RT O4c_Run1_ID38oglindainstructorrepetat.xls 0 60 1.50 0.69 0.09 1.00 3.94 2.94 1.24 1.28 2.10 7.16
SAM_RT O4c_Run14_IDz214oglindainstructorrepetat.xls 0 80 1.37 0.42 0.05 1.00 3.65 2.65 1.26 2.32 2.43 12.15
SAM_RT O4c_Run2_ID20oglindainstructorrepetat.xls 0 60 1.14 0.15 0.02 1.00 1.61 0.61 1.08 1.09 1.19 3.68
SAM_RT O4c_Run2_ID25oglindainstructorrepetat.xls 0 60 1.69 0.96 0.12 1.00 5.59 4.59 1.21 1.20 2.17 8.02
SAM_RT O4c_Run2_ID31oglindainstructorrepetat.xls 0 60 1.38 0.63 0.08 1.00 4.71 3.71 1.20 1.60 3.23 15.44
SAM_RT O4c_Run35_ID35oglindainstructorrepetat.xls 0 60 1.81 1.16 0.15 1.00 5.98 4.98 1.28 3.34 1.67 4.93
SAM_RT O4c_RunN(modifica N!)_ID0707oglindainstructorrepetat.xls 0 80 1.19 0.18 0.02 1.00 1.78 0.78 1.14 1.78 1.05 3.51
SAM_RT O4c_RunN_ID1818oglindainstructorrepetat.xls 0 80 4.19 2.49 0.28 1.63 12.75 11.12 3.25 2.31 1.72 5.70
SAM_RT O4c_RunN_ID2424oglindainstructorrepetat.xls 0 80 1.26 0.30 0.03 1.00 2.78 1.78 1.21 1.00 2.36 10.87

descriptive_func(df = Repetat_OGL_Solo, Stim_type = "neutru", By_ID = TRUE)
Repetat_OGL_Solo
var ID missing n M SD SE min max range median mode skew kurtosis
SAM_Resp O4c_ID2222oglindasolo repetat.xls 0 80 5.53 0.53 0.06 5 7.00 2.00 6.00 6.00 0.16 1.62
SAM_Resp O4c_Run1_ID20oglindasolo repetat.xls 0 60 5.58 1.25 0.16 4 8.00 4.00 5.00 5.00 1.04 2.77
SAM_Resp O4c_Run1_ID25oglindasolo repetat.xls 0 60 4.68 0.65 0.08 1 5.00 4.00 5.00 5.00 -3.31 18.05
SAM_Resp O4c_Run1_ID31oglindasolo repetat.xls 0 60 4.93 0.78 0.10 1 9.00 8.00 5.00 5.00 0.11 24.24
SAM_Resp O4c_Run14z2_ID14oglindasolo repetatX.xls 0 80 6.28 1.65 0.18 5 9.00 4.00 6.00 5.00 0.93 2.11
SAM_Resp O4c_Run2_ID19oglindasolo repetat.xls 0 80 4.79 1.86 0.21 2 9.00 7.00 5.00 5.00 -0.26 2.21
SAM_Resp O4c_Run2_ID21oglindasolo repetat.xls 0 60 5.13 0.39 0.05 4 6.00 2.00 5.00 5.00 1.24 5.07
SAM_Resp O4c_Run2_ID23oglindasolo repetat.xls 0 80 5.28 0.89 0.10 4 8.00 4.00 5.00 5.00 0.98 3.60
SAM_Resp O4c_Run2_ID30oglindasolo repetat.xls 0 80 4.99 0.25 0.03 4 6.00 2.00 5.00 5.00 -0.65 15.93
SAM_Resp O4c_Run2_ID32oglindasolo repetat.xls 0 60 4.73 0.58 0.07 3 6.00 3.00 5.00 5.00 -1.51 5.09
SAM_Resp O4c_Run2_ID38oglindasolo repetat.xls 0 60 5.62 1.22 0.16 4 7.00 3.00 5.50 7.00 -0.08 1.43
SAM_Resp O4c_Run35_ID35oglindasolo repetat.xls 0 60 5.25 0.51 0.07 4 7.00 3.00 5.00 5.00 1.12 4.24
SAM_Resp O4c_RunN(modifica N!)_ID07067oglindasolo repetat.xls 0 80 5.00 0.00 0.00 5 5.00 0.00 5.00 5.00 NaN NaN
SAM_Resp O4c_RunN_ID18oglindasolo repetat.xls 0 80 6.33 1.73 0.19 2 9.00 7.00 7.00 7.00 -0.90 3.41
SAM_Resp O4c_RunN_ID2424oglindasolo repetat.xls 0 80 5.64 0.64 0.07 4 8.00 4.00 6.00 6.00 0.49 4.15
SAM_RT O4c_ID2222oglindasolo repetat.xls 0 80 1.84 1.00 0.11 1 7.70 6.70 1.52 1.94 2.94 16.21
SAM_RT O4c_Run1_ID20oglindasolo repetat.xls 0 60 1.33 0.34 0.04 1 2.45 1.45 1.23 2.01 1.33 4.32
SAM_RT O4c_Run1_ID25oglindasolo repetat.xls 0 60 1.52 0.73 0.09 1 4.78 3.78 1.25 1.44 2.33 9.11
SAM_RT O4c_Run1_ID31oglindasolo repetat.xls 0 60 1.73 1.12 0.14 1 5.65 4.65 1.30 5.20 2.09 6.54
SAM_RT O4c_Run14z2_ID14oglindasolo repetatX.xls 0 80 1.46 0.68 0.08 1 5.38 4.38 1.23 1.30 3.32 17.09
SAM_RT O4c_Run2_ID19oglindasolo repetat.xls 0 80 1.15 0.20 0.02 1 2.15 1.15 1.05 1.00 2.29 10.25
SAM_RT O4c_Run2_ID21oglindasolo repetat.xls 0 60 1.56 0.63 0.08 1 3.41 2.41 1.39 1.48 1.41 3.93
SAM_RT O4c_Run2_ID23oglindasolo repetat.xls 0 80 1.21 0.25 0.03 1 1.98 0.98 1.13 1.04 1.53 4.71
SAM_RT O4c_Run2_ID30oglindasolo repetat.xls 0 80 1.25 0.31 0.03 1 2.50 1.50 1.16 1.19 1.83 6.31
SAM_RT O4c_Run2_ID32oglindasolo repetat.xls 0 60 1.33 0.37 0.05 1 2.96 1.96 1.23 1.39 1.82 7.57
SAM_RT O4c_Run2_ID38oglindasolo repetat.xls 0 60 1.29 0.36 0.05 1 2.97 1.97 1.21 1.93 2.33 9.82
SAM_RT O4c_Run35_ID35oglindasolo repetat.xls 0 60 1.19 0.20 0.03 1 1.70 0.70 1.14 1.58 0.84 2.71
SAM_RT O4c_RunN(modifica N!)_ID07067oglindasolo repetat.xls 0 80 1.28 0.35 0.04 1 2.64 1.64 1.18 1.08 1.71 5.95
SAM_RT O4c_RunN_ID18oglindasolo repetat.xls 0 80 1.78 0.86 0.10 1 5.26 4.25 1.44 2.12 1.93 6.77
SAM_RT O4c_RunN_ID2424oglindasolo repetat.xls 0 80 1.46 0.53 0.06 1 3.15 2.14 1.27 1.61 1.56 4.67

2.2 Merge

############################## Merge condition dataset ############################################################
# Must first rename .id to ID in oder to have .id for df names
ID_rename <- function(df){
  if(".id" %in% colnames(df)) {
    df_modif <- 
      df %>%
      dplyr::rename("ID" = .id)
    df <- deparse(substitute(df))
    cat("Changed .id to ID for: ", as.name(df))
    assign(df, df_modif, envir = globalenv())
  }  
}
ID_rename(Repetat_CTRL_Instr)
Changed .id to ID for:  Repetat_CTRL_Instr
ID_rename(Repetat_CTRL_Solo)
Changed .id to ID for:  Repetat_CTRL_Solo
ID_rename(Repetat_OGL_Instr)
Changed .id to ID for:  Repetat_OGL_Instr
ID_rename(Repetat_OGL_Solo)
Changed .id to ID for:  Repetat_OGL_Solo
# Merge into one df
list_df_merge <- list(Repetat_CTRL_Instr, Repetat_CTRL_Solo, Repetat_OGL_Instr, Repetat_OGL_Solo)
names(list_df_merge) <- c("Repetat_CTRL_Instr", "Repetat_CTRL_Solo", "Repetat_OGL_Instr", "Repetat_OGL_Solo")
Repetat_merged <- plyr::ldply(list_df_merge, data.frame)                # also works for this job bind_rows(list_df_merge, .id = "column_label")

2.3 Analyses on merged (Anova & post-hoc)

############################## Analyses on Merged ################################################################
## Just a Test 
# Repetat_merged_spread_Neg <- 
#   Repetat_merged %>%
#   filter(!is.na(SAM_Resp)) %>%                                           # some files had only NA on SAM_Resp and SAM_RT
#   select(.id, ID, Subj_id, 
#          Stimuli.order, MarkerStimuli, Stimulus.type, 
#          SAM_Resp, SAM_RT) %>%
#   filter(Stimulus.type == "negativ") %>%                                 # dont forget to pick stymulus type
#   spread(.id, SAM_Resp)
# 
# t.test(Repetat_merged_spread_Neg$Repetat_CTRL_Instr, Repetat_merged_spread_Neg$Repetat_CTRL_Solo, na.rm = TRUE)
# t.test(Repetat_merged_spread_Neg$Repetat_OGL_Instr, Repetat_merged_spread_Neg$Repetat_OGL_Solo, na.rm = TRUE)
# t.test(Repetat_merged_spread_Neg$Repetat_OGL_Instr, Repetat_merged_spread_Neg$Repetat_CTRL_Instr, na.rm = TRUE)
# t.test(Repetat_merged_spread_Neg$Repetat_OGL_Solo, Repetat_merged_spread_Neg$Repetat_CTRL_Solo, na.rm = TRUE)

## Function prepair data for analyses
prepaire_merged_func <- function(Stim_type){
  Repetat_merged %>%
    filter(!is.na(SAM_Resp)) %>%                                           # some files had only NA on SAM_Resp and SAM_RT
    select(.id, ID, Subj_id, 
           Stimuli.order, MarkerStimuli, Stimulus.type, 
           SAM_Resp, SAM_RT) %>%
    dplyr::rename(Cond = .id) %>% 
    filter(Stimulus.type == Stim_type) %>%                                 # dont forget to pick stymulus type
    mutate(Cond = as.factor(Cond))                                         # tunr to factor for aov family functions
}

Repetat_merged_Neg <- prepaire_merged_func("negativ")
Repetat_merged_Neu <- prepaire_merged_func("neutru")
Repetat_merged_Poz <- prepaire_merged_func("pozitiv")

## Anova and Post-Hoc
# Normality 
Repetat_merged_Neg %>%
  select(SAM_Resp) %>%                                                     # must select variables outside function 
  tadaatoolbox::tadaa_normtest(method = "shapiro")                         # , print = "markdown"  for Notebook

# Levene Test (p>.05 = homogeneity of variances)
Repetat_merged_Neg %>%
  tadaatoolbox::tadaa_levene(data = ., SAM_Resp ~ Cond)                    # , print = "markdown"  for Notebook

# Anova
Repetat_merged_Neg %>%
  #do(broom::glance(aov(.$SAM_Resp ~ .$Cond)))                             # regular anova do(broom::tidy(aov(.$SAM_Resp ~ .$Cond)))
  tadaatoolbox::tadaa_aov(data = ., SAM_Resp ~ Cond, type = 1)             # , print = "markdown"  for Notebook

# Post-Hoc 
Repetat_merged_Neg %>%
  # Tukey for equal variance 
  tadaatoolbox::tadaa_pairwise_tukey(data = ., SAM_Resp, Cond)             # , print = "markdown"  for Notebook
# Games Howell does not assume equal variances
#tadaatoolbox::tadaa_pairwise_gh(data = ., SAM_Resp, Cond)                # , print = "markdown"  for Notebook

2.4 Plots with p values

## Plots
options(scipen = 999)                                 # positive values bias towards fixed and negative towards scientific notation
theme_set(papaja::theme_apa())                        # theme for plots          
# by dataset
ggplot(Repetat_merged, aes(x = Stimulus.type, y = SAM_Resp)) +
  geom_boxplot() +
  stat_summary(fun.data = mean_se,  colour = "darkred") +
  xlab("") +
  facet_wrap(~.id) +
  ggpubr::stat_compare_means(method = "t.test", 
                             label = "p.signif",                                         # to avoid scientific notation of very small p-values
                             #paired = TRUE, 
                             comparisons = list(c("negativ", "neutru"),
                                                c("neutru", "pozitiv"),
                                                c("negativ", "pozitiv")))  

# by Stimulus type
ggplot(Repetat_merged, aes(x = .id, y = SAM_Resp)) +
  geom_boxplot() +
  stat_summary(fun.data = mean_se,  colour = "darkred") +
  xlab("") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  facet_wrap(~Stimulus.type) +
  ggpubr::stat_compare_means(method = "t.test",
                             label = "p.format",                                         # formated p-values
                             #paired = TRUE, 
                             comparisons = list(c("Repetat_CTRL_Instr", "Repetat_CTRL_Solo"),
                                                c("Repetat_CTRL_Instr", "Repetat_OGL_Instr"),
                                                c("Repetat_CTRL_Solo", "Repetat_OGL_Instr"),
                                                c("Repetat_CTRL_Solo", "Repetat_OGL_Solo"),
                                                c("Repetat_OGL_Instr", "Repetat_OGL_Solo"),
                                                c("Repetat_CTRL_Instr", "Repetat_OGL_Solo"))) 

# drop to CTRL vs OGL - by Stimulus type
Repetat_merged %>%
  mutate(.id = case_when(.id %in% c("Repetat_CTRL_Instr", "Repetat_CTRL_Solo") ~ "Repetat_CTRL",
                         .id %in% c("Repetat_OGL_Instr", "Repetat_OGL_Solo") ~ "Repetat_OGL",
                         TRUE ~ as.character(.id))) %>%
  ggplot(aes(x = .id, y = SAM_Resp)) +
  geom_boxplot() +
  stat_summary(fun.data = mean_se,  colour = "darkred") +
  xlab("") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  facet_wrap(~Stimulus.type) +
  ggpubr::stat_compare_means(method = "t.test",
                             label = "p.format",                                         # formated p-values
                             #paired = TRUE, 
                             comparisons = list(c("Repetat_CTRL", "Repetat_OGL")))          

# drop to Instr vs Solo - by Stimulus type
Repetat_merged %>%
  mutate(.id = case_when(.id %in% c("Repetat_CTRL_Instr", "Repetat_OGL_Instr") ~ "Repetat_Instr",
                         .id %in% c("Repetat_CTRL_Solo", "Repetat_OGL_Solo") ~ "Repetat_Solo",
                         TRUE ~ as.character(.id))) %>%
  ggplot(aes(x = .id, y = SAM_Resp)) +
  geom_boxplot() +
  stat_summary(fun.data = mean_se,  colour = "darkred") +
  xlab("") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  facet_wrap(~Stimulus.type) +
  ggpubr::stat_compare_means(method = "t.test",
                             label = "p.format",                                         # formated p-values
                             #paired = TRUE, 
                             comparisons = list(c("Repetat_Instr", "Repetat_Solo"))) 


3 Session Info

R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=Romanian_Romania.1250  LC_CTYPE=Romanian_Romania.1250    LC_MONETARY=Romanian_Romania.1250 LC_NUMERIC=C                     
[5] LC_TIME=Romanian_Romania.1250    

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

other attached packages:
 [1] bindrcpp_0.2.2     plyr_1.8.4         summarytools_0.9.3 DT_0.5             ggpubr_0.2         magrittr_1.5       broom_0.5.1       
 [8] papaja_0.1.0.9842  psych_1.8.10       forcats_0.3.0      stringr_1.3.1      dplyr_0.7.8        purrr_0.2.5        readr_1.3.0       
[15] tidyr_0.8.2        tibble_1.4.2       ggplot2_3.2.0      tidyverse_1.2.1    pacman_0.5.1      

loaded via a namespace (and not attached):
 [1] nlme_3.1-137        bitops_1.0-6        matrixStats_0.54.0  lubridate_1.7.4     httr_1.4.0          tools_3.5.2         backports_1.1.3    
 [8] tidystats_0.3       R6_2.4.0            nortest_1.0-4       lazyeval_0.2.1      colorspace_1.3-2    withr_2.1.2         tidyselect_0.2.5   
[15] gridExtra_2.3       mnormt_1.5-5        pixiedust_0.8.6     curl_4.0            compiler_3.5.2      tadaatoolbox_0.16.1 cli_1.0.1          
[22] rvest_0.3.2         expm_0.999-3        xml2_1.2.0          labeling_0.3        scales_1.0.0        checkmate_1.8.5     mvtnorm_1.0-11     
[29] digest_0.6.18       foreign_0.8-71      rmarkdown_1.14      rio_0.5.16          base64enc_0.1-3     pkgconfig_2.0.2     htmltools_0.3.6    
[36] manipulate_1.0.1    highr_0.7           pwr_1.2-2           htmlwidgets_1.3     rlang_0.4.0         readxl_1.1.0        rstudioapi_0.8     
[43] pryr_0.1.4          shiny_1.2.0         bindr_0.1.1         generics_0.0.2      jsonlite_1.6        car_3.0-2           zip_1.0.0          
[50] RCurl_1.95-4.11     rapportools_1.0     Matrix_1.2-15       Rcpp_1.0.2          DescTools_0.99.28   munsell_0.5.0       abind_1.4-5        
[57] viridis_0.5.1       stringi_1.2.4       yaml_2.2.0          carData_3.0-2       MASS_7.3-51.1       grid_3.5.2          parallel_3.5.2     
[64] promises_1.0.1      crayon_1.3.4        lattice_0.20-38     haven_2.1.1         pander_0.6.3        hms_0.4.2           magick_2.0         
[71] knitr_1.24          pillar_1.3.1        tcltk_3.5.2         boot_1.3-20         ggsignif_0.4.0      codetools_0.2-15    glue_1.3.1         
[78] evaluate_0.14       data.table_1.12.2   modelr_0.1.2        httpuv_1.4.5        cellranger_1.1.0    gtable_0.2.0        assertthat_0.2.1   
[85] xfun_0.8            openxlsx_4.1.0      mime_0.6            xtable_1.8-3        later_0.7.5         viridisLite_0.3.0  
 

A work by Claudiu Papasteri

claudiu.papasteri@gmail.com

 

LS0tDQp0aXRsZTogIjxicj4gTy40IC0gMTUgc3ViamVjdHMgUmVwZXRhdGUiIA0Kc3VidGl0bGU6ICJQcmVsaW1pbmFyeSBSZXBvcnQiDQphdXRob3I6ICI8YnI+IENsYXVkaXUgUGFwYXN0ZXJpIg0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJW0gJVknKWAiDQpvdXRwdXQ6IA0KICAgIGh0bWxfbm90ZWJvb2s6DQogICAgICAgICAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICAgICAgICAgIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgdG9jX2RlcHRoOiAyDQogICAgICAgICAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICAgICAgICAgIHRoZW1lOiBzcGFjZWxhYg0KICAgICAgICAgICAgaGlnaGxpZ2h0OiB0YW5nbw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsDQogICAgICAgICAgICBmaWdfd2lkdGg6IDEwDQogICAgICAgICAgICBmaWdfaGVpZ2h0OiA5DQogICAgcGRmX2RvY3VtZW50OiANCiAgICAgICAgICAgIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgdG9jX2RlcHRoOiAyDQogICAgICAgICAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICAgICAgICAgICMgZm9udHNpemU6IDExcHQNCiAgICAgICAgICAgICMgZ2VvbWV0cnk6IG1hcmdpbj0xaW4NCiAgICAgICAgICAgICMgZmlnX3dpZHRoOiA3DQogICAgICAgICAgICAjIGZpZ19oZWlnaHQ6IDYNCiAgICAgICAgICAgICMgZmlnX2NhcHRpb246IHRydWUNCiAgICAjIGdpdGh1Yl9kb2N1bWVudDogDQogICAgICAgICAgICAjIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgIyB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgICMgaHRtbF9wcmV2aWV3OiBmYWxzZQ0KICAgICAgICAgICAgIyBmaWdfd2lkdGg6IDUNCiAgICAgICAgICAgICMgZmlnX2hlaWdodDogNQ0KICAgICAgICAgICAgIyBkZXY6IGpwZWcNCi0tLQ0KDQoNCjwhLS0gU2V0dXAgLS0+DQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQojIGtpbnRyIG9wdGlvbnMNCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgY29tbWVudCA9ICIjIiwNCiAgY29sbGFwc2UgPSBUUlVFLA0KICBlY2hvID0gVFJVRSwgd2FybmluZyA9IFRSVUUsIG1lc3NhZ2UgPSBUUlVFLCBjYWNoZSA9IFRSVUUgICAgICAgIyBlY2hvID0gRmFsc2UgZm9yIGdpdGh1Yl9kb2N1bWVudCwgYnV0IHdpbGwgYmUgZm9sZGVkIGluIGh0bWxfbm90ZWJvb2sNCikNCg0KIyBHZW5lcmFsIFIgb3B0aW9ucyBhbmQgaW5mbw0Kc2V0LnNlZWQoMTExKSAgICAgICAgICAgICAgICMgaW4gY2FzZSB3ZSB1c2UgcmFuZG9taXplZCBwcm9jZWR1cmVzICAgICAgIA0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpICAgICAgICMgcG9zaXRpdmUgdmFsdWVzIGJpYXMgdG93YXJkcyBmaXhlZCBhbmQgbmVnYXRpdmUgdG93YXJkcyBzY2llbnRpZmljIG5vdGF0aW9uDQoNCiMgTG9hZCBwYWNrYWdlcw0KaWYgKCFyZXF1aXJlKCJwYWNtYW4iKSkgaW5zdGFsbC5wYWNrYWdlcygicGFjbWFuIikNCnBhY2thZ2VzIDwtIGMoDQogICJ0aWR5dmVyc2UiLCAgICAgICMgYmVzdCB0aGluZyB0aGF0IGhhcHBlbmQgdG8gbWUNCiAgInBzeWNoIiwgICAgICAgICAgIyBnZW5lcmFsIHB1cnBvc2UgdG9vbGJveCBmb3IgcGVyc29uYWxpdHksIHBzeWNob21ldHJpYyB0aGVvcnkgYW5kIGV4cGVyaW1lbnRhbCBwc3ljaG9sb2d5DQogICJwYXBhamEiLCAgICAgICAgICMgZm9yIEFQQSBzdHlsZQ0KICAiYnJvb20iLCAgICAgICAgICAjIGZvciB0aWR5IG1vZGVsbGluZw0KICAiZ2dwbG90MiIsICAgICAgICAjIGJlc3QgcGxvdHMNCiAgImdncHViciIsICAgICAgICAgIyBnZ3Bsb3QyIHRvIHB1YmxpY2F0aW9uIHF1YWxpdHkNCiAgIkRUIiwgICAgICAgICAgICAgIyBuaWNlIHNlYXJjaGFibGUgYW5kIGRvd25sb2FkYWJsZSB0YWJsZXMNCiAgInN1bW1hcnl0b29scyIsDQogICJwbHlyIiwgDQogICJzdHJpbmdyIg0KICAjICwgLi4uDQopDQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQ0KcGFjbWFuOjpwX2xvYWQoY2hhciA9IHBhY2thZ2VzKQ0KDQojIFRoZW1lcyBmb3IgZ2dwbG90MiBwbG90aW5nIChoZXJlIHVzZWQgQVBBIHN0eWxlKQ0KdGhlbWVfc2V0KHRoZW1lX2FwYSgpKQ0KYGBgDQoNCmBgYHtyIHdvcmtpbmdfZGlyZWN0b3J5LCBpbmNsdWRlID0gRkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIyMgTy40IFIgY29kZSAtIFVuaWNlIGFuZCBSZXRhdGF0ZQ0KIyMjIFIgY29kZSBmb3Igc29ydGluZywgaW50ZWdyYXRpbmcgYW5kIGFuYWx5c2VzIA0KIyBUYXNrIG91dHB1dCBmaWxlczogDQojIElELCBleHBlcmltZW50YWwgY29uZGl0aW9uICgib2dsaW5kYSIgLyAiZWNyYW4iKSwgY29uZGl0aW9uICgiaW5zdHJ1Y3RvciIsICJzb2xvIiksIHR5cGUgb2YgdGFzayAoInVuaWMiLCAicmVwZXRhdCIpDQp3ZCA8LSAiRTovQ0lORVRJQyBkaXZlcnNlL08uNGMgKEVFRykvMDIuMDkuMjAxOSAxNXN1YiBFRUcgUmVwZXRhdGUvRGF0ZSBkZSBwcm9jZXNhdCINCnNldHdkKHdkKQ0KDQojIGtuaXRyOjpvcHRzX2tuaXQkc2V0KHJvb3QuZGlyID0gd2QpICAgIyBuZXcgd2F5IG9mIHNldHdkIGZvciBtYXJkb3duDQpgYGANCg0KDQo8IS0tIFJlcG9ydCAtLT4NCg0KDQojIEFycmFuZ2UgZm9sZGVycywgc29ydCBmaWxlcywgcmVhZCBhbmQgbWVyZ2UNCg0KIyMgQ3JlYXRlIGZvbGRlcnMgYnkgY29uZGl0aW9ucywgY29weSBmaWxlcyB0byB0aGVtDQoNCmBgYHtyIG1ha2VkaXJfc29ydGZpbGVzLCBldmFsPUZBTFNFfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJlYWQgZmlsZSBuYW1lcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpmaWxlX25hbWVzIDwtIGRpcihwYXR0ZXJuID0gIlxcLnhscyQiKQ0KIyMgaWYgYWJvdmUgaXNuJ3QgZ29vZCBlbm91Z2ggdHJ5IHRoZSBmb2xsb3dpbmc6DQojIGZpbGVfbmFtZXMgPC0gbGlzdC5maWxlcyh3ZCkNCiMgZmlsZV9uYW1lcyA8LSBzb3BfZmlsZXNbIWZpbGUuaW5mbyhzb3BfZmlsZXMpJGlzZGlyXSAgICMgZXhjbHVkZSBkaXJlY3Rvcmllcw0KIyBmaWxlX25hbWVzIDwtIHNvcF9maWxlc1tncmVwKCIueGxzIiwgc29wX2ZpbGVzLCBmaXhlZCA9IFRSVUUpXQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDcmVhdGUgZm9sZGVycyB3aXRoIENvbmRpdGlvbiBuYW1lcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgdGhpcyBwYXJ0IG9mIHNjcmlwdCBtYXkgYmUgcmUtcnVuIGlmIGZpbGVzIGZyb20gd2QgYXJlIHVwZGF0ZWQNCmRpcl9uYW1lcyA8LSBjKCJSZXBldGF0X0NUUkxfSW5zdHIiLCAiUmVwZXRhdF9DVFJMX1NvbG8iLCAiUmVwZXRhdF9PR0xfSW5zdHIiLCAiUmVwZXRhdF9PR0xfU29sbyIpDQogICAgICAgICAgICAgDQpmb3IoZGlyIGluIGRpcl9uYW1lcyl7DQogIGlmKCFkaXIuZXhpc3RzKGZpbGUucGF0aCh3ZCwgZGlyKSkpDQogIGRpci5jcmVhdGUoZmlsZS5wYXRoKHdkLCBkaXIpLCBzaG93V2FybmluZ3MgPSBGQUxTRSkNCn0NCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMgVXNlIGZpbGUgbmFtZXMgdG8gc29ydCB0aGVtIHRvIGZvbGRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpzb3J0X2ZpbGVzX3RvX2RpcnMgPC0gZnVuY3Rpb24od2QsIHBhdHRlcm4sIGRpcikgew0KICBjaGVja19wYXR0ZXJuIDwtIG91dGVyKGZpbGVfbmFtZXMsIHBhdHRlcm4sIHN0cmluZ3I6OnN0cl9kZXRlY3QpICAgICAgICAgICAgICAgIyBpZiBhbGwgVFJVRSBieWUgcm93IHRoZW4gaXQgaGFzIGZ1bGwgcGF0dGVybg0KICBpbmRleCA8LSB3aGljaChhcHBseShjaGVja19wYXR0ZXJuLCAxLCBmdW5jdGlvbih4KSBhbGwoeD09VFJVRSkpKSAgICAgICAgICAgICAgIyBnZXQgaW5kZXggb2YgZmlsZV9uYW1lcyB3aGVyZSBhbGwgYXJlIFRSVUUNCiAgc29ydGVkX2ZpbGVzIDwtIGZpbGVfbmFtZXNbaW5kZXhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IG5hbWVzIG9mIGZpbGVzIGZyb20gaW5kZXhlcw0KICANCiAgZm9yKGZpbGVzIGluIHNvcnRlZF9maWxlcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29weSB0aGUgZmlsZXMgdG8gY29ycmVzcG9uZGluZyBmb2xkZXINCiAgICBmaWxlLmNvcHkoZnJvbSA9IGZpbGUucGF0aCh3ZCwgZmlsZXMpLCB0byA9IGZpbGUucGF0aCh3ZCwgZGlyKSkNCiAgfSAgDQp9DQoNCg0Kc29ydF9maWxlc190b19kaXJzKHdkID0gd2QsIHBhdHRlcm4gPSBjKCJyZXBldGF0IiwgImVjcmFuIiwgImluc3RydWN0b3IiKSwgZGlyID0gIlJlcGV0YXRfQ1RSTF9JbnN0ciIpDQpzb3J0X2ZpbGVzX3RvX2RpcnMod2QgPSB3ZCwgcGF0dGVybiA9IGMoInJlcGV0YXQiLCAiZWNyYW4iLCAic29sbyIpLCBkaXIgPSAiUmVwZXRhdF9DVFJMX1NvbG8iKQ0Kc29ydF9maWxlc190b19kaXJzKHdkID0gd2QsIHBhdHRlcm4gPSBjKCJyZXBldGF0IiwgIm9nbGluZGEiLCAiaW5zdHJ1Y3RvciIpLCBkaXIgPSAiUmVwZXRhdF9PR0xfSW5zdHIiKQ0Kc29ydF9maWxlc190b19kaXJzKHdkID0gd2QsIHBhdHRlcm4gPSBjKCJyZXBldGF0IiwgIm9nbGluZGEiLCAic29sbyIpLCBkaXIgPSAiUmVwZXRhdF9PR0xfU29sbyIpDQpgYGANCg0KDQojIyBSZWFkaW5nIHRoZSBkYXRhDQoNCmBgYHtyIHJhd19yZWFkLCBoaWRlPVRSVUUsIHdhcm5pbmc9RkFMU0V9DQojIyMjIyMjIyMjIyMgUmVhZCBpbiBhbGwgdGhlIC54bHMgZnJvbSBmb2xkZXJzIGFuZCBtZXJnZSB0aGVtIGluIGRhdGFzZXRzIG5hbWVkIGFmdGVyIGNvcnJlc3BvbmRpbmcgZm9sZGVyICMjIyMjIyMjIyMjIyMjDQojIHRoaXMgcGFydCBvZiBzY3JpcHQgbWF5IGJlIHJlLXJ1biBpZiBmaWxlcyBmcm9tIHdkIGFyZSB1cGRhdGVkDQojIFJFLVJVTiBGUk9NIEhFUkUgSUYgRk9MREVSUyBBTkQgU09SVElORyBXQVMgQUxSRUFEWSBET05FDQp3ZCA8LSAiRTovQ0lORVRJQyBkaXZlcnNlL08uNGMgKEVFRykvMDIuMDkuMjAxOSAxNXN1YiBFRUcgUmVwZXRhdGUvRGF0ZSBkZSBwcm9jZXNhdCINCnNldHdkKHdkKQ0KZm9sZGVycyA8LSBsaXN0LmZpbGVzKHdkKQ0KZm9sZGVycyA8LSBmb2xkZXJzW2ZpbGUuaW5mbyhmb2xkZXJzKSRpc2Rpcl0gICAjIGx1YW0gZG9hciBmb2xkZXJlbGUNCmRhdGFzZXRuYW1lcyA8LSBOVUxMDQoNCmZvciAoaSBpbiAxOmxlbmd0aChmb2xkZXJzKSkgew0KICBkYXRhc2V0bmFtZSA8LSBmb2xkZXJzW2ldDQogIGRhdGFzZXRuYW1lcyA8LSBjKGRhdGFzZXRuYW1lcywgZGF0YXNldG5hbWUpDQogIGN1cnJlbnRfZGlyIDwtIHNldHdkKGZpbGUucGF0aCh3ZCwgZm9sZGVyc1tpXSkpDQogIHByaW50KHBhc3RlMCgiY3VycmVudF9kaXI6ICIsIGN1cnJlbnRfZGlyKSkNCiAgDQogIHBhdGhzIDwtIGRpcihwYXR0ZXJuID0gIlxcLnhscyQiKQ0KICBuYW1lcyhwYXRocykgPC0gYmFzZW5hbWUocGF0aHMpDQoNCiAgYXNzaWduKCBwYXN0ZShkYXRhc2V0bmFtZSksIHBseXI6OmxkcGx5KHBhdGhzLCByaW86OmltcG9ydCkgKQ0KfQ0KDQpzZXR3ZCh3ZCkNCiMgZGV0YWNoKCJwYWNrYWdlOnBseXIiLCB1bmxvYWQ9VFJVRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRldGFjaCBwbHlyIGJlY2F1c2Ugb2YgY29uZmxpY3RzIHdpdGggZHBseXINCmBgYA0KDQoNCiMjIENsZWFuaW5nIHRoZSBkYXRhDQoNCmBgYHtyIGNsZWFuX2RhdGEsIGhpZGU9VFJVRX0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEYXRhIENsZWFuaW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBDaGVjayBpZiBpZHMgaGF2ZSA+IDEgcm93IG9mIGRhdGEgKGVtcHR5IC54bHMgaGF2ZSBvbmx5IDEgcm93KQ0KIyBDYXJlZnVsISBUaGlzIGZ1bmN0aW9uIG1vZGZpZXMgdGhlIGRhdGFzZXRzIGluIHRoZSBnbG9iYWwgZW52aW5yb25tZW50DQpkZWxldGVfZW1wdHlfaWQgPC0gZnVuY3Rpb24oZGYpew0KICBsaXN0X2VtcHR5X2lkIDwtIA0KICAgIGRmICU+JQ0KICAgIGRwbHlyOjpncm91cF9ieSguaWQpICU+JQ0KICAgIGRwbHlyOjpzdW1tYXJpc2Uocm93X2NvdW50ID0gbigpKSAlPiUNCiAgICBkcGx5cjo6cmVuYW1lKCJlbXB0eV9pZCIgPSAuaWQpICU+JQ0KICAgIG11dGF0ZShkZWxldGVfaWQgPSBpZl9lbHNlKHJvd19jb3VudCA8IDMsIFRSVUUsIEZBTFNFKSkgJT4lDQogICAgZmlsdGVyKGRlbGV0ZV9pZCA9PSBUUlVFKQ0KICANCiAgZGZfbW9kaWYgPC0gDQogICAgZGYgJT4lDQogICAgZmlsdGVyKCEuaWQgJWluJSBsaXN0X2VtcHR5X2lkJGVtcHR5X2lkKQ0KICANCiAgaWYoIWlkZW50aWNhbChkZiwgZGZfbW9kaWYpKXsNCiAgICBkZiA8LSBkZXBhcnNlKHN1YnN0aXR1dGUoZGYpKQ0KICAgIGNhdCgiRGVsZXRpbmcgZnJvbSAiLCBwcmludChhcy5uYW1lKGRmKSkpOyBwcmludChsaXN0X2VtcHR5X2lkKSAgICAgICAgICAgICAgICAgICAgIyBwcmludCBvdXQgd2hpY2ggaWRzIGFyZSBkZWxldGVkIGZyb20gd2hpY2ggZGF0YXNldA0KICAgIGFzc2lnbihkZiwgZGZfbW9kaWYsIGVudmlyID0gZ2xvYmFsZW52KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhc3NpZ24gbW9kaWZpZWQgZGYgdG8gb3JpZ2luYWwgZGF0YXNldCBmcm9tIEdsb2JhbA0KICB9ZWxzZSBjYXQoIk5vIGVtcHR5IGRhdGFzZXRzLiBOb3RoaW5nIHRvIGRlbGV0ZSIpDQp9DQoNCg0KZGVsZXRlX2VtcHR5X2lkKFJlcGV0YXRfQ1RSTF9JbnN0cikNCmRlbGV0ZV9lbXB0eV9pZChSZXBldGF0X0NUUkxfU29sbykNCmRlbGV0ZV9lbXB0eV9pZChSZXBldGF0X09HTF9JbnN0cikNCmRlbGV0ZV9lbXB0eV9pZChSZXBldGF0X09HTF9Tb2xvKQ0KYGBgDQoNCg0KIyMgRXhjbHVkZSBTQU1fcmVzcCBiYXNlZCBvbiBSVCBvdXRsaWVycyAtIG5vdCB1c2VkIGhlcmUNCg0KYGBge3Igbm9vdXRsaWVyX2RhdGEsIGV2YWw9RkFMU0V9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEV4Y2x1ZGUgT3V0bGllcnMgYmFzZWQgb24gUlQgKGJ5IHN1YmplY3QgYW5kIHN0aW11bHVzIHR5cGUpICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMgRE9OVCBSVU4gKHVubGVzcyBpdCBpcyBuZWVkZWQpIC0tLS0+IGV2YWw9RkFMU0UNCiMgRXhjbHVkZSBSVCBvdXRsaWVycyAoPS0gMlNEKSAtIGluc3RlYWQgb2Ygc2ltcGxlIGZpbHRlciwgbWFrZWluZyB0aGVtIE5BICBpcyBiZXR0ZXIgZm9yIHBhaXJlZCBjb21wYXJpc29uDQpyZW1vdmVfb3V0bGllcnMgPC0gZnVuY3Rpb24oZGYpIHsNCiAgZGZfbW9kaWYgPC0NCiAgICBkZiAlPiUNCiAgICBkcGx5cjo6Z3JvdXBfYnkoLmlkLCBgU3RpbXVsdXMgdHlwZWApICU+JSAgICAgICAgICAgICAgICAgICMgd2UgY291bGQgaGF2ZSBkb25lIGJlZm9yZTogIGRwbHlyOjpyZW5hbWUoIlN0aW1fdHlwZSIgPSBgU3RpbXVsdXMgdHlwZWApIA0KICAgIG11dGF0ZShTQU1fUmVzcCA9IGlmX2Vsc2UoYWJzKFNBTV9SVCAtIG1lYW4oU0FNX1JULCBuYS5ybT1UUlVFKSkgPiAyKnNkKFNBTV9SVCwgbmEucm09VFJVRSksIGFzLm51bWVyaWMoTkEpLCBTQU1fUmVzcCkpDQogIA0KICBpZighaWRlbnRpY2FsKGRmLCBkZl9tb2RpZikpew0KICAgIGRmIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShkZikpDQogICAgY2F0KCJEZWxldGluZyBvdXRsaWVycyBmcm9tICIsIHByaW50KGFzLm5hbWUoZGYpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQgb3V0IGRhdGFzZXRzIHdoaWNoIGhhdmUgYmVlbiBtb2RpZmllZA0KICAgIGFzc2lnbihkZiwgZGZfbW9kaWYsIGVudmlyID0gZ2xvYmFsZW52KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhc3NpZ24gbW9kaWZpZWQgZGYgdG8gb3JpZ2luYWwgZGF0YXNldCBmcm9tIEdsb2JhbA0KICB9ZWxzZSBjYXQoIk5vIG91dGxpZXIiKQ0KfQ0KDQoNCnJlbW92ZV9vdXRsaWVycyhSZXBldGF0X0NUUkxfSW5zdHIpDQpyZW1vdmVfb3V0bGllcnMoUmVwZXRhdF9DVFJMX1NvbG8pDQpyZW1vdmVfb3V0bGllcnMoUmVwZXRhdF9PR0xfSW5zdHIpDQpyZW1vdmVfb3V0bGllcnMoUmVwZXRhdF9PR0xfU29sbykNCmBgYA0KDQoNCiMjIFRlc3QgaWYgZGF0YXNldHMgaGF2ZSBzYW1lIGNvbHVtbnMNCg0KYGBge3IgdGVzdF9jb2xzfQ0KcmVwZXRhdF9kZl9vYmogPC0gbWdldChjKCJSZXBldGF0X0NUUkxfSW5zdHIiLCAiUmVwZXRhdF9DVFJMX1NvbG8iLCAiUmVwZXRhdF9PR0xfSW5zdHIiLCAiUmVwZXRhdF9PR0xfU29sbyIpKQ0KcmVwZXRhdF9kZl9vYmogPC1sYXBwbHkocmVwZXRhdF9kZl9vYmosIGNvbG5hbWVzKQ0Kb3V0ZXIocmVwZXRhdF9kZl9vYmosIHJlcGV0YXRfZGZfb2JqLCBWZWN0b3JpemUoaWRlbnRpY2FsKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGFsbCBhcmUgVFJVRSwgYWxsIGRmIGhhdmUgc2FtZSBjb2x1bW5zDQpgYGANCg0KPGJyPg0KPGJyPg0KDQoNCiMgQW5hbHlzaXMgLSBSRVBFVEFURQ0KDQojIyBEZXNjcmlwdGl2ZXMNCg0KYGBge3IgZGVzY19yZXBldGF0LCByZXN1bHRzPSJhc2lzIn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQW5hbHlzZXMgLSBSRVBFVEFURSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMgRGVzY3JpcHRpdmVzIGJ5IGNvbmRpdGlvbiBkYXRhc2V0DQpkZXNjcmlwdGl2ZV9mdW5jIDwtIGZ1bmN0aW9uKGRmLCBTdGltX3R5cGUsIEJ5X0lEID0gRkFMU0Upew0KICBkZl9uYW1lIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShkZikpDQogIHN1cHByZXNzV2FybmluZ3MoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGFsbCBOQXMgaW4gU0FNX1Jlc3AsIE5hTnMgYW5kIEluZnMgd2lsbCBiZSBwcm9kdWNlZA0KICAgIGRmX21vZGlmIDwtIA0KICAgICAgZGYgJT4lDQogICAgICBkcGx5cjo6cmVuYW1lKCJJRCIgPSAuaWQpICU+JQ0KICAgICAgc2VsZWN0X2FsbCh+Z3N1YigiXFxzK3xcXC4iLCAiXyIsIC4pKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlcyBibGFuY2tzIHdpdGggIl8iIGluIGNvbG5hbWVzIA0KICAgICAgZmlsdGVyKFN0aW11bHVzX3R5cGUgPT0gU3RpbV90eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWx0ZXIgYnkgc3RpbXVsdXMgdHlwZQ0KICAgIA0KICAgIGlmKGlzVFJVRShCeV9JRCkpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiB0cnVlIGdyb3VwIGJ5IGlkLCBpZiBub3QgcmV0dXJuIGRlc2NyaXB0aXZlcyBmb3IgYWxsIGlkcw0KICAgICAgZGZfbW9kaWYgJT4lDQogICAgICAgIGRwbHlyOjpncm91cF9ieShJRCkgJT4lDQogICAgICAgIHRpZHlzdGF0czo6ZGVzY3JpYmVfZGF0YShTQU1fUmVzcCwgU0FNX1JULCBuYS5ybSA9IFRSVUUpICU+JQ0KICAgICAgICBrbml0cjo6a2FibGUoY2FwdGlvbiA9IGFzLm5hbWUoZGZfbmFtZSksIGZvcm1hdCA9ICJwYW5kb2MiLCBkaWdpdHMgPSAyKQ0KICAgIH1lbHNleyANCiAgICAgIGRmX21vZGlmICU+JQ0KICAgICAgICB0aWR5c3RhdHM6OmRlc2NyaWJlX2RhdGEoU0FNX1Jlc3AsIFNBTV9SVCwgbmEucm0gPSBUUlVFKSAlPiUNCiAgICAgICAga25pdHI6OmthYmxlKGNhcHRpb24gPSBhcy5uYW1lKGRmX25hbWUpLCBmb3JtYXQgPSAicGFuZG9jIiwgZGlnaXRzID0gMikNCiAgICB9DQogIH0pDQp9ICANCg0KDQpkZXNjcmlwdGl2ZV9mdW5jKGRmID0gUmVwZXRhdF9DVFJMX0luc3RyLCBTdGltX3R5cGUgPSAibmVnYXRpdiIsIEJ5X0lEID0gRkFMU0UpICAgICAgICAgICAjIE5lZ2F0aXZlIC0gR2VuZXJhbA0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfQ1RSTF9Tb2xvLCBTdGltX3R5cGUgPSAibmVnYXRpdiIsIEJ5X0lEID0gRkFMU0UpDQpkZXNjcmlwdGl2ZV9mdW5jKGRmID0gUmVwZXRhdF9PR0xfSW5zdHIsIFN0aW1fdHlwZSA9ICJuZWdhdGl2IiwgQnlfSUQgPSBGQUxTRSkNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X09HTF9Tb2xvLCBTdGltX3R5cGUgPSAibmVnYXRpdiIsIEJ5X0lEID0gRkFMU0UpDQoNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X0NUUkxfSW5zdHIsIFN0aW1fdHlwZSA9ICJuZWdhdGl2IiwgQnlfSUQgPSBUUlVFKSAgICAgICAgICAgICMgTmVnYXRpdmUgLSBieSBpZA0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfQ1RSTF9Tb2xvLCBTdGltX3R5cGUgPSAibmVnYXRpdiIsIEJ5X0lEID0gVFJVRSkNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X09HTF9JbnN0ciwgU3RpbV90eXBlID0gIm5lZ2F0aXYiLCBCeV9JRCA9IFRSVUUpDQpkZXNjcmlwdGl2ZV9mdW5jKGRmID0gUmVwZXRhdF9PR0xfU29sbywgU3RpbV90eXBlID0gIm5lZ2F0aXYiLCBCeV9JRCA9IFRSVUUpDQoNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X0NUUkxfSW5zdHIsIFN0aW1fdHlwZSA9ICJwb3ppdGl2IiwgQnlfSUQgPSBGQUxTRSkgICAgICAgICAgICMgUG9zaXRpdmUgLSBHZW5lcmFsDQpkZXNjcmlwdGl2ZV9mdW5jKGRmID0gUmVwZXRhdF9DVFJMX1NvbG8sIFN0aW1fdHlwZSA9ICJwb3ppdGl2IiwgQnlfSUQgPSBGQUxTRSkNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X09HTF9JbnN0ciwgU3RpbV90eXBlID0gInBveml0aXYiLCBCeV9JRCA9IEZBTFNFKQ0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfT0dMX1NvbG8sIFN0aW1fdHlwZSA9ICJwb3ppdGl2IiwgQnlfSUQgPSBGQUxTRSkNCg0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfQ1RSTF9JbnN0ciwgU3RpbV90eXBlID0gInBveml0aXYiLCBCeV9JRCA9IFRSVUUpICAgICAgICAgICAgIyBQb3NpdGl2ZSAtIGJ5IGlkDQpkZXNjcmlwdGl2ZV9mdW5jKGRmID0gUmVwZXRhdF9DVFJMX1NvbG8sIFN0aW1fdHlwZSA9ICJwb3ppdGl2IiwgQnlfSUQgPSBUUlVFKQ0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfT0dMX0luc3RyLCBTdGltX3R5cGUgPSAicG96aXRpdiIsIEJ5X0lEID0gVFJVRSkNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X09HTF9Tb2xvLCBTdGltX3R5cGUgPSAicG96aXRpdiIsIEJ5X0lEID0gVFJVRSkNCg0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfQ1RSTF9JbnN0ciwgU3RpbV90eXBlID0gIm5ldXRydSIsIEJ5X0lEID0gRkFMU0UpICAgICAgICAgICAjIE5ldXRyYWwgLSBHZW5lcmFsDQpkZXNjcmlwdGl2ZV9mdW5jKGRmID0gUmVwZXRhdF9DVFJMX1NvbG8sIFN0aW1fdHlwZSA9ICJuZXV0cnUiLCBCeV9JRCA9IEZBTFNFKQ0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfT0dMX0luc3RyLCBTdGltX3R5cGUgPSAibmV1dHJ1IiwgQnlfSUQgPSBGQUxTRSkNCmRlc2NyaXB0aXZlX2Z1bmMoZGYgPSBSZXBldGF0X09HTF9Tb2xvLCBTdGltX3R5cGUgPSAibmV1dHJ1IiwgQnlfSUQgPSBGQUxTRSkNCg0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfQ1RSTF9JbnN0ciwgU3RpbV90eXBlID0gIm5ldXRydSIsIEJ5X0lEID0gVFJVRSkgICAgICAgICAgICAjIE5ldXRyYWwgLSBieSBpZA0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfQ1RSTF9Tb2xvLCBTdGltX3R5cGUgPSAibmV1dHJ1IiwgQnlfSUQgPSBUUlVFKQ0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfT0dMX0luc3RyLCBTdGltX3R5cGUgPSAibmV1dHJ1IiwgQnlfSUQgPSBUUlVFKQ0KZGVzY3JpcHRpdmVfZnVuYyhkZiA9IFJlcGV0YXRfT0dMX1NvbG8sIFN0aW1fdHlwZSA9ICJuZXV0cnUiLCBCeV9JRCA9IFRSVUUpDQpgYGANCg0KDQojIyBNZXJnZQ0KDQpgYGB7ciBtZXJnZWRfcmVwZXRhdF9kYXRhfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1lcmdlIGNvbmRpdGlvbiBkYXRhc2V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBNdXN0IGZpcnN0IHJlbmFtZSAuaWQgdG8gSUQgaW4gb2RlciB0byBoYXZlIC5pZCBmb3IgZGYgbmFtZXMNCklEX3JlbmFtZSA8LSBmdW5jdGlvbihkZil7DQogIGlmKCIuaWQiICVpbiUgY29sbmFtZXMoZGYpKSB7DQogICAgZGZfbW9kaWYgPC0gDQogICAgICBkZiAlPiUNCiAgICAgIGRwbHlyOjpyZW5hbWUoIklEIiA9IC5pZCkNCiAgICBkZiA8LSBkZXBhcnNlKHN1YnN0aXR1dGUoZGYpKQ0KICAgIGNhdCgiQ2hhbmdlZCAuaWQgdG8gSUQgZm9yOiAiLCBhcy5uYW1lKGRmKSkNCiAgICBhc3NpZ24oZGYsIGRmX21vZGlmLCBlbnZpciA9IGdsb2JhbGVudigpKQ0KICB9ICANCn0NCg0KSURfcmVuYW1lKFJlcGV0YXRfQ1RSTF9JbnN0cikNCklEX3JlbmFtZShSZXBldGF0X0NUUkxfU29sbykNCklEX3JlbmFtZShSZXBldGF0X09HTF9JbnN0cikNCklEX3JlbmFtZShSZXBldGF0X09HTF9Tb2xvKQ0KDQojIE1lcmdlIGludG8gb25lIGRmDQpsaXN0X2RmX21lcmdlIDwtIGxpc3QoUmVwZXRhdF9DVFJMX0luc3RyLCBSZXBldGF0X0NUUkxfU29sbywgUmVwZXRhdF9PR0xfSW5zdHIsIFJlcGV0YXRfT0dMX1NvbG8pDQpuYW1lcyhsaXN0X2RmX21lcmdlKSA8LSBjKCJSZXBldGF0X0NUUkxfSW5zdHIiLCAiUmVwZXRhdF9DVFJMX1NvbG8iLCAiUmVwZXRhdF9PR0xfSW5zdHIiLCAiUmVwZXRhdF9PR0xfU29sbyIpDQpSZXBldGF0X21lcmdlZCA8LSBwbHlyOjpsZHBseShsaXN0X2RmX21lcmdlLCBkYXRhLmZyYW1lKSAgICAgICAgICAgICAgICAjIGFsc28gd29ya3MgZm9yIHRoaXMgam9iIGJpbmRfcm93cyhsaXN0X2RmX21lcmdlLCAuaWQgPSAiY29sdW1uX2xhYmVsIikNCmBgYA0KDQoNCiMjIEFuYWx5c2VzIG9uIG1lcmdlZCAoQW5vdmEgJiBwb3N0LWhvYykNCg0KYGBge3IgYW5vdmFfcmVwZXRhdCwgaGlkZT1UUlVFLCBldmFsPUZBTFNFfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFuYWx5c2VzIG9uIE1lcmdlZCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyBKdXN0IGEgVGVzdCANCiMgUmVwZXRhdF9tZXJnZWRfc3ByZWFkX05lZyA8LSANCiMgICBSZXBldGF0X21lcmdlZCAlPiUNCiMgICBmaWx0ZXIoIWlzLm5hKFNBTV9SZXNwKSkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc29tZSBmaWxlcyBoYWQgb25seSBOQSBvbiBTQU1fUmVzcCBhbmQgU0FNX1JUDQojICAgc2VsZWN0KC5pZCwgSUQsIFN1YmpfaWQsIA0KIyAgICAgICAgICBTdGltdWxpLm9yZGVyLCBNYXJrZXJTdGltdWxpLCBTdGltdWx1cy50eXBlLCANCiMgICAgICAgICAgU0FNX1Jlc3AsIFNBTV9SVCkgJT4lDQojICAgZmlsdGVyKFN0aW11bHVzLnR5cGUgPT0gIm5lZ2F0aXYiKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbnQgZm9yZ2V0IHRvIHBpY2sgc3R5bXVsdXMgdHlwZQ0KIyAgIHNwcmVhZCguaWQsIFNBTV9SZXNwKQ0KIyANCiMgdC50ZXN0KFJlcGV0YXRfbWVyZ2VkX3NwcmVhZF9OZWckUmVwZXRhdF9DVFJMX0luc3RyLCBSZXBldGF0X21lcmdlZF9zcHJlYWRfTmVnJFJlcGV0YXRfQ1RSTF9Tb2xvLCBuYS5ybSA9IFRSVUUpDQojIHQudGVzdChSZXBldGF0X21lcmdlZF9zcHJlYWRfTmVnJFJlcGV0YXRfT0dMX0luc3RyLCBSZXBldGF0X21lcmdlZF9zcHJlYWRfTmVnJFJlcGV0YXRfT0dMX1NvbG8sIG5hLnJtID0gVFJVRSkNCiMgdC50ZXN0KFJlcGV0YXRfbWVyZ2VkX3NwcmVhZF9OZWckUmVwZXRhdF9PR0xfSW5zdHIsIFJlcGV0YXRfbWVyZ2VkX3NwcmVhZF9OZWckUmVwZXRhdF9DVFJMX0luc3RyLCBuYS5ybSA9IFRSVUUpDQojIHQudGVzdChSZXBldGF0X21lcmdlZF9zcHJlYWRfTmVnJFJlcGV0YXRfT0dMX1NvbG8sIFJlcGV0YXRfbWVyZ2VkX3NwcmVhZF9OZWckUmVwZXRhdF9DVFJMX1NvbG8sIG5hLnJtID0gVFJVRSkNCg0KIyMgRnVuY3Rpb24gcHJlcGFpciBkYXRhIGZvciBhbmFseXNlcw0KcHJlcGFpcmVfbWVyZ2VkX2Z1bmMgPC0gZnVuY3Rpb24oU3RpbV90eXBlKXsNCiAgUmVwZXRhdF9tZXJnZWQgJT4lDQogICAgZmlsdGVyKCFpcy5uYShTQU1fUmVzcCkpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNvbWUgZmlsZXMgaGFkIG9ubHkgTkEgb24gU0FNX1Jlc3AgYW5kIFNBTV9SVA0KICAgIHNlbGVjdCguaWQsIElELCBTdWJqX2lkLCANCiAgICAgICAgICAgU3RpbXVsaS5vcmRlciwgTWFya2VyU3RpbXVsaSwgU3RpbXVsdXMudHlwZSwgDQogICAgICAgICAgIFNBTV9SZXNwLCBTQU1fUlQpICU+JQ0KICAgIGRwbHlyOjpyZW5hbWUoQ29uZCA9IC5pZCkgJT4lIA0KICAgIGZpbHRlcihTdGltdWx1cy50eXBlID09IFN0aW1fdHlwZSkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb250IGZvcmdldCB0byBwaWNrIHN0eW11bHVzIHR5cGUNCiAgICBtdXRhdGUoQ29uZCA9IGFzLmZhY3RvcihDb25kKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHVuciB0byBmYWN0b3IgZm9yIGFvdiBmYW1pbHkgZnVuY3Rpb25zDQp9DQoNClJlcGV0YXRfbWVyZ2VkX05lZyA8LSBwcmVwYWlyZV9tZXJnZWRfZnVuYygibmVnYXRpdiIpDQpSZXBldGF0X21lcmdlZF9OZXUgPC0gcHJlcGFpcmVfbWVyZ2VkX2Z1bmMoIm5ldXRydSIpDQpSZXBldGF0X21lcmdlZF9Qb3ogPC0gcHJlcGFpcmVfbWVyZ2VkX2Z1bmMoInBveml0aXYiKQ0KDQojIyBBbm92YSBhbmQgUG9zdC1Ib2MNCiMgTm9ybWFsaXR5IA0KUmVwZXRhdF9tZXJnZWRfTmVnICU+JQ0KICBzZWxlY3QoU0FNX1Jlc3ApICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtdXN0IHNlbGVjdCB2YXJpYWJsZXMgb3V0c2lkZSBmdW5jdGlvbiANCiAgdGFkYWF0b29sYm94Ojp0YWRhYV9ub3JtdGVzdChtZXRob2QgPSAic2hhcGlybyIpICAgICAgICAgICAgICAgICAgICAgICAgICMgLCBwcmludCA9ICJtYXJrZG93biIgIGZvciBOb3RlYm9vaw0KDQojIExldmVuZSBUZXN0IChwPi4wNSA9IGhvbW9nZW5laXR5IG9mIHZhcmlhbmNlcykNClJlcGV0YXRfbWVyZ2VkX05lZyAlPiUNCiAgdGFkYWF0b29sYm94Ojp0YWRhYV9sZXZlbmUoZGF0YSA9IC4sIFNBTV9SZXNwIH4gQ29uZCkgICAgICAgICAgICAgICAgICAgICMgLCBwcmludCA9ICJtYXJrZG93biIgIGZvciBOb3RlYm9vaw0KDQojIEFub3ZhDQpSZXBldGF0X21lcmdlZF9OZWcgJT4lDQogICNkbyhicm9vbTo6Z2xhbmNlKGFvdiguJFNBTV9SZXNwIH4gLiRDb25kKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlZ3VsYXIgYW5vdmEgZG8oYnJvb206OnRpZHkoYW92KC4kU0FNX1Jlc3AgfiAuJENvbmQpKSkNCiAgdGFkYWF0b29sYm94Ojp0YWRhYV9hb3YoZGF0YSA9IC4sIFNBTV9SZXNwIH4gQ29uZCwgdHlwZSA9IDEpICAgICAgICAgICAgICMgLCBwcmludCA9ICJtYXJrZG93biIgIGZvciBOb3RlYm9vaw0KDQojIFBvc3QtSG9jIA0KUmVwZXRhdF9tZXJnZWRfTmVnICU+JQ0KICAjIFR1a2V5IGZvciBlcXVhbCB2YXJpYW5jZSANCiAgdGFkYWF0b29sYm94Ojp0YWRhYV9wYWlyd2lzZV90dWtleShkYXRhID0gLiwgU0FNX1Jlc3AsIENvbmQpICAgICAgICAgICAgICMgLCBwcmludCA9ICJtYXJrZG93biIgIGZvciBOb3RlYm9vaw0KIyBHYW1lcyBIb3dlbGwgZG9lcyBub3QgYXNzdW1lIGVxdWFsIHZhcmlhbmNlcw0KI3RhZGFhdG9vbGJveDo6dGFkYWFfcGFpcndpc2VfZ2goZGF0YSA9IC4sIFNBTV9SZXNwLCBDb25kKSAgICAgICAgICAgICAgICAjICwgcHJpbnQgPSAibWFya2Rvd24iICBmb3IgTm90ZWJvb2sNCmBgYA0KDQoNCiMjIFBsb3RzIHdpdGggcCB2YWx1ZXMNCg0KYGBge3IgcGxvdF9yZXBldGF0ZSwgZmlnLmhlaWdodD03fQ0KIyMgUGxvdHMNCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9zaXRpdmUgdmFsdWVzIGJpYXMgdG93YXJkcyBmaXhlZCBhbmQgbmVnYXRpdmUgdG93YXJkcyBzY2llbnRpZmljIG5vdGF0aW9uDQp0aGVtZV9zZXQocGFwYWphOjp0aGVtZV9hcGEoKSkgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZW1lIGZvciBwbG90cyAgICAgICAgICANCiMgYnkgZGF0YXNldA0KZ2dwbG90KFJlcGV0YXRfbWVyZ2VkLCBhZXMoeCA9IFN0aW11bHVzLnR5cGUsIHkgPSBTQU1fUmVzcCkpICsNCiAgZ2VvbV9ib3hwbG90KCkgKw0KICBzdGF0X3N1bW1hcnkoZnVuLmRhdGEgPSBtZWFuX3NlLCAgY29sb3VyID0gImRhcmtyZWQiKSArDQogIHhsYWIoIiIpICsNCiAgZmFjZXRfd3JhcCh+LmlkKSArDQogIGdncHVicjo6c3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAicC5zaWduaWYiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byBhdm9pZCBzY2llbnRpZmljIG5vdGF0aW9uIG9mIHZlcnkgc21hbGwgcC12YWx1ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3BhaXJlZCA9IFRSVUUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29ucyA9IGxpc3QoYygibmVnYXRpdiIsICJuZXV0cnUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIm5ldXRydSIsICJwb3ppdGl2IiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJuZWdhdGl2IiwgInBveml0aXYiKSkpICANCg0KIyBieSBTdGltdWx1cyB0eXBlDQpnZ3Bsb3QoUmVwZXRhdF9tZXJnZWQsIGFlcyh4ID0gLmlkLCB5ID0gU0FNX1Jlc3ApKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgIGNvbG91ciA9ICJkYXJrcmVkIikgKw0KICB4bGFiKCIiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsNCiAgZmFjZXRfd3JhcCh+U3RpbXVsdXMudHlwZSkgKw0KICBnZ3B1YnI6OnN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAicC5mb3JtYXQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3JtYXRlZCBwLXZhbHVlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcGFpcmVkID0gVFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25zID0gbGlzdChjKCJSZXBldGF0X0NUUkxfSW5zdHIiLCAiUmVwZXRhdF9DVFJMX1NvbG8iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlJlcGV0YXRfQ1RSTF9JbnN0ciIsICJSZXBldGF0X09HTF9JbnN0ciIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiUmVwZXRhdF9DVFJMX1NvbG8iLCAiUmVwZXRhdF9PR0xfSW5zdHIiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlJlcGV0YXRfQ1RSTF9Tb2xvIiwgIlJlcGV0YXRfT0dMX1NvbG8iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlJlcGV0YXRfT0dMX0luc3RyIiwgIlJlcGV0YXRfT0dMX1NvbG8iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIlJlcGV0YXRfQ1RSTF9JbnN0ciIsICJSZXBldGF0X09HTF9Tb2xvIikpKSANCg0KDQojIGRyb3AgdG8gQ1RSTCB2cyBPR0wgLSBieSBTdGltdWx1cyB0eXBlDQpSZXBldGF0X21lcmdlZCAlPiUNCiAgbXV0YXRlKC5pZCA9IGNhc2Vfd2hlbiguaWQgJWluJSBjKCJSZXBldGF0X0NUUkxfSW5zdHIiLCAiUmVwZXRhdF9DVFJMX1NvbG8iKSB+ICJSZXBldGF0X0NUUkwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIC5pZCAlaW4lIGMoIlJlcGV0YXRfT0dMX0luc3RyIiwgIlJlcGV0YXRfT0dMX1NvbG8iKSB+ICJSZXBldGF0X09HTCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlciguaWQpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IC5pZCwgeSA9IFNBTV9SZXNwKSkgKw0KICBnZW9tX2JveHBsb3QoKSArDQogIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsICBjb2xvdXIgPSAiZGFya3JlZCIpICsNCiAgeGxhYigiIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArDQogIGZhY2V0X3dyYXAoflN0aW11bHVzLnR5cGUpICsNCiAgZ2dwdWJyOjpzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInAuZm9ybWF0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9ybWF0ZWQgcC12YWx1ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3BhaXJlZCA9IFRSVUUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29ucyA9IGxpc3QoYygiUmVwZXRhdF9DVFJMIiwgIlJlcGV0YXRfT0dMIikpKSAgICAgICAgICANCg0KIyBkcm9wIHRvIEluc3RyIHZzIFNvbG8gLSBieSBTdGltdWx1cyB0eXBlDQpSZXBldGF0X21lcmdlZCAlPiUNCiAgbXV0YXRlKC5pZCA9IGNhc2Vfd2hlbiguaWQgJWluJSBjKCJSZXBldGF0X0NUUkxfSW5zdHIiLCAiUmVwZXRhdF9PR0xfSW5zdHIiKSB+ICJSZXBldGF0X0luc3RyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAuaWQgJWluJSBjKCJSZXBldGF0X0NUUkxfU29sbyIsICJSZXBldGF0X09HTF9Tb2xvIikgfiAiUmVwZXRhdF9Tb2xvIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKC5pZCkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gLmlkLCB5ID0gU0FNX1Jlc3ApKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgIGNvbG91ciA9ICJkYXJrcmVkIikgKw0KICB4bGFiKCIiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsNCiAgZmFjZXRfd3JhcCh+U3RpbXVsdXMudHlwZSkgKw0KICBnZ3B1YnI6OnN0YXRfY29tcGFyZV9tZWFucyhtZXRob2QgPSAidC50ZXN0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAicC5mb3JtYXQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3JtYXRlZCBwLXZhbHVlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcGFpcmVkID0gVFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25zID0gbGlzdChjKCJSZXBldGF0X0luc3RyIiwgIlJlcGV0YXRfU29sbyIpKSkgDQpgYGANCg0KDQoNCg0KDQo8IS0tIFNlc3Npb24gSW5mbyBhbmQgTGljZW5zZSAtLT4NCg0KPGJyPg0KDQojIFNlc3Npb24gSW5mbw0KYGBge3Igc2Vzc2lvbl9pbmZvLCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30NCnNlc3Npb25JbmZvKCkgICAgDQpgYGANCg0KPCEtLSBGb290ZXIgLS0+DQombmJzcDsNCjxociAvPg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPkEgd29yayBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vQ2xhdWRpdVBhcGFzdGVyaS8iPkNsYXVkaXUgUGFwYXN0ZXJpPC9hPjwvcD4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij48ZW0+Y2xhdWRpdS5wYXBhc3RlcmlAZ21haWwuY29tPC9lbT48L3NwYW4+PC9wPg0KJm5ic3A7DQo=