Abstract Drafts:

Anatomic pathology reports are semi-structured texts, with specific jargon that include sensitive patient information. Laboratory information systems provide statistics and quality control measures but more information is needed from a clinical view. R is a practical way to get more insight from pathology reports.

Istanbul Memorial Healthcare Pathology, serves 8 hospitals in 5 cities. The hospitals use data systems from different vendors and extracted data are available in various formats (csv, json, excel and pdf), but which can be joined via unique patient and biopsy number.

Reports are generated via bookdown. Data are pre-processed in the first chapters, saved as separate RDS files, then read in other chapters as necessary. Bookdown gives flexibility to add new analysis in any place. The reports are rendered with cron jobs.

Various packages and regular expressions are used to label pathology reports, follow up of patients, and generate correlations between cytology-pathology and repeat biopsies. Specimen movements, transfer-reporting time measurements, and laboratory physician workload are calculated. Per disease patient survival analyses are also evaluated.
This talk is describing an applied uses of R in clinical practice. Medical doctors and laboratory managers can use R and bookdown to generate reports for their own needs and get quality control measures that are specific for their work conditions. R packages that are used for publication quality tables and graphs can also be used for routine workflow. Cron jobs makes it easy to get most up to date data summaries without manual intervention. With this reduced workload, laboratory managers and physicians can focus on solutions.

This talk is describing an applied use of R in clinical practice. Medical doctors and laboratory managers can use R and bookdown to generate reports for their own needs and get quality control measures that are specific for their work conditions. This example will show the use of R in an anatomic pathology laboratory.
Anatomic pathology reports are semi-structured texts, have specific jargon, and include sensitive patient information. Laboratory information systems provide statistics and quality control measures but more information is needed from a clinical view. R is practical to get more insight from pathology reports.
Istanbul Memorial Healthcare Pathology, serves 8 hospitals from 5 cities. The hospitals have data systems from different vendors and data could be gathered in pieces in csv, json, excel and pdf formats which could be joined via unique patient and biopsy number.
The reports are generated via bookdown. First chapters are for preprocessing data. To reduce memory use data are saved as separate RDS files, then read in other chapters as necessary. Bookdown gives flexibility to add new analysis in any place. The reports are rendered with cron jobs.
Various packages and regular expressions are used to label pathology reports, follow up patients, generate cytology-pathology and repeated biopsy correlations.
Specimen movements, transfer-reporting time measurements, laboratory-physician workload are calculated. With follow-up of patients survival analysis per disease are evaluated.

Reading data files separately also lets one to render a single chapter quickly and see a specific result.


In our laboratory the following packages are used to prepare daily and weekly quality control reports. 
{lubridate} extracting day, hour of specimen movements, calculating transfer and reporting dates.
{rmarkdown} and {bookdown} to prepare the final report as html and pdf.
{cronR} for daily report update
{fs} to locate common data folder
{gt} {gtsummary} and {glue} to make tables
{ggstatsplot} to generate plots
{DiagrammeR} to generate workflow diagrams
Readxl readr and jsonlite to read data
{pdftools} to read pdf data, RegEx to label pathology report parts and convert them to dataframes. 
stringr and regular expressions to categorize reports for organs systems, diagnosis, ancillary techniques used.
Using patient number and biopsy date we can follow up patients when they get follow-up. Since the reports are labelled for organs and diagnoses we can make comparisons for cytology-pathology correlation, initial biopsy and radical resection comparisons. We can define discrepant cases and they are later reviewed for quality control.
Defining hospitals, clinicians and pathologists as parameters it is possible to generate parameter based markdown reports.
Workload calculation.

In the future; as we continue to follow up patients we will be able to perform survival analysis per disease. We also plan to auto generate and publish statistics to our website.
other attached packages:
 [1] rspivot_0.1.1.9003 shiny_1.6.0        networkD3_0.4      downlit_0.2.1     
 [5] bslib_0.2.5.9000   sessioninfo_1.1.1  ggforce_0.3.3      magrittr_2.0.1    
 [9] scales_1.1.1       forcats_0.5.1      stringr_1.4.0      dplyr_1.0.6       
[13] purrr_0.3.4        readr_1.4.0        tidyr_1.1.3        tibble_3.1.2      
[17] ggplot2_3.3.3      tidyverse_1.3.1   

