class: center, middle, inverse, title-slide # rOpenSci, peer review, statistical software, and testing ## SatRdays
Neuchatel
anywhere ### Mark Padgham
rOpenSci
Münster, Germany ### Saturday 14th March, 2020 --- class: left, middle, inverse .left-column[
mpadge
ropensci ] .right-column[
bikesRdata
.small[mark@ropensci.org]<br><br>
mpadge.github.io ] .box-bottom[ slides at <br> [https://github.com/mpadge/satRday-neuchatel-2020](https://github.com/mpadge/satRday-neuchatel-2020) ] --- [![](images/ropensci-logo.svg)](https://ropensci.org) --- ## rOpenSci packages ```r url <- "https://ropensci.github.io/roregistry/registry.json" x <- jsonlite::fromJSON(url)$packages names (x) ``` ``` ## [1] "name" "description" "details" ## [4] "maintainer" "keywords" "github" ## [7] "status" "onboarding" "on_cran" ## [10] "on_bioc" "url" "ropensci_category" ``` ```r nrow (x) ``` ``` ## [1] 386 ``` --- ## rOpenSci package categories ```r table (x$ropensci_category) ``` ``` ## category n ## altmetrics 2 ## data-access 125 ## data-analysis 4 ## data-extraction 6 ## data-publication 5 ## data-tools 25 ## data-visualization 5 ## databases 9 ## geospatial 22 ## http-tools 17 ## image-processing 5 ## literature 30 ## scalereprod 32 ## security 8 ## taxonomy 10 ``` --- class: center ![](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMS43IDU1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAwMS43IDU1MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiM4MENGRDM7c3Ryb2tlOiM4MENGRDM7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MXtmaWxsOiM4QkQzREE7c3Ryb2tlOiM4QkQzREE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MntmaWxsOiM2N0JBQjE7c3Ryb2tlOiM2N0JBQjE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0M3tmaWxsOiNBNkRDRTc7c3Ryb2tlOiNBNkRDRTc7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0NHtmaWxsOiM4QUQzREQ7c3Ryb2tlOiM4QUQzREQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0NXtmaWxsOiNCQkU0RUQ7c3Ryb2tlOiNCQkU0RUQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0NntmaWxsOiNFNEYzRjc7c3Ryb2tlOiNFNEYzRjc7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0N3tmaWxsOiM3Q0NDQzg7c3Ryb2tlOiM3Q0NDQzg7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0OHtmaWxsOiM3NEMzQzE7c3Ryb2tlOiM3NEMzQzE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0OXtmaWxsOiM4OEQyREQ7c3Ryb2tlOiM4OEQyREQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTB7ZmlsbDojOEFEM0U0O3N0cm9rZTojOEFEM0U0O3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDExe2ZpbGw6IzY0QjdBQTtzdHJva2U6IzY0QjdBQTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QxMntmaWxsOiM5RkRBRTQ7c3Ryb2tlOiM5RkRBRTQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTN7ZmlsbDojQThERUVEO3N0cm9rZTojQThERUVEO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDE0e2ZpbGw6I0IxRTFGMTtzdHJva2U6I0IxRTFGMTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QxNXtmaWxsOiNBMERDRjQ7c3Ryb2tlOiNBMERDRjQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTZ7ZmlsbDojOUNEOUU3O3N0cm9rZTojOUNEOUU3O3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDE3e2ZpbGw6IzcxQzFCQztzdHJva2U6IzcxQzFCQztzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QxOHtmaWxsOiM5Q0Q4RTA7c3Ryb2tlOiM5Q0Q4RTA7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTl7ZmlsbDojQjJFMUVEO3N0cm9rZTojQjJFMUVEO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDIwe2ZpbGw6IzdBQ0NDRjtzdHJva2U6IzdBQ0NDRjtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QyMXtmaWxsOiNENEVERjM7c3Ryb2tlOiNENEVERjM7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MjJ7ZmlsbDojN0FDQ0M5O3N0cm9rZTojN0FDQ0M5O3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDIze2ZpbGw6IzhERDNEODtzdHJva2U6IzhERDNEODtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QyNHtmaWxsOiM2RUJFQkE7c3Ryb2tlOiM2RUJFQkE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MjV7ZmlsbDojODBDRUQwO3N0cm9rZTojODBDRUQwO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDI2e2ZpbGw6IzhDRDRFMTtzdHJva2U6IzhDRDRFMTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QyN3tmaWxsOiNDREVCRjE7c3Ryb2tlOiNDREVCRjE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0Mjh7ZmlsbDojQURFMEYwO3N0cm9rZTojQURFMEYwO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDI5e2ZpbGw6I0I5RTNFQztzdHJva2U6I0I5RTNFQztzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QzMHtmaWxsOiM4REQ0RTA7c3Ryb2tlOiM4REQ0RTA7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MzF7ZmlsbDojNjlCQUIzO3N0cm9rZTojNjlCQUIzO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDMye2ZpbGw6I0NDRUFGMTtzdHJva2U6I0NDRUFGMTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QzM3tmaWxsOiM5QkQ5RTY7c3Ryb2tlOiM5QkQ5RTY7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MzR7ZmlsbDojQTZEREYwO3N0cm9rZTojQTZEREYwO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDM1e2ZpbGw6I0EzRERGODtzdHJva2U6I0EzRERGODtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QzNntmaWxsOiM3OUNBQzc7c3Ryb2tlOiM3OUNBQzc7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0Mzd7ZmlsbDojMUExQTFBO30KPC9zdHlsZT4KPGc+Cgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjM5OC44LDIxOC41IDMwMC4yLDI4NyA0MDcuOSwyODcuNyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QxIiBwb2ludHM9IjQwNy45LDI4Ny43IDMwMywzMDQuNSAzNzIuMiwzNTcuNyAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MiIgcG9pbnRzPSI0MDcuOSwyODcuNyAzMDAuMiwyODcgMzAzLDMwNC41IDQwNy45LDI4Ny43ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDMiIHBvaW50cz0iMjg1LjUsMTk4LjkgMzAwLjIsMjg3IDM5OC44LDIxOC41ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDQiIHBvaW50cz0iMzcyLjIsMzU3LjcgMzAzLDMwNC41IDMyNy41LDM2MS4yICAiLz4KCTxwb2x5bGluZSBjbGFzcz0ic3Q1IiBwb2ludHM9IjI4NS41LDE5OC45IDI0My41LDIyMC42IDMwMC4yLDI4NyAyODUuNSwxOTguOSAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0NiIgcG9pbnRzPSIzMjcuNSwzNjEuMiAyNjEuNywzMTkuMiAyNTQsMzIxLjMgMzI3LjUsMzYxLjIgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDciIHBvaW50cz0iMzI3LjUsMzYxLjIgMjU0LDMyMS4zIDIzMS43LDQxOS4yIDMyNy41LDM2MS4yICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDgiIHBvaW50cz0iMzI3LjUsMzYxLjIgMjMxLjcsNDE5LjIgMjk5LjUsNDMzLjkgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDkiIHBvaW50cz0iMzI3LjUsMzYxLjIgMzAzLDMwNC41IDI2MS43LDMxOS4yIDMyNy41LDM2MS4yICAiLz4KCTxwb2x5bGluZSBjbGFzcz0ic3QxMCIgcG9pbnRzPSIyNDkuOCwxMDEgMjYzLjEsMjkuNiAyMzEsNzkuMyAyNDkuOCwxMDEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MTEiIHBvaW50cz0iMjk5LjUsNDMzLjkgMjMxLjcsNDE5LjIgMjczLjYsNDUyLjEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MTIiIHBvaW50cz0iMzAwLjIsMjg3IDI0My41LDIyMC42IDI2MS43LDMxOS4yICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDExIiBwb2ludHM9IjMwMywzMDQuNSAzMDAuMiwyODcgMjYxLjcsMzE5LjIgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MTMiIHBvaW50cz0iMjQ5LjgsMTAxIDIyNi4xLDIxMS41IDI4NS41LDE5OC45ICAiLz4KCTxwb2x5bGluZSBjbGFzcz0ic3QxNCIgcG9pbnRzPSIyNDkuOCwxMDEgMjA1LjEsMjAxLjcgMjI2LjEsMjExLjUgMjQ5LjgsMTAxICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDE1IiBwb2ludHM9IjI2MS43LDMxOS4yIDI0My41LDIyMC42IDI1NCwzMjEuMyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QxNiIgcG9pbnRzPSIyNTQsMzIxLjMgMjE4LjQsNDE0LjMgMjMxLjcsNDE5LjIgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDYiIHBvaW50cz0iMjg1LjUsMTk4LjkgMjI2LjEsMjExLjUgMjQzLjUsMjIwLjYgMjg1LjUsMTk4LjkgICIvPgoJPGxpbmUgY2xhc3M9InN0MTciIHgxPSIyMzEiIHkxPSI1MjkuMSIgeDI9IjE0Mi4xIiB5Mj0iNDYzLjMiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDE4IiBwb2ludHM9IjI1NCwzMjEuMyAxOTYuNywzMTkuOSAyMTguNCw0MTQuMyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QxOSIgcG9pbnRzPSIyNTQsMzIxLjMgMjQzLjUsMjIwLjYgMTk2LjcsMzE5LjkgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MjAiIHBvaW50cz0iMjczLjYsNDUyLjEgMjMxLjcsNDE5LjIgMjMxLDUwOC4xICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDIxIiBwb2ludHM9IjI0My41LDIyMC42IDIyNi4xLDIxMS41IDE5Ni43LDMxOS45ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDIyIiBwb2ludHM9IjI2My4xLDI5LjYgMTYyLjQsNDAuOCAyMzEsNzkuMyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QyMyIgcG9pbnRzPSIyMTguNCw0MTQuMyAxOTYuNywzMTkuOSAxOTcuNCw0MTUuNyAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjQiIHBvaW50cz0iMjMxLDUwOC4xIDIxOC40LDQxNC4zIDE5Ny40LDQxNS43IDIzMSw1MDguMSAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjUiIHBvaW50cz0iMjMxLDUwOC4xIDIzMS43LDQxOS4yIDIxOC40LDQxNC4zIDIzMSw1MDguMSAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjYiIHBvaW50cz0iMjQ5LjgsMTAxIDIzMSw3OS4zIDIwNS4xLDIwMS43IDI0OS44LDEwMSAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QyNyIgcG9pbnRzPSIyMjYuMSwyMTEuNSAyMDUuMSwyMDEuNyAxOTYuNywzMTkuOSAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QyOCIgcG9pbnRzPSIyMzEsNzkuMyAxMDQuMywxODAuNyAyMDUuMSwyMDEuNyAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjkiIHBvaW50cz0iMjMxLDUwOC4xIDE5Ny40LDQxNS43IDE0Mi4xLDQ2My4zIDIzMSw1MDguMSAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QzMCIgcG9pbnRzPSIyMzEsNzkuMyAxNjIuNCw0MC44IDEwNC4zLDE4MC43ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDMxIiBwb2ludHM9IjIzMSw1MDguMSAxNDIuMSw0NjMuMyAyMzEsNTI5LjEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MzIiIHBvaW50cz0iMjA1LjEsMjAxLjcgMTEwLjYsMTk2LjEgMTk2LjcsMzE5LjkgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MjMiIHBvaW50cz0iMTk3LjQsNDE1LjcgMTk2LjcsMzE5LjkgMTMxLjYsNDE1LjcgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDMzIiBwb2ludHM9IjYzLjgsMTE1LjcgMTA0LjMsMTgwLjcgMTYyLjQsNDAuOCA2My44LDExNS43ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDM0IiBwb2ludHM9IjE5Ni43LDMxOS45IDExMC42LDE5Ni4xIDY2LjYsMzM4LjggICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MzUiIHBvaW50cz0iMjA1LjEsMjAxLjcgMTA0LjMsMTgwLjcgMTEwLjYsMTk2LjEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MzYiIHBvaW50cz0iMTk3LjQsNDE1LjcgMTMxLjYsNDE1LjcgMTQyLjEsNDYzLjMgICIvPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MzciIGQ9Ik02MzgsMzExLjhjLTAuMy0xLjYtMC43LTMuMy0xLjEtNC45Yy0wLjUtMS45LTEuMi0zLjctMi01LjVjLTAuMS0wLjItMC4yLTAuNS0wLjMtMC43ICAgIGMtNy0xNS4zLTIyLjMtMjYuMi00MC0yNi41Yy0xNS4zLTAuMy0yOC45LDcuMi0zNy4yLDE4LjdjLTEuOCwyLjQtMy4zLDUuMS00LjYsNy45Yy0wLjEsMC4yLTAuMiwwLjQtMC4zLDAuNyAgICBjLTAuOCwxLjgtMS40LDMuNi0yLDUuNWMtMC41LDEuNi0wLjgsMy4yLTEuMSw0LjljLTAuMywxLjUtMC41LDMuMS0wLjYsNC43Yy0wLjEsMS4zLTAuMSwyLjUtMC4xLDMuOGMwLDIuMSwwLjIsNC4yLDAuNiw2LjIgICAgYzAuMywxLjksMC43LDMuNywxLjIsNS41YzUuNCwxOC41LDIyLjMsMzIuMyw0Mi40LDMyLjdjMTUuMywwLjMsMjguOS03LjIsMzcuMi0xOC43bC0yMy4yLTguNWMtMy4zLDMuMS03LjYsNC45LTEyLjEsNS4xICAgIGMtNy44LDAuNC0xNC40LTMuNS0xNy45LTEwLjdjLTAuOC0xLjctMS41LTMuNS0xLjktNS41aDEuNWgzNi41aDI1LjNjMC4yLTEuMywwLjQtMi43LDAuNS00LjFjMC4xLTEuMywwLjEtMi41LDAuMS0zLjggICAgQzYzOC42LDMxNi4zLDYzOC40LDMxNCw2MzgsMzExLjh6IE01NzQuOCwzMTEuOGMwLjUtMS43LDEuMS0zLjQsMS45LTQuOWMxLjEtMi4xLDIuNC0zLjksNC01LjVoMC4xbC0wLjEsMCAgICBjMC4yLTAuMiwwLjUtMC40LDAuNy0wLjZjMy4yLTIuOCw3LjEtNC42LDExLjMtNC44YzUuMi0wLjMsOS44LDEuNSwxMy40LDQuOGMwLjIsMC4yLDAuNSwwLjQsMC43LDAuN2MxLjUsMS41LDIuOCwzLjQsMy44LDUuNSAgICBjMC43LDEuNSwxLjMsMy4xLDEuOCw0LjloLTMuMUg1NzQuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzNyIgZD0iTTM0Ni4xLDIxMy44YzAtMTcuMS0xMC40LTMxLjgtMjUuMi0zOC4xYy01LTIuMS0xMC40LTMuMy0xNi4xLTMuM0gyNTZoLTAuMWwwLjEsMTE1LjJoMjUuMXYtMzIuNWgxOC42ICAgIGwxNS45LDMyLjVoMjcuNGwtMTguOC0zNy40QzMzNy4yLDI0My4zLDM0Ni4xLDIyOS42LDM0Ni4xLDIxMy44eiBNMzIxLDIxMy44YzAsOS03LjMsMTYuMy0xNi4zLDE2LjNoLTIzLjV2LTMyLjVoMjMuNSAgICBDMzEzLjcsMTk3LjYsMzIxLDIwNC44LDMyMSwyMTMuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzNyIgZD0iTTM3Ny4zLDI1MC43di04LjlMMzU2LDI2MS40bDIxLjMsMjAuNHYtOC45YzIwLjMsMCwzMi40LDE3LjYsMzIuNCwzNS41YzAsMTcuOS0xMi41LDM2LjEtMzIuNCwzNi4xICAgIGMtMjEuNiwwLTMyLjQtMTguMi0zMi40LTM2LjFoLTI1LjJjMCwzMS44LDI1LjgsNTcuNiw1Ny42LDU3LjZjMzEuOCwwLDU3LjYtMjUuOCw1Ny42LTU3LjZDNDM0LjksMjc2LjUsNDA5LjEsMjUwLjcsMzc3LjMsMjUwLjd6ICAgICIvPgoJCTxwYXRoIGNsYXNzPSJzdDM3IiBkPSJNOTA4LjEsMzI5LjFjLTIuOCw4LjQtOS43LDEzLjItMTcuNCwxMy42Yy04LjgsMC40LTE2LTQuNi0xOS4yLTEzLjdjLTAuNy0yLTEuMi00LjItMS40LTYuNiAgICBjLTAuMS0xLjMtMC4yLTIuNi0wLjItNGMwLTAuNiwwLTEuMywwLjEtMS45YzAuMi0yLjQsMC42LTQuNiwxLjQtNi43YzIuOS04LjEsOS43LTEzLjUsMTcuMy0xMy45YzguOC0wLjQsMTYsNC44LDE5LjEsMTQgICAgbDI0LjctNC40Yy01LjgtMTcuOC0yMi40LTMxLTQxLjktMzEuM2MtMjAuNC0wLjQtMzcuNywxMy00My43LDMxLjNjLTEuMywzLjktMiw4LjEtMi4yLDEyLjRjMCwwLjgsMCwxLjYsMCwyLjRjMCwwLjIsMCwwLjUsMCwwLjcgICAgYzAuMSw0LjMsMC45LDguNCwyLjIsMTIuNGM1LjgsMTcuOCwyMi40LDMxLDQxLjksMzEuM2MyMC40LDAuNCwzNy43LTEzLDQzLjctMzEuM0w5MDguMSwzMjkuMXoiLz4KCQk8cmVjdCB4PSI5NDQuOSIgeT0iMjc2LjkiIGNsYXNzPSJzdDM3IiB3aWR0aD0iMjUuMSIgaGVpZ2h0PSI4NS45Ii8+CgkJPHBhdGggY2xhc3M9InN0MzciIGQ9Ik05NjguMSwyNjAuMkg5NDdjLTEuMSwwLTIuMS0wLjktMi4xLTIuMVYyMzdjMC0xLjEsMC45LTIuMSwyLjEtMi4xaDIxLjFjMS4xLDAsMi4xLDAuOSwyLjEsMi4xdjIxLjEgICAgQzk3MC4yLDI1OS4yLDk2OS4zLDI2MC4yLDk2OC4xLDI2MC4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDM3IiBkPSJNODI4LjksMzA4LjFjLTcuNy05LjgtMjYuOC0xNi42LTM2LjEtMjBjLTguMy0zLTExLjMtNS40LTExLjItOS41YzAuMy03LjgsNy45LTkuNSwxMy05LjUgICAgYzExLjMsMCwxMywxMS45LDEzLDExLjlsMjIuMi01LjVjMCwwLTQuMy0yOC4xLTM4LjktMjguMWMtMTEuMiwwLTIzLjQsNi42LTI5LjgsMTVjLTUuNyw3LjUtNi40LDE2LjctMi43LDI1LjkgICAgYzQuOSwxMi4zLDE1LDE2LDI1LjIsMTkuN2M3LjYsMi44LDE3LjgsNS42LDI0LjIsMTJjMy4xLDMuMSwzLjcsOC40LDEuNSwxMi45Yy0yLjMsNC45LTguOCw4LjMtMTUuMSw4LjMgICAgYy0xMy44LDAtMTkuNC0xMi40LTE5LjYtMTIuOWwtMC43LTEuN2wtMjUsNWwwLjYsMi4xYzAuMSwwLjMsMi4zLDcuOCw5LDE1LjRjNi4yLDcsMTcuNSwxNS40LDM2LjQsMTUuNCAgICBjMTYuMSwwLDI4LjktNi45LDM1LjgtMTkuNEM4MzcuMywzMzMuNSw4MzcuNSwzMTkuMSw4MjguOSwzMDguMXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzNyIgZD0iTTQ5Ny4zLDI3NC40Yy05LjEtMC4yLTE4LjUsMi40LTIzLjQsN3YtNC4yaC0yNS4xVjQwM2gyNS4xdi00NWM0LjQsNC4yLDEzLjMsNi43LDIxLjcsNi45ICAgIGMyNS41LDAuNSw0My41LTIwLjYsNDMuMS00Ni4xQzUzOC4yLDI5NC43LDUyMS4zLDI3NC44LDQ5Ny4zLDI3NC40eiBNNDk0LjcsMzQyLjljLTExLjcsMC42LTIwLjctOC41LTIwLjgtMjR2LTAuNSAgICBjMC4xLTEyLjYsOC43LTIxLjgsMTguNy0yMi4zYzExLjctMC42LDIwLjgsOS4xLDIwLjgsMjQuNkM1MTMuNCwzMzQuMyw1MDQuOCwzNDIuNCw0OTQuNywzNDIuOXoiLz4KCTwvZz4KCTxwYXRoIGNsYXNzPSJzdDM3IiBkPSJNNjk2LjQsMjc0LjZjLTE1LDAtMjIsOS45LTIyLDkuOXYtNy42SDY1MXY4NS45aDIzLjRjMCwwLDAtMjcuMiwwLTQwLjRjMC0xNC4xLDYuNS0yNS4zLDE4LTI1LjMgICBzMTcuNywxMCwxNy43LDI1LjN2NDAuNGgyMy43YzAsMCwwLTM4LjYsMC00Ny45QzczMy43LDMwNS43LDczMS42LDI3NC42LDY5Ni40LDI3NC42eiIvPgo8L2c+Cjwvc3ZnPg==)<!-- --> .large[ [github.com/ropensci](https://github.com/ropensci) <br> [ropensci.org](https://ropensci.org) ] --- class: center ![](data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMS43IDU1MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTAwMS43IDU1MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiM4MENGRDM7c3Ryb2tlOiM4MENGRDM7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MXtmaWxsOiM4QkQzREE7c3Ryb2tlOiM4QkQzREE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MntmaWxsOiM2N0JBQjE7c3Ryb2tlOiM2N0JBQjE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0M3tmaWxsOiNBNkRDRTc7c3Ryb2tlOiNBNkRDRTc7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0NHtmaWxsOiM4QUQzREQ7c3Ryb2tlOiM4QUQzREQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0NXtmaWxsOiNCQkU0RUQ7c3Ryb2tlOiNCQkU0RUQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0NntmaWxsOiNFNEYzRjc7c3Ryb2tlOiNFNEYzRjc7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0N3tmaWxsOiM3Q0NDQzg7c3Ryb2tlOiM3Q0NDQzg7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0OHtmaWxsOiM3NEMzQzE7c3Ryb2tlOiM3NEMzQzE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0OXtmaWxsOiM4OEQyREQ7c3Ryb2tlOiM4OEQyREQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTB7ZmlsbDojOEFEM0U0O3N0cm9rZTojOEFEM0U0O3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDExe2ZpbGw6IzY0QjdBQTtzdHJva2U6IzY0QjdBQTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QxMntmaWxsOiM5RkRBRTQ7c3Ryb2tlOiM5RkRBRTQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTN7ZmlsbDojQThERUVEO3N0cm9rZTojQThERUVEO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDE0e2ZpbGw6I0IxRTFGMTtzdHJva2U6I0IxRTFGMTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QxNXtmaWxsOiNBMERDRjQ7c3Ryb2tlOiNBMERDRjQ7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTZ7ZmlsbDojOUNEOUU3O3N0cm9rZTojOUNEOUU3O3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDE3e2ZpbGw6IzcxQzFCQztzdHJva2U6IzcxQzFCQztzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QxOHtmaWxsOiM5Q0Q4RTA7c3Ryb2tlOiM5Q0Q4RTA7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MTl7ZmlsbDojQjJFMUVEO3N0cm9rZTojQjJFMUVEO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDIwe2ZpbGw6IzdBQ0NDRjtzdHJva2U6IzdBQ0NDRjtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QyMXtmaWxsOiNENEVERjM7c3Ryb2tlOiNENEVERjM7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MjJ7ZmlsbDojN0FDQ0M5O3N0cm9rZTojN0FDQ0M5O3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDIze2ZpbGw6IzhERDNEODtzdHJva2U6IzhERDNEODtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QyNHtmaWxsOiM2RUJFQkE7c3Ryb2tlOiM2RUJFQkE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MjV7ZmlsbDojODBDRUQwO3N0cm9rZTojODBDRUQwO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDI2e2ZpbGw6IzhDRDRFMTtzdHJva2U6IzhDRDRFMTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QyN3tmaWxsOiNDREVCRjE7c3Ryb2tlOiNDREVCRjE7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0Mjh7ZmlsbDojQURFMEYwO3N0cm9rZTojQURFMEYwO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDI5e2ZpbGw6I0I5RTNFQztzdHJva2U6I0I5RTNFQztzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QzMHtmaWxsOiM4REQ0RTA7c3Ryb2tlOiM4REQ0RTA7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MzF7ZmlsbDojNjlCQUIzO3N0cm9rZTojNjlCQUIzO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDMye2ZpbGw6I0NDRUFGMTtzdHJva2U6I0NDRUFGMTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QzM3tmaWxsOiM5QkQ5RTY7c3Ryb2tlOiM5QkQ5RTY7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0MzR7ZmlsbDojQTZEREYwO3N0cm9rZTojQTZEREYwO3N0cm9rZS13aWR0aDowLjI1O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxO30KCS5zdDM1e2ZpbGw6I0EzRERGODtzdHJva2U6I0EzRERGODtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTt9Cgkuc3QzNntmaWxsOiM3OUNBQzc7c3Ryb2tlOiM3OUNBQzc7c3Ryb2tlLXdpZHRoOjAuMjU7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjE7fQoJLnN0Mzd7ZmlsbDojMUExQTFBO30KPC9zdHlsZT4KPGc+Cgk8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjM5OC44LDIxOC41IDMwMC4yLDI4NyA0MDcuOSwyODcuNyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QxIiBwb2ludHM9IjQwNy45LDI4Ny43IDMwMywzMDQuNSAzNzIuMiwzNTcuNyAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MiIgcG9pbnRzPSI0MDcuOSwyODcuNyAzMDAuMiwyODcgMzAzLDMwNC41IDQwNy45LDI4Ny43ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDMiIHBvaW50cz0iMjg1LjUsMTk4LjkgMzAwLjIsMjg3IDM5OC44LDIxOC41ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDQiIHBvaW50cz0iMzcyLjIsMzU3LjcgMzAzLDMwNC41IDMyNy41LDM2MS4yICAiLz4KCTxwb2x5bGluZSBjbGFzcz0ic3Q1IiBwb2ludHM9IjI4NS41LDE5OC45IDI0My41LDIyMC42IDMwMC4yLDI4NyAyODUuNSwxOTguOSAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0NiIgcG9pbnRzPSIzMjcuNSwzNjEuMiAyNjEuNywzMTkuMiAyNTQsMzIxLjMgMzI3LjUsMzYxLjIgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDciIHBvaW50cz0iMzI3LjUsMzYxLjIgMjU0LDMyMS4zIDIzMS43LDQxOS4yIDMyNy41LDM2MS4yICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDgiIHBvaW50cz0iMzI3LjUsMzYxLjIgMjMxLjcsNDE5LjIgMjk5LjUsNDMzLjkgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDkiIHBvaW50cz0iMzI3LjUsMzYxLjIgMzAzLDMwNC41IDI2MS43LDMxOS4yIDMyNy41LDM2MS4yICAiLz4KCTxwb2x5bGluZSBjbGFzcz0ic3QxMCIgcG9pbnRzPSIyNDkuOCwxMDEgMjYzLjEsMjkuNiAyMzEsNzkuMyAyNDkuOCwxMDEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MTEiIHBvaW50cz0iMjk5LjUsNDMzLjkgMjMxLjcsNDE5LjIgMjczLjYsNDUyLjEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MTIiIHBvaW50cz0iMzAwLjIsMjg3IDI0My41LDIyMC42IDI2MS43LDMxOS4yICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDExIiBwb2ludHM9IjMwMywzMDQuNSAzMDAuMiwyODcgMjYxLjcsMzE5LjIgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MTMiIHBvaW50cz0iMjQ5LjgsMTAxIDIyNi4xLDIxMS41IDI4NS41LDE5OC45ICAiLz4KCTxwb2x5bGluZSBjbGFzcz0ic3QxNCIgcG9pbnRzPSIyNDkuOCwxMDEgMjA1LjEsMjAxLjcgMjI2LjEsMjExLjUgMjQ5LjgsMTAxICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDE1IiBwb2ludHM9IjI2MS43LDMxOS4yIDI0My41LDIyMC42IDI1NCwzMjEuMyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QxNiIgcG9pbnRzPSIyNTQsMzIxLjMgMjE4LjQsNDE0LjMgMjMxLjcsNDE5LjIgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDYiIHBvaW50cz0iMjg1LjUsMTk4LjkgMjI2LjEsMjExLjUgMjQzLjUsMjIwLjYgMjg1LjUsMTk4LjkgICIvPgoJPGxpbmUgY2xhc3M9InN0MTciIHgxPSIyMzEiIHkxPSI1MjkuMSIgeDI9IjE0Mi4xIiB5Mj0iNDYzLjMiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDE4IiBwb2ludHM9IjI1NCwzMjEuMyAxOTYuNywzMTkuOSAyMTguNCw0MTQuMyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QxOSIgcG9pbnRzPSIyNTQsMzIxLjMgMjQzLjUsMjIwLjYgMTk2LjcsMzE5LjkgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MjAiIHBvaW50cz0iMjczLjYsNDUyLjEgMjMxLjcsNDE5LjIgMjMxLDUwOC4xICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDIxIiBwb2ludHM9IjI0My41LDIyMC42IDIyNi4xLDIxMS41IDE5Ni43LDMxOS45ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDIyIiBwb2ludHM9IjI2My4xLDI5LjYgMTYyLjQsNDAuOCAyMzEsNzkuMyAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QyMyIgcG9pbnRzPSIyMTguNCw0MTQuMyAxOTYuNywzMTkuOSAxOTcuNCw0MTUuNyAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjQiIHBvaW50cz0iMjMxLDUwOC4xIDIxOC40LDQxNC4zIDE5Ny40LDQxNS43IDIzMSw1MDguMSAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjUiIHBvaW50cz0iMjMxLDUwOC4xIDIzMS43LDQxOS4yIDIxOC40LDQxNC4zIDIzMSw1MDguMSAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjYiIHBvaW50cz0iMjQ5LjgsMTAxIDIzMSw3OS4zIDIwNS4xLDIwMS43IDI0OS44LDEwMSAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QyNyIgcG9pbnRzPSIyMjYuMSwyMTEuNSAyMDUuMSwyMDEuNyAxOTYuNywzMTkuOSAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QyOCIgcG9pbnRzPSIyMzEsNzkuMyAxMDQuMywxODAuNyAyMDUuMSwyMDEuNyAgIi8+Cgk8cG9seWxpbmUgY2xhc3M9InN0MjkiIHBvaW50cz0iMjMxLDUwOC4xIDE5Ny40LDQxNS43IDE0Mi4xLDQ2My4zIDIzMSw1MDguMSAgIi8+Cgk8cG9seWdvbiBjbGFzcz0ic3QzMCIgcG9pbnRzPSIyMzEsNzkuMyAxNjIuNCw0MC44IDEwNC4zLDE4MC43ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDMxIiBwb2ludHM9IjIzMSw1MDguMSAxNDIuMSw0NjMuMyAyMzEsNTI5LjEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MzIiIHBvaW50cz0iMjA1LjEsMjAxLjcgMTEwLjYsMTk2LjEgMTk2LjcsMzE5LjkgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MjMiIHBvaW50cz0iMTk3LjQsNDE1LjcgMTk2LjcsMzE5LjkgMTMxLjYsNDE1LjcgICIvPgoJPHBvbHlsaW5lIGNsYXNzPSJzdDMzIiBwb2ludHM9IjYzLjgsMTE1LjcgMTA0LjMsMTgwLjcgMTYyLjQsNDAuOCA2My44LDExNS43ICAiLz4KCTxwb2x5Z29uIGNsYXNzPSJzdDM0IiBwb2ludHM9IjE5Ni43LDMxOS45IDExMC42LDE5Ni4xIDY2LjYsMzM4LjggICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MzUiIHBvaW50cz0iMjA1LjEsMjAxLjcgMTA0LjMsMTgwLjcgMTEwLjYsMTk2LjEgICIvPgoJPHBvbHlnb24gY2xhc3M9InN0MzYiIHBvaW50cz0iMTk3LjQsNDE1LjcgMTMxLjYsNDE1LjcgMTQyLjEsNDYzLjMgICIvPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggY2xhc3M9InN0MzciIGQ9Ik02MzgsMzExLjhjLTAuMy0xLjYtMC43LTMuMy0xLjEtNC45Yy0wLjUtMS45LTEuMi0zLjctMi01LjVjLTAuMS0wLjItMC4yLTAuNS0wLjMtMC43ICAgIGMtNy0xNS4zLTIyLjMtMjYuMi00MC0yNi41Yy0xNS4zLTAuMy0yOC45LDcuMi0zNy4yLDE4LjdjLTEuOCwyLjQtMy4zLDUuMS00LjYsNy45Yy0wLjEsMC4yLTAuMiwwLjQtMC4zLDAuNyAgICBjLTAuOCwxLjgtMS40LDMuNi0yLDUuNWMtMC41LDEuNi0wLjgsMy4yLTEuMSw0LjljLTAuMywxLjUtMC41LDMuMS0wLjYsNC43Yy0wLjEsMS4zLTAuMSwyLjUtMC4xLDMuOGMwLDIuMSwwLjIsNC4yLDAuNiw2LjIgICAgYzAuMywxLjksMC43LDMuNywxLjIsNS41YzUuNCwxOC41LDIyLjMsMzIuMyw0Mi40LDMyLjdjMTUuMywwLjMsMjguOS03LjIsMzcuMi0xOC43bC0yMy4yLTguNWMtMy4zLDMuMS03LjYsNC45LTEyLjEsNS4xICAgIGMtNy44LDAuNC0xNC40LTMuNS0xNy45LTEwLjdjLTAuOC0xLjctMS41LTMuNS0xLjktNS41aDEuNWgzNi41aDI1LjNjMC4yLTEuMywwLjQtMi43LDAuNS00LjFjMC4xLTEuMywwLjEtMi41LDAuMS0zLjggICAgQzYzOC42LDMxNi4zLDYzOC40LDMxNCw2MzgsMzExLjh6IE01NzQuOCwzMTEuOGMwLjUtMS43LDEuMS0zLjQsMS45LTQuOWMxLjEtMi4xLDIuNC0zLjksNC01LjVoMC4xbC0wLjEsMCAgICBjMC4yLTAuMiwwLjUtMC40LDAuNy0wLjZjMy4yLTIuOCw3LjEtNC42LDExLjMtNC44YzUuMi0wLjMsOS44LDEuNSwxMy40LDQuOGMwLjIsMC4yLDAuNSwwLjQsMC43LDAuN2MxLjUsMS41LDIuOCwzLjQsMy44LDUuNSAgICBjMC43LDEuNSwxLjMsMy4xLDEuOCw0LjloLTMuMUg1NzQuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzNyIgZD0iTTM0Ni4xLDIxMy44YzAtMTcuMS0xMC40LTMxLjgtMjUuMi0zOC4xYy01LTIuMS0xMC40LTMuMy0xNi4xLTMuM0gyNTZoLTAuMWwwLjEsMTE1LjJoMjUuMXYtMzIuNWgxOC42ICAgIGwxNS45LDMyLjVoMjcuNGwtMTguOC0zNy40QzMzNy4yLDI0My4zLDM0Ni4xLDIyOS42LDM0Ni4xLDIxMy44eiBNMzIxLDIxMy44YzAsOS03LjMsMTYuMy0xNi4zLDE2LjNoLTIzLjV2LTMyLjVoMjMuNSAgICBDMzEzLjcsMTk3LjYsMzIxLDIwNC44LDMyMSwyMTMuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzNyIgZD0iTTM3Ny4zLDI1MC43di04LjlMMzU2LDI2MS40bDIxLjMsMjAuNHYtOC45YzIwLjMsMCwzMi40LDE3LjYsMzIuNCwzNS41YzAsMTcuOS0xMi41LDM2LjEtMzIuNCwzNi4xICAgIGMtMjEuNiwwLTMyLjQtMTguMi0zMi40LTM2LjFoLTI1LjJjMCwzMS44LDI1LjgsNTcuNiw1Ny42LDU3LjZjMzEuOCwwLDU3LjYtMjUuOCw1Ny42LTU3LjZDNDM0LjksMjc2LjUsNDA5LjEsMjUwLjcsMzc3LjMsMjUwLjd6ICAgICIvPgoJCTxwYXRoIGNsYXNzPSJzdDM3IiBkPSJNOTA4LjEsMzI5LjFjLTIuOCw4LjQtOS43LDEzLjItMTcuNCwxMy42Yy04LjgsMC40LTE2LTQuNi0xOS4yLTEzLjdjLTAuNy0yLTEuMi00LjItMS40LTYuNiAgICBjLTAuMS0xLjMtMC4yLTIuNi0wLjItNGMwLTAuNiwwLTEuMywwLjEtMS45YzAuMi0yLjQsMC42LTQuNiwxLjQtNi43YzIuOS04LjEsOS43LTEzLjUsMTcuMy0xMy45YzguOC0wLjQsMTYsNC44LDE5LjEsMTQgICAgbDI0LjctNC40Yy01LjgtMTcuOC0yMi40LTMxLTQxLjktMzEuM2MtMjAuNC0wLjQtMzcuNywxMy00My43LDMxLjNjLTEuMywzLjktMiw4LjEtMi4yLDEyLjRjMCwwLjgsMCwxLjYsMCwyLjRjMCwwLjIsMCwwLjUsMCwwLjcgICAgYzAuMSw0LjMsMC45LDguNCwyLjIsMTIuNGM1LjgsMTcuOCwyMi40LDMxLDQxLjksMzEuM2MyMC40LDAuNCwzNy43LTEzLDQzLjctMzEuM0w5MDguMSwzMjkuMXoiLz4KCQk8cmVjdCB4PSI5NDQuOSIgeT0iMjc2LjkiIGNsYXNzPSJzdDM3IiB3aWR0aD0iMjUuMSIgaGVpZ2h0PSI4NS45Ii8+CgkJPHBhdGggY2xhc3M9InN0MzciIGQ9Ik05NjguMSwyNjAuMkg5NDdjLTEuMSwwLTIuMS0wLjktMi4xLTIuMVYyMzdjMC0xLjEsMC45LTIuMSwyLjEtMi4xaDIxLjFjMS4xLDAsMi4xLDAuOSwyLjEsMi4xdjIxLjEgICAgQzk3MC4yLDI1OS4yLDk2OS4zLDI2MC4yLDk2OC4xLDI2MC4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDM3IiBkPSJNODI4LjksMzA4LjFjLTcuNy05LjgtMjYuOC0xNi42LTM2LjEtMjBjLTguMy0zLTExLjMtNS40LTExLjItOS41YzAuMy03LjgsNy45LTkuNSwxMy05LjUgICAgYzExLjMsMCwxMywxMS45LDEzLDExLjlsMjIuMi01LjVjMCwwLTQuMy0yOC4xLTM4LjktMjguMWMtMTEuMiwwLTIzLjQsNi42LTI5LjgsMTVjLTUuNyw3LjUtNi40LDE2LjctMi43LDI1LjkgICAgYzQuOSwxMi4zLDE1LDE2LDI1LjIsMTkuN2M3LjYsMi44LDE3LjgsNS42LDI0LjIsMTJjMy4xLDMuMSwzLjcsOC40LDEuNSwxMi45Yy0yLjMsNC45LTguOCw4LjMtMTUuMSw4LjMgICAgYy0xMy44LDAtMTkuNC0xMi40LTE5LjYtMTIuOWwtMC43LTEuN2wtMjUsNWwwLjYsMi4xYzAuMSwwLjMsMi4zLDcuOCw5LDE1LjRjNi4yLDcsMTcuNSwxNS40LDM2LjQsMTUuNCAgICBjMTYuMSwwLDI4LjktNi45LDM1LjgtMTkuNEM4MzcuMywzMzMuNSw4MzcuNSwzMTkuMSw4MjguOSwzMDguMXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QzNyIgZD0iTTQ5Ny4zLDI3NC40Yy05LjEtMC4yLTE4LjUsMi40LTIzLjQsN3YtNC4yaC0yNS4xVjQwM2gyNS4xdi00NWM0LjQsNC4yLDEzLjMsNi43LDIxLjcsNi45ICAgIGMyNS41LDAuNSw0My41LTIwLjYsNDMuMS00Ni4xQzUzOC4yLDI5NC43LDUyMS4zLDI3NC44LDQ5Ny4zLDI3NC40eiBNNDk0LjcsMzQyLjljLTExLjcsMC42LTIwLjctOC41LTIwLjgtMjR2LTAuNSAgICBjMC4xLTEyLjYsOC43LTIxLjgsMTguNy0yMi4zYzExLjctMC42LDIwLjgsOS4xLDIwLjgsMjQuNkM1MTMuNCwzMzQuMyw1MDQuOCwzNDIuNCw0OTQuNywzNDIuOXoiLz4KCTwvZz4KCTxwYXRoIGNsYXNzPSJzdDM3IiBkPSJNNjk2LjQsMjc0LjZjLTE1LDAtMjIsOS45LTIyLDkuOXYtNy42SDY1MXY4NS45aDIzLjRjMCwwLDAtMjcuMiwwLTQwLjRjMC0xNC4xLDYuNS0yNS4zLDE4LTI1LjMgICBzMTcuNywxMCwxNy43LDI1LjN2NDAuNGgyMy43YzAsMCwwLTM4LjYsMC00Ny45QzczMy43LDMwNS43LDczMS42LDI3NC42LDY5Ni40LDI3NC42eiIvPgo8L2c+Cjwvc3ZnPg==)<!-- --> .large[ What can you do to engage with rOpenSci? ] --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What can you do to engage with rOpenSci? ### As a package user - Give feedback on [discuss.ropensci.org](https://discuss.ropensci.org) or via github issues - Submit a Use Case to [discuss.ropensci.org](https://discuss.ropensci.org) - Participate in regular [Community Calls](https://ropensci.org/commcalls) - Ping @ropensci on twitter --- along with package authors --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What can you do to engage with rOpenSci? ### As a developer - Read the [rOpenSci Developer Guide](https://devguide.ropensci.org/contributingguide.html) --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What can you do to engage with rOpenSci? > 15.1 Why contribute to rOpenSci packages? > > In general, as explained by Kara Woo in her talk at the CascadiaR conference, contributing to R packages allows you to make things work the way you want (by adding some functionality to your favorite package), can lead to opportunities and allows you to learn about package development. > > ... we strive to make contributing a good experience... we are creating social infrastructure through a welcoming and diverse community --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What can you do to engage with rOpenSci? ### As a code contributor - Read the [rOpenSci Developer Guide](https://devguide.ropensci.org) - Use packages, contribute to or open<br>issues, make pull requests ### As a developer - Offer to help with / help maintain a package - Develop your own package - Open a pre-submission enquiry (= issue) on [github.com/ropensci/software-review](https://github.com/ropensci/software-review) --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci Software Categories ``` ## category n ## 1 altmetrics 2 ## 2 data-access 125 ## 3 data-analysis 4 ## 4 data-extraction 6 ## 5 data-publication 5 ## 6 data-tools 25 ## 7 data-visualization 5 ## 8 databases 9 ## 9 geospatial 22 ## 10 http-tools 17 ## 11 image-processing 5 ## 12 literature 30 ## 13 scalereprod 32 ## 14 security 8 ## 15 taxonomy 10 ``` -- ... but [R is a language for statistics](https://github.com/ropensci/software-review/issues/331), right? --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% class: center, middle ![](data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDIuNjM2IDEwOC4zNzMiIHdpZHRoPSIyMTcuMjUiIGhlaWdodD0iNTguNDciPjxkZWZzPjxzdHlsZT4ubG9nby10eXBlLWNlbnRlci1mb290ZXItZmlsbHtmaWxsOiMwMDNhNWR9PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTE5LjE2NyAxMC4wNmEzMS43MzMgMzEuNzMzIDAgMCAxIDMxLjAyNSAxLjQ0NyA4LjQ2NyA4LjQ2NyAwIDEgMCA0LjIzLTUuMjc4QTM4LjUgMzguNSAwIDAgMCAwIDE5LjMxbDQ3LjYxNiA0Ny42MTVhMzEuOTI4IDMxLjkyOCAwIDAgMS0zMS4wMjUtMS40NDcgOC4zNDQgOC4zNDQgMCAxIDAtOC4wNjUgNi4yNTEgOC4zNTcgOC4zNTcgMCAwIDAgMy44MzYtLjk3M0EzOC41NCAzOC41NCAwIDAgMCA2Ni43OSA1Ny42ODJ6bTM2Ljg1MyAxLjMzMmEzLjE2MyAzLjE2MyAwIDEgMSAwIDQuNDczIDMuMTQyIDMuMTQyIDAgMCAxIDAtNC40NzN6TTEwLjc2MyA2NS41OTNhMy4xNjMgMy4xNjMgMCAwIDEtNC40NzMgMCAzLjE2MyAzLjE2MyAwIDEgMSA0LjQ3MyAwem00NS4xMjUtNC42MDRhMzEuODEyIDMxLjgxMiAwIDAgMS0yLjUwNSAyLjIzTDguNjcgMTguNTA4YTMwLjk0MSAzMC45NDEgMCAwIDEgMi4yMjQtMi41MSAzMi4wMTUgMzIuMDE1IDAgMCAxIDIuNDk2LTIuMjQybDQ0LjcyMyA0NC43MjNhMzEuMTExIDMxLjExMSAwIDAgMS0yLjIyNSAyLjUxeiIgZmlsbD0iI2FkOTc2ZSI+PC9wYXRoPjxwYXRoIGNsYXNzPSJsb2dvLXR5cGUtY2VudGVyLWZvb3Rlci1maWxsIiBkPSJNMTE1Ljg4IDMyLjU1YTc4LjQzNiA3OC40MzYgMCAwIDAtNC4xNS0uMDk1Yy0xLjYxNyAwLTIuODg0IDAtMy44MzUuMDk1di0uMTU4Yy45MTgtLjMxOCAxLjE3Mi0uNzMgMS4xNzItMS4zNjNhNS42NSA1LjY1IDAgMCAwLS40NzUtMS45NjVjLS4zMTYtLjc2LS42MzQtMS41ODUtMS4wMTQtMi40NzFoLTguOTM2Yy0uMjU0LjY2NS0uNTQgMS4yOTgtLjc5MiAxLjkzMmE3LjUzIDcuNTMgMCAwIDAtLjY2NiAyLjQwOSAxLjM1NiAxLjM1NiAwIDAgMCAxLjIwNCAxLjQ1OHYuMTU4Yy0xLjIwNC0uMDk1LTIuNjMtLjA5NS0zLjY3NS0uMDk1YTU3LjY1IDU3LjY1IDAgMCAwLTMuMzU5LjA5NXYtLjE1OGMxLjA3Ny0uNDQ1IDEuNTUyLS45MiAyLjgyLTMuNzcxIDUuNTc3LTEyLjMyOCA2Ljg0NS0xNS4xNzkgOC4zMDMtMTguNjk3aDIuNzU2Yy45MTkgMi41MzYgMy4yMzIgNy45ODYgOC4xNDQgMTkuMjk4Ljk1IDIuMTg3IDEuMzMxIDIuNzU4IDIuNTAzIDMuMTd6bS05LjMxNi04LjQ5M2MtLjk4My0yLjM3Ny0yLjA5Mi01LjEzMy0zLjQyMy04LjMzNC0xLjIwNCAyLjkxNi0yLjM0NCA1LjcwNC0zLjQ1MyA4LjMzNHpNMTI2LjU4OCAyNy45ODdjMCAxLjI5OS41MDcgMS44MzggMi40NzEgMS44MzggMy42NDQgMCA0Ljc4Ni0uNzYxIDYuMzM4LTMuMzZsLjE1OC4wOTVhNDguNjI5IDQ4LjYyOSAwIDAgMC0xLjE3MiA2LjAyMSAyODcuNjg2IDI4Ny42ODYgMCAwIDAtOC43NzctLjEyNmMtMS42NDkgMC00LjIxNS4wMzEtNS42NDEuMDk1di0uMTU4YzEuNzc1LS42MDMgMi4wNi0xLjA0NiAyLjA2LTYuODc3di04LjI3YzAtNS44MzEtLjI4NS02LjI3NS0yLjA2LTYuODQ2di0uMTU4YzEuNDI2LjA2NCAyLjY5NC4wOTUgNC4zNC4wOTUgMS42NSAwIDIuOTQ4LS4wMzEgNC41MDEtLjA5NXYuMTU4Yy0xLjk2NC41Ny0yLjIxOC44NTYtMi4yMTggNi4wODV6TTE0OS4yNDUgMzIuNTVhMTAzLjE2NSAxMDMuMTY1IDAgMCAwLTQuNS0uMDk1Yy0xLjY0OCAwLTIuOTE1LjAzMS00LjM0Mi4wOTV2LS4xNThjMS43NzYtLjYwMyAyLjA2LTEuMDQ2IDIuMDYtNi44Nzd2LTguMjdjMC01LjgzMS0uMjg0LTYuMjc1LTIuMDYtNi44NDZ2LS4xNThjMS40MjcuMDY0IDMuMjMyLjA5NSA0Ljg4LjA5NSA0LjQ2OSAwIDcuMTYyLS4wNjQgOS45NS0uMjIyYTQ3LjUyOCA0Ny41MjggMCAwIDAgLjEyNyA1LjY3MmwtLjE1OC4wMzNjLS45MTgtMi4zNDYtMi4wMjgtMi44ODUtNS45NTctMi44ODVhMTUuMDQ3IDE1LjA0NyAwIDAgMC0yLjIxOC4wOTZ2Ny4xM2wyLjk3OS0uMDk2YzIuOTQ3LS4xMjYgMy41NDgtLjQ0MyA0LjAyNC0xLjc0M2guMTlhMjguMzYyIDI4LjM2MiAwIDAgMC0uMTI3IDMuMDEyIDI1LjIwNiAyNS4yMDYgMCAwIDAgLjEyNyAyLjk3OGgtLjE5Yy0uNDc2LTEuMzMxLTEuMTEtMS42MTYtNC4wMjQtMS43MTFsLTIuOTgtLjA5NnYzLjc3MWMwIDUuMjI5LjI1NSA1LjUxNCAyLjIyIDYuMTE3ek0xNjkuNTg3IDMyLjU1YTEwMy41NyAxMDMuNTcgMCAwIDAtNC41MzItLjA5NWMtMS42NDggMC0yLjg4My4wMzEtNC4zMS4wOTV2LS4xNThjMS43NzUtLjYwMyAyLjA2LTEuMDQ2IDIuMDYtNi44Nzd2LTguMjdjMC01LjgzMS0uMjg1LTYuMjc1LTIuMDYtNi44NDZ2LS4xNThjMS40MjcuMDY0IDIuNTA0LjA5NSA0LjE1Mi4wOTUgMS4xNCAwIDIuODUxLS4xMjcgNC43ODQtLjEyNyA2LjAyMSAwIDkuMDk1IDIuNDA5IDkuMDk1IDYuMzA3IDAgMy4xMDUtMi4xMjMgNC43NTMtNC41MzIgNS42NzIgMi4wOTIgNC45NDMgNS4yMyA4LjgxIDguMTc2IDEwLjE0bC0uMDY0LjE5Yy01LjE2NS0uNjY1LTkuOTE4LTIuNTM1LTEyLjcwNi05LjEyNmExNS42NzQgMTUuNjc0IDAgMCAxLTEuNjQ4LjA5NGgtLjY2NnYyLjc5YzAgNS4wNy4yODYgNS41MTMgMi4yNSA2LjExNnptLTIuMjUxLTExLjMxM2gxLjMzMmMzLjA3MyAwIDUuMzI0LTEuMjA0IDUuMzI0LTQuMjE0IDAtMi43OS0xLjg0LTQuMTgzLTUuMTY2LTQuMTgzYTEzLjAwNiAxMy4wMDYgMCAwIDAtMS40OS4wOTR6TTIwMC4yMjcgMzIuNTgxYy0yLjkxNi0uMDk1LTYuOTcyLS4xMjYtOS41MDctLjEyNi0xLjY4IDAtMy43MzguMDMxLTUuMTY1LjA5NXYtLjE1OGMxLjc3NS0uNjAzIDIuMDYtMS4wNDYgMi4wNi02Ljg3N3YtOC4yN2MwLTUuODMxLS4yODUtNi4yNzUtMi4wNi02Ljg0NnYtLjE1OGMxLjQyNy4wNjQgMy4yMzIuMDk1IDQuODguMDk1IDQuNjkgMCA3LjM4NC0uMDY0IDEwLjI2Ny0uMjIyYTQ3LjA4IDQ3LjA4IDAgMCAwIC4xNTkgNS42NzJsLS4xNTkuMDMzYy0uOTE4LTIuMzQ2LTIuMDYtMi44ODUtNi40MzItMi44ODVhMTcuMDI2IDE3LjAyNiAwIDAgMC0yLjA5Mi4wOTZ2Ni42NTRsMy40MjMtLjA5NGMyLjk0Ni0uMDk2IDMuNTE3LS40MTIgNC4wMjMtMS43MTJoLjE5YTI3LjY2IDI3LjY2IDAgMCAwLS4xMjYgMi45OCAyNi40NCAyNi40NCAwIDAgMCAuMTI3IDMuMDFoLS4xOWMtLjUwNy0xLjM2NC0xLjE0MS0xLjY0OS00LjAyNC0xLjc0NGwtMy40MjMtLjA2M3Y1LjkyNmMwIDEuMjk5LjQ3NiAxLjgzOCAyLjU2NyAxLjgzOCAzLjU4IDAgNC45MTItLjc2MSA2LjQ2NC0zLjIwMWwuMTU4LjA5NmE1My45MjYgNTMuOTI2IDAgMCAwLTEuMTQgNS44NjF6TTIwNi43MiAzMi4zOTJjMS43NzYtLjYwMyAyLjA2MS0xLjA0NiAyLjA2MS02Ljg3N3YtOC4yN2MwLTUuODMxLS4yODUtNi4yNzUtMi4wNi02Ljg0NnYtLjE1OGMxLjQyNi4wNjQgMi42NjEuMDk1IDMuODAzLjA5NSAxLjUyIDAgMi45NzgtLjEyNyA0LjQwNS0uMTI3IDQuNzUzIDAgOC41NTUgMS4yMDUgMTEuMjE3IDMuODY3YTEwLjM3NCAxMC4zNzQgMCAwIDEgMi45MTYgNy41NDJjMCA2LjQzMi00LjU2NCAxMS4wNTktMTMuMjQ3IDExLjA1OS0xLjgwNiAwLTMuNjQ0LS4yMjItNS4yOTEtLjIyMi0xLjIwNSAwLTIuMzc3LjAzMS0zLjgwMy4wOTV6bTE1LjI0My0xNi44MjdhOS43NTcgOS43NTcgMCAwIDAtNy4wMDMtMi42MyA4LjM5NyA4LjM5NyAwIDAgMC0xLjYxNi4wOTV2MTQuOTg4YzAgMS40MjcuNTM5IDEuOTM0IDMuMDc0IDEuOTM0IDQuNTMxIDAgNy43MzEtMi43NTggNy43MzEtOC4wNWE4LjcxIDguNzEgMCAwIDAtMi4xODYtNi4zMzd6TTI1My4wMDMgMzIuNTVhMTAzLjE2NSAxMDMuMTY1IDAgMCAwLTQuNS0uMDk1Yy0xLjY0NyAwLTIuOTE1LjAzMS00LjM0MS4wOTV2LS4xNThjMS43NzUtLjYwMyAyLjA2LTEuMDQ2IDIuMDYtNi44Nzd2LTguMjdjMC01LjgzMS0uMjg1LTYuMjc1LTIuMDYtNi44NDZ2LS4xNThjMS40MjYuMDY0IDIuNjk0LjA5NSA0LjM0LjA5NSAxLjA3OSAwIDIuNzI2LS4xMjcgNC40MDYtLjEyNyA1LjY0IDAgOS40NDMgMi4yODIgOS40NDMgNi41OTJhNS43MjIgNS43MjIgMCAwIDEtMS42OCA0LjI3OGMtMS43NzQgMS44MDYtNC44MTcgMi42NjEtOC4zNjUgMi42NjFoLTEuNTIxdjIuODUzYzAgNC43NTMuMjU0IDUuMTk2IDIuMjE4IDUuNzk5em0tMi4yMTgtMTEuMjhoMS4xMWMyLjEyMiAwIDMuNzM4LS40MTMgNC42MjUtMS4zMzJhNCA0IDAgMCAwIDEuMDE0LTIuODg0YzAtMi45NzgtMi4wMjgtNC4yMTQtNS4wMzktNC4yMTQtLjY2NCAwLTEuMjk4LjA2My0xLjcxLjA5NHpNMjY1LjYwNyAzMi44NjZhMi41OTkgMi41OTkgMCAxIDEgMi42NjEtMi41OTggMi41OTYgMi41OTYgMCAwIDEtMi42NjEgMi41OTh6TTI5MS4wNyAzMi45OTNhMTUuMjQgMTUuMjQgMCAwIDEtNi45NC0xLjYxNiA0Mi42MjMgNDIuNjIzIDAgMCAwLS4wMzItNi4xMTVsLjE2LS4wMzNjMS40MjUgMy4wNzQgNC4xODEgNS4wMzkgNi45NCA1LjAzOWEzLjI0IDMuMjQgMCAwIDAgMy41NDgtMy4xNjljMC0xLjY0OC0uOTgyLTIuNjYxLTQuMzQtNC4xNS00LjIxNi0xLjkzNC01Ljk2LTMuNzQtNS45Ni02Ljc1IDAtMy41ODEgMi45OC02LjQwMSA3LjYwNi02LjQwMWExMy43NzggMTMuNzc4IDAgMCAxIDYuMDg1IDEuNDU3IDM4LjA4MiAzOC4wODIgMCAwIDAgMCA1LjcwNGwtLjE1OS4wMzFjLTEuNTItMi44NS0zLjc3LTQuNDY3LTYuMTE2LTQuNDY3YTIuNzU3IDIuNzU3IDAgMCAwLTIuOTE1IDIuNzU3YzAgMS41NTIuODIzIDIuMzQ0IDQuMDg4IDMuODAyIDQuMzEgMS45OTcgNi4yMSAzLjgzNCA2LjIxIDcuMDAzIDAgNC4wODgtMy4yOTUgNi45MDgtOC4xNzUgNi45MDh6TTMxMS4yODUgMjcuOTg3YzAgMS4yOTkuNTA2IDEuODM4IDIuNDcxIDEuODM4IDMuNjQ0IDAgNC43ODYtLjc2MSA2LjMzOC0zLjM2bC4xNTguMDk1YTQ4LjYyNyA0OC42MjcgMCAwIDAtMS4xNzIgNi4wMjEgMjg3LjY4NiAyODcuNjg2IDAgMCAwLTguNzc4LS4xMjZjLTEuNjQ4IDAtNC4yMTQuMDMxLTUuNjQuMDk1di0uMTU4YzEuNzc1LS42MDMgMi4wNi0xLjA0NiAyLjA2LTYuODc3di04LjI3YzAtNS44MzEtLjI4NS02LjI3NS0yLjA2LTYuODQ2di0uMTU4YTkxLjkzIDkxLjkzIDAgMCAwIDQuMzQuMDk1YzEuNjUgMCAyLjk0OC0uMDMxIDQuNTAxLS4wOTV2LjE1OGMtMS45NjQuNTctMi4yMTguODU2LTIuMjE4IDYuMDg1ek0zMjQuNzUyIDIxLjM5NWMwLTYuNzgxIDUuMzU0LTExLjYzIDEyLjA3Mi0xMS42MyA3LjE5NCAwIDExLjk0NyA1LjIzIDExLjk0NyAxMS42MyAwIDYuNzgxLTUuMzI0IDExLjYzLTEyLjA3MyAxMS42My03LjE2MiAwLTExLjk0Ni01LjIyOC0xMS45NDYtMTEuNjN6bTQuOTQyLS4yODVjMCA1LjE2NSAyLjc4OSA5LjAzIDcuMTk0IDkuMDMgNC4xODMgMCA2Ljk3MS0zLjY0MyA2Ljk3MS04LjQ2IDAtNS4xNjQtMi43ODgtOS4wMy03LjE5My05LjAzLTQuMjE0LS4wMDEtNi45NzIgMy42MTItNi45NzIgOC40NnpNMzc1LjczNiAzMi41NWE3OC40MzYgNzguNDM2IDAgMCAwLTQuMTUxLS4wOTVjLTEuNjE2IDAtMi44ODMgMC0zLjgzNS4wOTV2LS4xNThjLjkyLS4zMTggMS4xNzMtLjczIDEuMTczLTEuMzYzYTUuNjUgNS42NSAwIDAgMC0uNDc1LTEuOTY1Yy0uMzE3LS43Ni0uNjM0LTEuNTg1LTEuMDE0LTIuNDcxaC04LjkzNmMtLjI1NC42NjUtLjU0IDEuMjk4LS43OTIgMS45MzJhNy41MyA3LjUzIDAgMCAwLS42NjYgMi40MDkgMS4zNTYgMS4zNTYgMCAwIDAgMS4yMDQgMS40NTh2LjE1OGMtMS4yMDQtLjA5NS0yLjYzLS4wOTUtMy42NzUtLjA5NS0xLjAxNSAwLTIuNDEuMDMxLTMuMzYuMDk1di0uMTU4YzEuMDc4LS40NDUgMS41NTMtLjkyIDIuODItMy43NzEgNS41NzgtMTIuMzI4IDYuODQ2LTE1LjE3OSA4LjMwMy0xOC42OTdoMi43NTdjLjkxOSAyLjUzNiAzLjIzMiA3Ljk4NiA4LjE0NCAxOS4yOTguOTUgMi4xODcgMS4zMzEgMi43NTggMi41MDMgMy4xN3ptLTkuMzE2LTguNDkzYy0uOTgzLTIuMzc3LTIuMDkyLTUuMTMzLTMuNDIzLTguMzM0LTEuMjA0IDIuOTE2LTIuMzQ0IDUuNzA0LTMuNDUzIDguMzM0ek00MDAuNDE5IDMyLjcwOGgtMi41MDRhMzUuMTQgMzUuMTQgMCAwIDAtMi44NTItNC4wNTZsLTkuNzkyLTEyLjIuMDMyIDkuNDExYzAgNS41MTQuMzE3IDUuOTU3IDIuMTg3IDYuNTI5di4xNThhOTEuODk4IDkxLjg5OCAwIDAgMC0zLjkzLS4wOTVjLTEuMzMgMC0yLjI4Mi4wMzEtMy43Ny4wOTV2LS4xNThjMS43NDItLjU3MiAyLjAyOC0xLjE0MiAyLjAyOC03LjI5bC4wMy03LjU3M2MwLTYuMDItLjI1Mi02LjUyNy0yLjA1OS03LjEzdi0uMTU4YzEuMzk1LjA2NCAyLjI4MS4xMjcgMy42NzYuMTI3YTE4LjUwNCAxOC41MDQgMCAwIDAgMi43MjUtLjE1OWMuMzE3LjUwOC45NTEgMS4zNjMgMS42MTYgMi4yMTggMS4zIDEuNjggNi42NTUgOC4zNjcgOS4zNDggMTEuNzI2bC0uMDMtNy4yODhjMC01LjUxNC0uMzE4LTUuODk1LTIuMTg4LTYuNDY2di0uMTU4YzEuNjE2LjA2NCAyLjc1Ny4wOTUgNC4wNTYuMDk1IDEuMjM2IDAgMi4yMTgtLjAzMSAzLjY0NC0uMDk1di4xNThjLTEuNzQyLjU3LTEuOTY1IDEuMDc5LTIuMDYgNy40NDh6TTEwMS4yMSA3MC41NzNhMTAzLjE2NiAxMDMuMTY2IDAgMCAwLTQuNTAxLS4wOTUgOTEuOTMgOTEuOTMgMCAwIDAtNC4zNDIuMDk1di0uMTU5YzEuNzc2LS42MDIgMi4wNi0xLjA0NSAyLjA2LTYuODc3di04LjI3YzAtNS44My0uMjg0LTYuMjc1LTIuMDYtNi44NDV2LS4xNThjMS40MjcuMDYzIDMuMjMyLjA5NSA0Ljg4LjA5NSA0LjQ2OSAwIDcuMTYyLS4wNjQgOS45NS0uMjIyYTQ3LjUyOCA0Ny41MjggMCAwIDAgLjEyNyA1LjY3MmwtLjE1OC4wMzJjLS45MTktMi4zNDUtMi4wMjgtMi44ODQtNS45NTctMi44ODRhMTUuMDQ3IDE1LjA0NyAwIDAgMC0yLjIxOC4wOTZ2Ny4xM2wyLjk3OS0uMDk2YzIuOTQ3LS4xMjYgMy41NDgtLjQ0MyA0LjAyNC0xLjc0M2guMTlhMjguMzUzIDI4LjM1MyAwIDAgMC0uMTI3IDMuMDEgMjUuMjE2IDI1LjIxNiAwIDAgMCAuMTI3IDIuOThoLS4xOWMtLjQ3Ni0xLjMzMi0xLjExLTEuNjE3LTQuMDI0LTEuNzExbC0yLjk4LS4wOTZ2My43N2MwIDUuMjMuMjU1IDUuNTE1IDIuMjIgNi4xMTd6TTExMi42NTIgNTkuNDE4YzAtNi43ODIgNS4zNTUtMTEuNjMgMTIuMDcyLTExLjYzIDcuMTk0IDAgMTEuOTQ3IDUuMjMgMTEuOTQ3IDExLjYzIDAgNi43ODEtNS4zMjMgMTEuNjMtMTIuMDcyIDExLjYzLTcuMTYzIDAtMTEuOTQ3LTUuMjI5LTExLjk0Ny0xMS42M3ptNC45NDItLjI4NWMwIDUuMTY1IDIuNzkgOS4wMyA3LjE5NCA5LjAzIDQuMTgzIDAgNi45NzItMy42NDMgNi45NzItOC40NiAwLTUuMTY0LTIuNzg5LTkuMDMxLTcuMTk0LTkuMDMxLTQuMjE0IDAtNi45NzIgMy42MTMtNi45NzIgOC40NnpNMTYxLjYzNyA2MS44NThjMCA1LjU0Ni0yLjg4MyA5LjE5LTkuMzggOS4xOS02LjExNSAwLTkuMTU3LTMuNDIyLTkuMTU3LTguOTA1di02Ljg3NmMwLTUuODMtLjI4NS02LjI3NS0yLjAyOC02Ljg0NXYtLjE1OGMxLjQyNi4wNjMgMi42NjEuMDk1IDQuMzEuMDk1czIuOTc5LS4wMzIgNC41LS4wOTV2LjE1OGMtMS45NjUuNTctMi4yMTguODI0LTIuMjE4IDUuOHY3LjU3MmMwIDQuMDU2IDEuNzc0IDUuOCA1LjEwMiA1LjggMy40MiAwIDUuMzU0LTEuODcgNS4zNTQtNi4wMjFsLS4wMy02Ljg0NWMwLTUuMzU1LS4zMTgtNS43MzYtMi4xODgtNi4zMDZ2LS4xNThjMS42MTcuMDYzIDIuODUyLjA5NSA0LjE4My4wOTUgMS4zIDAgMi4xMjQtLjAzMiAzLjYxMy0uMDk1di4xNThjLTEuNzEyLjU3LTIuMDI4IDEuMTEtMi4wMjggNy40NDh6TTE4OS4xNzUgNzAuNzNoLTIuNTAzYTM1LjE0IDM1LjE0IDAgMCAwLTIuODUyLTQuMDU1bC05Ljc5Mi0xMi4yLjAzMiA5LjQxYzAgNS41MTUuMzE3IDUuOTU4IDIuMTg3IDYuNTN2LjE1OGE5MS44OTggOTEuODk4IDAgMCAwLTMuOTMtLjA5NWMtMS4zMyAwLTIuMjgyLjAzMS0zLjc3LjA5NXYtLjE1OWMxLjc0Mi0uNTcxIDIuMDI3LTEuMTQxIDIuMDI3LTcuMjg5bC4wMzItNy41NzNjMC02LjAyLS4yNTMtNi41MjctMi4wNi03LjEzdi0uMTU4YzEuMzk1LjA2MyAyLjI4MS4xMjcgMy42NzYuMTI3YTE4LjUwMiAxOC41MDIgMCAwIDAgMi43MjUtLjE2Yy4zMTcuNTA5Ljk1MSAxLjM2NCAxLjYxNiAyLjIyIDEuMyAxLjY3OSA2LjY1NSA4LjM2NSA5LjM0OCAxMS43MjRsLS4wMy03LjI4OGMwLTUuNTE0LS4zMTgtNS44OTUtMi4xODgtNi40NjV2LS4xNThjMS42MTYuMDYzIDIuNzU3LjA5NSA0LjA1Ni4wOTUgMS4yMzYgMCAyLjIxOC0uMDMyIDMuNjQ0LS4wOTV2LjE1OGMtMS43NDIuNTctMS45NjUgMS4wNzgtMi4wNiA3LjQ0OHpNMTk3LjI5NCA3MC40MTRjMS43NzYtLjYwMiAyLjA2LTEuMDQ1IDIuMDYtNi44Nzd2LTguMjdjMC01LjgzLS4yODQtNi4yNzUtMi4wNi02Ljg0NXYtLjE1OGMxLjQyNy4wNjMgMi42NjIuMDk1IDMuODA0LjA5NSAxLjUyIDAgMi45NzgtLjEyNyA0LjQwNC0uMTI3IDQuNzU0IDAgOC41NTYgMS4yMDUgMTEuMjE4IDMuODY2YTEwLjM3NCAxMC4zNzQgMCAwIDEgMi45MTUgNy41NDJjMCA2LjQzMy00LjU2NCAxMS4wNi0xMy4yNDYgMTEuMDYtMS44MDcgMC0zLjY0NC0uMjIyLTUuMjkxLS4yMjItMS4yMDUgMC0yLjM3Ny4wMzEtMy44MDQuMDk1em0xNS4yNDItMTYuODI3YTkuNzU3IDkuNzU3IDAgMCAwLTcuMDAzLTIuNjMgOC4zOTcgOC4zOTcgMCAwIDAtMS42MTYuMDk2VjY2LjA0YzAgMS40MjUuNTQgMS45MzMgMy4wNzQgMS45MzMgNC41MzIgMCA3LjczMi0yLjc1NyA3LjczMi04LjA0OGE4LjcxIDguNzEgMCAwIDAtMi4xODctNi4zMzl6TTI0Ni4yMSA3MC41NzNhNzguNDM2IDc4LjQzNiAwIDAgMC00LjE1LS4wOTVjLTEuNjE2IDAtMi44ODMgMC0zLjgzNC4wOTV2LS4xNTljLjkxOC0uMzE3IDEuMTcyLS43MyAxLjE3Mi0xLjM2M2E1LjY1IDUuNjUgMCAwIDAtLjQ3NS0xLjk2NGMtLjMxNi0uNzYxLS42MzQtMS41ODUtMS4wMTQtMi40NzJoLTguOTM2Yy0uMjU0LjY2NS0uNTM5IDEuMjk5LS43OTIgMS45MzNhNy41MyA3LjUzIDAgMCAwLS42NjYgMi40MDkgMS4zNTYgMS4zNTYgMCAwIDAgMS4yMDQgMS40NTd2LjE1OWMtMS4yMDQtLjA5NS0yLjYzLS4wOTUtMy42NzUtLjA5NWE1Ny42NSA1Ny42NSAwIDAgMC0zLjM1OS4wOTV2LS4xNTljMS4wNzctLjQ0NCAxLjU1My0uOTE4IDIuODItMy43NyA1LjU3Ny0xMi4zMjggNi44NDUtMTUuMTggOC4zMDMtMTguNjk3aDIuNzU2Yy45MTkgMi41MzYgMy4yMzIgNy45ODYgOC4xNDUgMTkuMjk4Ljk1IDIuMTg3IDEuMzMgMi43NTcgMi41MDIgMy4xN3ptLTkuMzE1LTguNDk0Yy0uOTgyLTIuMzc2LTIuMDkyLTUuMTMzLTMuNDIzLTguMzMzLTEuMjA0IDIuOTE1LTIuMzQ0IDUuNzA0LTMuNDUzIDguMzMzek0yNjIuOTUyIDcwLjU3M2ExMjEuNTQyIDEyMS41NDIgMCAwIDAtNC42OS0uMDk1Yy0xLjY0NyAwLTIuODgzLjAzMS00LjY5LjA5NXYtLjE1OWMyLjIyLS42MzMgMi40MS0uODI0IDIuNDEtNi40MzJ2LTEzLjEyaC0uOTUyYy00LjA1Ni4wNjQtNS40NSAxLjQ5LTYuNTI3IDQuNWwtLjE1OC0uMDMyYTYwLjEzMiA2MC4xMzIgMCAwIDAgLjA2My03LjEzYzIuODg0LjA5NSA2LjA1Mi4xNTkgOS44NTQuMTU5IDMuODA0IDAgNy4wMDUtLjA2NCA5Ljg4OC0uMTU5YTU5Ljg3NSA1OS44NzUgMCAwIDAgLjA2MyA3LjEzbC0uMTU5LjAzMmMtMS4wNzctMy4wMS0yLjQ3MS00LjQzNi02LjUyNy00LjVoLS45ODN2MTMuMTJjMCA1LjYwOC4yMjIgNS43OTkgMi40MDggNi40MzJ6TTI3Ny45NjIgNzAuNDc4Yy0xLjY0NyAwLTIuOTc4LjAzMS00LjM3Mi4wOTV2LS4xNTljMS44MzctLjYwMiAyLjEyMi0xLjA0NSAyLjEyMi02Ljg3N3YtOC4yN2MwLTUuODMtLjI4NS02LjI3NS0yLjEyMi02Ljg0NXYtLjE1OGMxLjM5NC4wNjMgMi43MjUuMDk1IDQuMzcyLjA5NSAxLjYxNiAwIDIuOTE2LS4wMzIgNC40MzctLjA5NXYuMTU4Yy0xLjgzOS41Ny0yLjEyNCAxLjAxNS0yLjEyNCA2Ljg0NXY4LjI3YzAgNS44MzIuMjg1IDYuMjc1IDIuMTI0IDYuODc3di4xNTlhMTAwLjE4MSAxMDAuMTgxIDAgMCAwLTQuNDM3LS4wOTV6TTI4Ny40ODggNTkuNDE4YzAtNi43ODIgNS4zNTUtMTEuNjMgMTIuMDczLTExLjYzIDcuMTkzIDAgMTEuOTQ3IDUuMjMgMTEuOTQ3IDExLjYzIDAgNi43ODEtNS4zMjQgMTEuNjMtMTIuMDczIDExLjYzLTcuMTYyIDAtMTEuOTQ3LTUuMjI5LTExLjk0Ny0xMS42M3ptNC45NDMtLjI4NWMwIDUuMTY1IDIuNzg5IDkuMDMgNy4xOTMgOS4wMyA0LjE4MyAwIDYuOTcyLTMuNjQzIDYuOTcyLTguNDYgMC01LjE2NC0yLjc4OS05LjAzMS03LjE5My05LjAzMS00LjIxNSAwLTYuOTcyIDMuNjEzLTYuOTcyIDguNDZ6TTMzNy4zIDcwLjczaC0yLjUwNGEzNS4xNCAzNS4xNCAwIDAgMC0yLjg1Mi00LjA1NWwtOS43OTItMTIuMi4wMzMgOS40MWMwIDUuNTE1LjMxNiA1Ljk1OCAyLjE4NiA2LjUzdi4xNThhOTEuODk4IDkxLjg5OCAwIDAgMC0zLjkzLS4wOTVjLTEuMzMgMC0yLjI4MS4wMzEtMy43Ny4wOTV2LS4xNTljMS43NDMtLjU3MSAyLjAyOC0xLjE0MSAyLjAyOC03LjI4OWwuMDMtNy41NzNjMC02LjAyLS4yNTItNi41MjctMi4wNTgtNy4xM3YtLjE1OGMxLjM5NC4wNjMgMi4yOC4xMjcgMy42NzUuMTI3YTE4LjUwMiAxOC41MDIgMCAwIDAgMi43MjUtLjE2Yy4zMTcuNTA5Ljk1MSAxLjM2NCAxLjYxNiAyLjIyIDEuMyAxLjY3OSA2LjY1NiA4LjM2NSA5LjM0OCAxMS43MjRsLS4wMy03LjI4OGMwLTUuNTE0LS4zMTgtNS44OTUtMi4xODgtNi40NjV2LS4xNThjMS42MTYuMDYzIDIuNzU3LjA5NSA0LjA1Ni4wOTUgMS4yMzYgMCAyLjIxOS0uMDMyIDMuNjQ0LS4wOTV2LjE1OGMtMS43NDIuNTctMS45NjUgMS4wNzgtMi4wNiA3LjQ0OHpNOTQuMDI5IDkxLjIyNGg0LjM1N2MzLjgxNiAwIDYuMzAyIDIuNjczIDYuMzAyIDYuNjIgMCAzLjg3LTIuNDY4IDYuNjU3LTYuMzM4IDYuNjU3aC00LjMyMXptNC4yODMgMTEuNzhjMi44NjEgMCA0LjQ4Ny0yLjMxOCA0LjQ4Ny01LjE2IDAtMi45NTQtMS41OS01LjEyNS00LjQ1LTUuMTI1aC0yLjU0M3YxMC4yODV6TTExMS42MjMgOTQuOTI2YTIuMDYzIDIuMDYzIDAgMCAxIC4zMzYuMDE4djEuNTU0aC0uMDczYTIuNzI4IDIuNzI4IDAgMCAwLTIuMDU4LjcyOSA0LjM0MyA0LjM0MyAwIDAgMC0uOTM1IDMuMjcydjQuMDAyaC0xLjU5di05LjM1aDEuNDc4djIuMTMyYTMuMDkyIDMuMDkyIDAgMCAxIDIuODQyLTIuMzU3ek0xMTMuOTk4IDkxLjQxaDEuODEzdjIuMDAxaC0xLjgxM3ptLjExMiAzLjc0aDEuNTl2OS4zNWgtMS41OXpNMTE3LjY2MiA5NS4xNWgxLjcybDIuMDk1IDYuMzAzYTEzLjczIDEzLjczIDAgMCAxIC4zOTMgMS40MjFoLjA1NmExMy43MyAxMy43MyAwIDAgMSAuMzkzLTEuNDIxbDIuMDk0LTYuMzAyaDEuNzIxbC0zLjM4NSA5LjM1aC0xLjcwMXpNMTM1LjM5IDEwMC4yOTNoLTYuNjRhMi43NjIgMi43NjIgMCAwIDAgMi43ODYgMy4wMyAyLjUxMiAyLjUxMiAwIDAgMCAyLjQ4OC0xLjc3N2wxLjMwOS41OGEzLjg4OCAzLjg4OCAwIDAgMS0zLjkwOSAyLjZjLTIuNjc1IDAtNC4yNjMtMS43MDMtNC4yNjMtNC43ODggMC0zLjEyMiAxLjU3LTUuMDEyIDQuMjQ1LTUuMDEyIDIuNTIzIDAgMy45ODMgMS40NCAzLjk4MyA0LjI0NXptLTEuNjA5LTEuNDk1YzAtMS43MjEtLjg3OS0yLjYxOC0yLjQxMy0yLjYxOC0xLjY0NSAwLTIuNTggMS4wNjUtMi42MTkgMi44MjNoNS4wMzJ6TTEzOC4wOTcgOTUuMTVoMS40OTd2MS44NTJhMy4xNTcgMy4xNTcgMCAwIDEgMy4xMjItMi4wNzZjMi4wNTggMCAzLjEyMyAxLjI3MiAzLjEyMyAzLjc1OXY1LjgxNmgtMS41OXYtNS43MjNjMC0xLjY0NS0uNjktMi40ODctMi4wNTctMi40ODctMS41NTEgMC0yLjUwNSAxLjI1NC0yLjUwNSAzLjMzdjQuODhoLTEuNTl6TTE1NS41NjIgMTAyLjg5M2wtLjI4IDEuNjA4aC0xLjIxN1Y5MC45NDNoMS41OXY1LjgzNGEzLjE3IDMuMTcgMCAwIDEgMi45NzMtMS44NWMyLjI4MiAwIDMuNzYgMi4wMzggMy43NiA0Ljg5OCAwIDIuOTE4LTEuNTE1IDQuOS0zLjg1MyA0LjlhMy4xMzYgMy4xMzYgMCAwIDEtMi45NzMtMS44MzJ6bTUuMTQxLTMuMDY4YzAtMi4wOTQtLjkxNS0zLjQ5Ni0yLjU4LTMuNDk2LTEuNTcxIDAtMi41MDUgMS4yNTItMi41MDUgMy4yOTF2LjQ4NmMwIDEuOTQ0LjkxNiAzLjIxNiAyLjQ4NyAzLjIxNiAxLjYyNiAwIDIuNTk4LTEuMzY1IDIuNTk4LTMuNDk3ek0xNjQuMDg3IDEwOC4xNjZ2LTEuNDAzYTQuMTgzIDQuMTgzIDAgMCAwIC42NzMuMDM4YzEuMTIyIDAgMS43MDMtLjUwNiAyLjEzMi0xLjcyMWwuMjQzLS42OS0zLjcyMi05LjI0aDEuNzc4bDIuMzk0IDYuNTA4YTguNjE2IDguNjE2IDAgMCAxIC4zMTggMS4xMDNoLjAzNmMuMDU3LS4yNjEuMTY4LS42MzYuMzE4LTEuMTAzbDIuMTY5LTYuNTA3aDEuNzIxbC0zLjY0NyA5Ljk1Yy0uODYgMi4zNTQtMS45ODIgMy4xNC0zLjU1MiAzLjE0YTQuNTQ0IDQuNTQ0IDAgMCAxLS44Ni0uMDc1ek0xNzcuNjYyIDk1LjE1aDEuNzM3VjkyLjdsMS41OS0uNjcydjMuMTIzaDIuMzM5djEuMzA4aC0yLjMzOXY1LjE4YzAgMS4wNjcuNDExIDEuNTMzIDEuMzY1IDEuNTMzYTMuNzA4IDMuNzA4IDAgMCAwIC45NzQtLjEzdjEuNDU5YTQuODU5IDQuODU5IDAgMCAxLTEuMzg1LjE2OGMtMi4wMiAwLTIuNTQ0LTEuMjM0LTIuNTQ0LTIuOTczdi01LjIzN2gtMS43Mzd6TTE4NS44NSA5MC45NDNoMS41OXY1Ljk2NmEzLjA5OCAzLjA5OCAwIDAgMSAzLjA2Ny0xLjk4M2MyLjAyIDAgMy4wODQgMS4yOSAzLjA4NCAzLjc1OXY1LjgxNmgtMS41OXYtNS43MDNjMC0xLjY0Ni0uNjktMi41MDctMi4wMzctMi41MDctMS42MDggMC0yLjUyNSAxLjIxNS0yLjUyNSAzLjMzdjQuODhoLTEuNTl6TTIwNC4xNTYgMTAwLjI5M2gtNi42NGEyLjc2MiAyLjc2MiAwIDAgMCAyLjc4NyAzLjAzIDIuNTEyIDIuNTEyIDAgMCAwIDIuNDg4LTEuNzc3bDEuMzA5LjU4YTMuODg4IDMuODg4IDAgMCAxLTMuOTA5IDIuNmMtMi42NzUgMC00LjI2My0xLjcwMy00LjI2My00Ljc4OCAwLTMuMTIyIDEuNTctNS4wMTIgNC4yNDUtNS4wMTIgMi41MjMgMCAzLjk4MyAxLjQ0IDMuOTgzIDQuMjQ1em0tMS42MDgtMS40OTVjMC0xLjcyMS0uODgtMi42MTgtMi40MTMtMi42MTgtMS42NDUgMC0yLjU4IDEuMDY1LTIuNjE5IDIuODIzaDUuMDMyek0yMTEuODIgOTUuMTVoMS40OTZ2MS43NGEzLjIgMy4yIDAgMCAxIDMuMDQ4LTEuOTY0YzIuMjYyIDAgMy43NzcgMS45NDQgMy43NzcgNC44OTkgMCAyLjk5My0xLjYwOCA0LjktMy44NyA0LjlhMy4wMzggMy4wMzggMCAwIDEtMi44NjItMS43MDJ2NS4xMjVoLTEuNTl6bTYuNjM4IDQuNjc1YzAtMi4yMDYtLjkzNC0zLjQ5Ni0yLjUwNS0zLjQ5NnMtMi41OCAxLjIzNC0yLjU4IDMuMjUzdi40NWMwIDIuMDE4Ljk3MiAzLjI5IDIuNTIzIDMuMjkgMS41OSAwIDIuNTYyLTEuMzA4IDIuNTYyLTMuNDk3ek0yMjcuMDc3IDk0LjkyNmEyLjA2MyAyLjA2MyAwIDAgMSAuMzM2LjAxOHYxLjU1NGgtLjA3M2EyLjcyOCAyLjcyOCAwIDAgMC0yLjA1OC43MjkgNC4zNDMgNC4zNDMgMCAwIDAtLjkzNSAzLjI3MnY0LjAwMmgtMS41OXYtOS4zNWgxLjQ3OXYyLjEzMmEzLjA5MiAzLjA5MiAwIDAgMSAyLjg0LTIuMzU3ek0yMjguNjI4IDk5LjgyNWMwLTMuMDQ4IDEuNzItNC44OTkgNC4zNTYtNC44OTlzNC4zNTggMS44NTEgNC4zNTggNC44OTljMCAzLjA1LTEuNzIxIDQuOS00LjM1OCA0LjlzLTQuMzU2LTEuODUtNC4zNTYtNC45em03LjAzMSAwYzAtMi4zMTktLjk5Mi0zLjUxNi0yLjY3NS0zLjUxNnMtMi42NzMgMS4xOTctMi42NzMgMy41MTYuOTkgMy41MTUgMi42NzMgMy41MTUgMi42NzUtMS4xOTYgMi42NzUtMy41MTV6TTI0MS40NTUgOTUuMTV2MS42MjdhMi43MzMgMi43MzMgMCAwIDEgMi42NzMtMS44NSAyLjY0MiAyLjY0MiAwIDAgMSAyLjY1NyAxLjg2OCAzLjAwMyAzLjAwMyAwIDAgMSAyLjg0MS0xLjg2OWMxLjc5NyAwIDIuODQ0IDEuMjcyIDIuODQ0IDMuNDR2Ni4xMzVoLTEuNTl2LTYuMDAzYzAtMS40Ni0uNi0yLjIwNy0xLjc3Ni0yLjIwNy0xLjMyOSAwLTIuMDk2Ljk3Mi0yLjA5NiAyLjY3NXY1LjUzNWgtMS41ODh2LTYuMDc4YzAtMS4zNjQtLjYzNi0yLjEzMi0xLjc2LTIuMTMyLTEuMzA4IDAtMi4xMTIgMS4wNDctMi4xMTIgMi43NXY1LjQ2aC0xLjU5di05LjM1ek0yNTUuNTM0IDkxLjQxaDEuODEydjIuMDAxaC0xLjgxMnptLjExMSAzLjc0aDEuNTl2OS4zNWgtMS41OXpNMjU5Ljg1MyAxMDEuODQ2bDEuNjA4LS4yODJhMi4yNTIgMi4yNTIgMCAwIDAgMi40NjkgMS44NTFjMS4yNTEgMCAxLjk0NC0uNjE1IDEuOTQ0LTEuNDIgMC0uODIzLS41MDQtMS4xNi0xLjM0Ny0xLjMxbC0xLjgzMi0uMzM2Yy0xLjU5LS4zLTIuNDg3LTEuMTk2LTIuNDg3LTIuNjE4IDAtMS42MDggMS4zNDYtMi44MDUgMy41NTQtMi44MDUgMi4wOTQgMCAzLjUxNS45NTQgMy43MDIgMi41MjVsLTEuNTcyLjM1NWEyLjAzIDIuMDMgMCAwIDAtMi4yMDUtMS41OWMtMS4xOTcgMC0xLjkyOC41MjUtMS45MjggMS40NCAwIC43ODYuNTI1IDEuMTYgMS40NDIgMS4zMjhsMS44MTIuMzM3YzEuNjgzLjMxOCAyLjQzMiAxLjE3OCAyLjQzMiAyLjU0MyAwIDEuNjgzLTEuMjkgMi44NjItMy41NzIgMi44NjItMi4yMDcgMC0zLjcwMi0xLjAzLTQuMDItMi44OHpNMjc3LjU2IDEwMC4yOTNoLTYuNjRhMi43NjIgMi43NjIgMCAwIDAgMi43ODcgMy4wMyAyLjUxMiAyLjUxMiAwIDAgMCAyLjQ4OS0xLjc3N2wxLjMwOC41OGEzLjg4OCAzLjg4OCAwIDAgMS0zLjkwOCAyLjZjLTIuNjc1IDAtNC4yNjMtMS43MDMtNC4yNjMtNC43ODggMC0zLjEyMiAxLjU3LTUuMDEyIDQuMjQ0LTUuMDEyIDIuNTI0IDAgMy45ODQgMS40NCAzLjk4NCA0LjI0NXptLTEuNjA3LTEuNDk1YzAtMS43MjEtLjg3OS0yLjYxOC0yLjQxNC0yLjYxOC0xLjY0NCAwLTIuNTggMS4wNjUtMi42MTggMi44MjNoNS4wMzJ6TTI4NC4zODQgOTkuODI1YzAtMy4wNDggMS43MTktNC44OTkgNC4zNTYtNC44OTlzNC4zNTggMS44NTEgNC4zNTggNC44OTljMCAzLjA1LTEuNzIyIDQuOS00LjM1OCA0LjlzLTQuMzU2LTEuODUtNC4zNTYtNC45em03LjAzIDBjMC0yLjMxOS0uOTkxLTMuNTE2LTIuNjc0LTMuNTE2cy0yLjY3NCAxLjE5Ny0yLjY3NCAzLjUxNi45OSAzLjUxNSAyLjY3NCAzLjUxNSAyLjY3NS0xLjE5NiAyLjY3NS0zLjUxNXpNMzAwLjA1IDk2LjQ2aC0yLjMzN3Y4LjA0aC0xLjU5di04LjA0aC0xLjcxOXYtMS4zMWgxLjcydi0xLjQ3N2EyLjYyMiAyLjYyMiAwIDAgMSAyLjczLTIuODQyIDQuNzAyIDQuNzAyIDAgMCAxIDEuMTk2LjEzdjEuMzY1YTYuNDUgNi40NSAwIDAgMC0uOTktLjA5M2MtLjk1NCAwLTEuMzQ3LjUyNC0xLjM0NyAxLjY2NHYxLjI1NGgyLjMzN3pNMzEzLjEyIDk1Ljg4YTMuMDQ4IDMuMDQ4IDAgMCAxIC44NTkgMi4yMDcgMy4xNTggMy4xNTggMCAwIDEtMy40NTkgMy4xOTggNC4wOTEgNC4wOTEgMCAwIDEtMS43OTQtLjM5MyAxLjAwMiAxLjAwMiAwIDAgMC0uNjc1LjkxNWMwIC41MjUuMzkzLjk1NCAxLjU1NC45NTRoMi4yOGMyLjExNCAwIDMuMTguOTU0IDMuMTggMi42MzcgMCAxLjc1OC0xLjM4NCAyLjk3NS00LjYzOCAyLjk3NS0zLjI5MSAwLTQuMjA4LTEuMjM2LTQuMjA4LTIuNTY0YTIuMDA2IDIuMDA2IDAgMCAxIDEuNTE1LTEuOTQ0IDEuNjg0IDEuNjg0IDAgMCAxLTEuMDg0LTEuNjI2IDEuOTI3IDEuOTI3IDAgMCAxIDEuMzI3LTEuODcxIDMuMDg2IDMuMDg2IDAgMCAxLS45MTYtMi4yOCAzLjEzIDMuMTMgMCAwIDEgMy40NTktMy4xNjIgNC4yNjcgNC4yNjcgMCAwIDEgMS44MzMuMzkzIDIuMTg5IDIuMTg5IDAgMCAxIDIuMjI1LTEuNzAxIDIuMzA1IDIuMzA1IDAgMCAxIC42MTguMDc1djEuMzgzYTMuMjk0IDMuMjk0IDAgMCAwLS42NzQtLjA3NSAxLjMzMSAxLjMzMSAwIDAgMC0xLjQwMi44Nzl6bS0zLjU3MiA4LjI4NWE5LjM5IDkuMzkgMCAwIDEtLjc4Ni0uMDM5IDEuNTMgMS41MyAwIDAgMC0uOTkgMS40MDNjMCAxLjE1OSAxLjE1OCAxLjUzMyAyLjg0MSAxLjUzMyAyLjI4MiAwIDIuODYyLS43MSAyLjg2Mi0xLjU1IDAtLjg4LS42NTUtMS4zNDctMS45NDUtMS4zNDd6bTIuOTM2LTYuMDZhMS45NjQgMS45NjQgMCAxIDAtMS45NjQgMS45NjMgMS44NjYgMS44NjYgMCAwIDAgMS45NjQtMS45NjJ6TTMyMS42NjQgOTQuOTI2YTIuMDYyIDIuMDYyIDAgMCAxIC4zMzYuMDE4djEuNTU0aC0uMDczYTIuNzI4IDIuNzI4IDAgMCAwLTIuMDU3LjcyOSA0LjM0MyA0LjM0MyAwIDAgMC0uOTM2IDMuMjcydjQuMDAyaC0xLjU5di05LjM1aDEuNDc5djIuMTMyYTMuMDkyIDMuMDkyIDAgMCAxIDIuODQxLTIuMzU3ek0zMzEuNDQzIDEwMC4yOTNoLTYuNjRhMi43NjIgMi43NjIgMCAwIDAgMi43ODcgMy4wMyAyLjUxMiAyLjUxMiAwIDAgMCAyLjQ4OC0xLjc3N2wxLjMwOS41OGEzLjg4OCAzLjg4OCAwIDAgMS0zLjkwOSAyLjZjLTIuNjc1IDAtNC4yNjMtMS43MDMtNC4yNjMtNC43ODggMC0zLjEyMiAxLjU3LTUuMDEyIDQuMjQ1LTUuMDEyIDIuNTIzIDAgMy45ODMgMS40NCAzLjk4MyA0LjI0NXptLTEuNjA4LTEuNDk1YzAtMS43MjEtLjg4LTIuNjE4LTIuNDEzLTIuNjE4LTEuNjQ1IDAtMi41OCAxLjA2NS0yLjYxOSAyLjgyM2g1LjAzMnpNMzMzLjMxMyAxMDEuOTc2YTIuNDU4IDIuNDU4IDAgMCAxIDEuMzA4LTIuMjA2IDkuNDQ2IDkuNDQ2IDAgMCAxIDMuMTQtLjc2N2wxLjc0LS4yMDV2LS4xNWMwLTEuNzIxLS42MTctMi40MTQtMi4wNTctMi40MTRhMS45IDEuOSAwIDAgMC0yLjEzIDEuODUzaC0xLjcwNGMuMTMyLTEuOTA3IDEuNjI4LTMuMTYgMy44MTYtMy4xNiAyLjU2MSAwIDMuNjgzIDEuMTYgMy42ODMgMy44OXYyLjUyM2ExMS4xNzUgMTEuMTc1IDAgMCAwIC4zMTggMy4xNmgtMS42NjRhMTQuNjg1IDE0LjY4NSAwIDAgMS0uMTQ4LTEuNyAzLjEyNyAzLjEyNyAwIDAgMS0zLjE0MyAxLjkyNmMtMS45MDggMC0zLjE2LTEuMDg2LTMuMTYtMi43NXptNi4yMDctMS41NTJ2LS40NjhsLTIuNTQ0LjM3NWMtMS4zODMuMjA1LTEuOTguNjktMS45OCAxLjYwOCAwIC45MTUuNjkgMS40NzYgMS44MzIgMS40NzZhMi42NzkgMi42NzkgMCAwIDAgMi42OTItMi45OXpNMzQyLjkyMiA5NS4xNWgxLjczOFY5Mi43bDEuNTktLjY3MnYzLjEyM2gyLjMzOHYxLjMwOGgtMi4zMzl2NS4xOGMwIDEuMDY3LjQxMSAxLjUzMyAxLjM2NSAxLjUzM2EzLjcwOCAzLjcwOCAwIDAgMCAuOTc0LS4xM3YxLjQ1OWE0Ljg1OSA0Ljg1OSAwIDAgMS0xLjM4NS4xNjhjLTIuMDE5IDAtMi41NDMtMS4yMzQtMi41NDMtMi45NzN2LTUuMjM3aC0xLjczOHpNMzU1Ljg2IDkxLjQxaDEuODEzdjIuMDAxaC0xLjgxM3ptLjExMiAzLjc0aDEuNTl2OS4zNWgtMS41OXpNMzYwLjE4IDk5LjgyNWMwLTIuODggMS42NDQtNC44OTkgMy45ODEtNC44OTlhMi44OTUgMi44OTUgMCAwIDEgMi43NSAxLjYwOHYtNS41OTFoMS41OVYxMDQuNWgtMS40OTZ2LTEuNzRhMy4xMSAzLjExIDAgMCAxLTMuMDMgMS45NjVjLTIuMjYyIDAtMy43OTUtMS45NjUtMy43OTUtNC45MDF6bTYuNzY4LjIyNXYtLjQzYzAtMi4wMzktLjk3Mi0zLjI5LTIuNTQyLTMuMjktMS41OSAwLTIuNTQzIDEuMjktMi41NDMgMy40OTUgMCAyLjE4OS45NTQgMy40OTcgMi41NDMgMy40OTcgMS41NTIgMCAyLjU0Mi0xLjI3MiAyLjU0Mi0zLjI3MnpNMzc5LjQzOSAxMDAuMjkzaC02LjY0YTIuNzYyIDIuNzYyIDAgMCAwIDIuNzg2IDMuMDMgMi41MTIgMi41MTIgMCAwIDAgMi40ODktMS43NzdsMS4zMDguNThhMy44ODggMy44ODggMCAwIDEtMy45MDggMi42Yy0yLjY3NSAwLTQuMjYzLTEuNzAzLTQuMjYzLTQuNzg4IDAtMy4xMjIgMS41Ny01LjAxMiA0LjI0NC01LjAxMiAyLjUyNCAwIDMuOTg0IDEuNDQgMy45ODQgNC4yNDV6bS0xLjYwOC0xLjQ5NWMwLTEuNzIxLS44OC0yLjYxOC0yLjQxNC0yLjYxOC0xLjY0NCAwLTIuNTggMS4wNjUtMi42MTggMi44MjNoNS4wMzJ6TTM4MS4zMDYgMTAxLjk3NmEyLjQ1OCAyLjQ1OCAwIDAgMSAxLjMwOC0yLjIwNiA5LjQ0NiA5LjQ0NiAwIDAgMSAzLjE0MS0uNzY3bDEuNzQtLjIwNXYtLjE1YzAtMS43MjEtLjYxOC0yLjQxNC0yLjA1OC0yLjQxNGExLjkgMS45IDAgMCAwLTIuMTMgMS44NTNoLTEuNzAzYy4xMzEtMS45MDcgMS42MjgtMy4xNiAzLjgxNS0zLjE2IDIuNTYyIDAgMy42ODQgMS4xNiAzLjY4NCAzLjg5djIuNTIzYTExLjE3NSAxMS4xNzUgMCAwIDAgLjMxOCAzLjE2aC0xLjY2NWExNC42ODcgMTQuNjg3IDAgMCAxLS4xNDgtMS43IDMuMTI3IDMuMTI3IDAgMCAxLTMuMTQzIDEuOTI2Yy0xLjkwNyAwLTMuMTU5LTEuMDg2LTMuMTU5LTIuNzV6bTYuMjA3LTEuNTUydi0uNDY4bC0yLjU0My4zNzVjLTEuMzg0LjIwNS0xLjk4MS42OS0xLjk4MSAxLjYwOCAwIC45MTUuNjkgMS40NzYgMS44MzMgMS40NzZhMi42NzkgMi42NzkgMCAwIDAgMi42OTEtMi45OXpNMzkxLjQ3OCAxMDEuODQ2bDEuNjA4LS4yODJhMi4yNTIgMi4yNTIgMCAwIDAgMi40NjkgMS44NTFjMS4yNTEgMCAxLjk0NC0uNjE1IDEuOTQ0LTEuNDIgMC0uODIzLS41MDQtMS4xNi0xLjM0Ny0xLjMxbC0xLjgzMy0uMzM2Yy0xLjU5LS4zLTIuNDg2LTEuMTk2LTIuNDg2LTIuNjE4IDAtMS42MDggMS4zNDYtMi44MDUgMy41NTQtMi44MDUgMi4wOTQgMCAzLjUxNS45NTQgMy43MDIgMi41MjVsLTEuNTcyLjM1NWEyLjAzIDIuMDMgMCAwIDAtMi4yMDUtMS41OWMtMS4xOTcgMC0xLjkyOC41MjUtMS45MjggMS40NCAwIC43ODYuNTI0IDEuMTYgMS40NDIgMS4zMjhsMS44MTIuMzM3YzEuNjgzLjMxOCAyLjQzMiAxLjE3OCAyLjQzMiAyLjU0MyAwIDEuNjgzLTEuMjkgMi44NjItMy41NzIgMi44NjItMi4yMDcgMC0zLjcwMi0xLjAzLTQuMDItMi44OHoiPjwvcGF0aD48L3N2Zz4K)<!-- --> --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci peer-review of statistical software ### Why Not? Because it's really difficult ### Why? Because its really important -- - The [R Validation Hub](https://www.pharmar.org/about/) are doing it, but exclusively<br>for the bio-pharmaceutical industry. - We will be (co-)developing a generalised methodology -- - The [R Validation Hub](https://www.pharmar.org/about/) has 44 organisations yet relatively little money - rOpenSci has a board of 6 members, around 1.5 full-time staff, and some money --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci peer-review of statistical software > We’ll be working with the new board and the broader statistical software community to develop a set of agreed-upon standards for statistical package implementation and testing, then launching a new peer-review process and testing tools. (rOpenSci blog 15 July 2019) --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci peer-review of statistical software ### ~~Why Not? Because~~ it's really difficult -- .left-column[ - Bayesian & Monte Carlo - Dimensionality & Feature Reduction - Machine Learning - Regression, Splines, & Interpolation - Statistical Indices and Scores - Visualisation - Probability Distributions ] .right-column[ - Wrapper Packages - Categorical Variables - Networks - Exploratory Data Analysis (EDA) - Survival Analysis - Workflow Software - Summary Statistics - Spatial Analysis - Educational Software ] --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci peer-review of statistical software > We’ll be working with the new board and the broader statistical software community to develop a set of agreed-upon standards for statistical package implementation and testing, then launching a new peer-review process and testing tools. (rOpenSci blog 15 July 2019) --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci peer-review of statistical software "agreed-upon standards for statistical package implementation and testing" .left-column[ - Bayesian & Monte Carlo - Dimensionality & Feature Reduction - Machine Learning - Regression, Splines, & Interpolation - Statistical Indices and Scores - Visualisation - Probability Distributions ] .right-column[ - Wrapper Packages - Categorical Variables - Networks - Exploratory Data Analysis (EDA) - Survival Analysis - Workflow Software - Summary Statistics - Spatial Analysis - Educational Software ] --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## rOpenSci peer-review of statistical software "agreed-upon standards for ~~statistical package implementation and~~ testing" .left-column[ - Bayesian & Monte Carlo - Dimensionality & Feature Reduction - Machine Learning - Regression, Splines, & Interpolation - Statistical Indices and Scores - Visualisation - Probability Distributions ] .right-column[ - Wrapper Packages - Categorical Variables - Networks - Exploratory Data Analysis (EDA) - Survival Analysis - Workflow Software - Summary Statistics - Spatial Analysis - Educational Software ] --- background-image: url(images/ropensci-bg-dark.png) background-size: contain background-position: 0% 50% class: inverse # TESTING --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What is testing? ### Concrete Testing Testing of concrete inputs and outputs ### Property-based Testing Testing functional responses based on the general *properties* of their inputs and outputs --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What is testing? - Alternative approaches ### Concrete Testing - R via `testthat` and a few other packages - python via `pytest` and lots of other packages - inbuilt in `rust` (the benchmark) ### Property-based Testing - `python` via [`hypothesis`](https://hypothesis.works/) (the benchmark) - `rust` via [`quickcheck`](https://github.com/BurntSushi/quickcheck), [`proptest`](https://lib.rs/crates/proptest), and others --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ### Typical `roxygen` function documentation lines ```r #' @param x The first input #' @param y The second input #' @param z The third and last input #' @return The output value #' @export f <- function(x, y, z) { # function definition } ``` -- `roxygen2` is extensible, and the [`roxytest` package](https://github.com/mikldk/roxytest) enables concrete tests to be specified directly in function documentation. --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ### Typical `roxygen` function documentation<br>plus property-based testing lines ```r #' @param x The first input #' @param y The second input #' @param z The third and last input #' @return The output value #' @export #' #' @given x integer #' @given y numeric #' @given z character #' @expect is.integer(f(x, y, z)) #' @expect length(f(x, y, z)) == 1 f <- function(x, y, z) { # function definition } ``` --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ```r f <- function(x, y, z) { # function definition } for (i in seq(ntrials)) { x <- ceiling(runif(1, min = -Inf, max = Inf)) y <- runif(1, min = -Inf, max = Inf) tryCatch ( res <- f(x, y, z = "<string>"), error = function(e) e ) } ``` Property-based testing tests responses<br>to ranges of input values --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ```r f <- function(x, y, z) { # function definition } for (i in seq(ntrials)) { tryCatch ( len <- ceiling(runif(1e6)) x <- ceiling(runif(len, min = -Inf, max = Inf)) y <- runif(1, min = -Inf, max = Inf) res <- f(x, y, z = "<string>"), error = function(e) e ) } ``` Property-based testing tests responses<br>to structures of input values --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ```r #' @given x integer #' @given y numeric #' @given z character #' @given length(x) <= 10 #' @given res = f(x, y, z) #' @expect res is silent f <- function(x, y, z) { # function definition } ``` --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ```r #' @given x integer #' @given y numeric #' @given z character #' @given length(x) <= 10 #' @given res = f(x, y, z) #' @expect res is silent #' #' @given length(x) == 10 #' @given res = f(x, y, z) #' @expect res is silent #' @report res is error f <- function(x, y, z) { # function definition } ``` - Bug reports use the same grammar as tests --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? ```r #' @given x integer #' @given y numeric #' @given z character #' @given length(x) <= 10 #' @given res = f(x, y, z) #' @expect res is silent #' #' @given viz = TRUE #' @report f(x, y, z, viz) is error #' @request f(x, y, z, viz) produces interactive graphical output f <- function(x, y, z, int) { # function definition } ``` - Feature requests use the same grammar as tests -- - Feature requests are pull requests are direct code contributions --- background-image: url(images/ropensci-bg.svg) background-size: contain background-position: 0% 50% ## What might property-based testing look like? - Lots of prior work - Efforts underway to incorporate/adapt within python - R is an opportunity in waiting - [cucumber.io](https://cucumber.io) -- ## Property-based testing can build community --- background-image: url(images/ropensci-bg-dark.png) background-size: contain background-position: 0% 50% class: left, middle, inverse ## Please Help! Please Contribute! ## [Community Call](https://ropensci.org/commcalls/): Wed 18th March .left-column[
mpadge
ropensci ] .right-column[
bikesRdata
.small[mark@ropensci.org]<br><br>
mpadge.github.io ] .box-bottom[ slides at <br> [https://github.com/mpadge/satRday-neuchatel-2020](https://github.com/mpadge/satRday-neuchatel-2020) ]