Phase III clinical trial on Psoriasis comparing Active Treatment vs Placebo for outcome variable Pain (collected on a visual analog scale [0-100]). The pain outcome variable was reordered and classified into four distinctive groups: Active Treatment without     with     any missing data and Placebo without     with     any missing data. The longitudinal pain scores are visualized through a color-coded Heatmap where missing values are coded    . Vertical and horizontal figures were added to adorn different aspects of the missing data. Vertical top annotations display the overall and monotone missing data patterns, while bottom annotations display the longitudinal mean results for each of the aforementioned groups. Right horizontal figures represent the distribution of covariates extended by the bottom summary display.


Current session info


- Session info ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 setting  value                       
 version  R version 4.0.2 (2020-06-22)
 os       Windows 10 x64              
 system   x86_64, mingw32             
 ui       RTerm                       
 language (EN)                        
 collate  English_United States.1252  
 ctype    English_United States.1252  
 tz       America/Los_Angeles         
 date     2021-02-27                  

- Packages -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 package        * version date       lib source        
 assertthat       0.2.1   2019-03-21 [1] CRAN (R 4.0.2)
 backports        1.2.1   2020-12-09 [1] CRAN (R 4.0.2)
 broom            0.7.5   2021-02-19 [1] CRAN (R 4.0.2)
 bslib            0.2.4   2021-01-25 [1] CRAN (R 4.0.2)
 cellranger       1.1.0   2016-07-27 [1] CRAN (R 4.0.2)
 circlize       * 0.4.12  2021-01-08 [1] CRAN (R 4.0.3)
 cli              2.3.0   2021-01-31 [1] CRAN (R 4.0.2)
 clipr            0.7.1   2020-10-08 [1] CRAN (R 4.0.2)
 clue             0.3-58  2020-12-03 [1] CRAN (R 4.0.3)
 cluster          2.1.1   2021-02-14 [1] CRAN (R 4.0.4)
 codetools        0.2-18  2020-11-04 [1] CRAN (R 4.0.3)
 colorspace       2.0-0   2020-11-11 [1] CRAN (R 4.0.2)
 ComplexHeatmap * 2.4.3   2020-07-25 [1] Bioconductor  
 crayon           1.4.1   2021-02-08 [1] CRAN (R 4.0.2)
 DBI              1.1.1   2021-01-15 [1] CRAN (R 4.0.3)
 dbplyr           2.1.0   2021-02-03 [1] CRAN (R 4.0.3)
 desc             1.2.0   2018-05-01 [1] CRAN (R 4.0.2)
 details          0.2.1   2020-01-12 [1] CRAN (R 4.0.2)
 digest           0.6.27  2020-10-24 [1] CRAN (R 4.0.3)
 dplyr          * 1.0.4   2021-02-02 [1] CRAN (R 4.0.2)
 ellipsis         0.3.1   2020-05-15 [1] CRAN (R 4.0.2)
 evaluate         0.14    2019-05-28 [1] CRAN (R 4.0.2)
 fansi            0.4.2   2021-01-15 [1] CRAN (R 4.0.3)
 farver           2.0.3   2020-01-16 [1] CRAN (R 4.0.2)
 forcats        * 0.5.1   2021-01-27 [1] CRAN (R 4.0.2)
 foreach          1.5.1   2020-10-15 [1] CRAN (R 4.0.3)
 fs               1.5.0   2020-07-31 [1] CRAN (R 4.0.2)
 generics         0.1.0   2020-10-31 [1] CRAN (R 4.0.3)
 GetoptLong       1.0.5   2020-12-15 [1] CRAN (R 4.0.3)
 ggplot2        * 3.3.3   2020-12-30 [1] CRAN (R 4.0.2)
 GlobalOptions    0.1.2   2020-06-10 [1] CRAN (R 4.0.3)
 glue             1.4.2   2020-08-27 [1] CRAN (R 4.0.2)
 gtable           0.3.0   2019-03-25 [1] CRAN (R 4.0.2)
 haven            2.3.1   2020-06-01 [1] CRAN (R 4.0.2)
 highr            0.8     2019-03-20 [1] CRAN (R 4.0.2)
 hms              1.0.0   2021-01-13 [1] CRAN (R 4.0.3)
 htmltools        0.5.1.1 2021-01-22 [1] CRAN (R 4.0.3)
 httr             1.4.2   2020-07-20 [1] CRAN (R 4.0.2)
 iterators        1.0.13  2020-10-15 [1] CRAN (R 4.0.3)
 jquerylib        0.1.3   2020-12-17 [1] CRAN (R 4.0.3)
 jsonlite         1.7.2   2020-12-09 [1] CRAN (R 4.0.3)
 knitr            1.31    2021-01-27 [1] CRAN (R 4.0.2)
 labeling         0.4.2   2020-10-20 [1] CRAN (R 4.0.3)
 lifecycle        1.0.0   2021-02-15 [1] CRAN (R 4.0.4)
 lubridate        1.7.9.2 2020-11-13 [1] CRAN (R 4.0.3)
 magrittr         2.0.1   2020-11-17 [1] CRAN (R 4.0.3)
 modelr           0.1.8   2020-05-19 [1] CRAN (R 4.0.2)
 munsell          0.5.0   2018-06-12 [1] CRAN (R 4.0.2)
 pacman           0.5.1   2019-03-11 [1] CRAN (R 4.0.2)
 pillar           1.5.0   2021-02-22 [1] CRAN (R 4.0.2)
 pkgconfig        2.0.3   2019-09-22 [1] CRAN (R 4.0.2)
 png              0.1-7   2013-12-03 [1] CRAN (R 4.0.0)
 purrr          * 0.3.4   2020-04-17 [1] CRAN (R 4.0.2)
 R6               2.5.0   2020-10-28 [1] CRAN (R 4.0.3)
 RColorBrewer     1.1-2   2014-12-07 [1] CRAN (R 4.0.0)
 Rcpp             1.0.6   2021-01-15 [1] CRAN (R 4.0.3)
 readr          * 1.4.0   2020-10-05 [1] CRAN (R 4.0.2)
 readxl           1.3.1   2019-03-13 [1] CRAN (R 4.0.2)
 registry         0.5-1   2019-03-05 [1] CRAN (R 4.0.3)
 reprex           1.0.0   2021-01-27 [1] CRAN (R 4.0.2)
 rjson            0.2.20  2018-06-08 [1] CRAN (R 4.0.0)
 rlang            0.4.10  2020-12-30 [1] CRAN (R 4.0.3)
 rmarkdown        2.7     2021-02-19 [1] CRAN (R 4.0.2)
 rprojroot        2.0.2   2020-11-15 [1] CRAN (R 4.0.2)
 rstudioapi       0.13    2020-11-12 [1] CRAN (R 4.0.2)
 rvest            0.3.6   2020-07-25 [1] CRAN (R 4.0.2)
 samon          * 4.0.1   2020-05-05 [1] CRAN (R 4.0.3)
 sass             0.3.1   2021-01-24 [1] CRAN (R 4.0.3)
 scales           1.1.1   2020-05-11 [1] CRAN (R 4.0.2)
 seriation      * 1.2-9   2020-10-01 [1] CRAN (R 4.0.3)
 sessioninfo      1.1.1   2018-11-05 [1] CRAN (R 4.0.2)
 shape            1.4.5   2020-09-13 [1] CRAN (R 4.0.3)
 stringi          1.5.3   2020-09-09 [1] CRAN (R 4.0.2)
 stringr        * 1.4.0   2019-02-10 [1] CRAN (R 4.0.2)
 tibble         * 3.0.6   2021-01-29 [1] CRAN (R 4.0.3)
 tidyr          * 1.1.2   2020-08-27 [1] CRAN (R 4.0.2)
 tidyselect       1.1.0   2020-05-11 [1] CRAN (R 4.0.2)
 tidyverse      * 1.3.0   2019-11-21 [1] CRAN (R 4.0.3)
 TSP              1.1-10  2020-04-17 [1] CRAN (R 4.0.3)
 utf8             1.1.4   2018-05-24 [1] CRAN (R 4.0.2)
 vctrs            0.3.6   2020-12-17 [1] CRAN (R 4.0.3)
 withr            2.4.1   2021-01-26 [1] CRAN (R 4.0.2)
 xfun             0.21    2021-02-10 [1] CRAN (R 4.0.3)
 xml2             1.3.2   2020-04-23 [1] CRAN (R 4.0.2)
 yaml             2.2.1   2020-02-01 [1] CRAN (R 4.0.0)