loaded via a namespace (and not attached):
  [1] readxl_1.3.1              uuid_0.1-4               
  [3] pairwiseComparisons_3.1.5 backports_1.2.1          
  [5] tidytext_0.3.1            systemfonts_1.0.2        
  [7] igraph_1.2.6              plyr_1.8.6               
  [9] splines_4.1.0             gmp_0.6-2                
 [11] SnowballC_0.7.0           TH.data_1.0-10           
 [13] kSamples_1.2-9            ipmisc_6.0.2             
 [15] digest_0.6.27             SuppDists_1.1-9.5        
 [17] htmltools_0.5.1.1         fansi_0.5.0              
 [19] checkmate_2.0.0           memoise_2.0.0            
 [21] automagic_0.5.1           gtsummary_1.4.0          
 [23] paletteer_1.3.0           openxlsx_4.2.3           
 [25] modelr_0.1.8              officer_0.3.18           
 [27] sandwich_3.0-0            colorspace_2.0-1         
 [29] rvest_1.0.0               ggrepel_0.9.1            
 [31] haven_2.4.1               xfun_0.23                
 [33] callr_3.7.0               crayon_1.4.1             
 [35] jsonlite_1.7.2            attachment_0.2.1         
 [37] zeallot_0.1.0             zoo_1.8-9                
 [39] survival_3.2-11           glue_1.4.2               
 [41] polyclip_1.10-0           gtable_0.3.0             
 [43] emmeans_1.6.0             webshot_0.5.2            
 [45] MatrixModels_0.5-0        statsExpressions_1.0.1   
 [47] Rmpfr_0.8-4               mvtnorm_1.1-1            
 [49] DBI_1.1.1                 PMCMRplus_1.9.0          
 [51] Rcpp_1.0.6                performance_0.7.2        
 [53] xtable_1.8-4              htmlwidgets_1.5.3        
 [55] httr_1.4.2                DiagrammeR_1.0.6.1       
 [57] RColorBrewer_1.1-2        ellipsis_0.3.2           
 [59] pkgconfig_2.0.3           reshape_0.8.8            
 [61] farver_2.1.0              multcompView_0.1-8       
 [63] sass_0.4.0.9000           dbplyr_2.1.1             
 [65] utf8_1.2.1                janitor_2.1.0            
 [67] here_1.0.1                later_1.2.0              
 [69] labeling_0.4.2            effectsize_0.4.4-1       
 [71] tidyselect_1.1.1          rlang_0.4.11             
 [73] ggcorrplot_0.1.3          visNetwork_2.0.9         
 [75] munsell_0.5.0             cellranger_1.1.0         
 [77] tools_4.1.0               cachem_1.0.5             
 [79] cli_2.5.0                 generics_0.1.0           
 [81] broom_0.7.6               evaluate_0.14            
 [83] fastmap_1.1.0             BWStest_0.2.2            
 [85] yaml_2.2.1                rematch2_2.1.2           
 [87] tufte_0.9                 processx_3.5.2           
 [89] knitr_1.33                fs_1.5.0                 
 [91] zip_2.1.1                 WRS2_1.1-1               
 [93] pbapply_1.4-3             mime_0.10                
 [95] formatR_1.9               xml2_1.3.2               
 [97] correlation_0.6.1         tokenizers_0.2.1         
 [99] compiler_4.1.0            rstudioapi_0.13          
