Randomization Table for 20 Subjects
# Repetate
set.seed(101)
eeg_rand <- psych::block.random(20, c(Condition1 = 2, Order1 = 2))
table_eeg_rand <-
eeg_rand %>%
as.data.frame(.) %>%
mutate(Condition1 = case_when(Condition1 == 1 ~ "ogl" ,
Condition1 == 2 ~ "ctrl",
TRUE ~ NA_character_)) %>%
mutate(Order1 = case_when(Order1 == 1 ~ "Instr-Solo" ,
Order1 == 2 ~ "Solo-Instr",
TRUE ~ NA_character_)) %>%
mutate(Condition2 = if_else(Condition1 == "ogl", "ctrl", "ogl")) %>%
mutate(Order2 = if_else(Order1 == "Instr-Solo", "Solo-Instr", "Instr-Solo")) %>%
mutate(ID = 1:nrow(.)) %>%
mutate(Set = rep(NA, nrow(.)),
Instructor = rep(NA, nrow(.)))
table_eeg_rand %>% # excel downloadable DT table
select(blocks, ID, everything()) %>%
DT::datatable(
extensions = 'Buttons',
options = list(pageLength = 40,
dom = 'Bfrtip',
buttons = c('excel', "csv")))
# kable table
# table_eeg_rand %>%
# select(blocks, ID, everything()) %>%
# knitr::kable(caption = "Randomization Table", align = rep('c', 6))
Check cross-tabs for each day
table_eeg_rand %>%
select(Condition1, Order1) %>%
ftable(row.vars = 1)
Order1 Instr-Solo Solo-Instr
Condition1
ctrl 5 5
ogl 5 5
# knitr::kable()
table_eeg_rand %>%
select(Condition2, Order2) %>%
ftable(row.vars = 1)
Order2 Instr-Solo Solo-Instr
Condition2
ctrl 5 5
ogl 5 5
# all conditions are balanced by block
# table_eeg_rand %>%
# filter(blocks == 1) %>%
# select(Condition1, Instructor1, Order1) %>%
# ftable(row.vars = 1)
Check balance
# pairs.panels(eeg_rand)
table_eeg_rand %>%
select(-ID, -blocks, -Instructor, -Set) %>%
pairs.panels()
Randomization Table for 30 Subjects
# Repetate
set.seed(101)
eeg_rand32 <- psych::block.random(32, c(Condition1 = 2, Order1 = 2, Set1 = 4))
table_eeg_rand32 <-
eeg_rand32 %>%
as.data.frame(.) %>%
mutate(Condition1 = case_when(Condition1 == 1 ~ "ogl" ,
Condition1 == 2 ~ "ctrl",
TRUE ~ NA_character_)) %>%
mutate(Order1 = case_when(Order1 == 1 ~ "Instr-Solo" ,
Order1 == 2 ~ "Solo-Instr",
TRUE ~ NA_character_)) %>%
mutate(Set1 = case_when(Set1 == 1 ~ "1-2" ,
Set1 == 2 ~ "2-1",
Set1 == 3 ~ "1-2f" ,
Set1 == 4 ~ "2-1f",
TRUE ~ NA_character_)) %>%
mutate(Condition2 = if_else(Condition1 == "ogl", "ctrl", "ogl")) %>%
mutate(Order2 = if_else(Order1 == "Instr-Solo", "Solo-Instr", "Instr-Solo")) %>%
mutate(Set2 = if_else(Set1 %in% c("1-2", "2-1f"), "2-1", "1-2")) %>%
mutate(ID = 1:nrow(.)) %>%
mutate(Instructor = rep(NA, nrow(.)))
table_eeg_rand32 %>% # excel downloadable DT table
select(blocks, ID, everything()) %>%
DT::datatable(
extensions = 'Buttons',
options = list(pageLength = 40,
dom = 'Bfrtip',
buttons = c('excel', "csv")))
Check cross-tabs for each day
table_eeg_rand32 %>%
select(Condition1, Order1, Set1) %>%
ftable(row.vars = 1)
Order1 Instr-Solo Solo-Instr
Set1 1-2 1-2f 2-1 2-1f 1-2 1-2f 2-1 2-1f
Condition1
ctrl 2 2 2 2 2 2 2 2
ogl 2 2 2 2 2 2 2 2
# knitr::kable()
table_eeg_rand32 %>%
select(Condition2, Order2, Set1) %>%
ftable(row.vars = 1)
Order2 Instr-Solo Solo-Instr
Set1 1-2 1-2f 2-1 2-1f 1-2 1-2f 2-1 2-1f
Condition2
ctrl 2 2 2 2 2 2 2 2
ogl 2 2 2 2 2 2 2 2
Check balance
# pairs.panels(eeg_rand)
table_eeg_rand32 %>%
select(-ID, -blocks, -Instructor) %>%
pairs.panels()
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 DT_0.5 papaja_0.1.0.9842 psych_1.8.10 forcats_0.3.0 stringr_1.3.1 dplyr_0.7.8
[8] purrr_0.2.5 readr_1.3.0 tidyr_0.8.2 tibble_1.4.2 ggplot2_3.1.0 tidyverse_1.2.1 pacman_0.5.0
loaded via a namespace (and not attached):
[1] tidyselect_0.2.5 xfun_0.4 haven_2.1.0 lattice_0.20-38 colorspace_1.3-2 generics_0.0.2 htmltools_0.3.6 yaml_2.2.0
[9] rlang_0.3.0.1 later_0.7.5 pillar_1.3.1 foreign_0.8-71 glue_1.3.1 withr_2.1.2 modelr_0.1.2 readxl_1.1.0
[17] bindr_0.1.1 plyr_1.8.4 munsell_0.5.0 gtable_0.2.0 cellranger_1.1.0 rvest_0.3.2 htmlwidgets_1.3 knitr_1.21
[25] httpuv_1.4.5 crosstalk_1.0.0 parallel_3.5.2 broom_0.5.1 Rcpp_1.0.1 xtable_1.8-3 promises_1.0.1 scales_1.0.0
[33] backports_1.1.3 jsonlite_1.6 mime_0.6 mnormt_1.5-5 digest_0.6.18 hms_0.4.2 stringi_1.2.4 shiny_1.2.0
[41] grid_3.5.2 cli_1.0.1 tools_3.5.2 magrittr_1.5 lazyeval_0.2.1 crayon_1.3.4 pkgconfig_2.0.2 xml2_1.2.0
[49] lubridate_1.7.4 assertthat_0.2.1 httr_1.4.0 rstudioapi_0.8 R6_2.4.0 nlme_3.1-137 compiler_3.5.2
A work by Claudiu Papasteri
claudiu.papasteri@gmail.com
LS0tDQp0aXRsZTogIjxicj4gQmFsYW5jZWQgcmFuZG9taXphdGlvbiBmb3IgRUVHIE8uNCIgDQpzdWJ0aXRsZTogIlJhbmRvbWl6YXRpb24gTy40IC0gMjAgc3ViamVjdHMgJiAzMiBzdWJqZWN0cyINCmF1dGhvcjogIjxicj4gQ2xhdWRpdSBQYXBhc3RlcmkiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlbSAlWScpYCINCm91dHB1dDogDQogICAgaHRtbF9ub3RlYm9vazoNCiAgICAgICAgICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgICAgICAgICAgdG9jOiB0cnVlDQogICAgICAgICAgICB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgICAgICAgICAgdGhlbWU6IHNwYWNlbGFiDQogICAgICAgICAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgICAgICAgICBmb250LWZhbWlseTogQXJpYWwNCiAgICAgICAgICAgIGZpZ193aWR0aDogMTANCiAgICAgICAgICAgIGZpZ19oZWlnaHQ6IDkNCiAgICAjIHBkZl9kb2N1bWVudDogDQogICAgICAgICAgICAjIHRvYzogdHJ1ZQ0KICAgICAgICAgICAgIyB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgICMgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgICAgICAgICAjIGZvbnRzaXplOiAxMXB0DQogICAgICAgICAgICAjIGdlb21ldHJ5OiBtYXJnaW49MWluDQogICAgICAgICAgICAjIGZpZ193aWR0aDogNw0KICAgICAgICAgICAgIyBmaWdfaGVpZ2h0OiA2DQogICAgICAgICAgICAjIGZpZ19jYXB0aW9uOiB0cnVlDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBraW50ciBvcHRpb25zDQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGNvbW1lbnQgPSAiIyIsDQogIGNvbGxhcHNlID0gVFJVRSwNCiAgZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBUUlVFLCBtZXNzYWdlID0gVFJVRSwgY2FjaGUgPSBUUlVFICAgICAgICMgZWNobyA9IEZhbHNlIGZvciBnaXRodWJfZG9jdW1lbnQsIGJ1dCB3aWxsIGJlIGZvbGRlZCBpbiBodG1sX25vdGVib29rDQopDQoNCiMgR2VuZXJhbCBSIG9wdGlvbnMgYW5kIGluZm8NCnNldC5zZWVkKDExMSkgICAgICAgICAgICAgICAjIGluIGNhc2Ugd2UgdXNlIHJhbmRvbWl6ZWQgcHJvY2VkdXJlcyAgICAgICANCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAgICAgICAjIHBvc2l0aXZlIHZhbHVlcyBiaWFzIHRvd2FyZHMgZml4ZWQgYW5kIG5lZ2F0aXZlIHRvd2FyZHMgc2NpZW50aWZpYyBub3RhdGlvbg0KDQojIExvYWQgcGFja2FnZXMNCmlmICghcmVxdWlyZSgicGFjbWFuIikpIGluc3RhbGwucGFja2FnZXMoInBhY21hbiIpDQpwYWNrYWdlcyA8LSBjKA0KICAidGlkeXZlcnNlIiwgICAgICAjIGJlc3QgdGhpbmcgdGhhdCBoYXBwZW5kIHRvIG1lDQogICJwc3ljaCIsICAgICAgICAgICMgZ2VuZXJhbCBwdXJwb3NlIHRvb2xib3ggZm9yIHBlcnNvbmFsaXR5LCBwc3ljaG9tZXRyaWMgdGhlb3J5IGFuZCBleHBlcmltZW50YWwgcHN5Y2hvbG9neQ0KICAicGFwYWphIiwgICAgICAgICAjIGZvciBBUEEgc3R5bGUNCiAgImdncGxvdDIiLCAgICAgICAgIyBiZXN0IHBsb3RzDQogICJEVCIgICAgICAgICAgICAgICMgZGF0YSB0YWJsZXMNCiAgIyAsIC4uLg0KKQ0KaWYgKCFyZXF1aXJlKCJwYWNtYW4iKSkgaW5zdGFsbC5wYWNrYWdlcygicGFjbWFuIikNCnBhY21hbjo6cF9sb2FkKGNoYXIgPSBwYWNrYWdlcykNCg0KIyBUaGVtZXMgZm9yIGdncGxvdDIgcGxvdGluZyAoaGVyZSB1c2VkIEFQQSBzdHlsZSkNCnRoZW1lX3NldCh0aGVtZV9hcGEoKSkNCmBgYA0KDQoNCjxicj4NCg0KIyBSYW5kb21pemF0aW9uIFRhYmxlIGZvciAyMCBTdWJqZWN0cw0KDQpgYGB7ciByYW5kb21pemVfYmxvY2tzfQ0KIyBSZXBldGF0ZQ0Kc2V0LnNlZWQoMTAxKQ0KZWVnX3JhbmQgPC0gcHN5Y2g6OmJsb2NrLnJhbmRvbSgyMCwgYyhDb25kaXRpb24xID0gMiwgT3JkZXIxID0gMikpIA0KDQp0YWJsZV9lZWdfcmFuZCA8LSANCiAgZWVnX3JhbmQgJT4lIA0KICBhcy5kYXRhLmZyYW1lKC4pICU+JSAgDQogIG11dGF0ZShDb25kaXRpb24xID0gY2FzZV93aGVuKENvbmRpdGlvbjEgPT0gMSB+ICJvZ2wiICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uMSA9PSAyIH4gImN0cmwiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pKSAlPiUNCiAgbXV0YXRlKE9yZGVyMSA9IGNhc2Vfd2hlbihPcmRlcjEgPT0gMSB+ICJJbnN0ci1Tb2xvIiAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIxID09IDIgfiAiU29sby1JbnN0ciIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSkgJT4lDQogIG11dGF0ZShDb25kaXRpb24yID0gaWZfZWxzZShDb25kaXRpb24xID09ICJvZ2wiLCAiY3RybCIsICJvZ2wiKSkgJT4lDQogIG11dGF0ZShPcmRlcjIgPSBpZl9lbHNlKE9yZGVyMSA9PSAiSW5zdHItU29sbyIsICJTb2xvLUluc3RyIiwgIkluc3RyLVNvbG8iKSkgJT4lDQogIG11dGF0ZShJRCA9IDE6bnJvdyguKSkgJT4lDQogIG11dGF0ZShTZXQgPSByZXAoTkEsIG5yb3coLikpLA0KICAgICAgICAgSW5zdHJ1Y3RvciA9IHJlcChOQSwgbnJvdyguKSkpDQogIA0KDQp0YWJsZV9lZWdfcmFuZCAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4Y2VsIGRvd25sb2FkYWJsZSAgRFQgdGFibGUNCiAgc2VsZWN0KGJsb2NrcywgSUQsIGV2ZXJ5dGhpbmcoKSkgJT4lDQogICAgRFQ6OmRhdGF0YWJsZSgNCiAgICAgIGV4dGVuc2lvbnMgPSAnQnV0dG9ucycsDQogICAgICBvcHRpb25zID0gbGlzdChwYWdlTGVuZ3RoID0gNDAsDQogICAgICAgICAgICAgICAgICAgICBkb20gPSAnQmZydGlwJywgDQogICAgICAgICAgICAgICAgICAgICBidXR0b25zID0gYygnZXhjZWwnLCAiY3N2IikpKQ0KDQojIGthYmxlIHRhYmxlDQojIHRhYmxlX2VlZ19yYW5kICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQojICAgc2VsZWN0KGJsb2NrcywgSUQsIGV2ZXJ5dGhpbmcoKSkgJT4lDQojICAga25pdHI6OmthYmxlKGNhcHRpb24gPSAiUmFuZG9taXphdGlvbiBUYWJsZSIsIGFsaWduID0gcmVwKCdjJywgNikpDQpgYGANCg0KDQo8YnI+DQoNCiMjIENoZWNrIGNyb3NzLXRhYnMgZm9yIGVhY2ggZGF5DQoNCmBgYHtyIHJhbmRvbWl6ZV9jaGVja30NCg0KdGFibGVfZWVnX3JhbmQgJT4lDQogIHNlbGVjdChDb25kaXRpb24xLCBPcmRlcjEpICU+JQ0KICBmdGFibGUocm93LnZhcnMgPSAxKQ0KICAjIGtuaXRyOjprYWJsZSgpDQoNCnRhYmxlX2VlZ19yYW5kICU+JQ0KICBzZWxlY3QoQ29uZGl0aW9uMiwgT3JkZXIyKSAlPiUNCiAgZnRhYmxlKHJvdy52YXJzID0gMSkNCg0KIyBhbGwgY29uZGl0aW9ucyBhcmUgYmFsYW5jZWQgYnkgYmxvY2sNCiMgdGFibGVfZWVnX3JhbmQgJT4lDQojICAgZmlsdGVyKGJsb2NrcyA9PSAxKSAlPiUNCiMgICBzZWxlY3QoQ29uZGl0aW9uMSwgSW5zdHJ1Y3RvcjEsIE9yZGVyMSkgJT4lDQojICAgZnRhYmxlKHJvdy52YXJzID0gMSkNCmBgYA0KDQoNCjxicj4NCg0KIyMgIENoZWNrIGJhbGFuY2UgDQoNCmBgYHtyIHJhbmRpbWl6ZV9wbG90fQ0KIyBwYWlycy5wYW5lbHMoZWVnX3JhbmQpDQoNCnRhYmxlX2VlZ19yYW5kICU+JQ0KICBzZWxlY3QoLUlELCAtYmxvY2tzLCAtSW5zdHJ1Y3RvciwgLVNldCkgJT4lDQogICAgcGFpcnMucGFuZWxzKCkNCmBgYA0KDQoNCg0KPGJyPg0KDQojIFJhbmRvbWl6YXRpb24gVGFibGUgZm9yIDMwIFN1YmplY3RzDQoNCmBgYHtyIHJhbmRvbWl6ZV9ibG9ja3MzMH0NCiMgUmVwZXRhdGUNCnNldC5zZWVkKDEwMSkNCmVlZ19yYW5kMzIgPC0gcHN5Y2g6OmJsb2NrLnJhbmRvbSgzMiwgYyhDb25kaXRpb24xID0gMiwgT3JkZXIxID0gMiwgU2V0MSA9IDQpKSANCg0KdGFibGVfZWVnX3JhbmQzMiA8LSANCiAgZWVnX3JhbmQzMiAlPiUgDQogIGFzLmRhdGEuZnJhbWUoLikgJT4lICANCiAgbXV0YXRlKENvbmRpdGlvbjEgPSBjYXNlX3doZW4oQ29uZGl0aW9uMSA9PSAxIH4gIm9nbCIgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24xID09IDIgfiAiY3RybCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JQ0KICBtdXRhdGUoT3JkZXIxID0gY2FzZV93aGVuKE9yZGVyMSA9PSAxIH4gIkluc3RyLVNvbG8iICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlcjEgPT0gMiB+ICJTb2xvLUluc3RyIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pKSAlPiUNCiAgbXV0YXRlKFNldDEgPSBjYXNlX3doZW4oU2V0MSA9PSAxIH4gIjEtMiIgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQxID09IDIgfiAiMi0xIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0MSA9PSAzIH4gIjEtMmYiICwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0MSA9PSA0IH4gIjItMWYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXykpICU+JQ0KICBtdXRhdGUoQ29uZGl0aW9uMiA9IGlmX2Vsc2UoQ29uZGl0aW9uMSA9PSAib2dsIiwgImN0cmwiLCAib2dsIikpICU+JQ0KICBtdXRhdGUoT3JkZXIyID0gaWZfZWxzZShPcmRlcjEgPT0gIkluc3RyLVNvbG8iLCAiU29sby1JbnN0ciIsICJJbnN0ci1Tb2xvIikpICU+JQ0KICBtdXRhdGUoU2V0MiA9IGlmX2Vsc2UoU2V0MSAlaW4lIGMoIjEtMiIsICIyLTFmIiksICIyLTEiLCAiMS0yIikpICU+JQ0KICBtdXRhdGUoSUQgPSAxOm5yb3coLikpICU+JQ0KICBtdXRhdGUoSW5zdHJ1Y3RvciA9IHJlcChOQSwgbnJvdyguKSkpDQogIA0KDQp0YWJsZV9lZWdfcmFuZDMyICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhjZWwgZG93bmxvYWRhYmxlICBEVCB0YWJsZQ0KICBzZWxlY3QoYmxvY2tzLCBJRCwgZXZlcnl0aGluZygpKSAlPiUNCiAgICBEVDo6ZGF0YXRhYmxlKA0KICAgICAgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywNCiAgICAgIG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSA0MCwNCiAgICAgICAgICAgICAgICAgICAgIGRvbSA9ICdCZnJ0aXAnLCANCiAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMgPSBjKCdleGNlbCcsICJjc3YiKSkpDQpgYGANCg0KDQo8YnI+DQoNCiMjIENoZWNrIGNyb3NzLXRhYnMgZm9yIGVhY2ggZGF5DQoNCmBgYHtyIHJhbmRvbWl6ZV9jaGVjazMwfQ0KDQp0YWJsZV9lZWdfcmFuZDMyICU+JQ0KICBzZWxlY3QoQ29uZGl0aW9uMSwgT3JkZXIxLCBTZXQxKSAlPiUNCiAgZnRhYmxlKHJvdy52YXJzID0gMSkNCiAgIyBrbml0cjo6a2FibGUoKQ0KDQp0YWJsZV9lZWdfcmFuZDMyICU+JQ0KICBzZWxlY3QoQ29uZGl0aW9uMiwgT3JkZXIyLCBTZXQxKSAlPiUNCiAgZnRhYmxlKHJvdy52YXJzID0gMSkNCmBgYA0KDQoNCjxicj4NCg0KIyMgIENoZWNrIGJhbGFuY2UgDQoNCmBgYHtyIHJhbmRpbWl6ZV9wbG90MzB9DQojIHBhaXJzLnBhbmVscyhlZWdfcmFuZCkNCg0KdGFibGVfZWVnX3JhbmQzMiAlPiUNCiAgc2VsZWN0KC1JRCwgLWJsb2NrcywgLUluc3RydWN0b3IpICU+JQ0KICAgIHBhaXJzLnBhbmVscygpDQpgYGANCg0KDQoNCg0KPCEtLSBTZXNzaW9uIEluZm8gYW5kIExpY2Vuc2UgLS0+DQoNCjxicj4NCg0KIyBTZXNzaW9uIEluZm8NCmBgYHtyIHNlc3Npb25faW5mbywgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gJ21hcmt1cCd9DQpzZXNzaW9uSW5mbygpICAgIA0KYGBgDQoNCjwhLS0gRm9vdGVyIC0tPg0KJm5ic3A7DQo8aHIgLz4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij5BIHdvcmsgYnkgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0NsYXVkaXVQYXBhc3RlcmkvIj5DbGF1ZGl1IFBhcGFzdGVyaTwvYT48L3A+DQo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjODA4MDgwOyI+PGVtPmNsYXVkaXUucGFwYXN0ZXJpQGdtYWlsLmNvbTwvZW0+PC9zcGFuPjwvcD4NCiZuYnNwOw0K