[1] C:/R/R-4.0.2/library


LS0tDQp0aXRsZTogICI8aDQ+IDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9WSVMtU0lHL1dvbmRlcmZ1bC1XZWRuZXNkYXlzL3RyZWUvbWFzdGVyL2RhdGEvMjAyMS8yMDIxLTAyLTEwJz4gVmlzdWFsaXphdGlvbiBvZiBwYXR0ZXJucyBvZiBtaXNzaW5nIGRhdGEgPC9hPiBieSBBZ3VzdGluIENhbGF0cm9uaSINCm91dHB1dDoNCiAgIGh0bWxfZG9jdW1lbnQ6DQogICAgICBzZWxmX2NvbnRhaW5kZWQ6IFRSVUUNCiAgICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgICAgdG9jOiBmYWxzZSANCi0tLQ0KDQo8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWdzdG4vV1ciIGNsYXNzPSJnaXRodWItY29ybmVyIiBhcmlhLWxhYmVsPSJWaWV3IHNvdXJjZSBvbiBHaXRIdWIiPjxzdmcgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiB2aWV3Qm94PSIwIDAgMjUwIDI1MCIgc3R5bGU9ImZpbGw6IzcwQjdGRDsgY29sb3I6I2ZmZjsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGJvcmRlcjogMDsgcmlnaHQ6IDA7IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTAsMCBMMTE1LDExNSBMMTMwLDExNSBMMTQyLDE0MiBMMjUwLDI1MCBMMjUwLDAgWiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMjguMywxMDkuMCBDMTEzLjgsOTkuNyAxMTkuMCw4OS42IDExOS4wLDg5LjYgQzEyMi4wLDgyLjcgMTIwLjUsNzguNiAxMjAuNSw3OC42IEMxMTkuMiw3Mi4wIDEyMy40LDc2LjMgMTIzLjQsNzYuMyBDMTI3LjMsODAuOSAxMjUuNSw4Ny4zIDEyNS41LDg3LjMgQzEyMi45LDk3LjYgMTMwLjYsMTAxLjkgMTM0LjQsMTAzLjIiIGZpbGw9ImN1cnJlbnRDb2xvciIgc3R5bGU9InRyYW5zZm9ybS1vcmlnaW46IDEzMHB4IDEwNnB4OyIgY2xhc3M9Im9jdG8tYXJtIj48L3BhdGg+PHBhdGggZD0iTTExNS4wLDExNS4wIEMxMTQuOSwxMTUuMSAxMTguNywxMTYuNSAxMTkuOCwxMTUuNCBMMTMzLjcsMTAxLjYgQzEzNi45LDk5LjIgMTM5LjksOTguNCAxNDIuMiw5OC42IEMxMzMuOCw4OC4wIDEyNy41LDc0LjQgMTQzLjgsNTguMCBDMTQ4LjUsNTMuNCAxNTQuMCw1MS4yIDE1OS43LDUxLjAgQzE2MC4zLDQ5LjQgMTYzLjIsNDMuNiAxNzEuNCw0MC4xIEMxNzEuNCw0MC4xIDE3Ni4xLDQyLjUgMTc4LjgsNTYuMiBDMTgzLjEsNTguNiAxODcuMiw2MS44IDE5MC45LDY1LjQgQzE5NC41LDY5LjAgMTk3LjcsNzMuMiAyMDAuMSw3Ny42IEMyMTMuOCw4MC4yIDIxNi4zLDg0LjkgMjE2LjMsODQuOSBDMjEyLjcsOTMuMSAyMDYuOSw5Ni4wIDIwNS40LDk2LjYgQzIwNS4xLDEwMi40IDIwMy4wLDEwNy44IDE5OC4zLDExMi41IEMxODEuOSwxMjguOSAxNjguMywxMjIuNSAxNTcuNywxMTQuMSBDMTU3LjksMTE2LjkgMTU2LjcsMTIwLjkgMTUyLjcsMTI0LjkgTDE0MS4wLDEzNi41IEMxMzkuOCwxMzcuNyAxNDEuNiwxNDEuOSAxNDEuOCwxNDEuOCBaIiBmaWxsPSJjdXJyZW50Q29sb3IiIGNsYXNzPSJvY3RvLWJvZHkiPjwvcGF0aD48L3N2Zz48L2E+DQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4uZ2l0aHViLWNvcm5lcjpob3ZlciAub2N0by1hcm17YW5pbWF0aW9uOm9jdG9jYXQtd2F2ZSA1NjBtcyBlYXNlLWluLW91dH1Aa2V5ZnJhbWVzIG9jdG9jYXQtd2F2ZXswJSwxMDAle3RyYW5zZm9ybTpyb3RhdGUoMCl9MjAlLDYwJXt0cmFuc2Zvcm06cm90YXRlKC0yNWRlZyl9NDAlLDgwJXt0cmFuc2Zvcm06cm90YXRlKDEwZGVnKX19QG1lZGlhIChtYXgtd2lkdGg6NTAwcHgpey5naXRodWItY29ybmVyOmhvdmVyIC5vY3RvLWFybXthbmltYXRpb246bm9uZX0uZ2l0aHViLWNvcm5lciAub2N0by1hcm17YW5pbWF0aW9uOm9jdG9jYXQtd2F2ZSA1NjBtcyBlYXNlLWluLW91dH19PC9zdHlsZT4NCmBgYA0KYGBgez1odG1sfQ0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5tYWluLWNvbnRhaW5lciB7DQptYXgtd2lkdGg6IDEyMDBweDsNCm1hcmdpbi1sZWZ0OiBhdXRvOw0KbWFyZ2luLXJpZ2h0OiBhdXRvO30NCjwvc3R5bGU+DQpgYGANCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Kb3B0aW9ucyh3aWR0aCA9IDIwMCkNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIGV2YWwgPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgY29tbWVudCA9IE5BLCBjYWNoZSA9IEZBTFNFKQ0KYGBgDQoNCmBgYHtyIHBhY2thZ2VzfQ0KcGFjbWFuOjpwX2xvYWQodGlkeXZlcnNlKQ0KYGBgDQoNCmBgYHtyIGltcG9ydC1kYXRhfQ0KZDEgPC0gcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9WSVMtU0lHL1dvbmRlcmZ1bC1XZWRuZXNkYXlzL21hc3Rlci9kYXRhLzIwMjEvMjAyMS0wMi0xMC9taXNzaW5nX2RhdGEuY3N2IikgJT4lDQogIHNlbGVjdCgtY29udGFpbnMoIi5iaW4uIikpICU+JQ0KICBtdXRhdGUoDQogICAgdHJ0ID0gZmFjdG9yKHRydCwgbGFiZWxzID0gYygiQSIsICJQIikpLA0KICAgIGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxhYmVscyA9IGMoIkYiLCAiTSIpKQ0KICApICU+JQ0KICByb3d3aXNlKCkgJT4lDQogIG11dGF0ZShuYV9udW0gPSBzdW0oaXMubmEoY19hY3Jvc3MocGFpbi4wOnBhaW4uMTApKSkpICU+JQ0KICBtdXRhdGUoZ3JvdXAgPSBjYXNlX3doZW4oDQogICAgbmFfbnVtID4gMCAgJiB0cnQgPT0gIlAiIH4gIlAvbSIsDQogICAgbmFfbnVtID4gMCAgJiB0cnQgPT0gIkEiIH4gIkEvbSIsDQogICAgbmFfbnVtID09IDAgJiB0cnQgPT0gIlAiIH4gIlAiLA0KICAgIG5hX251bSA9PSAwICYgdHJ0ID09ICJBIiB+ICJBIiwpICU+JSANCiAgICAgIGZhY3RvcihsZXZlbHMgPSBjKCJBIiwiQS9tIiwiUC9tIiwiUCIpKSklPiUNCiAgdW5ncm91cCgpDQoNCndyaXRlLmNzdihkMSwgImNoX21pc3NpbmdfZGF0YS5jc3YiKQ0KYGBgDQoNCmBgYHtyIGxvbmctZGF0YX0NCmQzIDwtIGQxICU+JQ0KICByb3duYW1lc190b19jb2x1bW4odmFyID0gJ2lkJykgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gc3RhcnRzX3dpdGgoInBhaW4uIiksDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAncGFpbicpICU+JSANCiAgc2VwYXJhdGUobmFtZSwgYygibmFtZSIsInRpbWUiKSwgIlxcLiIpJT4lDQogIG11dGF0ZSh0aW1lID0gZmFjdG9yKHRpbWUsIGxldmVscyA9IGMoMDoxMCkpKSAlPiUgDQogIGRyb3BfbmEocGFpbikNCmBgYA0KDQpgYGB7ciBzZXJpYXRpb259DQpwYWNtYW46OnBfbG9hZChzZXJpYXRpb24pDQoNCmQxX25hIDwtIGQxICU+JQ0KICBtdXRhdGUoYWNyb3NzKGNvbnRhaW5zKCJwYWluLiIpLCB+IGlzLm5hKC54KSAlPiUgYXMubnVtZXJpYygpKSkgJT4lDQogIHNlbGVjdChjb250YWlucygicGFpbi4iKSkgJT4lDQogIGRhdGEubWF0cml4KCkNCg0Kc2V0LnNlZWQoMTIzKQ0KbyA8LSBzZXJpYXRlKGQxX25hLCBtZXRob2QgPSAiQkVBIiwgbWFyZ2luID0gMSwgY29udHJvbCA9IGxpc3QocmVwID0gMTAwLCBpc3RhcnQgPSAxLCBqc3RhcnQgPSAxKSkNCmBgYA0KDQpgYGB7ciBkYXRhLXJlb3JkZXJ9DQpkMiA8LSBkMSAlPiUNCiAgc2xpY2UoZ2V0X29yZGVyKG8pKQ0KYGBgDQoNCmBgYHtyIHBhdHRlcm5zLW1pc3NpbmcsIGluY2x1ZGU9RkFMU0V9DQpwYWNtYW46OnBfbG9hZChzYW1vbikNCg0KIyAxLiB0IHRoZSB0aW1lLXBvaW50DQojIDIuIE51bWJlciBPbiBTdHVkeSANCiMgMy4gTnVtYmVyIE9ic2VydmVkIA0KIyA0LiBOdW1iZXIgbGFzdCBzZWVuIGF0IHRpbWUgdA0KIyA1LiBQcm9wb3J0aW9uIGxhc3Qgc2VlbiAob2YgbnVtYmVyIG9uLXN0dWR5KSANCiMgNi4gUHJvcG9ydGlvbiBsYXN0IHNlZW4gKG9mIG51bWJlciBvYnNlcnZlZCkgDQojIDcuIE51bWJlciBpbnRlcm1pdHRlbnQgbWlzc2luZyBkYXRhIA0KIyA4LiBwcm9wb3J0aW9uIGludGVybWl0dGVudCBtaXNzaW5nIChvZiBudW1iZXIgb24tc3R1ZHkpDQoNCiMgVFJUOkENCnNhbW9uVGFibWF0MShkMiAlPiUgZmlsdGVyKHRydCA9PSAiQSIpICU+JSBzZWxlY3QoY29udGFpbnMoInBhaW4uIikpKSAlPiUNCiAgc2Ftb25UYWJsZTEoKQ0KIyBDaGVjaw0KcDFfYSA8LSBzYW1vbkRhdGFDaGVjayhkMiAlPiUgZmlsdGVyKHRydCA9PSAiQSIpICU+JSBzZWxlY3QoY29udGFpbnMoInBhaW4uIikpICU+JSBhcy5kYXRhLmZyYW1lKCkpDQpwMl9hIDwtICAgc2Ftb25UYWJtYXQxKGQyICU+JSBmaWx0ZXIodHJ0ID09ICJBIikgJT4lIHNlbGVjdChjb250YWlucygicGFpbi4iKSkpDQpwM19hIDwtIGRhdGEuZnJhbWUodGltZSA9IDA6MTAsDQogICAgICAgICAgICAgICAgICAgbWlzcyA9IDE1MCAtIHAyX2FbLDNdLA0KICAgICAgICAgICAgICAgICAgIG1vbiAgPSBjKHN1bShwMV9hJG1pc3NpbmdQYXR0ZXJucyA9PSAnX19fX19fX19fX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfYSRtaXNzaW5nUGF0dGVybnMgPT0gJypfX19fX19fX19fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX2EkbWlzc2luZ1BhdHRlcm5zID09ICcqKl9fX19fX19fXycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShwMV9hJG1pc3NpbmdQYXR0ZXJucyA9PSAnKioqX19fX19fX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfYSRtaXNzaW5nUGF0dGVybnMgPT0gJyoqKipfX19fX19fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX2EkbWlzc2luZ1BhdHRlcm5zID09ICcqKioqKl9fX19fXycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShwMV9hJG1pc3NpbmdQYXR0ZXJucyA9PSAnKioqKioqX19fX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfYSRtaXNzaW5nUGF0dGVybnMgPT0gJyoqKioqKipfX19fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX2EkbWlzc2luZ1BhdHRlcm5zID09ICcqKioqKioqKl9fXycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShwMV9hJG1pc3NpbmdQYXR0ZXJucyA9PSAnKioqKioqKioqX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfYSRtaXNzaW5nUGF0dGVybnMgPT0gJyoqKioqKioqKipfJykpLA0KICAgICAgICAgICAgICAgICAgIGludCA9IHAyX2FbLDddKQ0KDQojIFRSVDpQDQpzYW1vblRhYm1hdDEoZDIgJT4lIGZpbHRlcih0cnQgPT0gIlAiKSAlPiUgc2VsZWN0KGNvbnRhaW5zKCJwYWluLiIpKSkgJT4lDQogIHNhbW9uVGFibGUxKCkNCiMgQ2hlY2sNCnAxX3AgPC0gc2Ftb25EYXRhQ2hlY2soZDIgJT4lIGZpbHRlcih0cnQgPT0gIlAiKSAlPiUgc2VsZWN0KGNvbnRhaW5zKCJwYWluLiIpKSAlPiUgYXMuZGF0YS5mcmFtZSgpKQ0KcDJfcCA8LSAgIHNhbW9uVGFibWF0MShkMiAlPiUgZmlsdGVyKHRydCA9PSAiUCIpICU+JSBzZWxlY3QoY29udGFpbnMoInBhaW4uIikpKQ0KcDNfcCA8LSBkYXRhLmZyYW1lKHRpbWUgPSAwOjEwLA0KICAgICAgICAgICAgICAgICAgIG1pc3MgPSAxNTAgLSBwMl9wWywzXSwNCiAgICAgICAgICAgICAgICAgICBtb24gID0gYyhzdW0ocDFfcCRtaXNzaW5nUGF0dGVybnMgPT0gJ19fX19fX19fX19fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX3AkbWlzc2luZ1BhdHRlcm5zID09ICcqX19fX19fX19fXycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShwMV9wJG1pc3NpbmdQYXR0ZXJucyA9PSAnKipfX19fX19fX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfcCRtaXNzaW5nUGF0dGVybnMgPT0gJyoqKl9fX19fX19fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX3AkbWlzc2luZ1BhdHRlcm5zID09ICcqKioqX19fX19fXycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShwMV9wJG1pc3NpbmdQYXR0ZXJucyA9PSAnKioqKipfX19fX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfcCRtaXNzaW5nUGF0dGVybnMgPT0gJyoqKioqKl9fX19fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX3AkbWlzc2luZ1BhdHRlcm5zID09ICcqKioqKioqX19fXycpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bShwMV9wJG1pc3NpbmdQYXR0ZXJucyA9PSAnKioqKioqKipfX18nKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0ocDFfcCRtaXNzaW5nUGF0dGVybnMgPT0gJyoqKioqKioqKl9fJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKHAxX3AkbWlzc2luZ1BhdHRlcm5zID09ICcqKioqKioqKioqXycpKSwNCiAgICAgICAgICAgICAgICAgICBpbnQgPSBwMl9wWyw3XSkNCmBgYA0KDQpgYGB7ciBoZWF0bWFwLWNyZWF0ZX0NCnBhY21hbjo6cF9sb2FkKENvbXBsZXhIZWF0bWFwKQ0KcGFjbWFuOjpwX2xvYWQoY2lyY2xpemUpDQoNCnRfY29sdW1uX2hhIDwtIEhlYXRtYXBBbm5vdGF0aW9uKA0KICBiYXIxID0gYW5ub19iYXJwbG90KGNiaW5kKHAzX2FbJ21pc3MnXSwgcDNfcFsnbWlzcyddKSwNCiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB1bml0KDIsICJjbSIpLA0KICAgICAgICAgICAgICAgICAgICAgIHlsaW0gPSBjKDAsIDEwMCksDQogICAgICAgICAgICAgICAgICAgICAgYXhpc19wYXJhbSA9IGxpc3QoYXQ9YygyNSwgNTAsIDEwMCkpLA0KICAgICAgICAgICAgICAgICAgICAgIGdwID0gZ3BhcihmaWxsID0gYygiI0E2Q0VFMyIsIiNCMkRGOEEiKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCAgPSBjKCIjQTZDRUUzIiwiI0IyREY4QSIpKSksDQogIGJhcjIgPSBhbm5vX2JhcnBsb3QoY2JpbmQocDNfYVsnbW9uJ10sIHAzX3BbJ21vbiddKSwNCiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB1bml0KDIsICJjbSIpLA0KICAgICAgICAgICAgICAgICAgICAgIHlsaW0gPSBjKDAsMTApLA0KICAgICAgICAgICAgICAgICAgICAgIGdwID0gZ3BhcihmaWxsID0gYygiI0E2Q0VFMyIsIiNCMkRGOEEiKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCAgPSBjKCIjQTZDRUUzIiwiI0IyREY4QSIpKSksDQogIGFubm90YXRpb25fbGFiZWwgPSBjKCJNaXNzaW5nXG5PdmVyYWxsIiwiTW9ub3RvbmUiKSwNCiAgZ2FwID0gdW5pdCgzLCAicG9pbnRzIikNCikNCg0KYl9jb2x1bW5faGEgPC0gSGVhdG1hcEFubm90YXRpb24oDQogIGZvbzEgPSAgZDMgJT4lIA0KICAgIGdyb3VwX2J5KHRpbWUsIGdyb3VwKSAlPiUgDQogICAgc3VtbWFyaXNlKG0gPSBtZWFuKHBhaW4pKSAlPiUgDQogICAgdW5ncm91cCgpICU+JSANCiAgICBwaXZvdF93aWRlcihuYW1lc19mcm9tICA9IGdyb3VwLA0KICAgICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gbSkgJT4lICANCiAgICBzZWxlY3QoLXRpbWUpICU+JSAgDQogICAgYW5ub19saW5lcygNCiAgICAgIGFkZF9wb2ludHMgPSBUUlVFLA0KICAgICAgZ3AgICAgPSBncGFyKGNvbCA9IGMoIiMxRjc4QjQiLCIjQTZDRUUzIiwiI0IyREY4QSIsIiMzM0EwMkMiKSksDQogICAgICBwdF9ncCA9IGdwYXIoY29sID0gYygiIzFGNzhCNCIsIiNBNkNFRTMiLCIjQjJERjhBIiwiIzMzQTAyQyIpKQ0KICAgICksDQogIGFubm90YXRpb25fbmFtZV9zaWRlID0gImxlZnQiLA0KICBhbm5vdGF0aW9uX2xhYmVsID0gYygiTWVhbiIpDQopDQoNCmNvbF9mdW4gPC0gY2lyY2xpemU6OmNvbG9yUmFtcDIoYnJlYWtzID0gYygwLCAxNiwgMjQsIDMyLCA2NCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobiA9IDksIG5hbWUgPSAiUHVPciIpW2MoMSwzLDUsNyw5KV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeSA9IDApDQoNCmhhX2xpc3QgPC0gSGVhdG1hcChkMiAlPiUNCiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChjb250YWlucygicGFpbiIpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWF0cml4KCksDQogICAgICAgICAgICAgICAgICAgaGVhdG1hcF9sZWdlbmRfcGFyYW0gPSBsaXN0KHRpdGxlID0gJ1BhaW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IGMoMCwgMTUsIDI0LCAzMiwgNjQpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIwLU1pbiIsICIxNS1RMSIsICIyNC1RMi9NIiwgICIzMi1RMyIsICI2NC1NYXgiKSksDQogICAgICAgICAgICAgICAgICAgY29sID0gY29sX2Z1biwNCiAgICAgICAgICAgICAgICAgICBuYV9jb2wgPSAiZ3JheTI1IiwNCiAgICAgICAgICAgICAgICAgICBjb2x1bW5fbGFiZWxzID0gMDoxMCwNCiAgICAgICAgICAgICAgICAgICBjb2x1bW5fbmFtZXNfcm90ID0gMCwNCiAgICAgICAgICAgICAgICAgICBjb2x1bW5fZ2FwID0gdW5pdCgyLCAibW0iKSwNCiAgICAgICAgICAgICAgICAgICBjbHVzdGVyX2NvbHVtbnMgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3Jvd3MgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICBjbHVzdGVyX3Jvd19zbGljZXMgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICByb3dfc3BsaXQgPSBkMiRncm91cCwNCiAgICAgICAgICAgICAgICAgICByb3dfdGl0bGUgPSAnICcsDQogICAgICAgICAgICAgICAgICAgcm93X3RpdGxlX2dwID0gZ3BhcihjZXggPSAwLjIpLA0KICAgICAgICAgICAgICAgICAgIHRvcF9hbm5vdGF0aW9uICAgID0gdF9jb2x1bW5faGEsDQogICAgICAgICAgICAgICAgICAgYm90dG9tX2Fubm90YXRpb24gPSBiX2NvbHVtbl9oYQ0KKSArDQogIEhlYXRtYXAoZDIgJT4lIHB1bGwoZ3JvdXApLA0KICAgICAgICAgIG5hbWUgPSAiVFJUIiwNCiAgICAgICAgICBjb2wgPSBjKCIjMUY3OEI0IiwiI0E2Q0VFMyIsIiNCMkRGOEEiLCIjMzNBMDJDIiksDQogICAgICAgICAgc2hvd19oZWF0bWFwX2xlZ2VuZCA9IEZBTFNFLA0KICAgICAgICAgIGhlYXRtYXBfbGVnZW5kX3BhcmFtICA9IGxpc3QodGl0bGUgPSAiVFJUIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkFjdGl2ZSIsIkEgdy9NaXNzIiwgIlAgdy9NaXNzIiwiUGxhY2VibyIpKSwNCiAgICAgICAgICBib3R0b21fYW5ub3RhdGlvbiA9IEhlYXRtYXBBbm5vdGF0aW9uKGdncGxvdCA9IGFubm9fZW1wdHkoYm9yZGVyID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHVuaXQoMywgImNtIikpKQ0KICApICsNCiAgSGVhdG1hcChkMiAlPiUgcHVsbChibWkpLA0KICAgICAgICAgIG5hbWUgPSAiQk1JIiwNCiAgICAgICAgICBjb2wgPSBjaXJjbGl6ZTo6Y29sb3JSYW1wMihicmVha3MgPSBjKDE4LCAyNSwgMjcsIDMwLCAzNSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IFJDb2xvckJyZXdlcjo6YnJld2VyLnBhbChuID0gOSwgbmFtZSA9ICJZbE9yUmQiKVtjKDEsMyw1LDcsOSldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeSA9IDApLA0KICAgICAgICAgIGhlYXRtYXBfbGVnZW5kX3BhcmFtID0gbGlzdCh0aXRsZSA9ICJcbkJNSSAoa2cvbTIpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBjKDE4LCAyNSwgMjcsIDMwLCAzNSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjE4LU1pbiIsICIyNS1RMSIsICIyNy1RMiIsICAiMzAtUTMiLCAiMzUtTWF4IikpLA0KICAgICAgICAgIGJvdHRvbV9hbm5vdGF0aW9uID0gSGVhdG1hcEFubm90YXRpb24oc3VtbWFyeSA9IGFubm9fc3VtbWFyeShncCA9IGdwYXIoZmlsbCA9IGMoIiMxRjc4QjQiLCIjQTZDRUUzIiwiI0IyREY4QSIsIiMzM0EwMkMiKSkpKQ0KICApICsNCiAgSGVhdG1hcChkMiAlPiUgcHVsbChhZ2UpLA0KICAgICAgICAgIG5hbWUgPSAiQWdlIiwNCiAgICAgICAgICBjb2wgPSBjaXJjbGl6ZTo6Y29sb3JSYW1wMihicmVha3MgPSBjKDE5LCAzNywgNDksIDYyLCA4OCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IFJDb2xvckJyZXdlcjo6YnJld2VyLnBhbChuID0gOSwgbmFtZSA9ICJZbE9yUmQiKVtjKDEsMyw1LDcsOSldLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeSA9IDApLA0KICAgICAgICAgIGhlYXRtYXBfbGVnZW5kX3BhcmFtID0gbGlzdCh0aXRsZSA9ICJcbkFnZSAoeXIpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBjKDE5LCAzNywgNDksIDYyLCA4OCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjE5LU1pbiIsICIzNy1RMSIsICI0OS1RMiIsICAiNjIwLVEzIiwgIjg4LU1heCIpKSwNCiAgICAgICAgICBib3R0b21fYW5ub3RhdGlvbiA9IEhlYXRtYXBBbm5vdGF0aW9uKHN1bW1hcnkgPSBhbm5vX3N1bW1hcnkoZ3AgPSBncGFyKGZpbGwgPSBjKCIjMUY3OEI0IiwiI0E2Q0VFMyIsIiNCMkRGOEEiLCIjMzNBMDJDIikpKSkNCiAgKSsNCiAgSGVhdG1hcChkMiAlPiUgcHVsbChnZW5kZXIpLA0KICAgICAgICAgIG5hbWUgPSAiR2VuZGVyIiwNCiAgICAgICAgICBjb2wgPSBjKCIjRkZDQ0ZGIiwiI0NDRkZGRiIpLA0KICAgICAgICAgIHNob3dfaGVhdG1hcF9sZWdlbmQgPSBGQUxTRSwNCiAgICAgICAgICBoZWF0bWFwX2xlZ2VuZF9wYXJhbSAgPSBsaXN0KHRpdGxlID0gIkdlbmRlciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IGMoIkYiLCJNIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJGZW1hbGUiLCJNYWxlIikpLA0KICAgICAgICAgIGJvdHRvbV9hbm5vdGF0aW9uID0gSGVhdG1hcEFubm90YXRpb24oc3VtbWFyeSA9IGFubm9fc3VtbWFyeSgNCiAgICAgICAgICAgIGJvcmRlciA9IEZBTFNFLA0KICAgICAgICAgICAgYXhpc19wYXJhbSA9IGxpc3Qoc2lkZSA9ICdyaWdodCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA9IGMoMCwgMC4yNSwgMC41LCAwLjc1LCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoJzAnLCdGZW1hbGUnLCcuNScsJ01hbGUnLCcxJykpKSkNCiAgKSANCmBgYA0KDQo8c3R5bGU+DQpkaXYuZ3JheSB7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDVweDsgbWFyZ2luLXJpZ2h0OiAzNTBweDt9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcyA9ICJncmF5Ij4NCioqUGhhc2UgSUlJIGNsaW5pY2FsIHRyaWFsIG9uICpQc29yaWFzaXMqIGNvbXBhcmluZyBBY3RpdmUgVHJlYXRtZW50IHZzIFBsYWNlYm8gZm9yIG91dGNvbWUgdmFyaWFibGUgUGFpbioqIChjb2xsZWN0ZWQgb24gYSB2aXN1YWwgYW5hbG9nIHNjYWxlIFswLTEwMF0pLiBUaGUgcGFpbiBvdXRjb21lIHZhcmlhYmxlIHdhcyByZW9yZGVyZWQgYW5kIGNsYXNzaWZpZWQgaW50byBmb3VyIGRpc3RpbmN0aXZlIGdyb3VwczogQWN0aXZlIFRyZWF0bWVudCB3aXRob3V0IFvCoMKgwqBde3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjMUY3OEI0In0gd2l0aCBbwqDCoMKgXXtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0E2Q0VFMyJ9IGFueSBtaXNzaW5nIGRhdGEgYW5kIFBsYWNlYm8gd2l0aG91dCBbwqDCoMKgXXtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzMzQTAyQyJ9IHdpdGggW8KgwqDCoF17c3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNCMkRGOEEifSBhbnkgbWlzc2luZyBkYXRhLiBUaGUgbG9uZ2l0dWRpbmFsIHBhaW4gc2NvcmVzIGFyZSB2aXN1YWxpemVkIHRocm91Z2ggYSBjb2xvci1jb2RlZCBIZWF0bWFwIHdoZXJlIG1pc3NpbmcgdmFsdWVzIGFyZSBjb2RlZCBbwqDCoMKgXXtzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzdmN2Y3ZiJ9LiBWZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBmaWd1cmVzIHdlcmUgYWRkZWQgdG8gYWRvcm4gZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIG1pc3NpbmcgZGF0YS4gVmVydGljYWwgdG9wIGFubm90YXRpb25zIGRpc3BsYXkgdGhlICpvdmVyYWxsKiBhbmQgKm1vbm90b25lKiBtaXNzaW5nIGRhdGEgcGF0dGVybnMsIHdoaWxlIGJvdHRvbSBhbm5vdGF0aW9ucyBkaXNwbGF5IHRoZSBsb25naXR1ZGluYWwgKm1lYW4qIHJlc3VsdHMgZm9yIGVhY2ggb2YgdGhlIGFmb3JlbWVudGlvbmVkIGdyb3Vwcy4gUmlnaHQgaG9yaXpvbnRhbCBmaWd1cmVzIHJlcHJlc2VudCB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvdmFyaWF0ZXMgZXh0ZW5kZWQgYnkgdGhlIGJvdHRvbSBzdW1tYXJ5IGRpc3BsYXkuDQo8L2Rpdj4NCjxicj4NCmBgYHtyIGhlYXRtYXAtZHJhdywgZmlnLndpZHRoID0gMTQsIGZpZy5oZWlnaHQgPSA5LCBkcGkgPSA2MDB9DQpkcmF3KGhhX2xpc3QsDQogICAgIGhlYXRtYXBfbGVnZW5kX3NpZGUgPSAncmlnaHQnLA0KICAgICBnYXAgPSB1bml0KGMoMiw2LDYsNSksICdtbScpKQ0KDQpkZWNvcmF0ZV9hbm5vdGF0aW9uKCJnZ3Bsb3QiLCB7DQogIHZwIDwtIGN1cnJlbnQudmlld3BvcnQoKSRuYW1lDQogIHByaW50KA0KICAgIGdncGxvdCgNCiAgICAgIGRhdGEgPSBkMiwNCiAgICAgIGFlcyhncm91cCwgZmlsbCA9IGdyb3VwKSkgKw0KICAgICAgZ2VvbV9iYXIoKSArDQogICAgICBnZW9tX3RleHQoc3RhdD0nY291bnQnLCBhZXMobGFiZWw9Li5jb3VudC4uKSwgdmp1c3Q9MS4yLCBzaXplID0gMi41KSArDQogICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjMUY3OEI0IiwiI0E2Q0VFMyIsIiNCMkRGOEEiLCIjMzNBMDJDIikpICsNCiAgICAgIGxhYnMoeSA9IE5VTEwpKw0KICAgICAgdGhlbWVfdm9pZCgpICsNCiAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksDQogICAgdnAgPSB2cA0KICApDQp9KQ0KDQpkZWNvcmF0ZV9oZWF0bWFwX2JvZHkoIlRSVCIsIHtncmlkLnRleHQoIkFjdGl2ZSIpfSwgICAgICAgICAgcm93X3NsaWNlID0gMSkNCmRlY29yYXRlX2hlYXRtYXBfYm9keSgiVFJUIiwge2dyaWQudGV4dCgiQWN0aXZlXG53LyBNaXNzIil9LCByb3dfc2xpY2UgPSAyKQ0KZGVjb3JhdGVfaGVhdG1hcF9ib2R5KCJUUlQiLCB7Z3JpZC50ZXh0KCJQbGFjZWJvXG53LyBNaXNzIil9LHJvd19zbGljZSA9IDMpDQpkZWNvcmF0ZV9oZWF0bWFwX2JvZHkoIlRSVCIsIHtncmlkLnRleHQoIlBsYWNlYm8iKX0sICAgICAgICAgcm93X3NsaWNlID0gNCkNCmBgYA0KDQpgYGB7cn0NCnNlc3Npb25pbmZvOjpzZXNzaW9uX2luZm8oKSU+JQ0KICBkZXRhaWxzOjpkZXRhaWxzKA0KICAgIHN1bW1hcnkgPSAnQ3VycmVudCBzZXNzaW9uIGluZm8nLA0KICAgIG9wZW4gICAgPSBGQUxTRQ0KICApDQpgYGANCg0KIyMjIyBMaW5rcw0KDQpbQ29tcGxleEhlYXRtYXBdKGh0dHBzOi8vam9rZXJnb28uZ2l0aHViLmlvL0NvbXBsZXhIZWF0bWFwLXJlZmVyZW5jZS9ib29rLyAiaHR0cHM6Ly9qb2tlcmdvby5naXRodWIuaW8vQ29tcGxleEhlYXRtYXAtcmVmZXJlbmNlL2Jvb2svY29tcGxleGhlYXRtYXAtY292ZXIuanBnIikNCg0KW1BhY2thZ2UgUmVmZXJlbmNlXShodHRwczovL2pva2VyZ29vLmdpdGh1Yi5pby9Db21wbGV4SGVhdG1hcC9pbmRleC5odG1sICJodHRwOi8vam9rZXJnb28uZ2l0aHViLmlvL2NvbXBsZXhoZWF0bWFwX2xvZ28uc3ZnIikNCg0KW3NlcmlhdGlvbjogSW5mcmFzdHJ1Y3R1cmUgZm9yIE9yZGVyaW5nIE9iamVjdHMgVXNpbmcgU2VyaWF0aW9uXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvc2VyaWF0aW9uL2luZGV4Lmh0bWwpDQoNCltzYW1vbjogU2Vuc2l0aXZpdHkgQW5hbHlzaXMgZm9yIE1pc3NpbmcgRGF0YV0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3NhbW9uL2luZGV4Lmh0bWwpDQo=