[101] ggsignif_0.6.1            gt_0.3.0                 
[103] reprex_2.0.0              broom.helpers_1.3.0      
[105] tweenr_1.0.2              stringi_1.6.2            
[107] highr_0.9                 ps_1.6.0                 
[109] parameters_0.13.0         desc_1.3.0               
[111] gdtools_0.2.3             lattice_0.20-44          
[113] Matrix_1.3-3              commonmark_1.7           
[115] vctrs_0.3.8               pillar_1.6.1             
[117] lifecycle_1.0.0           mc2d_0.1-19              
[119] jquerylib_0.1.4           estimability_1.3         
[121] data.table_1.14.0         insight_0.14.0           
[123] flextable_0.6.6           httpuv_1.6.1             
[125] patchwork_1.1.1           R6_2.5.0                 
[127] bookdown_0.22.2           promises_1.2.0.1         
[129] janeaustenr_0.1.5         BayesFactor_0.9.12-4.2   
[131] codetools_0.2-18          MASS_7.3-54              
[133] gtools_3.8.2              assertthat_0.2.1         
[135] rprojroot_2.0.2           withr_2.4.2              
[137] multcomp_1.4-17           bayestestR_0.9.0         
[139] parallel_4.1.0            hms_1.1.0                
[141] grid_4.1.0                coda_0.19-4              
[143] rmarkdown_2.8.3           snakecase_0.11.0         
[145] lubridate_1.7.10          base64enc_0.1-3          
[147] ggstatsplot_0.7.2       
LS0tCnRpdGxlOiAiR2VuZXJhdGluZyByZXBvcnRzIHdpdGggUiBmb3IgYW5hdG9taWMgcGF0aG9sb2d5IGxhYm9yYXRvcnkgcXVhbGl0eSBjb250cm9sIgpzdWJ0aXRsZTogIlIvTWVkaWNpbmUgMjAyMSBBY2NlcHRlZCBBYnN0cmFjdCIKYXV0aG9yOiAiU2VyZGFyIEJhbGNpLCBNRCwgUGF0aG9sb2dpc3QiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgotIE1lbW9yaWFsIEhlYWx0aGNhcmUgR3JvdXAsIFBhdGhvbG9neSBMYWJvcmF0b3J5LCBJc3RhbmJ1bAotIHNlcmRhci5iYWxjaUBtZW1vcmlhbC5jb20udHIgZHJzZXJkYXJiYWxjaUBnbWFpbC5jb20gCgoKQWJzdHJhY3QgRHJhZnRzOgoKYGBgCkFuYXRvbWljIHBhdGhvbG9neSByZXBvcnRzIGFyZSBzZW1pLXN0cnVjdHVyZWQgdGV4dHMsIHdpdGggc3BlY2lmaWMgamFyZ29uIHRoYXQgaW5jbHVkZSBzZW5zaXRpdmUgcGF0aWVudCBpbmZvcm1hdGlvbi4gTGFib3JhdG9yeSBpbmZvcm1hdGlvbiBzeXN0ZW1zIHByb3ZpZGUgc3RhdGlzdGljcyBhbmQgcXVhbGl0eSBjb250cm9sIG1lYXN1cmVzIGJ1dCBtb3JlIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBmcm9tIGEgY2xpbmljYWwgdmlldy4gUiBpcyBhIHByYWN0aWNhbCB3YXkgdG8gZ2V0IG1vcmUgaW5zaWdodCBmcm9tIHBhdGhvbG9neSByZXBvcnRzLgoKSXN0YW5idWwgTWVtb3JpYWwgSGVhbHRoY2FyZSBQYXRob2xvZ3ksIHNlcnZlcyA4IGhvc3BpdGFscyBpbiA1IGNpdGllcy4gVGhlIGhvc3BpdGFscyB1c2UgZGF0YSBzeXN0ZW1zIGZyb20gZGlmZmVyZW50IHZlbmRvcnMgYW5kIGV4dHJhY3RlZCBkYXRhIGFyZSBhdmFpbGFibGUgaW4gdmFyaW91cyBmb3JtYXRzIChjc3YsIGpzb24sIGV4Y2VsIGFuZCBwZGYpLCBidXQgd2hpY2ggY2FuIGJlIGpvaW5lZCB2aWEgdW5pcXVlIHBhdGllbnQgYW5kIGJpb3BzeSBudW1iZXIuCgpSZXBvcnRzIGFyZSBnZW5lcmF0ZWQgdmlhIGJvb2tkb3duLiBEYXRhIGFyZSBwcmUtcHJvY2Vzc2VkIGluIHRoZSBmaXJzdCBjaGFwdGVycywgc2F2ZWQgYXMgc2VwYXJhdGUgUkRTIGZpbGVzLCB0aGVuIHJlYWQgaW4gb3RoZXIgY2hhcHRlcnMgYXMgbmVjZXNzYXJ5LiBCb29rZG93biBnaXZlcyBmbGV4aWJpbGl0eSB0byBhZGQgbmV3IGFuYWx5c2lzIGluIGFueSBwbGFjZS4gVGhlIHJlcG9ydHMgYXJlIHJlbmRlcmVkIHdpdGggY3JvbiBqb2JzLgoKVmFyaW91cyBwYWNrYWdlcyBhbmQgcmVndWxhciBleHByZXNzaW9ucyBhcmUgdXNlZCB0byBsYWJlbCBwYXRob2xvZ3kgcmVwb3J0cywgZm9sbG93IHVwIG9mIHBhdGllbnRzLCBhbmQgZ2VuZXJhdGUgY29ycmVsYXRpb25zIGJldHdlZW4gY3l0b2xvZ3ktcGF0aG9sb2d5IGFuZCByZXBlYXQgYmlvcHNpZXMuIFNwZWNpbWVuIG1vdmVtZW50cywgdHJhbnNmZXItcmVwb3J0aW5nIHRpbWUgbWVhc3VyZW1lbnRzLCBhbmQgbGFib3JhdG9yeSBwaHlzaWNpYW4gd29ya2xvYWQgYXJlIGNhbGN1bGF0ZWQuIFBlciBkaXNlYXNlIHBhdGllbnQgc3Vydml2YWwgYW5hbHlzZXMgYXJlIGFsc28gZXZhbHVhdGVkLgpgYGAKCmBgYApUaGlzIHRhbGsgaXMgZGVzY3JpYmluZyBhbiBhcHBsaWVkIHVzZXMgb2YgUiBpbiBjbGluaWNhbCBwcmFjdGljZS4gTWVkaWNhbCBkb2N0b3JzIGFuZCBsYWJvcmF0b3J5IG1hbmFnZXJzIGNhbiB1c2UgUiBhbmQgYm9va2Rvd24gdG8gZ2VuZXJhdGUgcmVwb3J0cyBmb3IgdGhlaXIgb3duIG5lZWRzIGFuZCBnZXQgcXVhbGl0eSBjb250cm9sIG1lYXN1cmVzIHRoYXQgYXJlIHNwZWNpZmljIGZvciB0aGVpciB3b3JrIGNvbmRpdGlvbnMuIFIgcGFja2FnZXMgdGhhdCBhcmUgdXNlZCBmb3IgcHVibGljYXRpb24gcXVhbGl0eSB0YWJsZXMgYW5kIGdyYXBocyBjYW4gYWxzbyBiZSB1c2VkIGZvciByb3V0aW5lIHdvcmtmbG93LiBDcm9uIGpvYnMgbWFrZXMgaXQgZWFzeSB0byBnZXQgbW9zdCB1cCB0byBkYXRlIGRhdGEgc3VtbWFyaWVzIHdpdGhvdXQgbWFudWFsIGludGVydmVudGlvbi4gV2l0aCB0aGlzIHJlZHVjZWQgd29ya2xvYWQsIGxhYm9yYXRvcnkgbWFuYWdlcnMgYW5kIHBoeXNpY2lhbnMgY2FuIGZvY3VzIG9uIHNvbHV0aW9ucy4KClRoaXMgdGFsayBpcyBkZXNjcmliaW5nIGFuIGFwcGxpZWQgdXNlIG9mIFIgaW4gY2xpbmljYWwgcHJhY3RpY2UuIE1lZGljYWwgZG9jdG9ycyBhbmQgbGFib3JhdG9yeSBtYW5hZ2VycyBjYW4gdXNlIFIgYW5kIGJvb2tkb3duIHRvIGdlbmVyYXRlIHJlcG9ydHMgZm9yIHRoZWlyIG93biBuZWVkcyBhbmQgZ2V0IHF1YWxpdHkgY29udHJvbCBtZWFzdXJlcyB0aGF0IGFyZSBzcGVjaWZpYyBmb3IgdGhlaXIgd29yayBjb25kaXRpb25zLiBUaGlzIGV4YW1wbGUgd2lsbCBzaG93IHRoZSB1c2Ugb2YgUiBpbiBhbiBhbmF0b21pYyBwYXRob2xvZ3kgbGFib3JhdG9yeS4KYGBgCgpgYGAKQW5hdG9taWMgcGF0aG9sb2d5IHJlcG9ydHMgYXJlIHNlbWktc3RydWN0dXJlZCB0ZXh0cywgaGF2ZSBzcGVjaWZpYyBqYXJnb24sIGFuZCBpbmNsdWRlIHNlbnNpdGl2ZSBwYXRpZW50IGluZm9ybWF0aW9uLiBMYWJvcmF0b3J5IGluZm9ybWF0aW9uIHN5c3RlbXMgcHJvdmlkZSBzdGF0aXN0aWNzIGFuZCBxdWFsaXR5IGNvbnRyb2wgbWVhc3VyZXMgYnV0IG1vcmUgaW5mb3JtYXRpb24gaXMgbmVlZGVkIGZyb20gYSBjbGluaWNhbCB2aWV3LiBSIGlzIHByYWN0aWNhbCB0byBnZXQgbW9yZSBpbnNpZ2h0IGZyb20gcGF0aG9sb2d5IHJlcG9ydHMuCklzdGFuYnVsIE1lbW9yaWFsIEhlYWx0aGNhcmUgUGF0aG9sb2d5LCBzZXJ2ZXMgOCBob3NwaXRhbHMgZnJvbSA1IGNpdGllcy4gVGhlIGhvc3BpdGFscyBoYXZlIGRhdGEgc3lzdGVtcyBmcm9tIGRpZmZlcmVudCB2ZW5kb3JzIGFuZCBkYXRhIGNvdWxkIGJlIGdhdGhlcmVkIGluIHBpZWNlcyBpbiBjc3YsIGpzb24sIGV4Y2VsIGFuZCBwZGYgZm9ybWF0cyB3aGljaCBjb3VsZCBiZSBqb2luZWQgdmlhIHVuaXF1ZSBwYXRpZW50IGFuZCBiaW9wc3kgbnVtYmVyLgpUaGUgcmVwb3J0cyBhcmUgZ2VuZXJhdGVkIHZpYSBib29rZG93bi4gRmlyc3QgY2hhcHRlcnMgYXJlIGZvciBwcmVwcm9jZXNzaW5nIGRhdGEuIFRvIHJlZHVjZSBtZW1vcnkgdXNlIGRhdGEgYXJlIHNhdmVkIGFzIHNlcGFyYXRlIFJEUyBmaWxlcywgdGhlbiByZWFkIGluIG90aGVyIGNoYXB0ZXJzIGFzIG5lY2Vzc2FyeS4gQm9va2Rvd24gZ2l2ZXMgZmxleGliaWxpdHkgdG8gYWRkIG5ldyBhbmFseXNpcyBpbiBhbnkgcGxhY2UuIFRoZSByZXBvcnRzIGFyZSByZW5kZXJlZCB3aXRoIGNyb24gam9icy4KVmFyaW91cyBwYWNrYWdlcyBhbmQgcmVndWxhciBleHByZXNzaW9ucyBhcmUgdXNlZCB0byBsYWJlbCBwYXRob2xvZ3kgcmVwb3J0cywgZm9sbG93IHVwIHBhdGllbnRzLCBnZW5lcmF0ZSBjeXRvbG9neS1wYXRob2xvZ3kgYW5kIHJlcGVhdGVkIGJpb3BzeSBjb3JyZWxhdGlvbnMuClNwZWNpbWVuIG1vdmVtZW50cywgdHJhbnNmZXItcmVwb3J0aW5nIHRpbWUgbWVhc3VyZW1lbnRzLCBsYWJvcmF0b3J5LXBoeXNpY2lhbiB3b3JrbG9hZCBhcmUgY2FsY3VsYXRlZC4gV2l0aCBmb2xsb3ctdXAgb2YgcGF0aWVudHMgc3Vydml2YWwgYW5hbHlzaXMgcGVyIGRpc2Vhc2UgYXJlIGV2YWx1YXRlZC4KYGBgCgoKCi0tLQoKYGBgClJlYWRpbmcgZGF0YSBmaWxlcyBzZXBhcmF0ZWx5IGFsc28gbGV0cyBvbmUgdG8gcmVuZGVyIGEgc2luZ2xlIGNoYXB0ZXIgcXVpY2tseSBhbmQgc2VlIGEgc3BlY2lmaWMgcmVzdWx0LgoKCkluIG91ciBsYWJvcmF0b3J5IHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgYXJlIHVzZWQgdG8gcHJlcGFyZSBkYWlseSBhbmQgd2Vla2x5IHF1YWxpdHkgY29udHJvbCByZXBvcnRzLiAKe2x1YnJpZGF0ZX0gZXh0cmFjdGluZyBkYXksIGhvdXIgb2Ygc3BlY2ltZW4gbW92ZW1lbnRzLCBjYWxjdWxhdGluZyB0cmFuc2ZlciBhbmQgcmVwb3J0aW5nIGRhdGVzLgp7cm1hcmtkb3dufSBhbmQge2Jvb2tkb3dufSB0byBwcmVwYXJlIHRoZSBmaW5hbCByZXBvcnQgYXMgaHRtbCBhbmQgcGRmLgp7Y3JvblJ9IGZvciBkYWlseSByZXBvcnQgdXBkYXRlCntmc30gdG8gbG9jYXRlIGNvbW1vbiBkYXRhIGZvbGRlcgp7Z3R9IHtndHN1bW1hcnl9IGFuZCB7Z2x1ZX0gdG8gbWFrZSB0YWJsZXMKe2dnc3RhdHNwbG90fSB0byBnZW5lcmF0ZSBwbG90cwp7RGlhZ3JhbW1lUn0gdG8gZ2VuZXJhdGUgd29ya2Zsb3cgZGlhZ3JhbXMKUmVhZHhsIHJlYWRyIGFuZCBqc29ubGl0ZSB0byByZWFkIGRhdGEKe3BkZnRvb2xzfSB0byByZWFkIHBkZiBkYXRhLCBSZWdFeCB0byBsYWJlbCBwYXRob2xvZ3kgcmVwb3J0IHBhcnRzIGFuZCBjb252ZXJ0IHRoZW0gdG8gZGF0YWZyYW1lcy4gCnN0cmluZ3IgYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gY2F0ZWdvcml6ZSByZXBvcnRzIGZvciBvcmdhbnMgc3lzdGVtcywgZGlhZ25vc2lzLCBhbmNpbGxhcnkgdGVjaG5pcXVlcyB1c2VkLgpVc2luZyBwYXRpZW50IG51bWJlciBhbmQgYmlvcHN5IGRhdGUgd2UgY2FuIGZvbGxvdyB1cCBwYXRpZW50cyB3aGVuIHRoZXkgZ2V0IGZvbGxvdy11cC4gU2luY2UgdGhlIHJlcG9ydHMgYXJlIGxhYmVsbGVkIGZvciBvcmdhbnMgYW5kIGRpYWdub3NlcyB3ZSBjYW4gbWFrZSBjb21wYXJpc29ucyBmb3IgY3l0b2xvZ3ktcGF0aG9sb2d5IGNvcnJlbGF0aW9uLCBpbml0aWFsIGJpb3BzeSBhbmQgcmFkaWNhbCByZXNlY3Rpb24gY29tcGFyaXNvbnMuIFdlIGNhbiBkZWZpbmUgZGlzY3JlcGFudCBjYXNlcyBhbmQgdGhleSBhcmUgbGF0ZXIgcmV2aWV3ZWQgZm9yIHF1YWxpdHkgY29udHJvbC4KRGVmaW5pbmcgaG9zcGl0YWxzLCBjbGluaWNpYW5zIGFuZCBwYXRob2xvZ2lzdHMgYXMgcGFyYW1ldGVycyBpdCBpcyBwb3NzaWJsZSB0byBnZW5lcmF0ZSBwYXJhbWV0ZXIgYmFzZWQgbWFya2Rvd24gcmVwb3J0cy4KV29ya2xvYWQgY2FsY3VsYXRpb24uCgpJbiB0aGUgZnV0dXJlOyBhcyB3ZSBjb250aW51ZSB0byBmb2xsb3cgdXAgcGF0aWVudHMgd2Ugd2lsbCBiZSBhYmxlIHRvIHBlcmZvcm0gc3Vydml2YWwgYW5hbHlzaXMgcGVyIGRpc2Vhc2UuIFdlIGFsc28gcGxhbiB0byBhdXRvIGdlbmVyYXRlIGFuZCBwdWJsaXNoIHN0YXRpc3RpY3MgdG8gb3VyIHdlYnNpdGUuCmBgYAoKCiAgICAKYGBgCm90aGVyIGF0dGFjaGVkIHBhY2thZ2VzOgogWzFdIHJzcGl2b3RfMC4xLjEuOTAwMyBzaGlueV8xLjYuMCAgICAgICAgbmV0d29ya0QzXzAuNCAgICAgIGRvd25saXRfMC4yLjEgICAgIAogWzVdIGJzbGliXzAuMi41LjkwMDAgICBzZXNzaW9uaW5mb18xLjEuMSAgZ2dmb3JjZV8wLjMuMyAgICAgIG1hZ3JpdHRyXzIuMC4xICAgIAogWzldIHNjYWxlc18xLjEuMSAgICAgICBmb3JjYXRzXzAuNS4xICAgICAgc3RyaW5ncl8xLjQuMCAgICAgIGRwbHlyXzEuMC42ICAgICAgIApbMTNdIHB1cnJyXzAuMy40ICAgICAgICByZWFkcl8xLjQuMCAgICAgICAgdGlkeXJfMS4xLjMgICAgICAgIHRpYmJsZV8zLjEuMiAgICAgIApbMTddIGdncGxvdDJfMy4zLjMgICAgICB0aWR5dmVyc2VfMS4zLjEgICAKCmxvYWRlZCB2aWEgYSBuYW1lc3BhY2UgKGFuZCBub3QgYXR0YWNoZWQpOgogIFsxXSByZWFkeGxfMS4zLjEgICAgICAgICAgICAgIHV1aWRfMC4xLTQgICAgICAgICAgICAgICAKICBbM10gcGFpcndpc2VDb21wYXJpc29uc18zLjEuNSBiYWNrcG9ydHNfMS4yLjEgICAgICAgICAgCiAgWzVdIHRpZHl0ZXh0XzAuMy4xICAgICAgICAgICAgc3lzdGVtZm9udHNfMS4wLjIgICAgICAgIAogIFs3XSBpZ3JhcGhfMS4yLjYgICAgICAgICAgICAgIHBseXJfMS44LjYgICAgICAgICAgICAgICAKICBbOV0gc3BsaW5lc180LjEuMCAgICAgICAgICAgICBnbXBfMC42LTIgICAgICAgICAgICAgICAgCiBbMTFdIFNub3diYWxsQ18wLjcuMCAgICAgICAgICAgVEguZGF0YV8xLjAtMTAgICAgICAgICAgIAogWzEzXSBrU2FtcGxlc18xLjItOSAgICAgICAgICAgIGlwbWlzY182LjAuMiAgICAgICAgICAgICAKIFsxNV0gZGlnZXN0XzAuNi4yNyAgICAgICAgICAgICBTdXBwRGlzdHNfMS4xLTkuNSAgICAgICAgCiBbMTddIGh0bWx0b29sc18wLjUuMS4xICAgICAgICAgZmFuc2lfMC41LjAgICAgICAgICAgICAgIAogWzE5XSBjaGVja21hdGVfMi4wLjAgICAgICAgICAgIG1lbW9pc2VfMi4wLjAgICAgICAgICAgICAKIFsyMV0gYXV0b21hZ2ljXzAuNS4xICAgICAgICAgICBndHN1bW1hcnlfMS40LjAgICAgICAgICAgCiBbMjNdIHBhbGV0dGVlcl8xLjMuMCAgICAgICAgICAgb3Blbnhsc3hfNC4yLjMgICAgICAgICAgIAogWzI1XSBtb2RlbHJfMC4xLjggICAgICAgICAgICAgIG9mZmljZXJfMC4zLjE4ICAgICAgICAgICAKIFsyN10gc2FuZHdpY2hfMy4wLTAgICAgICAgICAgICBjb2xvcnNwYWNlXzIuMC0xICAgICAgICAgCiBbMjldIHJ2ZXN0XzEuMC4wICAgICAgICAgICAgICAgZ2dyZXBlbF8wLjkuMSAgICAgICAgICAgIAogWzMxXSBoYXZlbl8yLjQuMSAgICAgICAgICAgICAgIHhmdW5fMC4yMyAgICAgICAgICAgICAgICAKIFszM10gY2FsbHJfMy43LjAgICAgICAgICAgICAgICBjcmF5b25fMS40LjEgICAgICAgICAgICAgCiBbMzVdIGpzb25saXRlXzEuNy4yICAgICAgICAgICAgYXR0YWNobWVudF8wLjIuMSAgICAgICAgIAogWzM3XSB6ZWFsbG90XzAuMS4wICAgICAgICAgICAgIHpvb18xLjgtOSAgICAgICAgICAgICAgICAKIFszOV0gc3Vydml2YWxfMy4yLTExICAgICAgICAgICBnbHVlXzEuNC4yICAgICAgICAgICAgICAgCiBbNDFdIHBvbHljbGlwXzEuMTAtMCAgICAgICAgICAgZ3RhYmxlXzAuMy4wICAgICAgICAgICAgIAogWzQzXSBlbW1lYW5zXzEuNi4wICAgICAgICAgICAgIHdlYnNob3RfMC41LjIgICAgICAgICAgICAKIFs0NV0gTWF0cml4TW9kZWxzXzAuNS0wICAgICAgICBzdGF0c0V4cHJlc3Npb25zXzEuMC4xICAgCiBbNDddIFJtcGZyXzAuOC00ICAgICAgICAgICAgICAgbXZ0bm9ybV8xLjEtMSAgICAgICAgICAgIAogWzQ5XSBEQklfMS4xLjEgICAgICAgICAgICAgICAgIFBNQ01ScGx1c18xLjkuMCAgICAgICAgICAKIFs1MV0gUmNwcF8xLjAuNiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZV8wLjcuMiAgICAgICAgCiBbNTNdIHh0YWJsZV8xLjgtNCAgICAgICAgICAgICAgaHRtbHdpZGdldHNfMS41LjMgICAgICAgIAogWzU1XSBodHRyXzEuNC4yICAgICAgICAgICAgICAgIERpYWdyYW1tZVJfMS4wLjYuMSAgICAgICAKIFs1N10gUkNvbG9yQnJld2VyXzEuMS0yICAgICAgICBlbGxpcHNpc18wLjMuMiAgICAgICAgICAgCiBbNTldIHBrZ2NvbmZpZ18yLjAuMyAgICAgICAgICAgcmVzaGFwZV8wLjguOCAgICAgICAgICAgIAogWzYxXSBmYXJ2ZXJfMi4xLjAgICAgICAgICAgICAgIG11bHRjb21wVmlld18wLjEtOCAgICAgICAKIFs2M10gc2Fzc18wLjQuMC45MDAwICAgICAgICAgICBkYnBseXJfMi4xLjEgICAgICAgICAgICAgCiBbNjVdIHV0ZjhfMS4yLjEgICAgICAgICAgICAgICAgamFuaXRvcl8yLjEuMCAgICAgICAgICAgIAogWzY3XSBoZXJlXzEuMC4xICAgICAgICAgICAgICAgIGxhdGVyXzEuMi4wICAgICAgICAgICAgICAKIFs2OV0gbGFiZWxpbmdfMC40LjIgICAgICAgICAgICBlZmZlY3RzaXplXzAuNC40LTEgICAgICAgCiBbNzFdIHRpZHlzZWxlY3RfMS4xLjEgICAgICAgICAgcmxhbmdfMC40LjExICAgICAgICAgICAgIAogWzczXSBnZ2NvcnJwbG90XzAuMS4zICAgICAgICAgIHZpc05ldHdvcmtfMi4wLjkgICAgICAgICAKIFs3NV0gbXVuc2VsbF8wLjUuMCAgICAgICAgICAgICBjZWxscmFuZ2VyXzEuMS4wICAgICAgICAgCiBbNzddIHRvb2xzXzQuMS4wICAgICAgICAgICAgICAgY2FjaGVtXzEuMC41ICAgICAgICAgICAgIAogWzc5XSBjbGlfMi41LjAgICAgICAgICAgICAgICAgIGdlbmVyaWNzXzAuMS4wICAgICAgICAgICAKIFs4MV0gYnJvb21fMC43LjYgICAgICAgICAgICAgICBldmFsdWF0ZV8wLjE0ICAgICAgICAgICAgCiBbODNdIGZhc3RtYXBfMS4xLjAgICAgICAgICAgICAgQldTdGVzdF8wLjIuMiAgICAgICAgICAgIAogWzg1XSB5YW1sXzIuMi4xICAgICAgICAgICAgICAgIHJlbWF0Y2gyXzIuMS4yICAgICAgICAgICAKIFs4N10gdHVmdGVfMC45ICAgICAgICAgICAgICAgICBwcm9jZXNzeF8zLjUuMiAgICAgICAgICAgCiBbODldIGtuaXRyXzEuMzMgICAgICAgICAgICAgICAgZnNfMS41LjAgICAgICAgICAgICAgICAgIAogWzkxXSB6aXBfMi4xLjEgICAgICAgICAgICAgICAgIFdSUzJfMS4xLTEgICAgICAgICAgICAgICAKIFs5M10gcGJhcHBseV8xLjQtMyAgICAgICAgICAgICBtaW1lXzAuMTAgICAgICAgICAgICAgICAgCiBbOTVdIGZvcm1hdFJfMS45ICAgICAgICAgICAgICAgeG1sMl8xLjMuMiAgICAgICAgICAgICAgIAogWzk3XSBjb3JyZWxhdGlvbl8wLjYuMSAgICAgICAgIHRva2VuaXplcnNfMC4yLjEgICAgICAgICAKIFs5OV0gY29tcGlsZXJfNC4xLjAgICAgICAgICAgICByc3R1ZGlvYXBpXzAuMTMgICAgICAgICAgClsxMDFdIGdnc2lnbmlmXzAuNi4xICAgICAgICAgICAgZ3RfMC4zLjAgICAgICAgICAgICAgICAgIApbMTAzXSByZXByZXhfMi4wLjAgICAgICAgICAgICAgIGJyb29tLmhlbHBlcnNfMS4zLjAgICAgICAKWzEwNV0gdHdlZW5yXzEuMC4yICAgICAgICAgICAgICBzdHJpbmdpXzEuNi4yICAgICAgICAgICAgClsxMDddIGhpZ2hyXzAuOSAgICAgICAgICAgICAgICAgcHNfMS42LjAgICAgICAgICAgICAgICAgIApbMTA5XSBwYXJhbWV0ZXJzXzAuMTMuMCAgICAgICAgIGRlc2NfMS4zLjAgICAgICAgICAgICAgICAKWzExMV0gZ2R0b29sc18wLjIuMyAgICAgICAgICAgICBsYXR0aWNlXzAuMjAtNDQgICAgICAgICAgClsxMTNdIE1hdHJpeF8xLjMtMyAgICAgICAgICAgICAgY29tbW9ubWFya18xLjcgICAgICAgICAgIApbMTE1XSB2Y3Ryc18wLjMuOCAgICAgICAgICAgICAgIHBpbGxhcl8xLjYuMSAgICAgICAgICAgICAKWzExN10gbGlmZWN5Y2xlXzEuMC4wICAgICAgICAgICBtYzJkXzAuMS0xOSAgICAgICAgICAgICAgClsxMTldIGpxdWVyeWxpYl8wLjEuNCAgICAgICAgICAgZXN0aW1hYmlsaXR5XzEuMyAgICAgICAgIApbMTIxXSBkYXRhLnRhYmxlXzEuMTQuMCAgICAgICAgIGluc2lnaHRfMC4xNC4wICAgICAgICAgICAKWzEyM10gZmxleHRhYmxlXzAuNi42ICAgICAgICAgICBodHRwdXZfMS42LjEgICAgICAgICAgICAgClsxMjVdIHBhdGNod29ya18xLjEuMSAgICAgICAgICAgUjZfMi41LjAgICAgICAgICAgICAgICAgIApbMTI3XSBib29rZG93bl8wLjIyLjIgICAgICAgICAgIHByb21pc2VzXzEuMi4wLjEgICAgICAgICAKWzEyOV0gamFuZWF1c3RlbnJfMC4xLjUgICAgICAgICBCYXllc0ZhY3Rvcl8wLjkuMTItNC4yICAgClsxMzFdIGNvZGV0b29sc18wLjItMTggICAgICAgICAgTUFTU183LjMtNTQgICAgICAgICAgICAgIApbMTMzXSBndG9vbHNfMy44LjIgICAgICAgICAgICAgIGFzc2VydHRoYXRfMC4yLjEgICAgICAgICAKWzEzNV0gcnByb2pyb290XzIuMC4yICAgICAgICAgICB3aXRocl8yLjQuMiAgICAgICAgICAgICAgClsxMzddIG11bHRjb21wXzEuNC0xNyAgICAgICAgICAgYmF5ZXN0ZXN0Ul8wLjkuMCAgICAgICAgIApbMTM5XSBwYXJhbGxlbF80LjEuMCAgICAgICAgICAgIGhtc18xLjEuMCAgICAgICAgICAgICAgICAKWzE0MV0gZ3JpZF80LjEuMCAgICAgICAgICAgICAgICBjb2RhXzAuMTktNCAgICAgICAgICAgICAgClsxNDNdIHJtYXJrZG93bl8yLjguMyAgICAgICAgICAgc25ha2VjYXNlXzAuMTEuMCAgICAgICAgIApbMTQ1XSBsdWJyaWRhdGVfMS43LjEwICAgICAgICAgIGJhc2U2NGVuY18wLjEtMyAgICAgICAgICAKWzE0N10gZ2dzdGF0c3Bsb3RfMC43LjIgICAgICAgCgpgYGAKCgoKCg==