From 75fe4d401fabd6e000bf36c2f64e3798fd7b4594 Mon Sep 17 00:00:00 2001 From: "Matthijs S. Berends" Date: Sat, 1 Sep 2018 21:19:46 +0200 Subject: [PATCH] new MOs, cleanup --- DESCRIPTION | 2 +- NEWS.md | 4 +- R/atc.R | 2 +- R/data.R | 28 +++--- R/eucast.R | 8 +- R/first_isolate.R | 6 +- R/globals.R | 96 +++++++++------------ R/key_antibiotics.R | 3 + R/mo.R | 128 +++++++++++++--------------- README.md | 17 ++-- data/microorganisms.rda | Bin 40431 -> 40638 bytes man/antibiotics.Rd | 6 +- man/as.atc.Rd | 2 +- man/microorganisms.Rd | 6 +- man/microorganisms.umcg.Rd | 6 +- man/septic_patients.Rd | 10 +-- tests/testthat/test-eucast.R | 1 - tests/testthat/test-first_isolate.R | 9 +- tests/testthat/test-mo.R | 1 + vignettes/AMR.Rmd | 10 +-- 20 files changed, 166 insertions(+), 179 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 25a95240..0993a6a9 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR Version: 0.3.0.9006 -Date: 2018-08-31 +Date: 2018-09-01 Title: Antimicrobial Resistance Analysis Authors@R: c( person( diff --git a/NEWS.md b/NEWS.md index f8ae0d5c..3f43e475 100755 --- a/NEWS.md +++ b/NEWS.md @@ -15,7 +15,7 @@ * Introduction to AMR as a vignette #### Changed -* Added 182 microorganisms to the `microorganisms` data set, now *n* = 2,646 (2,207 bacteria, 285 fungi/yeasts, 153 parasites, 1 other) +* Added 226 microorganisms to the `microorganisms` data set and removed the few viruses it contained, now *n* = 2,664 (2,225 bacteria, 285 fungi/yeasts, 153 parasites, 1 other) * Added three antimicrobial agents to the `antibiotics` data set: Terbinafine (D01BA02), Rifaximin (A07AA11) and Isoconazole (D01AC05) * Added 163 trade names to the `antibiotics` data set, it now contains 298 different trade names in total, e.g.: ```r @@ -28,7 +28,7 @@ ``` * Function `ratio` is now deprecated and will be removed in a future release, as it is not really the scope of this package * Fix for `as.mic` for values ending in zeroes after a real number -* Huge speed improvement for `as.bactid` (now `as.mo`) +* Tremendous speed improvement for `as.bactid` (now `as.mo`) * Added parameters `minimum` and `as_percent` to `portion_df` * Support for quasiquotation in the functions series `count_*` and `portions_*`, and `n_rsi`. This allows to check for more than 2 vectors or columns. ```r diff --git a/R/atc.R b/R/atc.R index dd1a41a9..7ce60f74 100755 --- a/R/atc.R +++ b/R/atc.R @@ -31,7 +31,7 @@ #' In the ATC classification system, the active substances are classified in a hierarchy with five different levels. The system has fourteen main anatomical/pharmacological groups or 1st levels. Each ATC main group is divided into 2nd levels which could be either pharmacological or therapeutic groups. The 3rd and 4th levels are chemical, pharmacological or therapeutic subgroups and the 5th level is the chemical substance. The 2nd, 3rd and 4th levels are often used to identify pharmacological subgroups when that is considered more appropriate than therapeutic or chemical subgroups. #' Source: \url{https://www.whocc.no/atc/structure_and_principles/} #' @return Character (vector) with class \code{"act"}. Unknown values will return \code{NA}. -#' @seealso \code{\link{antibiotics}} for the dataframe that is being used to determine ATC's. +#' @seealso \code{\link{antibiotics}} for the dataframe that is being used to determine ATCs. #' @examples #' # These examples all return "J01FA01", the ATC code of Erythromycin: #' as.atc("J01FA01") diff --git a/R/data.R b/R/data.R index 8a480a0f..d667332d 100755 --- a/R/data.R +++ b/R/data.R @@ -16,10 +16,10 @@ # GNU General Public License for more details. # # ==================================================================== # -#' Dataset with 423 antibiotics +#' Data set with 423 antibiotics #' -#' A dataset containing all antibiotics with a J0 code and some other antimicrobial agents, with their DDD's. Except for trade names and abbreviations, all properties were downloaded from the WHO, see Source. -#' @format A data.frame with 423 observations and 18 variables: +#' A data set containing all antibiotics with a J0 code and some other antimicrobial agents, with their DDDs. Except for trade names and abbreviations, all properties were downloaded from the WHO, see Source. +#' @format A \code{\link{tibble}} with 423 observations and 18 variables: #' \describe{ #' \item{\code{atc}}{ATC code, like \code{J01CR02}} #' \item{\code{certe}}{Certe code, like \code{amcl}} @@ -120,10 +120,10 @@ # "antibiotics" -#' Dataset with ~2650 microorganisms +#' Data set with human pathogenic microorganisms #' -#' A dataset containing 2,646 microorganisms. MO codes of the UMCG can be looked up using \code{\link{microorganisms.umcg}}. -#' @format A data.frame with 2,646 observations and 12 variables: +#' A data set containing 2,664 (potential) human pathogenic microorganisms. MO codes can be looked up using \code{\link{guess_mo}}. +#' @format A \code{\link{tibble}} with 2,664 observations and 12 variables: #' \describe{ #' \item{\code{mo}}{ID of microorganism} #' \item{\code{bactsys}}{Bactsyscode of microorganism} @@ -151,10 +151,10 @@ #' @seealso \code{\link{guess_mo}} \code{\link{antibiotics}} \code{\link{microorganisms.umcg}} "microorganisms" -#' Translation table for UMCG with ~1100 microorganisms +#' Translation table for UMCG with ~1,100 microorganisms #' -#' A dataset containing all bacteria codes of UMCG MMB. These codes can be joined to data with an ID from \code{\link{microorganisms}$mo} (using \code{\link{left_join_microorganisms}}). GLIMS codes can also be translated to valid \code{mo}'s with \code{\link{guess_mo}}. -#' @format A data.frame with 1090 observations and 2 variables: +#' A data set containing all bacteria codes of UMCG MMB. These codes can be joined to data with an ID from \code{\link{microorganisms}$mo} (using \code{\link{left_join_microorganisms}}). GLIMS codes can also be translated to valid \code{MO}s with \code{\link{guess_mo}}. +#' @format A \code{\link{tibble}} with 1,090 observations and 2 variables: #' \describe{ #' \item{\code{umcg}}{Code of microorganism according to UMCG MMB} #' \item{\code{mo}}{Code of microorganism in \code{\link{microorganisms}}} @@ -163,10 +163,10 @@ #' @seealso \code{\link{guess_mo}} \code{\link{microorganisms}} "microorganisms.umcg" -#' Dataset with 2000 blood culture isolates of septic patients +#' Data set with 2000 blood culture isolates of septic patients #' -#' An anonymised dataset containing 2000 microbial blood culture isolates with their full antibiograms found in septic patients in 4 different hospitals in the Netherlands, between 2001 and 2017. It is true, genuine data. This \code{data.frame} can be used to practice AMR analysis. For examples, press F1. -#' @format A data.frame with 2000 observations and 49 variables: +#' An anonymised data set containing 2,000 microbial blood culture isolates with their full antibiograms found in septic patients in 4 different hospitals in the Netherlands, between 2001 and 2017. It is true, genuine data. This \code{data.frame} can be used to practice AMR analysis. For examples, press F1. +#' @format A \code{\link{tibble}} with 2,000 observations and 49 variables: #' \describe{ #' \item{\code{date}}{date of receipt at the laboratory} #' \item{\code{hospital_id}}{ID of the hospital, from A to D} @@ -185,13 +185,13 @@ #' # PREPARATION # #' # ----------- # #' -#' # Save this example dataset to an object, so we can edit it: +#' # Save this example data set to an object, so we can edit it: #' my_data <- septic_patients #' #' # load the dplyr package to make data science A LOT easier #' library(dplyr) #' -#' # Add first isolates to our dataset: +#' # Add first isolates to our data set: #' my_data <- my_data %>% #' mutate(first_isolates = first_isolate(my_data, "date", "patient_id", "mo")) #' diff --git a/R/eucast.R b/R/eucast.R index c23ca0fe..9d794f40 100755 --- a/R/eucast.R +++ b/R/eucast.R @@ -280,8 +280,10 @@ EUCAST_rules <- function(tbl, } # join to microorganisms data set + col_mo_original <- NULL if (!tbl %>% pull(col_mo) %>% is.mo()) { - warning("Improve integrity of the `", col_mo, "` column by transforming it with 'as.mo'.") + col_mo_original <- tbl %>% pull(col_mo) + tbl[, col_mo] <- as.mo(tbl[, col_mo]) } tbl <- tbl %>% left_join_microorganisms(by = col_mo, suffix = c("_tempmicroorganisms", "")) @@ -685,6 +687,10 @@ EUCAST_rules <- function(tbl, tbl <- tbl %>% select(-c((tbl.ncol - microorganisms.ncol):tbl.ncol)) # and remove added suffices colnames(tbl) <- gsub("_tempmicroorganisms", "", colnames(tbl)) + # restore old col_mo values if needed + if (!is.null(col_mo_original)) { + tbl[, col_mo] <- col_mo_original + } if (info == TRUE) { cat('Done.\n\nEUCAST Expert rules applied to', diff --git a/R/first_isolate.R b/R/first_isolate.R index a1a65e9a..ac25ff9f 100755 --- a/R/first_isolate.R +++ b/R/first_isolate.R @@ -178,7 +178,7 @@ first_isolate <- function(tbl, if (!is.na(col_mo)) { if (!tbl %>% pull(col_mo) %>% is.mo()) { - warning("Improve integrity of the `", col_mo, "` column by transforming it with 'as.mo'.") + tbl[, col_mo] <- as.mo(tbl[, col_mo]) } # join to microorganisms data set tbl <- tbl %>% left_join_microorganisms(by = col_mo) @@ -311,7 +311,7 @@ first_isolate <- function(tbl, if (info == TRUE) { message('No isolates found.') } - # NA's where genus is unavailable + # NAs where genus is unavailable tbl <- tbl %>% mutate(real_first_isolate = if_else(genus == '', NA, FALSE)) if (output_logical == FALSE) { @@ -406,7 +406,7 @@ first_isolate <- function(tbl, all_first[which(all_first[, col_icu] == TRUE), 'real_first_isolate'] <- FALSE } - # NA's where genus is unavailable + # NAs where genus is unavailable all_first <- all_first %>% mutate(real_first_isolate = if_else(genus %in% c('', '(no MO)', NA), NA, real_first_isolate)) diff --git a/R/globals.R b/R/globals.R index aa0ffdb4..268258d2 100755 --- a/R/globals.R +++ b/R/globals.R @@ -16,61 +16,41 @@ # GNU General Public License for more details. # # ==================================================================== # -globalVariables(c('abname', - 'Antibiotic', - 'Interpretation', - 'Percentage', - 'bind_rows', - 'element_blank', - 'element_line', - 'theme', - 'theme_minimal', - 'antibiotic', - 'antibiotics', - 'atc', - 'bactid', - 'C_chisq_sim', - 'certe', - 'cnt', - 'count', - 'Count', - 'counts', - 'cum_count', - 'cum_percent', - 'date_lab', - 'days_diff', - 'fctlvl', - 'first_isolate_row_index', - 'Freq', - 'fullname', - 'genus', - 'gramstain', - 'item', - 'key_ab', - 'key_ab_lag', - 'key_ab_other', - 'labs', - 'median', - 'mic', - 'MIC', - 'microorganisms', - 'mocode', - 'n', - 'na.omit', - 'observations', - 'official', - 'other_pat_or_mo', - 'Pasted', - 'patient_id', - 'quantile', - 'R', - 'real_first_isolate', - 'S', - 'septic_patients', - 'species', - 'umcg', - 'value', - 'values', - 'View', - 'y', - '.')) +globalVariables(c(".", + "antibiotic", + "Antibiotic", + "antibiotics", + "cnt", + "count", + "Count", + "cum_count", + "cum_percent", + "date_lab", + "days_diff", + "fctlvl", + "first_isolate_row_index", + "Freq", + "genus", + "gramstain", + "Interpretation", + "item", + "key_ab", + "key_ab_lag", + "key_ab_other", + "median", + "mic", + "microorganisms", + "mo", + "n", + "observations", + "other_pat_or_mo", + "Pasted", + "patient_id", + "Percentage", + "R", + "real_first_isolate", + "S", + "septic_patients", + "species", + "value", + "y")) diff --git a/R/key_antibiotics.R b/R/key_antibiotics.R index 8db9b8a9..818e7386 100644 --- a/R/key_antibiotics.R +++ b/R/key_antibiotics.R @@ -140,6 +140,9 @@ key_antibiotics <- function(tbl, GramNeg_4, GramNeg_5, GramNeg_6) gram_negative <- gram_negative[!is.na(gram_negative)] + if (!tbl %>% pull(col_mo) %>% is.mo()) { + tbl[, col_mo] <- as.mo(tbl[, col_mo]) + } # join microorganisms tbl <- tbl %>% left_join_microorganisms(col_mo) diff --git a/R/mo.R b/R/mo.R index 9b1990d7..55b05097 100644 --- a/R/mo.R +++ b/R/mo.R @@ -91,7 +91,6 @@ #' } as.mo <- function(x, Becker = FALSE, Lancefield = FALSE) { - if (NCOL(x) == 2) { # support tidyverse selection like: df %>% select(colA, colB) # paste these columns together @@ -131,74 +130,11 @@ as.mo <- function(x, Becker = FALSE, Lancefield = FALSE) { x_species <- paste(x, 'species') # add start en stop regex x <- paste0('^', x, '$') + x_withspaces_all <- x_withspaces x_withspaces <- paste0('^', x_withspaces, '$') for (i in 1:length(x)) { - if (Becker == TRUE | Becker == "all") { - mo <- suppressWarnings(guess_mo(x_backup[i])) - if (mo %like% '^STA') { - # See Source. It's this figure: - # https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4187637/figure/F3/ - species <- left_join_microorganisms(mo)$species - if (species %in% c("arlettae", "auricularis", "capitis", - "caprae", "carnosus", "cohnii", "condimenti", - "devriesei", "epidermidis", "equorum", - "fleurettii", "gallinarum", "haemolyticus", - "hominis", "jettensis", "kloosii", "lentus", - "lugdunensis", "massiliensis", "microti", - "muscae", "nepalensis", "pasteuri", "petrasii", - "pettenkoferi", "piscifermentans", "rostri", - "saccharolyticus", "saprophyticus", "sciuri", - "stepanovicii", "simulans", "succinus", - "vitulinus", "warneri", "xylosus")) { - x[i] <- "STACNS" - next - } else if ((Becker == "all" & species == "aureus") - | species %in% c("simiae", "agnetis", "chromogenes", - "delphini", "felis", "lutrae", - "hyicus", "intermedius", - "pseudintermedius", "pseudointermedius", - "schleiferi")) { - x[i] <- "STACPS" - next - } - } - } - - if (Lancefield == TRUE) { - mo <- suppressWarnings(guess_mo(x_backup[i])) - if (mo %like% '^STC') { - # See Source - species <- left_join_microorganisms(mo)$species - if (species == "pyogenes") { - x[i] <- "STCGRA" - next - } - if (species == "agalactiae") { - x[i] <- "STCGRB" - next - } - if (species %in% c("equisimilis", "equi", - "zooepidemicus", "dysgalactiae")) { - x[i] <- "STCGRC" - next - } - if (species == "anginosus") { - x[i] <- "STCGRF" - next - } - if (species == "sanguis") { - x[i] <- "STCGRH" - next - } - if (species == "salivarius") { - x[i] <- "STCGRK" - next - } - } - } - if (identical(x_trimmed[i], "")) { # empty values x[i] <- NA @@ -206,12 +142,12 @@ as.mo <- function(x, Becker = FALSE, Lancefield = FALSE) { next } if (x_backup[i] %in% AMR::microorganisms$mo) { - # is already a valid mo + # is already a valid MO code x[i] <- x_backup[i] next } if (x_trimmed[i] %in% AMR::microorganisms$mo) { - # is already a valid mo + # is already a valid MO code x[i] <- x_trimmed[i] next } @@ -303,6 +239,13 @@ as.mo <- function(x, Becker = FALSE, Lancefield = FALSE) { next } + # try fullname without start and stop regex, to also find subspecies, like "K. pneu rhino" + found <- MOs[which(gsub("[\\(\\)]", "", MOs$fullname) %like% x_withspaces_all[i]),]$mo + if (length(found) > 0) { + x[i] <- found[1L] + next + } + # search for GLIMS code found <- AMR::microorganisms.umcg[which(toupper(AMR::microorganisms.umcg$umcg) == toupper(x_trimmed[i])),]$mo if (length(found) > 0) { @@ -352,6 +295,57 @@ as.mo <- function(x, Becker = FALSE, Lancefield = FALSE) { call. = FALSE) } + if (Becker == TRUE | Becker == "all") { + # See Source. It's this figure: + # https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4187637/figure/F3/ + CoNS <- MOs %>% + filter(genus == "Staphylococcus", + species %in% c("arlettae", "auricularis", "capitis", + "caprae", "carnosus", "cohnii", "condimenti", + "devriesei", "epidermidis", "equorum", + "fleurettii", "gallinarum", "haemolyticus", + "hominis", "jettensis", "kloosii", "lentus", + "lugdunensis", "massiliensis", "microti", + "muscae", "nepalensis", "pasteuri", "petrasii", + "pettenkoferi", "piscifermentans", "rostri", + "saccharolyticus", "saprophyticus", "sciuri", + "stepanovicii", "simulans", "succinus", + "vitulinus", "warneri", "xylosus")) %>% + pull(mo) + CoPS <- MOs %>% + filter(genus == "Staphylococcus", + species %in% c("simiae", "agnetis", "chromogenes", + "delphini", "felis", "lutrae", + "hyicus", "intermedius", + "pseudintermedius", "pseudointermedius", + "schleiferi")) %>% + pull(mo) + x[x %in% CoNS] <- "STACNS" + x[x %in% CoPS] <- "STACPS" + if (Becker == "all") { + x[x == "STAAUR"] <- "STACPS" + } + } + + if (Lancefield == TRUE) { + # group A + x[x == "STCPYO"] <- "STCGRA" # S. pyogenes + # group B + x[x == "STCAGA"] <- "STCGRB" # S. agalactiae + # group C + S_groupC <- MOs %>% filter(genus == "Streptococcus", + species %in% c("equisimilis", "equi", + "zooepidemicus", "dysgalactiae")) %>% + pull(mo) + x[x %in% S_groupC] <- "STCGRC" # S. agalactiae + # group F + x[x == "STCANG"] <- "STCGRF" # S. anginosus + # group H + x[x == "STCSAN"] <- "STCGRH" # S. sanguis + # group K + x[x == "STCSAL"] <- "STCGRK" # S. salivarius + } + # left join the found results to the original input values (x_input) df_found <- data.frame(input = as.character(unique(x_input)), found = x, diff --git a/README.md b/README.md index 882a0fbc..223a57a9 100755 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ This `AMR` package basically does four important things: * Use `first_isolate` to identify the first isolates of every patient [using guidelines from the CLSI](https://clsi.org/standards/products/microbiology/documents/m39/) (Clinical and Laboratory Standards Institute). * You can also identify first *weighted* isolates of every patient, an adjusted version of the CLSI guideline. This takes into account key antibiotics of every strain and compares them. * Use `MDRO` (abbreviation of Multi Drug Resistant Organisms) to check your isolates for exceptional resistance with country-specific guidelines or EUCAST rules. Currently, national guidelines for Germany and the Netherlands are supported. - * The data set `microorganisms` contains the family, genus, species, subspecies, colloquial name and Gram stain of almost 2,650 microorganisms (2,207 bacteria, 285 fungi/yeasts, 153 parasites, 1 other). This enables resistance analysis of e.g. different antibiotics per Gram stain. The package also contains functions to look up values in this data set like `mo_genus`, `mo_family` or `mo_gramstain`. Since it uses `as.mo` internally, AI is supported. For example, `mo_genus("MRSA")` and `mo_genus("S. aureus")` will both return `"Staphylococcus"`. These functions can be used to add new variables to your data. + * The data set `microorganisms` contains the family, genus, species, subspecies, colloquial name and Gram stain of almost 3,000 potential human pathogenic microorganisms (bacteria, fungi/yeasts and parasites). This enables resistance analysis of e.g. different antibiotics per Gram stain. The package also contains functions to look up values in this data set like `mo_genus`, `mo_family` or `mo_gramstain`. Since it uses `as.mo` internally, AI is supported. For example, `mo_genus("MRSA")` and `mo_genus("S. aureus")` will both return `"Staphylococcus"`. These functions can be used to add new variables to your data. * The data set `antibiotics` contains the ATC code, LIS codes, official name, trivial name and DDD of both oral and parenteral administration. It also contains a total of 298 trade names. Use functions like `ab_official` and `ab_tradenames` to look up values. As the `mo_*` functions use `as.mo` internally, the `ab_*` functions use `as.atc` internally so it uses AI to guess your expected result. For example, `ab_official("Fluclox")`, `ab_official("Floxapen")` and `ab_official("J01CF05")` will all return `"Flucloxacillin"`. These functions can again be used to add new variables to your data. 3. It **analyses the data** with convenient functions that use well-known methods. @@ -74,7 +74,7 @@ This `AMR` package basically does four important things: * Real and genuine data ## How to get it? -All versions of this package [are published on CRAN](http://cran.r-project.org/package=AMR), the official R network with a peer-reviewed submission process. +All stable versions of this package [are published on CRAN](http://cran.r-project.org/package=AMR), the official R network with a peer-reviewed submission process. ### Install from CRAN [![CRAN_Badge](https://www.r-pkg.org/badges/version/AMR)](http://cran.r-project.org/package=AMR) [![CRAN_Downloads](https://cranlogs.r-pkg.org/badges/grand-total/AMR)](http://cran.r-project.org/package=AMR) @@ -89,15 +89,14 @@ All versions of this package [are published on CRAN](http://cran.r-project.org/p - `install.packages("AMR")` ### Install from GitHub -[![Last_Commit](https://img.shields.io/github/last-commit/msberends/AMR.svg)](https://github.com/msberends/AMR/commits/master) -This is the latest development version. Although it may contain bugfixes and even new functions compared to the latest released version on CRAN, it is also subject to change and may be unstable or behave unexpectedly. Always consider this a beta version. All below 'badges' should be green. +This is the latest **development version**. Although it may contain bugfixes and even new functions compared to the latest released version on CRAN, it is also subject to change and may be unstable or behave unexpectedly. Always consider this a beta version. All below 'badges' should be green: -Development Test | Result ---- | :---: -Works on Linux and macOS | [![Travis_Build](https://travis-ci.org/msberends/AMR.svg?branch=master)](https://travis-ci.org/msberends/AMR) -Works on Windows | [![AppVeyor_Build](https://ci.appveyor.com/api/projects/status/github/msberends/AMR?branch=master&svg=true)](https://ci.appveyor.com/project/msberends/AMR) -Syntax lines checked | [![Code_Coverage](https://codecov.io/gh/msberends/AMR/branch/master/graph/badge.svg)](https://codecov.io/gh/msberends/AMR) +Development Test | Result | Reference +--- | :---: | --- +Works on Linux and macOS | [![Travis_Build](https://travis-ci.org/msberends/AMR.svg?branch=master)](https://travis-ci.org/msberends/AMR) | Checked by Travis CI, GmbH [[ref 1]](https://travis-ci.org/msberends/AMR) +Works on Windows | [![AppVeyor_Build](https://ci.appveyor.com/api/projects/status/github/msberends/AMR?branch=master&svg=true)](https://ci.appveyor.com/project/msberends/AMR) | Checked by Appveyor Systems Inc. [[ref 2]](https://ci.appveyor.com/project/msberends/AMR) +Syntax lines checked | [![Code_Coverage](https://codecov.io/gh/msberends/AMR/branch/master/graph/badge.svg)](https://codecov.io/gh/msberends/AMR) | Checked by Codecov LLC [[ref 3]](https://codecov.io/gh/msberends/AMR) If so, try it with: ```r diff --git a/data/microorganisms.rda b/data/microorganisms.rda index 094dc216f423eb500c82a2d66b0ee5d802c40f57..d939951ae67a105bb19d74b863bda5ce1d5574f6 100755 GIT binary patch delta 40358 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 PdI!jgO@>4244R{&0{S1{Z1J2UvRF zi*h?;5%?p=DS#qwCR;s&3lcTR4nZ7s^ zp`#UKI*^r;oS@5RQ#5auSg*w22S*SQRR)(zy70@xsj^i8oUn2Lnp8+C6`X&idX-LwIUx!c~e5wwhM^D(5`b5lz^YUZBQx2@iD zDSsMKX>Q&IN2?Ze?P$$j#f?TqlQz_oR*O{-xsO|p@YH$R)$&FO_J>o1=J)3gUh$moBw6fq|1qh%RY?w6=`8#un)A4)4re!H z=Y?9}{Es&uSwx7bA__~4i%3$`0!y~tHlm$`-$A3Zdj*lU;1fon00td#?B^1pgx-8xyg`%OpL7~5T;gJ4`=cz>}F9Wsz^ zaEFMgj;J(c#gnFMCmsl#lDmg;T?b1Ir$0;YjCr>DAY@gN50;*a;j*Hk_B@76tHw1t zDDe%Bx^%JQc*Z0eFV3199LpU<=MdgRA_^6T1`QVSahxf<#OaLN= ar4&IjMO8z!6;%)ai@744C`eLku^WKISEpqF delta 40137 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�Le0PCobh3N9yU#Vu&G&yqFHLn$GcZ|>dV8(})$a?zW27R98biyJn~*J3iX&2) z<=Y96%Yn7d)5bSB@8E3m<;!-mXJu$gdc@*s5m8p&+$Tk&=<{BxhfZW%6{Zs!<7YO? zi;V^!1|7jisb*Do9Fb1>Gk1eW zrjHoJo2Exs0jPnic^a*uh&=7?^KMy3&wcRY*wu_jw)aaBRf-*6haEK)6N6Fj^=gkd zLFSz9)gI%0Z+5zj?#e0(4zg`yyV~wgY^=#OC?E+!GJ%JNtN7VBB6oL;Q;y8u!>sso5chG#R-t z0E6auJEMnRb}z5rw2<=Bmj=W(Ll@UC72KvtkS28Av84^lxa1p@!Wuv~IuNBT4&~%1 zZUiy|j3-LM3Qk_^k_S0d@2+(B-+9jJoOQf*2O$K>=1WM#(i(rULb77U?-$WLEUMBH zqPG|Ux~du)TSam`;2V^4U3zxrCrNTcl!>ll4wM675(S|R%T7T{smLi#(x)L4QavSf zNbZAjk3c$3p-xH0Kqg?2i3oBBF5>ez&pC~{14dhwH!=?4GDQr8UFIf6Pb`H7g((1} zM^d6{5R!vXDYJjDo9asQuUIN$`c<)9pXm9xWcDdekH61* z@ggJS5IA+nEBAb1MpY_^0u>5rN+ME%f|?3S8fg}mtuQ@Z5BsS<-OE&Xq}j2$1UQmN zK}3XEB!m?b1&|~Jg(W3SQ&Ia|)uZ-L%h6QubC66`mW@J(T0xO53YmlJ({gwlFEOs{;hWp|NBd zK96cjw0*&Z{~?A`X3y(A-mOoHNjoA~B~+4Ash5BFqsi2s&t~V@&kxbyM`+SE=(-8e zhv-z|r--O*+0eifoc9|)?0qNFaiV4&Y@|=UivzQbE(s^4i z?stDqq8IaVE#w4)9l?*|pOo^LZ|w`8LAeL4f!p1NV4Dsh<2-8<_+s4Pl1R;*ycrH=NhVi`n}(a~yBHf<+Xg z0)m`+HCJk}RJEp^in9%AJi_l2<-}=nO?H3REbpFLat)k^^?W`Kqul!+q?9}q(DFnM zNhj9!edN{VcqKZ&6Xn0+<-qnm9xtnVe~Nqw+tpQmERV^ee(n69vSMoZDt4M(um<5u zsGl;UHpC1tG7B(Og5d;{U_W84Rge~C?J(0)qS==`stQ;o+1aKEcsqX% z^kS4^M@LIDGZUx3vL1E2S=iH{G; z{T-9y?I*?AONU_77(Ef7H9cHj`HB#LhGc(OOoxAT;WvaGK{sXj7a0t3KqMYG+kZA? z#y(|6E_zMx;TX$dUVlOhALu4S&7YG|6W3@UFv#(>5l%SLv0XLYON7=90P^`on^li~cZ=#@WAuL)eFi93G@@<-@N z@JAnK>rbO`_@m#7W;(8>Vm8PDb zLy{67B_2wWNOFXaWci+lWcjAkZp}<4O_S|l{$Dtf3%mI|UxW$sPqBYFr$N=uAr6Pt z_2XREmB!jd#<8TPpgSa^I#K3IYhLC7inB4OFndY^xJ(^R?HMHK)gkMxz1Y6EV%%Yl z&joCVgm7x6T~TRiG(?Dxs(MevXoC!HXlNE7cAO7TL~2p<6&f&bh-C6v@ucKbuOW$Q zj|FA>34Fd&r&m#>ZQ6gzub#d20)TZ0Dr`-HYz{=+IRwu%{43g$`melxNxRu8I?w9( zJ!FzXO87oz!^J1={>%ssu6T`O;7DnmL33sbf%g8l&?*camz2E?o(oKhTWlEiRT86ijz#mT^2MN}zl2@@QgoRUS7 zn+#c*5mCfS1yLf~RaRKSK`U!3LmTU24{Q!rV!W0me6w+cHr9|2Tc?G6Z<-*N#%bLh4;4hRG!UQ8Yk;?YVgMn z3vHE68!#QGoU>*pc7~^td&aS1#VJZvRaI4b+imD*UiLCT^BY*i9a-n>#Sx5xD`?mNm4GUS*k)9goWK+2{rF&w;|s zY$*F2f_=3=QkG@6|v};S0?Nkd`Ab7sq1}i>FrWO@<|Vq`Z_LBB0LDoykK<^hR-<& z>C@4|s-;hnnfG6Q?qk&4N1ol@k6*dOk~nfYAKE5#O=bbMzRpozWqpa_tKS&NTKp>@;M2SEOl%qn6Tqna#lf%LCG@nkITS3sTWmli) ziMTV;VateUc2k*v9zg1d&3cT(Zw|HLQ(FYiX|9{!Ic2^QB>E$Sp3Y8_Y2;JQjCm`0 zJ#DS{x2K~HN#fz?nw;5v5_Wnzn{t0z!QXp%2tFsP!IO4_0}2xgd^Y>}jnD(uuR0HjZN!eJiT81jw-=^sC z)tcr1xfBkSt8d&D7YX3f$gxnfhZ zOjJ@bG*Tr3BvVKtK~*(AqCF>LsQSadySccT`Zw zZA*jIdDsv_T$H88=!8@HClfm7VQe~m+!Sap{yc{W9n>#jn zOFP}qY+&s9@`)UpKBIm2PKi=P)!>CW>;B)f7TdAx*-n|^COX-iu+5A!Q#LKdR3kxy z4sTvOcufkTqCN&Mmd^)NYvQOI^FH>jA*;dT#VLr@hqUJ~ogK|wFmZn-h-fmok%kkn z={UAbjf%8Xw%7_<8oqAdN&J{yvS-xKQ@3=$5`f49Afl9{p)5}1P!l}oowH|%`2&H~ zgNX-YM9NbNHen1JED{)Ola4n{({pxH??P4$0|_uWDjqIK%XI#ihn`+!_wCXMNjW2{ zo0q=Z-49kA9z78*e`|l!9S)ek9B)5WixjJEwS5!xBBt*cl{|YXD~O&kPd}>hztYda zer@|K;!kTo7kBl176;V)6EerA%SA}}+EQxz)eZon0fc~J2;!#h*@3OdY;KRS1DCSv z`j__=V*RO`byZA#!l>oA06Qe|c_Ty3b>bTo4-UAXJ}87`NHl+djR1f|3(^-QLMoA@ z3W}OxO-d$6BSM0khreu5^X7TLj&C!zEHdGsp9LgzKWG^Z%#pv7zW!(T zuee6EZhc_xpr98TBm>FJ{&bN3&XiP*86*T9DoJW6NlW63vtQ=MrDN*LU2SrPr+wGoS zr)h;%R+5u*n0b*zmB{mL-e#(SR%1iVZuVB=da^caS&TuwYe3m3r;@s3tz}b+X^_YS z-MyHb+afi$a&yYotD0^|C9a>HX0LY0cCPX*;iAphgxUp?T)I%SJF1yoME6ux% z?3s9`UHHDVAtI`&j)0_8N-UPz6AFUnUol_! z1;TJ}NdiGdz)=-ZRz}LR3|eUuBn%`zk7jH`aure~3lg~@NR2HZ1p%3gkq9{hgrd*} zKq)|(08$G@1Cp5{6jFr)LeLmUWC#TaQVjz_4GOfB1%@t2&=iA6B^e0hflAV3jSGK5 zl&VV=2~`tGOOj;dE zLvbU`;`MoXVfDW|#Tyl}QgHhp!7x14^BYafj~eNF&UfD;P|iDzcCaj4P#cp33~=aMzuE$2_8?T z1{NLMcQ~4YEh2n}z)8EqYNda&+iH99Zw8F%Yc-pS#10D4`v%U(H0DWz;GSMvCqO>4 z#9UN`!6z4L!d2%l^-MQz3zWxM73wKr^^79XJ`s#lqz@iBk#XYoOduqh!+ zyO$;0`^T~TL1%!j&JQ>bHhup;dGuI( z>@5<|w4E0Tq<09!x|KP$5{fBk zQ(QJ9jPgQ*NaFAS(PWjoD`~Br%w{V7POK8(=$iWuAEjhll9;xFA4(xkt+A1Z8RYjst1G&`oaM~)zk{g`iA>_hB zO&t#E=@Mv}Y}ki1@OU+S$D+b}jwJmj^ga)=NJ#3kyIa|ed9IAKXE!$J#sKQpNKe7z zu;&Tj@ri$oeLD+_%SD`d5dj0|5Q=p|5NO1R(Ypx~3ZC*XVfB+}xu6nfOv9#2>M_Xl z>mCSZn2RBGg$IU09o>2aZZbZ57NJx{qCzAD2yM@vP|u|}lp>lWB^Z9Mw9f+1wCnDl z!&m4O)1{Cb0uIt7l~n|L)D|NxSQ}noztd&mJYrk8x4%( zHWIi&m}9i!OrareRKoKoxl9acO_P~Z=p)hgcF#2apZIr%T~lVvk2W56 zz|bT_dG22`MDY4{eT>J$zAiYMmPr)0$XZ2Jnt~+kNe{2f1=JGDFcbk50|69!HG*bv z>jOghka$@IV4(7dJdpjWFCtvsI#Fc^Bs(Y54>bD2%;CjIl{@8l3W101qM&s}gPSQQ@u!^9TkyWF z4`x|3#<$RWV@s#|7;4TumEFx$so8;q!YPMTm^IOP1cq({6XVj|${={30T)=Lt~-Cs z;zVqRCoZ9=&fmF5x`QTzT_pg>?m5SR%n~yh7)I-X=96Y#;rQUd#e)lsFfoPdVM%3{6ta@S&@3#q5mCR)ReCUpiSJc=J*UVjr@zlzk~*E(l1M$3yVrc3 z<|fD3@0A9qI~*tQIm8ag@eu3zha7*+EfPb77U!lpkId#H0(W)MlOw^t{w8#{%#=88 zNT70g7#Km>m}7UD;RIZe-M$&>L=6#hhEDJHv|!N{qw5vyw%rlqw^8%Q_}wn4BgY)c zl8|5R!TzZkav5Tnutp3OCdI(35pkJE5d~l{hYU0#pHZ6ejGHc}L`CWlDl&hGAg!1- zWRkFy%h>Jxx+lLZ8@Q`e=cm-HqeVa1=9aB0Qj>E=iQDh&le0#NObV(vaU@E?{gEPz z?|A!t+Sl2?V0hy%x(q`jsp?-*1sP^%`u{^#iK?WNRukmv`zF&zY;GM;SEG{(MY7vg z6|sbTl8hrJ849LI!Kqr6nlFES_`Eedm506>>w%UX3VB{e@gv;;jfgE_$4+ z6UPXm3@y3*cYdwadPeyFGU-;ll}VGrcfwI;t0~;5)9nD*8YO8`rTc$bO-@hfy0{~A ziq%)m7$7H}Pkg3z=1u&)unzq|&lMAPcVLc)cuQWH(4P{ky4(>c0Dqmd9F)$|L2M^CH z+E(E}F*~(}xb@wo(-ZspX^|oaH*RMw5za;~z#6dF<3MUs6&nvWxnYL6Qq7&nOA>BE z2h@|6ZIFL?;huGvBJ{3TtjzOy-u8wWs!tfaialdU#u1ZJ@RO^f4)^7Azi(Ji92XJyx1+1PDI|IPOvvu$4im|I+XI}Wvi7r%nR#UGUPPjtEPYYkEZT6tD#a5qOmC~#bvnFYX5Ll z&TX#T?cq36{6@yya!##{(x!IBCKCx_V%v;hQW;pGREAYWFPoq;?7;c2F|(IxadAZv z5mE04&knpKRy3SOrb4Qz_s2k<-hutVPJk6s)iVWDvr3Go_(!n%W7#`uVqAY72c-IS zk28N+^Fj05J=c3?)NhNm6*UEG+EXt%Ue}9EYVu3*B$!Ev5)uMed_mO( zI0w5FDut!;B>hxK{g1VRc63Z0DJEUa4$hAgoD;!YL z1xZmQ3L>VD$G80Vo3eT_zc5Xmf#|Q|E5?6mv}0`~G-545T`GS9IyB&!de|~q)!l3r zFsDI6LVMOJ$F*h>}PU24MG|)5*cd-OV)-!?cqM zwIx-zZ2dZQ(@iwjUq;70oXJ>46;T+@4ydS|6QhP8<3566u^9w1goav4%?LreUGDhC zElygBJbbIAW>Lf6G#o1=6_5L|3Rp}^=l-$1Z0S^GI#;z7G<^I$CBNGu9fvE3YrS1II%=v!RpwUtFrT z_&9TYY>C#Tu?Kg>K2*AX{2YHaL&4&c?@b>E>7Ot@N3i4bYEH#ARJjhvIrH0@yL2&53mOpsz}qzHwgge$XWM}lZRiMhz+)h6Vq>nhn2T8go1 zMAT#5;h*yVJY2MJr)RS*o!4U9W#pqRQ$*&8Anr5gEURv=6|F zMG#cP)l%2s!6&Kh_N;%ZbyWDitmzLv_f0dTHdoa0Ihe+I6S96Lz3Sfhw~>{R54hlK39VZsYGsY8-I3s@(A?S8{5$^(_Ft}9 zi$}Hv_dgfS%!0Vv$Aj4beKCqMMpYnj?pRwT$d!eKJ{xTj>12PFkn1D!svDVL_DOMV zaz3*U1j8Ch2eL>j)&)_kn^Q$uYTGK7uMCvUFNvaaG)h9EPH$x5M@PY%1+a1>^q&)w zd8TFuH*{!sRviCtWOyb~q8!yE!|L>~XxBlBs&O|htlOdC6Eku|CpZwPIJ749f+@$l zFN4@iyB#b!h~G%j!&zTcrhHFh>ERx*fl^$nl);x!YabtOUl5TaQ z7F+y1wX8FSQ=~RDo7z+|NFmzbDP3G%x;`$ehkDMF>2rsFtw|!bI5OlCwKvu!eBIwI z$nkGkw^^-YvUujRJ6&vR6w7Ft+wV^fOr7Sj^!m}smwYK;rdD3>cn?o*nxokLTZ(k(D@J{xJd?X4M_>9snNm(U-WB}_L(TytPf!mzzv=HR9DXwB2 z0+w6e=Y8YI^TRr3nS`Axq5@AgfbF5-;|@~5<*)^i6=0@jM9Wg8B@|N(4H;w&0Y$1s zmppRCCQC|HV&^%KsInPv3@VhRC^-AaV_SAcQ(-+jo6BT}lWIkihU=t9@V-CazVDtz z@Xw)tM`6vTZ}ie6kaTPBhgS)vnKfv(-pm@SIILS(#ulE;o(UN!c)35X!}o|w&+2-e z!=6A*@AHu$eZzYXyzViT3O{@f^SKtDjdjiN=-5+cyKT`mJ=jb7q>zhDjTJRTblCm= znck#dS}6n8JhmS(Y41}k%`07XNz0E*@HaPqkci~mJht+^My&0LQ$h^D!yKS@!xHk% zVUX4)d!yxOqD59Ua`dFptQ0n2nkD0jm6K0^+VC#GcX1t} z;SB{mG=yg;LM}xMnb%IW?gld(>M-Dczi8}vKR1zrz>?z4Fc*-JniI1Lh9H%Oug3?{ zrBi9AmLx_p!F8-ztyMMiH+Dz$B6DS@KgPwTFv@;)b!zC!8;W~*{_E>)_iTyXH#sBs z+hbEEhEg6z%pWAnQ)A|J=Z{s3V6yzaDL(H@W0A57=D{iEcZO}RqL(tn$+1{}$X}dD zF_v??E$lsgxY*%8k)g9vZzmGi$iY9L;L6KOZCd`O6O&U76K3ke`$mF(9Q88W=ZsXW zV-!Sq{$Vl19!jODKn-DHVA2N}#mlf`7!E^2Cj>gUTRgvI#N^>qYlMiZp9m~wFcCoo zML|b0Rahw(Br6rRRS}4yDt?B4j0YT?*}6-NPE03XuMM0SU=TT25tUl1RVhFrQV1aM z9_0)t3j`EC!xI2Z6gUYN`2Tq+I!|cxA zBBw5@i%0QQ1EAJ3G2GJ4QIz!)Ly@&94ArDTL$0PxD+;>ecFY2Ajl){J+6o|z>Ef=2u|h$Hl8Fw)3=O%DL2Zn z8+VC!g8i#@O^Nt_PkqzY^#{CsDw*vsJj~2$GQ%c4La*RV3^Ja$wwtCHc&Ecdc1@U;iNT5pAkb|LAHZMJL)40a^K|%#_Lq&=Jd4noWW||Q9g$%8 z>+x6A_>2yc&s6#M&wzXs_@n8Idz*5xSawxbQ=<;9$r;X1GnCKP<&9m{@lI%x4+dT&pYT=#L7}nGnxc5LY&AUj;FB;x z?I86^BMBORK}fPfiUldjOp!7WGcd@iavBo|GJZ3}VDNiy@Vwg_sLvPjI}XgySd(KzO2cRIh5*X)U?vg}k^%!T#wnZ8 zmKzA!L1?NruQjs3ngseAKU%tipo#|O2Tqca2XaY&gqXq^2;AU=Pa)S%?Jw-Ox0cxU z&UE*>tyoA~Q7RCi2pufnEefD?-%VjmM&c}%5 z;Q|1U5|+vst(#G|E2OykfdnM_eRxeEN3=we5@891NUhJ`zl{19C>1PCqR|^@oB*ji zku<1(iD)Ak@x@}yy0mLM`Euy?#tlU)WZ~##GLjlJGX3TmNuxk9LQ~iQ>Kv<~0tXf7 zN@EzogMMuSjvL`sK@SH(?Fdb}t{;r&5=8gw-ncvs)aCXw&5G2m2sC1Z0HSTFiIPbs zc)-jj7)tShibxk5y&P$5#1blo8Mx*sSV91QRfUl9tW=V2y5l~^!)NX*?;qRa+X;+f zPpPx|EQu|VJDi=QTx(fZS;lSXZ9HQv)Fv9od*C{3dh^mx`nh+pR zu@YjG`Ktn|87U=H)l(u?TEvh+f-0G9iq)Q&(U$JUEDz9VGy!0SHSzn_XPnl#Y)J`! zH3oRR_J^F@>h-mznTATjp@jmZU<$EBLBXLWGPIIVC{NZgj|8NmQloDrNfGxw;aoO9 z+?J1|=rBnMKszWtXGhq+^4YHZdKBzfhd%6o4)<}C>9F0BvE|s-ddar$6MMF)a`8o3 zy=OG(qL}d6i(iuu&8q|TPO~mFEjc8AeHtfbh&9|2XE_v76Gl8KTt^eBBy!csblV0Y z2jLIT&KJO8=!7WznP){xnk(+}+{^Z&9tupz(M2^>$Dr-w!0Ek8aY8zO6S)I}v&=Yw zbwt5l9OqizZi-1H(_pufuJ>+ik=wj^ll5=xzIYoFWY~OqWLDrM%e@K5m8*ZtgW^!4K4#V}8!n(CFRc(d&1F#>g4ufIr zE2J2iIJGJ}si5kN8mCxC`A9ItB12V3Nk3Pgk=WrRX{W#Pv2)7S>5}Na%FR`W5&cR#1CTGj*EEED1~lOw}l-R6{I4j=8u_PRzl<#!P=Wx`y#& zy1n?k;Zuwa-8rhkR`|75T^kV35R*LWiw>ad+ecExd}&2X!^aN^;q39A~F#l{yH$e*Per`&ywA6vOR3iWd^TFdg4oD z#g@s1rz6#q?>0n%)uXz)3{*VXalCy(*R zF=AOHMO40AVo2u3GZPP^SV@7_8#Qb7rgxKE-O>hneco=qW8=pMjf~H$JBI4L3?#Q| zXk$fQRc!&X8+VS&*4{a#duC}DW34*(J%BL$g>-kLT~SdX(0vtQ1mn_wgQ<^eI=6A$ zb-HM-7!iXCGDF_)1x*5&ID!U6WE6NzLS=AO$onNJ$pv*@l;FAc=t@sK-*t zGgT8@V`?g;86;UN#3r48t^a~>*m{-XeE)u45ywl6c%78BdXbotl2vwN%3`g?9xhLi z?e*EUVxrK?ZryY+HV0(^g;`beJ$le^BUDqGIA(aA82Yk~auT{VYp-|K(@Su}$vAaS zB%H?+;mO~+yp-3xErCh-0QVC5`SzHyMb_(D&;ac8h|eMGS>9}aahI7oF^EJMV2Y}R zp`oia5#wzr0EQxVL^pCsuvr0@nxQ;qlpiqL&r7 z+Yhe;K-^f2$cTb`r@P7&MvS!;WoNTw^gpJ3Q}w^Tx_D@5obr?L=uEpFNt5FOb#VK7 zd!N0BzcrQFJzo=l*!qy_{V1=#Cqu+w2ej`T2H2O7JV8e22tv?1^vT`a>li1Xs`~$% z6KBH{3Wu_A{OFI?*{Gb`zVQ0f4(tpyeyII_!X?;h_`gt<9U6%GTzDMiLR}uP$uahprj(E6+7Ux_8bz^e3K% z>_yF~-I^wU+omnuxxn@$P~Yc)?v95v%k6nOBb?^4zonyhiVu^`CpjdVM~qDeBy&8C z-v0j|mgF^0Aa!Jk@O!4DYM<)z{sjJ)Ac@2NSA)dn{G6F~;#wBVWwOAh+ctYoTi9x^ z5&3$uv_t_5!+c9ok2$-Jtc3>$OxX0FM^6NFLPLRn)?$piHg-*&5%?V+cW;f#BXgTZ zpMPe_(j=HDeZWM2W1p6)s;bJWs;a)p@RmH{IES3>JYz+QyV9c^M)*he2>lnJLsJhY^@+3@{87GqycXKd7I3`W5+=w08I%eYh0NL&_z!>Puz}WP3 z)81L}z9W>8wGz<}buFdx<{<7=Bnc=&s)-~jX)48pb-IyIzU&VeYPRBb-lv6|}0fsV7A0<+r8iukkve$^K_{uCf}% zi&mtxq^a_nJ%BnNPfh&)B~@tSCh~|i_EpF}D*BbsO`h4y%Z@L=^Y#g__`Y2mKgB(S z^X*lHZj}#_NdBdSO+0xz50qlbuo~l@5uN5SG0l^Rfyi_D)R%x0apwQQX4svu@(6N& zg~$*Q*df(KI(ALq8?pNgHA;i)V0z6GZd6E?sIW<8i5A4RBCIVfkqTH7+kdL?k4$^t zd$CPPraG(Olg46pJETUr*(!d~^i7fCHP^u(taxX`+fdZL67sVcvjwt%qu%huQ%x4( zS0NFrJ{2lAZSTw`jr5XLFg>|5gg(fkvE%^$da(7DFk zM0k}9hQMt-u(7D#cZ)!YD8&+TDnn89JvjDi^L_5m!uLO^;ccF&lz5bioRb`Xru`WN z5eN>HWD`ez-VqrZw!gp!d$S;q<@Qf&;vvF0id0u69dMsWe+-zDv9gFqAyP>Xc{VU- zdo5~Y_!3hM7#KETJ-hNXh)cb^cG1`UFiuB7^`izyt3g>Znj;CLWojuVRjQQ}1Tdh& zN=1ohWtEqn#uS_*UNk*B|0iyL-p+5#cXv;dlg%Ocm3VK|2L1W@x0y% zVm2tcWSD2?)uyDgKurxq1G~ZADTz{=>pZ$^6_EG?08s$Q5IUr))-9#8GFDMoNW>Ic z#ZahHQBgY>U~*8~qXSxTQ$vB&KEU-!vJ+A^PeQjsH;+!*B+ON^Em>^%mGQxaLMW!j zj?Eco9h}x&=QBFhmE3-Ruk37uWltqYcoqdLoTQQvaQ?Mu(I&4X*s7a`&o-xK%9|DD zNrc0PW>qk4i)y$;G;^PZVh%>Aad_Vodd8O%N@b*Fl{rP&=LojblT?L{M~&0zkC2`N zhYst?@A+WDSm$C?qS9i7GE{XVxpqQCAZ}8GpjLy3K*=C1iy^IlnVA4k6p9Iu`lrfu zdYYJRb-ruL_-S;3haR*69pkp0wIJ>9126&c|HD;2}|MuSx{2hMHH>N z?A@J@qR5~O6agfXMe>r6vejF48OoHDaCJH)o{0MsXok|tEGR81+O;a%Eu97qA0Lts zl5TZsJ_j9C&BDxoUll<13%8m56d||r9Q!3!S)-^vy+jF9DnOUtHjy_nzHmq+L895 zyo#JRM(OyxdN}-uk-Z#m4#wYR{ky_qh=RUGC@^`j>qM1i#^^+$?<*6WUY<)hm`KYi z!IG`_^_+9cUULRbQA<-)##riHP|gKPIj5t|8yp-*In8y+TD7+lvf9#xiiK;O)hw%P zMrzHq5Jn8vLVp@FsUfZrQ-GkFM5~JJ^SC&C+G<#}qIHTZHeHfsb6vaABTV*-3u&RY zqb;%uU1P4TDNS@LUAAJ#xs;`<-KSg?aGY(@aTIkIB$A^bb*ic;6`8471%s;DCoDFy zp<$ac6*;M+klLlT&5FBdX1T%&g4<}@6ikTaU|?b-xqqe}LP{-5FUdS5RzziGO9v+j z!Evm}Rcb^kBw|vjlQR}fkT~#+J!~dfNrWK+X-=DI4sPzvl2FTgs6%k%8)&99qo_)T zZYXGYcqJKwAVrcERFb$QG@9{HMi^tRY~!{Oin85^(lrU)jm>drp>QTlz#9S#$B>qQ z4IIrvV}EQ(g@Ga%C>0cl;~;QIaCFugnApp!Q&R?3)wgZ7nvmE`Fvf*38^F+$IHlWT zOt2&uammVSh)Y1(vq;n@IfWw^3hAt{oG7+PC2w$$$O;5n0+l-E3b;ZoBCbLdpwQBW zNG3{T2}VFtRh)@nmK&whwf;0(AnIL3`I%qJU6uM&KLmtDL6}C|=%yW_sC2+zEAZAn%nCF<1 zZs8_+TE!+JA)7Egr$m65dlkgS5K5YCQ#020DJG$*vteR2hT>^9mbw|jEUd{F2}fHk zy?>H+k~Yf0L2;~+Y7|@nb1D}URWPE8q@t0a$V_H~Af}9nR!B;L9g*U_IhiG5j=Aqy z#8_E*aYjbmIX0uJ$&(^B*~VnmX;tGkJf=0Od2H5OYXp)kBzm>gD-w)WHr5MTj8%On zIlNj?sSZ^F;)q#gW@1xas*bc`taXAmGJiR8bWGHCd@l#DQjf3h_da1>!`So zj)y@a;*HjuK&-B~7P`|Uxl-iA5j7U(xK2uGt*eb;t`5o-3$tum%21D-ST7z}cz0T= zYlUX6j=?KxY0~bM#T&QgDNu4Xqx2aE=`f9wk%pC+O5_mlz+B{ zEmKDerE#^!!pU`lw>oN7$6|J|5?vkJZ5K(U#6+r#E!GVmT4S>gmtu(orw-!b&T4Aepp{@|N=DQBix|qeOTE#22Fg3MJvc}zY z(>Enm6{VKDFzPNb1Qr8^nMRSjDt~Qgm5v-3y0|pptYm`$VuGclAXSCKxoBz{uDBAa zp|lG&6iQVYE0A$+Od3S|(2@a-Amy@AsSA0tkr;y&5kfB3p+(KeRxAvPOKb|og>})z z3CJrU4TduZX$=y}k_s0xKt~lT46(r?6ci*GEg?rSrOsx_v@BFjWWybuGk*kDwQUOK zZLx7pY9*ATMBs|%j5`$8M%fDvN;@>jA|sPIt~3aS>td*mq$Py~N;t@S%@g1vnF)YG zF%A&KauW$+dd9apIAmsHP@=?owPUTu$%-(N0pyLL0nq3G?>SaI2`(v@xJQ|&UW|mi zQlV$^f^Qf{P%{r4wHvVT39T;5tu(;o`a6y+i(_)Q(JaPh z4PU--12%(HV$pU;bj;T7N`_uQaZPElLoE@G8$Le#JUsXZqpmrao`1nuAv{CL9Av5r zW5mbMc;y+G9wkzOdjEUd`c)o;lXX>A1Q}LQ6;)OD?#J12_{5_eW@ct)Vj?QU{b$^g zr6{F>LXp&UPXs)5XSfH`I}!JA=g`LGHTHf2IO9q5T?HeNL-6)1*b5Ee4N9<&G@=aP z?vsguAv%4Pp&m-vL4Q;q+&qRX&%f^ojp)g98`9PqV5=>y-4Azu_utPvJu%et$5i^v zA4PXDk5@cl6W~e6@=qpYXU%0Tnpw)Gb^37*Hcl3d5uk;MSz5(9XE$18x{QXFASp;V z!6O_F9+6oLkP>C7&!05Qv-Y=5+(d^QXm@!vClhx_k>qfA-+x78$);`SN7Tba@_x6J z`+8#Ix^p-^4_ATc(Sz|j8kul;ZPDV7G3wH!7Nn6a6XjwdibAq1k}$BqkdiDAsY<1i zq!y$LDIq%Be?q#x@;EqC*d9ClFT@UyDysbX<06XvnQ4&_WtLEQGQe*kH^7#Xa%kcy z^5}Be#DEP7kgBq%wv8VV_YZrZ9o1A9uzQ08)p}36o+k5W zReeyX1rAHv_RevU^xLx}Xw>SmLV0bXWh!)Rn4ILY$)avk&wZ0b^Uqi8eq&)doQ@21 zw**F9oR;K-YKqb!4K%91n--@}78(@z--5JOxAgPm>wlS?Wufp*5P1XV2vFet!S;{5 zZSV77^{bFt#ND{fnWmMT;%Q?}oc{;nd>M55Ft?kpUSRD-6;u*MRLq1!OvN%tv?UQE zLe(inQB5?{NJ{Ed0Ley>DFT5CP^c&=1ptO|?)QtoR_BS|c6-q2i#E8X)-kr&%YE== zO;re~Xnz$VkZ5$?a=5I0I&(=4&0L%^d;HUrYPHzH9UL2)xcf))N2ug8klQJPD@5>rDlfBuCZ!( z5PQa8RV+mzNYg-2Qc+X@P_(r$R8bVrRZT=qO_Ljx3x8T$EhV8IO_TSlo8Qpb(5}8# z^JwIBXqyTW)E1&kL`y70lz~dI6ahlCtpa?E0G`7oc4IJ+0>Y#f6i7yYZBc=!qJV|P zR1hM2FbK4QtVkGWsGdHbk>)grNj8E;#YsBEBMhFK`CeD$EX=cUmK}$b1Y}pWioX^B zft0f$1AnP)S(0zAkFOlnq_e>5BqvWewv<;729IJVlC&r{AVx4^DZ5@EzJ^_GBk1~z|eX4@mEKW$?*2p_r2-bKC}u#YHFdVuVKJV z8W>Ra50GR~{Bi1yBv@@{l6VmM5-B@4c3LfMDSt*)qT6Y0L>5*_?TIF4WSK^M1Gx7U z@(#h+Gz5zyN}v%mu>@5VQ4$o0Q%F#htpLyzC<#h5s#8Ex1tKK^QmIM}04qRJpim_t zRDo28RRb^$B2_d~O)w!ru!(6k9kfk-4mB>;s8(u+V+6tz@^Q4nH5 z7=I}6o`(*@9gyC7Go=&t7~=JkFGH+CCU#x#9*i-cbHBV8(+-UpeEj#lhYm$~NG9r& zgu}sdR&bdUeMD=IEzd-Cnmcb=bK35f!tqm>;E}R49M5nahq&if%}&n3($_;M?334z zM1N}49T8NB+_5)hVo9Ts(~V6YiGvflQcFk;wlhrikah>AEK~WN?@4yH`IfXBhGwB!oFQPX@1(#uHTEgI2{M zx?sw+WinC?~I`C#g*C{sr{&K^aFUqt>Cvt7=p)T$$*f0QMh=2v3*c@ST2GI;8vE z-X!`oJIR(EAD`{>E--q(d;TGY1tk3Lt&F`<>~~-A@_s+tO%b$D$-;~yDH=Z&e}9SS z^gnRuIhDJF%j-s`!2cvim{}^j`f@c-6ZA6X`Ts9I^-||J%v!CS_1))%shqON?VMb5 zay}^3_)99wT9=!{6`OAB`v0Q7n18NM2?_iYWFO}0c22)mSeF=Mx_G;T(DzSX=QF#6 z^iE8d$DOjw9s~orx(A8SPN3^zP}MtFfuRbA(Oa4LU%RJ1ue)Cd!Mxdg(6nD8ufUQv zUo-96&FiMd^3L!M@LfUbH}kygaTxoK&Ws{oIL28-vfX;N{(iUNVjG< zR239aXeD4|kUMxiwIKrT7~XC7Sp%&=T;GD(p{<&QRgEs7aUEWcug(+4O>FKyjScbo ziEPn}Mz6PyC8g(AuCvcImVc)u-!rV#)~u6Pt#uY`kA3TAx+XbEL}=UFW$o2-TvJYD zyquanbDQTpc=N9v?Q_IiedXiW(aeko0Oy} zXiiBnOOUjqkQpOERHZpN0ZQrRqIvR#doeZ3`D>EX|BvO(Fs(+{=Xd0x)#UXWx(~T9?(sYnl6f+X2{VxLONi7WeuDroe=rpq$C&Lr%0zsA zGUqX~JVsiH2xeepeq(wuJiF|8sd{M$LrOTP1cJbmj|w2nPx?%DvwTCPOza-IZI z3NS&QMuH-OqZC0*oihT6Dxqj5y4WyA$qcHZW+I@Fh=P!)Ie5(!RU*F8h3b`sXp1vQ zBRk$YCaRve;!{N-Bu;Bvo|hiGNnCwdJ4E>5&wNxqQ-85P3zKOmqGEXl1vDkR4!20B zt>JUSGVA>Qw09p@ z!&8}|8>i%ZzNG%N@@{QnQW%hK4jzM6=A2HP#Lqv`K;!~38$rUq1)q5RyJK>Iy@zeRP3~C_=l$;o|xD{z4l47c&qKG?)KC$W2BD}30$t2ZGrZgO* zjyu(eB)aqLB5iyX2!%_t8}k@bfw3|%w!EQ&z_{Od*o+5BNH;h`z*NUp4|_gLv3(^j zg@0mIW*L&|8m$`S-rm?I)%e0vB|!N1>?5(zgoHayfPg?otVlYj@ePj3bVr5b7?4qZ zbkNx5a(tU@q439}Q}Q7b;(o*V(Fv28i4tmgA}K$zB!iSfA7%4T)_>5B(=q#)n8KVr zomqd#>YuT({K*kwPtOv`5@hmpO;^dNGHenyclQB3-WrN`8k%o={#e}vd zkLXFNG(h`Ukyd@=`M5`8?>|iXB2`H**nNq|`F*ViC!za(t=ZGvxg$+AB(B55_dreP zhjdj}qKfoapFg6J{NLLC\% mutate(first_isolates = first_isolate(my_data, "date", "patient_id", "mo")) diff --git a/tests/testthat/test-eucast.R b/tests/testthat/test-eucast.R index c2e40425..2978a093 100755 --- a/tests/testthat/test-eucast.R +++ b/tests/testthat/test-eucast.R @@ -20,7 +20,6 @@ test_that("EUCAST rules work", { "ENTAER"), # Enterobacter aerogenes amox = "R", # Amoxicillin stringsAsFactors = FALSE) - expect_warning(EUCAST_rules(a, info = FALSE)) expect_identical(suppressWarnings(EUCAST_rules(a, info = FALSE)), b) expect_identical(suppressWarnings(interpretive_reading(a, info = TRUE)), b) diff --git a/tests/testthat/test-first_isolate.R b/tests/testthat/test-first_isolate.R index bb18789d..7f3fe893 100755 --- a/tests/testthat/test-first_isolate.R +++ b/tests/testthat/test-first_isolate.R @@ -124,10 +124,15 @@ test_that("first isolates work", { col_date = "non-existing col", col_mo = "mo")) - expect_warning(septic_patients %>% + # if mo is not an mo class, result should be the same + expect_identical(septic_patients %>% mutate(mo = as.character(mo)) %>% first_isolate(col_date = "date", col_mo = "mo", - col_patient_id = "patient_id")) + col_patient_id = "patient_id"), + septic_patients %>% + first_isolate(col_date = "date", + col_mo = "mo", + col_patient_id = "patient_id")) }) diff --git a/tests/testthat/test-mo.R b/tests/testthat/test-mo.R index 47b5baeb..36185168 100644 --- a/tests/testthat/test-mo.R +++ b/tests/testthat/test-mo.R @@ -11,6 +11,7 @@ test_that("as.mo works", { expect_equal(as.character(as.mo(" ESCCOL ")), "ESCCOL") expect_equal(as.character(as.mo("klpn")), "KLEPNE") expect_equal(as.character(as.mo("Klebsiella")), "KLE") + expect_equal(as.character(as.mo("K. pneu rhino")), "KLEPNERH") # K. pneumoniae subspp. rhinoscleromatis expect_equal(as.character(as.mo("coagulase negative")), "STACNS") expect_equal(as.character(as.mo("P. aer")), "PSEAER") # not Pasteurella aerogenes diff --git a/vignettes/AMR.Rmd b/vignettes/AMR.Rmd index 2469a031..cf1e2b96 100755 --- a/vignettes/AMR.Rmd +++ b/vignettes/AMR.Rmd @@ -5,7 +5,7 @@ output: rmarkdown::html_vignette: toc: true vignette: > - %\VignetteIndexEntry{Creating Frequency Tables} + %\VignetteIndexEntry{Introduction to the AMR package} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -23,10 +23,10 @@ This `AMR` package basically does four important things: 1. It **cleanses existing data**, by transforming it to reproducible and profound *classes*, making the most efficient use of R. These functions all use artificial intelligence to guess results that you would expect: - * Use `as.bactid` to get an ID of a microorganism. The IDs are quite obvious - the ID of *E. coli* is "ESCCOL" and the ID of *S. aureus* is "STAAUR". This `as.bactid` function takes almost any text as input that looks like the name or code of a microorganism like "E. coli", "esco" and "esccol". Even `as.bactid("MRSA")` will return the ID of *S. aureus*. Moreover, it can group all coagulase negative and positive *Staphylococci*, and can transform *Streptococci* into Lancefield groups. To find bacteria based on your input, this package contains a freely available database of ~2,650 different (potential) human pathogenic microorganisms. + * Use `as.mo` to get an ID of a microorganism. The IDs are quite obvious - the ID of *E. coli* is "ESCCOL" and the ID of *S. aureus* is "STAAUR". The function takes almost any text as input that looks like the name or code of a microorganism like "E. coli", "esco" and "esccol". Even `as.mo("MRSA")` will return the ID of *S. aureus*. Moreover, it can group all coagulase negative and positive *Staphylococci*, and can transform *Streptococci* into Lancefield groups. To find bacteria based on your input, this package contains a freely available database of ~2,650 different (potential) human pathogenic microorganisms. * Use `as.rsi` to transform values to valid antimicrobial results. It produces just S, I or R based on your input and warns about invalid values. Even values like "<=0.002; S" (combined MIC/RSI) will result in "S". * Use `as.mic` to cleanse your MIC values. It produces a so-called factor (called *ordinal* in SPSS) with valid MIC values as levels. A value like "<=0.002; S" (combined MIC/RSI) will result in "<=0.002". - * Use `as.atc` to get the ATC code of an antibiotic as defined by the WHO. This package contains a database with most LIS codes, official names, DDDs and even trade names of antibiotics. For example, the values "Furabid", "Furadantine", "nitro" all return the ATC code of Nitrofurantoine. + * Use `as.atc` to get the ATC code of an antibiotic as defined by the WHO. This package contains a database with most LIS codes, official names, DDDs and even trade names of antibiotics. For example, the values "Furabid", "Furadantin", "nitro" all return the ATC code of Nitrofurantoine. 2. It **enhances existing data** and **adds new data** from data sets included in this package. @@ -34,8 +34,8 @@ This `AMR` package basically does four important things: * Use `first_isolate` to identify the first isolates of every patient [using guidelines from the CLSI](https://clsi.org/standards/products/microbiology/documents/m39/) (Clinical and Laboratory Standards Institute). * You can also identify first *weighted* isolates of every patient, an adjusted version of the CLSI guideline. This takes into account key antibiotics of every strain and compares them. * Use `MDRO` (abbreviation of Multi Drug Resistant Organisms) to check your isolates for exceptional resistance with country-specific guidelines or EUCAST rules. Currently, national guidelines for Germany and the Netherlands are supported. - * The data set `microorganisms` contains the family, genus, species, subspecies, colloquial name and Gram stain of almost 2,650 microorganisms (2,207 bacteria, 285 fungi/yeasts, 153 parasites, 1 other). This enables resistance analysis of e.g. different antibiotics per Gram stain. The package also contains functions to look up values in this data set like `mo_genus`, `mo_family` or `mo_gramstain`. Since it uses `as.bactid` internally, AI is supported. For example, `mo_genus("MRSA")` and `mo_genus("S. aureus")` will both return `"Staphylococcus"`. These functions can be used to add new variables to your data. - * The data set `antibiotics` contains the ATC code, LIS codes, official name, trivial name and DDD of both oral and parenteral administration. It also contains a total of 298 trade names. Use functions like `ab_official` and `ab_tradenames` to look up values. As the `mo_*` functions use `as.bactid` internally, the `ab_*` functions use `as.atc` internally so it uses AI to guess your expected result. For example, `ab_official("Fluclox")`, `ab_official("Floxapen")` and `ab_official("J01CF05")` will all return `"Flucloxacillin"`. These functions can again be used to add new variables to your data. + * The data set `microorganisms` contains the family, genus, species, subspecies, colloquial name and Gram stain of almost 2,650 microorganisms (2,207 bacteria, 285 fungi/yeasts, 153 parasites, 1 other). This enables resistance analysis of e.g. different antibiotics per Gram stain. The package also contains functions to look up values in this data set like `mo_genus`, `mo_family` or `mo_gramstain`. Since it uses `as.mo` internally, AI is supported. For example, `mo_genus("MRSA")` and `mo_genus("S. aureus")` will both return `"Staphylococcus"`. These functions can be used to add new variables to your data. + * The data set `antibiotics` contains the ATC code, LIS codes, official name, trivial name and DDD of both oral and parenteral administration. It also contains a total of 298 trade names. Use functions like `ab_official` and `ab_tradenames` to look up values. As the `mo_*` functions use `as.mo` internally, the `ab_*` functions use `as.atc` internally so it uses AI to guess your expected result. For example, `ab_official("Fluclox")`, `ab_official("Floxapen")` and `ab_official("J01CF05")` will all return `"Flucloxacillin"`. These functions can again be used to add new variables to your data. 3. It **analyses the data** with convenient functions that use well-known methods.