From bda1728885c9f6d8415414f7a6be044b402e3c7d Mon Sep 17 00:00:00 2001 From: ncondits3 Date: Fri, 6 Oct 2023 09:07:55 -0400 Subject: [PATCH 01/38] Fixed bug in pullPrintable, causing null interpretatiosn to print as ., not *. --- DESCRIPTION | 2 +- R/humdrumR-class.R | 11 ++++++----- man/pitchDeparsing.Rd | 36 ++++++++++++++++++------------------ man/pitchParsing.Rd | 36 ++++++++++++++++++------------------ 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 10635648..95eac536 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: humdrumR Title: humdrumR -Version: 0.7.0.1 +Version: 0.7.0.2 Authors@R: c(person("Nathaniel", "Condit-Schultz", email = "natcs@gatech.edu", role = c("aut", "cre")), person("Claire", "Arthur", email = "claire.arthur@gatech.edu", role = "aut")) Description: This package is a toolkit for the visualization, manipulation, and analysis of data encoded in the Humdrum syntax ( Date: Mon, 9 Oct 2023 07:59:04 -0400 Subject: [PATCH 02/38] To avoid namespace clashes with dplyr, renamed tally()-> count() and count() timecount() --- NAMESPACE | 12 ++---- R/Analysis.R | 58 ++++++++++++++-------------- R/Metric.R | 67 +++++++++++++-------------------- R/README.md | 2 +- R/Rhythm.R | 4 +- R/Within.R | 18 ++++----- R/humdrumR-class.R | 6 +-- R/humdrumR-package.R | 6 +-- man/draw.Rd | 2 +- man/metlev.Rd | 6 +-- man/nbeats.Rd | 9 ----- man/selectedFields.Rd | 6 +-- man/{tally.Rd => tabulation.Rd} | 33 ++++++++-------- man/tactus.Rd | 2 +- man/{count.Rd => timecount.Rd} | 38 +++++++++---------- man/timeline.Rd | 4 +- man/withinHumdrum.Rd | 18 ++++----- 17 files changed, 133 insertions(+), 158 deletions(-) rename man/{tally.Rd => tabulation.Rd} (73%) rename man/{count.Rd => timecount.Rd} (84%) diff --git a/NAMESPACE b/NAMESPACE index d6c42882..c41da78e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -8,9 +8,6 @@ S3method(as.double,fraction) S3method(as.integer,fraction) S3method(as.matrix,humdrumR) S3method(as.matrix,struct) -S3method(beats,"NULL") -S3method(beats,character) -S3method(beats,meter) S3method(bhatk,default) S3method(bhatk,humdrumR) S3method(cbind,humdrum.table) @@ -22,6 +19,8 @@ S3method(chord,default) S3method(chord,humdrumR) S3method(context,default) S3method(context,humdrumR) +S3method(count,default) +S3method(count,humdrumR) S3method(deg,default) S3method(deg,humdrumR) S3method(degree,default) @@ -165,8 +164,6 @@ S3method(summary,humdrumR) S3method(tactus,"NULL") S3method(tactus,character) S3method(tactus,meter) -S3method(tally,default) -S3method(tally,humdrumR) S3method(tatum,"NULL") S3method(tatum,character) S3method(tatum,meter) @@ -286,7 +283,6 @@ export(as.fraction) export(as.lines) export(as.matrices) export(as.rational) -export(beats) export(bhatk) export(bpm2ms) export(bpm2sec) @@ -495,12 +491,12 @@ export(summarise) export(summarize) export(syncopation) export(tactus) -export(tally) export(tandem) export(tatum) export(tertian) export(tertianSet) export(timebase) +export(timecount) export(timeline) export(timestamp) export(tint) @@ -611,6 +607,7 @@ importFrom(data.table,setkey) importFrom(data.table,setnames) importFrom(data.table,setorder) importFrom(data.table,setorderv) +importFrom(dplyr,count) importFrom(dplyr,filter) importFrom(dplyr,group_by) importFrom(dplyr,mutate) @@ -619,7 +616,6 @@ importFrom(dplyr,reframe) importFrom(dplyr,select) importFrom(dplyr,summarise) importFrom(dplyr,summarize) -importFrom(dplyr,tally) importFrom(dplyr,ungroup) importFrom(ggplot2,aes) importFrom(ggplot2,geom_bar) diff --git a/R/Analysis.R b/R/Analysis.R index 1f69585e..d15377f6 100644 --- a/R/Analysis.R +++ b/R/Analysis.R @@ -6,34 +6,34 @@ setClass('humdrum.table', contains = 'table') #' Tabulate and/or cross-tabulate data #' -#' The `tally()` function is exactly like R's fundamental [table()][base::table] function, +#' The `count()` function is exactly like R's fundamental [table()][base::table] function, #' except that 1) will give special treatment to humdrumR [token()] data 2) #' has more intuitive/simple argument names 3) makes it easier to combine/manipulate #' disparate output tables. #' #' @details #' -#' The `tally()` function is essentially a wrapper +#' The `count()` function is essentially a wrapper #' around [base::table()][base::table] function. #' However, any [token()] class arguments are treated like [factors()], #' calling generating their own levels. #' This assures that, for example, pitch data is tabulated in order of pitch height, #' and "missing" pitches are counted as zero. #' -#' `tally()` will, by default, count `NA` values if they are present---if you don't want +#' `count()` will, by default, count `NA` values if they are present---if you don't want #' to count `NA`s, specify `na.rm = TRUE`. -#' You can also tell `tally()` to exclude (not count) any other arbitrary values you +#' You can also tell `count()` to exclude (not count) any other arbitrary values you #' provide as a vector to the `exclude` argument. #' #' -#' `tally()` will always give names to the dimensions of the table it creates. -#' You can specify these names directly as argument names, like `tally(Kern = kern(Token))`; -#' if you don't specify a name, `tally()` will make up a name(s) based on expression(s) it is tallying. -#' (Note that `tally()` does not copy [base::table()]'s obtusely-named `dnn` or `deparse.level` arguments.) +#' `count()` will always give names to the dimensions of the table it creates. +#' You can specify these names directly as argument names, like `count(Kern = kern(Token))`; +#' if you don't specify a name, `count()` will make up a name(s) based on expression(s) it is tallying. +#' (Note that `count()` does not copy [base::table()]'s obtusely-named `dnn` or `deparse.level` arguments.) #' @section Manipulating humdrum tables: #' -#' The output of `tally()` is a special form of R `table`, a `humdrum.table`. +#' The output of `count()` is a special form of R `table`, a `humdrum.table`. #' Given two or more `humdrum.table`s, if you apply basic R operators #' (e.g., arithmetic, comparisons) or row/column binding (`cbind`/`rbind`) #' `humdrumR` will align the tables by their dimension-names before @@ -47,8 +47,8 @@ setClass('humdrum.table', contains = 'table') #' generic <- c('c', 'c', 'e', 'g', 'a', 'b', 'b', 'b') #' complex <- c('c', 'c#', 'e', 'f', 'g','g#', 'g#', 'a') #' -#' genericTable <- tally(generic) -#' complexTable <- tally(complex) +#' genericTable <- count(generic) +#' complexTable <- count(complex) #' #' genericTable #' complexTable @@ -57,26 +57,26 @@ setClass('humdrum.table', contains = 'table') #' #' cbind(genericTable, complexTable) #' -#' @name tally -#' @export -tally.humdrumR <- function(x, ..., sort = FALSE, na.rm = FALSE, exclude = NULL) { +#' @name tabulation +#' @export +count.humdrumR <- function(x, ..., sort = FALSE, na.rm = FALSE, exclude = NULL) { quos <- rlang::enquos(...) if (length(quos)) { - quo <- rlang::quo(with(x, tally(!!!quos, na.rm = !!na.rm, exclude = !!exclude))) + quo <- rlang::quo(with(x, count.default(!!!quos, na.rm = !!na.rm, exclude = !!exclude))) rlang::eval_tidy(quo) } else { fields <- pullFields(x, union(selectedFields(x), getGroupingFields(x))) - do.call('tally', c(as.list(fields), list(na.rm = na.rm, exclude = exclude))) + do.call('count', c(as.list(fields), list(na.rm = na.rm, exclude = exclude))) } } - +#' @rdname tabulation #' @export -tally.default <- function(..., sort = FALSE, +count.default <- function(..., sort = FALSE, na.rm = FALSE, exclude = NULL) { @@ -121,7 +121,7 @@ tally.default <- function(..., sort = FALSE, -#' @rdname tally +#' @rdname tabulation #' @export setMethod('Ops', c('humdrum.table', 'humdrum.table'), \(e1, e2) { @@ -133,7 +133,7 @@ setMethod('Ops', c('humdrum.table', 'humdrum.table'), }) -#' @rdname tally +#' @rdname tabulation #' @export cbind.humdrum.table <- function(...) { tables <- list(...) @@ -145,7 +145,7 @@ cbind.humdrum.table <- function(...) { } -#' @rdname tally +#' @rdname tabulation #' @export rbind.humdrum.table <- function(...) { tables <- list(...) @@ -157,7 +157,7 @@ rbind.humdrum.table <- function(...) { } -#' @rdname tally +#' @rdname tabulation #' @export as.data.frame.humdrum.table <- function(x, ...) { tab <- as.data.frame(S3Part(x), ...) @@ -273,7 +273,7 @@ pdist.name <- function(ptab, margin = NULL, func = 'P') { } -#' @rdname tally +#' @rdname tabulation #' @export as.data.frame.probabilityDistribution <- function(x, ...) { tab <- as.data.frame(S3Part(x), ...) @@ -322,7 +322,7 @@ setMethod('p', 'discrete', function(x, ..., distribution = NULL, margin = NULL, na.rm = TRUE) { checks(distribution, xnull | xclass('probabilityDistribution')) - if (is.null(distribution)) distribution <- p(tally(x, ..., na.rm = FALSE), margin = margin, na.rm = na.rm) + if (is.null(distribution)) distribution <- p(count(x, ..., na.rm = FALSE), margin = margin, na.rm = na.rm) @@ -553,7 +553,7 @@ setMethod('mutualInfo', 'table', setMethod('mutualInfo', 'discrete', function(x, ..., base = 2, na.rm = FALSE) { args <- list(x, ...) - marginals <- lapply(args, \(arg) p(tally(arg))) + marginals <- lapply(args, \(arg) p(count(arg))) joint <- Reduce('%*%', marginals) @@ -622,7 +622,7 @@ setMethod('crossEntropy', c('probabilityDistribution', 'probabilityDistribution' #' + `x` and `y` both numeric: scatter plot. #' + `x` numeric by itself: histogram. #' + `y` numeric by itself: quantile plot. -#' + `x` is a [table][tally()]: barplot. +#' + `x` is a [table][count()]: barplot. #' + `y` is numeric, `x` is `character` or `factor`: a violin plot. #' #' All the standard arguments to base-R plots can be used to customize plots. @@ -760,14 +760,14 @@ setMethod('draw', c('missing', 'numeric'), #' @export setMethod('draw', c('discrete', 'discrete'), function(x, y, ...){ - draw(tally(x, y), ...) + draw(count(x, y), ...) }) #' @rdname draw #' @export setMethod('draw', c('discrete', 'missing'), function(x, y, ...){ - draw(tally(x), ..., xlab = '') + draw(count(x), ..., xlab = '') }) #' @rdname draw @@ -799,7 +799,7 @@ setMethod('draw', c(x = 'token', y = 'token'), # #' @export #setMethod('draw', c('missing', 'discrete'), # function(x, y, ...){ -# output <- draw(tally(y), ...) +# output <- draw(count(y), ...) # }) ################ THis can work except the labels are reversed...need to figure that your #' @rdname draw diff --git a/R/Metric.R b/R/Metric.R index ee7cceaa..2467e06a 100644 --- a/R/Metric.R +++ b/R/Metric.R @@ -484,7 +484,7 @@ tatum.NULL <- function(x) NULL #' specific levels from the meter. #' `tactus()` extracts the tactus of a meter; `measure()` extracts the length of the full measure of a meter. #' `nbeats()` counts the number of tactus beats in the meter. -#' These functions are particularly useful as arguments to the [count and subpos][count()] functions. +#' These functions are particularly useful as arguments to the [timecount and subpos][timecount()] functions. #' #' #' @details @@ -594,21 +594,6 @@ nbeats.character <- function(x) unlist(lapply(as.list(meter(x)), nbeats.meter)) nbeats.NULL <- function(x) NULL -#' @export -beats <- function(x) UseMethod('beats') -#' @rdname nbeats -#' @export -beats.meter <- function(x) { - measure.meter(x, deparser = NULL) %/% tactus.meter(x, deparser = NULL) - -} -#' @rdname nbeats -#' @export -beats.character <- function(x) unlist(lapply(meter(x), beats.meter)) -#' @rdname nbeats -#' @export -beats.NULL <- function(x) NULL - ###################################################################### ### @@ -623,24 +608,24 @@ beats.NULL <- function(x) NULL #' Count beats or measures #' #' -#' The `count()` function takes a vector of rhythmic duration values and +#' The `timecount()` function takes a vector of rhythmic duration values and #' counts (in the musical sense) the number of *beats* (or *measures*) which have occurred since the starting point, #' associating each rhythmic onsets with a beat. -#' The `subpos()` function is paired with `count()`, computing how far (in rhythmic time) each onset is from its +#' The `subpos()` function is paired with `timecount()`, computing how far (in rhythmic time) each onset is from its #' associated beat; if `subpos()` returns `0`, this means that an onset is *on* the beat. #' Finally, `onbeat()` is simply a convenient shorthand for `subpos() == 0`, returning #' a `logical` vector for indicating where onsets fall on or off beat. #' #' @details #' -#' In many basic use cases, using `count()` is essentially the same as using `floor(timeline())`. -#' However, `count()` gives us a few additional options which add musicological power compared to [timeline()]. -#' (`count()` also starts from `1` not `0`, as [timeline()] does.) +#' In many basic use cases, using `timecount()` is essentially the same as using `floor(timeline())`. +#' However, `timecount()` gives us a few additional options which add musicological power compared to [timeline()]. +#' (`timecount()` also starts from `1` not `0`, as [timeline()] does.) #' #' The first beat in an input vector is assigned the value of the `start` argument, which defaults to `start = 1L`. #' There is no 'zeroth' count, as the first beat occurs at the instant of the starting time---i.e., the first onset in the input vector. #' Every rhythmic onset is associated with one beat, but multiple onsets may occur within the same beat---thus -#' the output of `count()` assigns (rounds) each onset to the previous beat onset. +#' the output of `timecount()` assigns (rounds) each onset to the previous beat onset. #' However, if `offBeats = FALSE`, only onsets that *land* on a beat are counted, with offbeat values returning `NA`. #' #' The `phase` controls how offbeat onsets are associated with nearby beats. @@ -649,7 +634,7 @@ beats.NULL <- function(x) NULL #' By default, `phase = 0` so the beat-association boundary lands on the beat: only onsets on or after each beat "belong" to that beat. #' If `phase = '8'`, the beat boundary is pushed back to capture one eighth-note *before* the beat itself. #' This can be used to, for example, associate the last 3/8s of a measure with the next measure (like pick ups); -#' This could be achieved with a command like `count(dur, beat = '1', phase = 3/8)`. +#' This could be achieved with a command like `timecount(dur, beat = '1', phase = 3/8)`. #' #' #' @@ -668,9 +653,9 @@ beats.NULL <- function(x) NULL #' beat size at each moment/index. #' This feature is very easy to use with any dataset that includes time signature interpretations, like `"*M4/4"`; #' these interpetations, if present, are automatically [read into][readHumdrum()] a field called `TimeSignature`. -#' For such a dataset, you can simply pass the `TimeSignature` field to the `beat` argument of `count()`, and -#' the measures of the piece will be correctly counted (even when changing!): `count(x, beat = TimeSignature)`. -#' Alternatively, you can use the [tactus()] command to extract the tactus beat from a time signature, like `count(x, beat = tactus(TimeSignature))`. +#' For such a dataset, you can simply pass the `TimeSignature` field to the `beat` argument of `timecount()`, and +#' the measures of the piece will be correctly counted (even when changing!): `timecount(x, beat = TimeSignature)`. +#' Alternatively, you can use the [tactus()] command to extract the tactus beat from a time signature, like `timecount(x, beat = tactus(TimeSignature))`. #' #' ### Irregular meter #' @@ -683,11 +668,11 @@ beats.NULL <- function(x) NULL #' ``` #' rhythm <- rep('8', 14) #' -#' count(rhythm, beat = '8'), +#' timecount(rhythm, beat = '8'), #' #' # output is: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #' -#' count(rhythm, beat = list(c('4', '4', '4.'))) +#' timecount(rhythm, beat = list(c('4', '4', '4.'))) #' #' # output is: 1 1 2 2 3 3 3 4 4 5 5 6 6 6 #' ``` @@ -702,7 +687,7 @@ beats.NULL <- function(x) NULL #' The *first* index where the `pickup` logical is `FALSE` is used as the location of beat `1`: #' all the earlier (`pickup == TRUE`) points will be negative counts, counting backwards from the start. #' In `humdrumR`, and datapoints before the first barline record (`=`) are labeled `Bar == 0` in the `Bar` [field][fields()]. -#' Thus, a common use for the `pickup` argument is `within(humData, count(Token, pickup = Bar < 1)`, which makes the downbeat of +#' Thus, a common use for the `pickup` argument is `within(humData, timecount(Token, pickup = Bar < 1)`, which makes the downbeat of #' the first complete bar `1` the stating point---any notes in pickup bars are give negative counts. #' #' **Note that there is never a 'beat zero'.** @@ -766,23 +751,23 @@ beats.NULL <- function(x) NULL #' #' humData <- readHumdrum(humdrumRroot, "HumdrumData/BachChorales/chor00[1-4].krn") #' -#' show(within(humData, count(Token, beat = TimeSignature, pickup = Bar < 1))) +#' show(within(humData, timecount(Token, beat = TimeSignature, pickup = Bar < 1))) #' -#' show(within(humData, count(Token, beat = tactus(TimeSignature)))) +#' show(within(humData, timecount(Token, beat = tactus(TimeSignature)))) #' #' -#' @seealso {`count()` and `subpos()` are closely related to the [timeline()] function. The [metcount()] function applies `count()` within a metric framework.} +#' @seealso {`timecount()` and `subpos()` are closely related to the [timeline()] function. The [metcount()] function applies `timecount()` within a metric framework.} #' @export -count <- function(dur, beat = rational(1L), start = 1L, phase = 0, pickup = NULL, offBeats = TRUE, groupby = list()) { +timecount <- function(dur, beat = rational(1L), start = 1L, phase = 0, pickup = NULL, offBeats = TRUE, groupby = list()) { checks(dur, xcharacter | xnumber) checks(start, (xnumber & xlen1 & (xnotzero + "The 'first' beat to count occurs at the starting instant, so there is no 'zeroth' beat" ))) - checks(pickup, xnull | (xlogical & xmatch(dur)), seealso = c("?count", 'the rhythm vignette')) + checks(pickup, xnull | (xlogical & xmatch(dur)), seealso = c("?timecount", 'the rhythm vignette')) checks(phase, (xnumeric | xcharacter) & (xlen1 | xmatch(dur))) checks(offBeats, xTF) - scaled <- scaled_timeline(dur, beat, rational(0L), pickup, groupby, callname = 'count') + scaled <- scaled_timeline(dur, beat, rational(0L), pickup, groupby, callname = 'timecount') # phase phase_rint <- rhythmInterval(phase) @@ -839,7 +824,7 @@ count <- function(dur, beat = rational(1L), start = 1L, phase = 0, pickup = NUL mcount } -#' @rdname count +#' @rdname timecount #' @export subpos <- function(dur, beat = rational(1L), phase = 0, pickup = NULL, deparser = duration, ..., groupby = list()) { @@ -906,13 +891,13 @@ scaled_timeline <- function(dur, beat, start, pickup, groupby, callname, sumBeat dur <- dur / beat - timeline <- pathSigma(dur, groupby = groupby, start = start, pickup = pickup, callname = 'count') + timeline <- pathSigma(dur, groupby = groupby, start = start, pickup = pickup, callname = 'timecount') c(list(Timeline = timeline, Scale = beat, Irregular = irregular, tatum = tatum), uniqueBeats) } -#' @rdname count +#' @rdname timecount #' @export onbeat <- function(dur, beat = rational(1L), groupby = list(), ...) { subpos(dur, beat = beat, groupby = groupby, deparser = NULL) == rational(0L) @@ -950,7 +935,7 @@ metric <- function(dur, meter = duple(5), start = rational(0), value = TRUE, off #' `metcount()` counts beats within a measure; #' `metsubpos()` measures the distance #' between an onset and the nearest metric beat. -#' `metcount()` and `metsubpos()` parallel the more general `count()` and `subpos()` functions. +#' `metcount()` and `metsubpos()` parallel the more general `timecount()` and `subpos()` functions. #' #' @details #' @@ -1083,7 +1068,7 @@ metric <- function(dur, meter = duple(5), start = rational(0), value = TRUE, off #' that element is treated as a duration of zero. #' #' @inheritParams timeline -#' @inheritParams count +#' @inheritParams timecount #' #' @param meter ***The meter(s) to compute levels from.*** #' @@ -1136,7 +1121,7 @@ metric <- function(dur, meter = duple(5), start = rational(0), value = TRUE, off #' #' within(chorales, metcount(Token, pickup = Bar < 1, fill.levels = 'below')) #' -#' @seealso {The [count()] and [subpos()] functions are more basic versions of `metcount()` and `metsubpos()`, +#' @seealso {The [timecount()] and [subpos()] functions are more basic versions of `metcount()` and `metsubpos()`, #' based only on counting a *single* beat level, rather then a hierarchy of beat levels.} #' @export metlev <- function(dur, meter = duple(5), pickup = NULL, value = TRUE, offBeats = TRUE, remainderSubdivides = FALSE, deparser = recip, diff --git a/R/README.md b/R/README.md index 88c046e4..301c5c8d 100644 --- a/R/README.md +++ b/R/README.md @@ -784,7 +784,7 @@ If an argument has not default value, simply omit this paragraph. The defaults paragraph should more or less just say "Defaults to `x`", where `x` is some value. However, each function manual's "signature" will already list the *literal* value. The @param field is a place to put the default in words---like saying "zero" instead of `0`. -For example, in the `count()` man, I say the `beat` argument "Defaults to a whole-note", rather than `rational(1)`, which is the literal default. +For example, in the `timecount()` man, I say the `beat` argument "Defaults to a whole-note", rather than `rational(1)`, which is the literal default. #### Constraints diff --git a/R/Rhythm.R b/R/Rhythm.R index 456be7cf..ccd674fd 100644 --- a/R/Rhythm.R +++ b/R/Rhythm.R @@ -1662,7 +1662,7 @@ localDuration <- function(x, choose = min, deparser = duration, ..., Exclusive = #' Another option is to pass the `pickup` argument a logical vector of the same length as the input `x`. #' Within each piece/group, any block of `TRUE` values at the *beginning* of the `pickup` vector #' indicate a pickup. -#' The *first* index where the `pickup` logical is `FALSE` is used as the starting point of the timeline/count; +#' The *first* index where the `pickup` logical is `FALSE` is used as the starting point of the timeline/timecount; #' All the earlier (`pickup == TRUE`) points will be negative numbers, measured backwards from the start index. #' In `humdrumR`, and datapoints before the first barline record (`=`) are labeled `Bar == 0` in the `Bar` [field][fields()]. #' Thus, a common use for the `pickup` argument is `within(humData, timeline(Token, pickup = Bar < 1)`, which makes the downbeat of @@ -1736,7 +1736,7 @@ localDuration <- function(x, choose = min, deparser = duration, ..., Exclusive = #' within(B075, timeline(Token)) #' } #' -#' @seealso {The [count()] and [metcount()] functions provide "higher level" musical interpretations of timeline information.} +#' @seealso {The [timecount()] and [metcount()] functions provide "higher level" musical interpretations of timeline information.} #' @family rhythm analysis tools #' @name timeline #' @export diff --git a/R/Within.R b/R/Within.R index ec81edff..f9fc1a41 100644 --- a/R/Within.R +++ b/R/Within.R @@ -118,11 +118,11 @@ #' ``` #' humData |> #' select(Token) |> -#' with(tally(.)) +#' with(count(.)) #' #' ``` #' -#' will run [tally()] on the `Token` field. +#' will run [count()] on the `Token` field. #' #' Because new fields created by `within()`/`mutate()`/`reframe()` become the [selected fields][selectedFields] #' (details below), the `.` makes it easy to refer to the *last* new field in pipes. @@ -132,11 +132,11 @@ #' ``` #' humData |> #' mutate(kern(Token, simple = TRUE)) |> -#' with(tally(.)) +#' with(count(.)) #' #' ``` #' -#' the `tally()` function is run on the output of the `mutate(kern(Token, simpe = TRUE))` expression. +#' the `count()` function is run on the output of the `mutate(kern(Token, simpe = TRUE))` expression. # #' #### Automatic argument insertion #' @@ -203,9 +203,9 @@ #' Thus, *these* two calls are also the same: #' #' ``` -#' humData |> with(tally(Token[lag = 1:2])) +#' humData |> with(count(Token[lag = 1:2])) -#' humData |> with(tally(lag(Token, 1), lag(Token, 2))) +#' humData |> with(count(lag(Token, 1), lag(Token, 2))) #' ``` #' #' Note that the lagging will also be automatically grouped within the fields `list(Piece, Spine, Path)`, @@ -261,7 +261,7 @@ #' #' ``` #' humData |> within(dataTypes = 'Dd', -#' tally(Token[splat = Spine %in% 1:2])) +#' count(Token[splat = Spine %in% 1:2])) #' ``` #' #' ### Saving expressions for later @@ -275,7 +275,7 @@ #' `with()`, `within()`, `mutate()`, `summarize()`, and `reframe()`. #' #' Image that you have three different datasets (`humData1`, `humData2`, and `humData3`), -#' and you'd like to evaluate the expression `tally(kern(Token, simple = TRUE))` in all three. +#' and you'd like to evaluate the expression `count(kern(Token, simple = TRUE))` in all three. #' Use the `~` operator to quote and save that expression to variable, then use it with `with()`: #' #' ``` @@ -550,7 +550,7 @@ #' #' humData <- readHumdrum(humdrumRroot, "HumdrumData/BachChorales/chor00[1-4].krn") #' -#' humData |> with(tally(kern(Token, simple = TRUE), Spine)) +#' humData |> with(count(kern(Token, simple = TRUE), Spine)) #' #' humData |> within(Kern <- kern(Token), #' Recip <- recip(Token), diff --git a/R/humdrumR-class.R b/R/humdrumR-class.R index 7fba6e23..743babfc 100644 --- a/R/humdrumR-class.R +++ b/R/humdrumR-class.R @@ -1333,7 +1333,7 @@ names.humdrumR <- function(humdrumR) fields(humdrumR)[ , Name] #' In addition to controlling what [fields()] you "see" in the console printout, #' the select fields are the fields that many [humdrumR][humdrumR] functions will automatically #' apply themselves to. -#' For example, if you call [ditto()], [tally()], or [kern()] on a [humdrumR data object][humdrumRclass], +#' For example, if you call [ditto()], [timecount()], or [kern()] on a [humdrumR data object][humdrumRclass], #' these functions will be applied the selected field(s). #' (However, most such functions are only applied to the *first* selected field, #' if there is more than one; see their own manuals for details.) @@ -1412,8 +1412,8 @@ names.humdrumR <- function(humdrumR) fields(humdrumR)[ , Name] #' #' # effect of selection #' -#' humData |> select(Token) |> tally() -#' humData |> select(Spine) |> tally() +#' humData |> select(Token) |> count() +#' humData |> select(Spine) |> count() #' #' @seealso {Use [fields()] to see what fields are available, and how they are ordered. #' To actually *extract* fields, see [pullFields()].} diff --git a/R/humdrumR-package.R b/R/humdrumR-package.R index 4a42f8c5..6cb8ff1b 100644 --- a/R/humdrumR-package.R +++ b/R/humdrumR-package.R @@ -52,11 +52,11 @@ #' @importFrom numbers primeFactors #' @importFrom data.table data.table rbindlist setorder setindex set setorderv setcolorder copy as.data.table is.data.table frank CJ setnames setkey #' @importFrom scales ContinuousRange -#' @importFrom dplyr summarise select filter mutate pull reframe group_by ungroup summarize tally +#' @importFrom dplyr summarise select filter mutate pull reframe group_by ungroup summarize count #' @importFrom tidyselect eval_select #' @importFrom tidyr pivot_wider pivot_longer #' @importFrom ggplot2 ggplot update_geom_defaults scale_color_gradientn scale_type aes geom_bar geom_point -#' @export summarise select filter mutate pull reframe group_by ungroup summarize tally +#' @export summarise select filter mutate pull reframe group_by ungroup summarize count NULL @@ -84,7 +84,7 @@ autoArgTable <- rbind(data.table(Argument = 'groupby', Type = 'melodic', Function = c('hint', 'sonority'), Expression = list(quote(list(Piece = Piece, Record = Record)))), data.table(Argument = 'groupby', Type = 'structure', - Function = c('timeline', 'timestamp', 'count', 'onbeat', 'subpos', 'metlev', 'metcount'), + Function = c('timeline', 'timestamp', 'timecount', 'onbeat', 'subpos', 'metlev', 'metcount'), Expression = list(quote(list(Piece = Piece, Spine = Spine, Path = Path, ParentPath = ParentPath, Record = Record, Stop = Stop)))), data.table(Argument = 'orderby', Type = 'harmonic', Function = 'hint', diff --git a/man/draw.Rd b/man/draw.Rd index 7c784267..89447b5d 100644 --- a/man/draw.Rd +++ b/man/draw.Rd @@ -172,7 +172,7 @@ the base-R graphics functions \code{\link[=plot]{plot()}}, \code{\link[=barplot] \item \code{x} and \code{y} both numeric: scatter plot. \item \code{x} numeric by itself: histogram. \item \code{y} numeric by itself: quantile plot. -\item \code{x} is a \link[=tally]{table}: barplot. +\item \code{x} is a \link[=count]{table}: barplot. \item \code{y} is numeric, \code{x} is \code{character} or \code{factor}: a violin plot. } diff --git a/man/metlev.Rd b/man/metlev.Rd index 842ef1c6..e6a296e3 100644 --- a/man/metlev.Rd +++ b/man/metlev.Rd @@ -116,7 +116,7 @@ compute the metric position of each rhythmic onset. \code{metcount()} counts beats within a measure; \code{metsubpos()} measures the distance between an onset and the nearest metric beat. -\code{metcount()} and \code{metsubpos()} parallel the more general \code{count()} and \code{subpos()} functions. +\code{metcount()} and \code{metsubpos()} parallel the more general \code{timecount()} and \code{subpos()} functions. } \details{ Watch out! These \code{met...()} functions require \emph{meter} information and their output is @@ -246,7 +246,7 @@ which the subposition makes an even subdivision of. Another option is to pass the \code{pickup} argument a logical vector of the same length as the input \code{x}. Within each piece/group, any block of \code{TRUE} values at the \emph{beginning} of the \code{pickup} vector indicate a pickup. -The \emph{first} index where the \code{pickup} logical is \code{FALSE} is used as the starting point of the timeline/count; +The \emph{first} index where the \code{pickup} logical is \code{FALSE} is used as the starting point of the timeline/timecount; All the earlier (\code{pickup == TRUE}) points will be negative numbers, measured backwards from the start index. In \code{humdrumR}, and datapoints before the first barline record (\code{=}) are labeled \code{Bar == 0} in the \code{Bar} \link[=fields]{field}. Thus, a common use for the \code{pickup} argument is \verb{within(humData, timeline(Token, pickup = Bar < 1)}, which makes the downbeat of @@ -273,6 +273,6 @@ within(chorales, metcount(Token, pickup = Bar < 1, fill.levels = 'below')) } \seealso{ -{The \code{\link[=count]{count()}} and \code{\link[=subpos]{subpos()}} functions are more basic versions of \code{metcount()} and \code{metsubpos()}, +{The \code{\link[=timecount]{timecount()}} and \code{\link[=subpos]{subpos()}} functions are more basic versions of \code{metcount()} and \code{metsubpos()}, based only on counting a \emph{single} beat level, rather then a hierarchy of beat levels.} } diff --git a/man/nbeats.Rd b/man/nbeats.Rd index d1393c2b..8d9fb1eb 100644 --- a/man/nbeats.Rd +++ b/man/nbeats.Rd @@ -5,9 +5,6 @@ \alias{nbeats.meter} \alias{nbeats.character} \alias{nbeats.NULL} -\alias{beats.meter} -\alias{beats.character} -\alias{beats.NULL} \title{Counting beats} \usage{ nbeats(x) @@ -17,12 +14,6 @@ nbeats(x) \method{nbeats}{character}(x) \method{nbeats}{`NULL`}(x) - -\method{beats}{meter}(x) - -\method{beats}{character}(x) - -\method{beats}{`NULL`}(x) } \description{ Counting beats diff --git a/man/selectedFields.Rd b/man/selectedFields.Rd index d95257a4..8cc4088d 100644 --- a/man/selectedFields.Rd +++ b/man/selectedFields.Rd @@ -51,7 +51,7 @@ The "selected" fields play an important role in \link{humdrumR}. In addition to controlling what \code{\link[=fields]{fields()}} you "see" in the console printout, the select fields are the fields that many \link{humdrumR} functions will automatically apply themselves to. -For example, if you call \code{\link[=ditto]{ditto()}}, \code{\link[=tally]{tally()}}, or \code{\link[=kern]{kern()}} on a \link[=humdrumRclass]{humdrumR data object}, +For example, if you call \code{\link[=ditto]{ditto()}}, \code{\link[=timecount]{timecount()}}, or \code{\link[=kern]{kern()}} on a \link[=humdrumRclass]{humdrumR data object}, these functions will be applied the selected field(s). (However, most such functions are only applied to the \emph{first} selected field, if there is more than one; see their own manuals for details.) @@ -103,8 +103,8 @@ humData |> select(1:3, fieldTypes = 'Structure') # effect of selection -humData |> select(Token) |> tally() -humData |> select(Spine) |> tally() +humData |> select(Token) |> count() +humData |> select(Spine) |> count() } \seealso{ diff --git a/man/tally.Rd b/man/tabulation.Rd similarity index 73% rename from man/tally.Rd rename to man/tabulation.Rd index 6ae3ed37..707116ed 100644 --- a/man/tally.Rd +++ b/man/tabulation.Rd @@ -1,8 +1,9 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/Analysis.R -\name{tally} -\alias{tally} -\alias{tally.humdrumR} +\name{tabulation} +\alias{tabulation} +\alias{count.humdrumR} +\alias{count.default} \alias{Ops,humdrum.table,humdrum.table-method} \alias{cbind.humdrum.table} \alias{rbind.humdrum.table} @@ -10,7 +11,9 @@ \alias{as.data.frame.probabilityDistribution} \title{Tabulate and/or cross-tabulate data} \usage{ -\method{tally}{humdrumR}(x, ..., sort = FALSE, na.rm = FALSE, exclude = NULL) +\method{count}{humdrumR}(x, ..., sort = FALSE, na.rm = FALSE, exclude = NULL) + +\method{count}{default}(..., sort = FALSE, na.rm = FALSE, exclude = NULL) \S4method{Ops}{humdrum.table,humdrum.table}(e1, e2) @@ -23,33 +26,33 @@ as.data.frame.humdrum.table(x, ...) as.data.frame.probabilityDistribution(x, ...) } \description{ -The \code{tally()} function is exactly like R's fundamental \link[base:table]{table()} function, +The \code{count()} function is exactly like R's fundamental \link[base:table]{table()} function, except that 1) will give special treatment to humdrumR \code{\link[=token]{token()}} data 2) has more intuitive/simple argument names 3) makes it easier to combine/manipulate disparate output tables. } \details{ -The \code{tally()} function is essentially a wrapper +The \code{count()} function is essentially a wrapper around \link[base:table]{base::table()} function. However, any \code{\link[=token]{token()}} class arguments are treated like \code{\link[=factors]{factors()}}, calling generating their own levels. This assures that, for example, pitch data is tabulated in order of pitch height, and "missing" pitches are counted as zero. -\code{tally()} will, by default, count \code{NA} values if they are present---if you don't want +\code{count()} will, by default, count \code{NA} values if they are present---if you don't want to count \code{NA}s, specify \code{na.rm = TRUE}. -You can also tell \code{tally()} to exclude (not count) any other arbitrary values you +You can also tell \code{count()} to exclude (not count) any other arbitrary values you provide as a vector to the \code{exclude} argument. -\code{tally()} will always give names to the dimensions of the table it creates. -You can specify these names directly as argument names, like \code{tally(Kern = kern(Token))}; -if you don't specify a name, \code{tally()} will make up a name(s) based on expression(s) it is tallying. -(Note that \code{tally()} does not copy \code{\link[base:table]{base::table()}}'s obtusely-named \code{dnn} or \code{deparse.level} arguments.) +\code{count()} will always give names to the dimensions of the table it creates. +You can specify these names directly as argument names, like \code{count(Kern = kern(Token))}; +if you don't specify a name, \code{count()} will make up a name(s) based on expression(s) it is tallying. +(Note that \code{count()} does not copy \code{\link[base:table]{base::table()}}'s obtusely-named \code{dnn} or \code{deparse.level} arguments.) } \section{Manipulating humdrum tables}{ -The output of \code{tally()} is a special form of R \code{table}, a \code{humdrum.table}. +The output of \code{count()} is a special form of R \code{table}, a \code{humdrum.table}. Given two or more \code{humdrum.table}s, if you apply basic R operators (e.g., arithmetic, comparisons) or row/column binding (\code{cbind}/\code{rbind}) \code{humdrumR} will align the tables by their dimension-names before @@ -64,8 +67,8 @@ See the examples! generic <- c('c', 'c', 'e', 'g', 'a', 'b', 'b', 'b') complex <- c('c', 'c#', 'e', 'f', 'g','g#', 'g#', 'a') -genericTable <- tally(generic) -complexTable <- tally(complex) +genericTable <- count(generic) +complexTable <- count(complex) genericTable complexTable diff --git a/man/tactus.Rd b/man/tactus.Rd index 8944aeef..56090760 100644 --- a/man/tactus.Rd +++ b/man/tactus.Rd @@ -53,7 +53,7 @@ These functions take \code{\link[=meter]{meter()}} objects---or values parseable specific levels from the meter. \code{tactus()} extracts the tactus of a meter; \code{measure()} extracts the length of the full measure of a meter. \code{nbeats()} counts the number of tactus beats in the meter. -These functions are particularly useful as arguments to the \link[=count]{count and subpos} functions. +These functions are particularly useful as arguments to the \link[=timecount]{timecount and subpos} functions. } \details{ By default, \code{tactus()} and \code{measure()} deparse their output as \code{\link[=recip]{recip()}}; diff --git a/man/count.Rd b/man/timecount.Rd similarity index 84% rename from man/count.Rd rename to man/timecount.Rd index 48b4a021..f3bdf6b1 100644 --- a/man/count.Rd +++ b/man/timecount.Rd @@ -1,12 +1,12 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/Metric.R -\name{count} -\alias{count} +\name{timecount} +\alias{timecount} \alias{subpos} \alias{onbeat} \title{Count beats or measures} \usage{ -count( +timecount( dur, beat = rational(1L), start = 1L, @@ -82,23 +82,23 @@ To function as a by-record timeline, the \code{groupby} list must include a \emp Luckily, these are automatically passed by \link[=withinHumdrum]{with(in).humdrumR}, so you won't need to worry about it!} } \description{ -The \code{count()} function takes a vector of rhythmic duration values and +The \code{timecount()} function takes a vector of rhythmic duration values and counts (in the musical sense) the number of \emph{beats} (or \emph{measures}) which have occurred since the starting point, associating each rhythmic onsets with a beat. -The \code{subpos()} function is paired with \code{count()}, computing how far (in rhythmic time) each onset is from its +The \code{subpos()} function is paired with \code{timecount()}, computing how far (in rhythmic time) each onset is from its associated beat; if \code{subpos()} returns \code{0}, this means that an onset is \emph{on} the beat. Finally, \code{onbeat()} is simply a convenient shorthand for \code{subpos() == 0}, returning a \code{logical} vector for indicating where onsets fall on or off beat. } \details{ -In many basic use cases, using \code{count()} is essentially the same as using \code{floor(timeline())}. -However, \code{count()} gives us a few additional options which add musicological power compared to \code{\link[=timeline]{timeline()}}. -(\code{count()} also starts from \code{1} not \code{0}, as \code{\link[=timeline]{timeline()}} does.) +In many basic use cases, using \code{timecount()} is essentially the same as using \code{floor(timeline())}. +However, \code{timecount()} gives us a few additional options which add musicological power compared to \code{\link[=timeline]{timeline()}}. +(\code{timecount()} also starts from \code{1} not \code{0}, as \code{\link[=timeline]{timeline()}} does.) The first beat in an input vector is assigned the value of the \code{start} argument, which defaults to \code{start = 1L}. There is no 'zeroth' count, as the first beat occurs at the instant of the starting time---i.e., the first onset in the input vector. Every rhythmic onset is associated with one beat, but multiple onsets may occur within the same beat---thus -the output of \code{count()} assigns (rounds) each onset to the previous beat onset. +the output of \code{timecount()} assigns (rounds) each onset to the previous beat onset. However, if \code{offBeats = FALSE}, only onsets that \emph{land} on a beat are counted, with offbeat values returning \code{NA}. The \code{phase} controls how offbeat onsets are associated with nearby beats. @@ -107,7 +107,7 @@ The \code{phase} argument shifts the "boundary" between beats backwards, before By default, \code{phase = 0} so the beat-association boundary lands on the beat: only onsets on or after each beat "belong" to that beat. If \code{phase = '8'}, the beat boundary is pushed back to capture one eighth-note \emph{before} the beat itself. This can be used to, for example, associate the last 3/8s of a measure with the next measure (like pick ups); -This could be achieved with a command like \code{count(dur, beat = '1', phase = 3/8)}. +This could be achieved with a command like \code{timecount(dur, beat = '1', phase = 3/8)}. } \section{"Beats"}{ @@ -124,9 +124,9 @@ the \code{beat} argument as a vector which is the same length as \code{dur}, ind beat size at each moment/index. This feature is very easy to use with any dataset that includes time signature interpretations, like \code{"*M4/4"}; these interpetations, if present, are automatically \link[=readHumdrum]{read into} a field called \code{TimeSignature}. -For such a dataset, you can simply pass the \code{TimeSignature} field to the \code{beat} argument of \code{count()}, and -the measures of the piece will be correctly counted (even when changing!): \code{count(x, beat = TimeSignature)}. -Alternatively, you can use the \code{\link[=tactus]{tactus()}} command to extract the tactus beat from a time signature, like \code{count(x, beat = tactus(TimeSignature))}. +For such a dataset, you can simply pass the \code{TimeSignature} field to the \code{beat} argument of \code{timecount()}, and +the measures of the piece will be correctly counted (even when changing!): \code{timecount(x, beat = TimeSignature)}. +Alternatively, you can use the \code{\link[=tactus]{tactus()}} command to extract the tactus beat from a time signature, like \code{timecount(x, beat = tactus(TimeSignature))}. } \subsection{Irregular meter}{ @@ -139,11 +139,11 @@ Let's see what these two cases look like, applied to two \code{M7/8} measures of \if{html}{\out{
}}\preformatted{rhythm <- rep('8', 14) -count(rhythm, beat = '8'), +timecount(rhythm, beat = '8'), # output is: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -count(rhythm, beat = list(c('4', '4', '4.'))) +timecount(rhythm, beat = list(c('4', '4', '4.'))) # output is: 1 1 2 2 3 3 3 4 4 5 5 6 6 6 }\if{html}{\out{
}} @@ -161,7 +161,7 @@ indicate a pickup. The \emph{first} index where the \code{pickup} logical is \code{FALSE} is used as the location of beat \code{1}: all the earlier (\code{pickup == TRUE}) points will be negative counts, counting backwards from the start. In \code{humdrumR}, and datapoints before the first barline record (\code{=}) are labeled \code{Bar == 0} in the \code{Bar} \link[=fields]{field}. -Thus, a common use for the \code{pickup} argument is \verb{within(humData, count(Token, pickup = Bar < 1)}, which makes the downbeat of +Thus, a common use for the \code{pickup} argument is \verb{within(humData, timecount(Token, pickup = Bar < 1)}, which makes the downbeat of the first complete bar \code{1} the stating point---any notes in pickup bars are give negative counts. \strong{Note that there is never a 'beat zero'.} @@ -174,12 +174,12 @@ It may be better to use \code{round(timeline())} in cases where you want to do m humData <- readHumdrum(humdrumRroot, "HumdrumData/BachChorales/chor00[1-4].krn") -show(within(humData, count(Token, beat = TimeSignature, pickup = Bar < 1))) +show(within(humData, timecount(Token, beat = TimeSignature, pickup = Bar < 1))) -show(within(humData, count(Token, beat = tactus(TimeSignature)))) +show(within(humData, timecount(Token, beat = tactus(TimeSignature)))) } \seealso{ -{\code{count()} and \code{subpos()} are closely related to the \code{\link[=timeline]{timeline()}} function. The \code{\link[=metcount]{metcount()}} function applies \code{count()} within a metric framework.} +{\code{timecount()} and \code{subpos()} are closely related to the \code{\link[=timeline]{timeline()}} function. The \code{\link[=metcount]{metcount()}} function applies \code{timecount()} within a metric framework.} } diff --git a/man/timeline.Rd b/man/timeline.Rd index 356fb09b..367174cf 100644 --- a/man/timeline.Rd +++ b/man/timeline.Rd @@ -173,7 +173,7 @@ have a (shared) position on the timeline. Another option is to pass the \code{pickup} argument a logical vector of the same length as the input \code{x}. Within each piece/group, any block of \code{TRUE} values at the \emph{beginning} of the \code{pickup} vector indicate a pickup. -The \emph{first} index where the \code{pickup} logical is \code{FALSE} is used as the starting point of the timeline/count; +The \emph{first} index where the \code{pickup} logical is \code{FALSE} is used as the starting point of the timeline/timecount; All the earlier (\code{pickup == TRUE}) points will be negative numbers, measured backwards from the start index. In \code{humdrumR}, and datapoints before the first barline record (\code{=}) are labeled \code{Bar == 0} in the \code{Bar} \link[=fields]{field}. Thus, a common use for the \code{pickup} argument is \verb{within(humData, timeline(Token, pickup = Bar < 1)}, which makes the downbeat of @@ -193,6 +193,6 @@ within(B075, timeline(Token)) } \seealso{ -{The \code{\link[=count]{count()}} and \code{\link[=metcount]{metcount()}} functions provide "higher level" musical interpretations of timeline information.} +{The \code{\link[=timecount]{timecount()}} and \code{\link[=metcount]{metcount()}} functions provide "higher level" musical interpretations of timeline information.} } \concept{rhythm analysis tools} diff --git a/man/withinHumdrum.Rd b/man/withinHumdrum.Rd index e2ec403a..e078974c 100644 --- a/man/withinHumdrum.Rd +++ b/man/withinHumdrum.Rd @@ -250,11 +250,11 @@ For example, in \if{html}{\out{
}}\preformatted{humData |> select(Token) |> - with(tally(.)) + with(count(.)) }\if{html}{\out{
}} -will run \code{\link[=tally]{tally()}} on the \code{Token} field. +will run \code{\link[=count]{count()}} on the \code{Token} field. Because new fields created by \code{within()}/\code{mutate()}/\code{reframe()} become the \link[=selectedFields]{selected fields} (details below), the \code{.} makes it easy to refer to the \emph{last} new field in pipes. @@ -262,11 +262,11 @@ For example, in \if{html}{\out{
}}\preformatted{humData |> mutate(kern(Token, simple = TRUE)) |> - with(tally(.)) + with(count(.)) }\if{html}{\out{
}} -the \code{tally()} function is run on the output of the \code{mutate(kern(Token, simpe = TRUE))} expression. +the \code{count()} function is run on the output of the \code{mutate(kern(Token, simpe = TRUE))} expression. } \subsection{Automatic argument insertion}{ @@ -330,8 +330,8 @@ if the indexed object appears within a higher function call, each lag is inserted as a \emph{separate} argument to that call. Thus, \emph{these} two calls are also the same: -\if{html}{\out{
}}\preformatted{humData |> with(tally(Token[lag = 1:2])) -humData |> with(tally(lag(Token, 1), lag(Token, 2))) +\if{html}{\out{
}}\preformatted{humData |> with(count(Token[lag = 1:2])) +humData |> with(count(lag(Token, 1), lag(Token, 2))) }\if{html}{\out{
}} Note that the lagging will also be automatically grouped within the fields \code{list(Piece, Spine, Path)}, @@ -382,7 +382,7 @@ have the same number of data records, but only including \strong{all} data recor So, if I know there are no stops/paths in our data, we can run something like this: \if{html}{\out{
}}\preformatted{humData |> within(dataTypes = 'Dd', - tally(Token[splat = Spine \%in\% 1:2])) + count(Token[splat = Spine \%in\% 1:2])) }\if{html}{\out{
}} } @@ -399,7 +399,7 @@ Once you've quoted an expression you can pass it to \code{with()}, \code{within()}, \code{mutate()}, \code{summarize()}, and \code{reframe()}. Image that you have three different datasets (\code{humData1}, \code{humData2}, and \code{humData3}), -and you'd like to evaluate the expression \code{tally(kern(Token, simple = TRUE))} in all three. +and you'd like to evaluate the expression \code{count(kern(Token, simple = TRUE))} in all three. Use the \code{~} operator to quote and save that expression to variable, then use it with \code{with()}: \if{html}{\out{
}}\preformatted{tallyKern <- ~tally(kern(Token, simple = TRUE)) @@ -613,7 +613,7 @@ in these cases, which result data lands where may be hard to predict. humData <- readHumdrum(humdrumRroot, "HumdrumData/BachChorales/chor00[1-4].krn") -humData |> with(tally(kern(Token, simple = TRUE), Spine)) +humData |> with(count(kern(Token, simple = TRUE), Spine)) humData |> within(Kern <- kern(Token), Recip <- recip(Token), From be20d893cdf45f403d895e32b04e9dedade2c8bc Mon Sep 17 00:00:00 2001 From: ncondits3 Date: Mon, 9 Oct 2023 13:28:42 -0400 Subject: [PATCH 03/38] Updated all references to count(beat=) to timecount(unit = ) --- R/Analysis.R | 6 +-- R/Metric.R | 76 ++++++++++++++++++------------------ tests/testthat/test-Metric.R | 44 ++++++++++----------- vignettes/Context.Rmd | 6 +-- vignettes/RhythmAndMeter.Rmd | 24 ++++++------ 5 files changed, 78 insertions(+), 78 deletions(-) diff --git a/R/Analysis.R b/R/Analysis.R index d15377f6..4f5166f9 100644 --- a/R/Analysis.R +++ b/R/Analysis.R @@ -159,9 +159,9 @@ rbind.humdrum.table <- function(...) { #' @rdname tabulation #' @export -as.data.frame.humdrum.table <- function(x, ...) { - tab <- as.data.frame(S3Part(x), ...) - names(tab)[names(tab) == 'Freq'] <- 'Tally' +as.data.frame.humdrum.table <- function(x, ..., responseName = 'n') { + tab <- as.data.frame(S3Part(x), ..., responseName = responseName) + # names(tab)[names(tab) == 'Freq'] <- 'Tally' tab } diff --git a/R/Metric.R b/R/Metric.R index 2467e06a..d348ea04 100644 --- a/R/Metric.R +++ b/R/Metric.R @@ -640,44 +640,44 @@ nbeats.NULL <- function(x) NULL #' #' @section "Beats": #' -#' The `beat` argument is used to indicate what size of beat you want to count. -#' The default `beat` is a whole note, equivalent to a measure of `M4/4` time. -#' The `beat` argument uses the [rhythm parser][rhythmInterval()], so it can understand beat values input in a variety of formats: -#' thus, you could specify quarter-note beats as either `beat = '4'` or `beat = 0.25`. -#' The parser also understands how to parse the (full) duration of time signature: for example, `beat = 'M3/4'` would use a dotted-half-note beat (`'2.'`). +#' The `unit` argument is used to indicate what size of beat you want to count. +#' The default `unit` is a whole note, equivalent to a measure of `M4/4` time. +#' The `unit` argument uses the [rhythm parser][rhythmInterval()], so it can understand unit values input in a variety of formats: +#' thus, you could specify quarter-note units as either `unit = '4'` or `unit = 0.25`. +#' The parser also understands how to parse the (full) duration of time signature: for example, `unit = 'M3/4'` would use a dotted-half-note unit (`'2.'`). #' #' ### Changing meter #' #' If your data has changing meters (either between pieces, or within pieces), you can specify -#' the `beat` argument as a vector which is the same length as `dur`, indicating the +#' the `unit` argument as a vector which is the same length as `dur`, indicating the #' beat size at each moment/index. #' This feature is very easy to use with any dataset that includes time signature interpretations, like `"*M4/4"`; #' these interpetations, if present, are automatically [read into][readHumdrum()] a field called `TimeSignature`. -#' For such a dataset, you can simply pass the `TimeSignature` field to the `beat` argument of `timecount()`, and -#' the measures of the piece will be correctly counted (even when changing!): `timecount(x, beat = TimeSignature)`. -#' Alternatively, you can use the [tactus()] command to extract the tactus beat from a time signature, like `timecount(x, beat = tactus(TimeSignature))`. +#' For such a dataset, you can simply pass the `TimeSignature` field to the `unit` argument of `timecount()`, and +#' the measures of the piece will be correctly counted (even when changing!): `timecount(x, unit = TimeSignature)`. +#' Alternatively, you can use the [tactus()] command to extract the tactus beat from a time signature, like `timecount(x, unit = tactus(TimeSignature))`. #' #' ### Irregular meter #' #' Some musical meters consist of a pattern of irregular beats. #' For example, the meter `M7/8` is often realized as two "short" beats (two eigth-notes each) and one "long" beat (three eigth-notes), forming a 2 + 2 + 3 pattern. -#' If we want to count each eighth-note, we can simply specify `beat = '8'` and get the `M7/8` beats counted as c(`1`, `3`, `5`). -#' However, if we want to count each short *or* long beat as a single unit, we must specify the desired pattern as a `list` of beat durations: for example, `beat = list(c("4", "4", "4."))`. +#' If we want to count each eighth-note, we can simply specify `unit = '8'` and get the `M7/8` beats counted as c(`1`, `3`, `5`). +#' However, if we want to count each short *or* long beat as a single unit, we must specify the desired pattern as a `list` of beat durations: for example, `unit = list(c("4", "4", "4."))`. #' Let's see what these two cases look like, applied to two `M7/8` measures of straight eighth-notes: #' #' ``` #' rhythm <- rep('8', 14) #' -#' timecount(rhythm, beat = '8'), +#' timecount(rhythm, unit = '8'), #' #' # output is: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #' -#' timecount(rhythm, beat = list(c('4', '4', '4.'))) +#' timecount(rhythm, unit = list(c('4', '4', '4.'))) #' #' # output is: 1 1 2 2 3 3 3 4 4 5 5 6 6 6 #' ``` #' -#' To accommodate changing meters, the `beat` argument can still accept `list` of such patterns, so long as the list is the same length as `dur`. +#' To accommodate changing meters, the `unit` argument can still accept `list` of such patterns, so long as the list is the same length as `dur`. #' #' @section Pickups: #' @@ -703,7 +703,7 @@ nbeats.NULL <- function(x) NULL #' Wherever the input can't be parsed as a duration, #' that element is treated as a duration of zero. #' -#' @param beat ***The size of "beat" (or measure) to count.*** +#' @param unit ***The size of "beat" (or measure) to count.*** #' #' Defaults to a whole-note (one measure of 4/4 time). #' @@ -722,7 +722,7 @@ nbeats.NULL <- function(x) NULL #' Defaults to `0`. #' #' Must be a `character` or `numeric` vector; must be length `1` or the same length as `dur`; -#' The duration of `phase` must be smaller than the smallest duration value in `beat`. +#' The duration of `phase` must be smaller than the smallest duration value in `unit`. #' #' Is parsed as a duration using [rhythmInterval()]; #' If the input can't be parsed as a duration, an error occurs. @@ -751,14 +751,14 @@ nbeats.NULL <- function(x) NULL #' #' humData <- readHumdrum(humdrumRroot, "HumdrumData/BachChorales/chor00[1-4].krn") #' -#' show(within(humData, timecount(Token, beat = TimeSignature, pickup = Bar < 1))) +#' show(within(humData, timecount(Token, unit = TimeSignature, pickup = Bar < 1))) #' -#' show(within(humData, timecount(Token, beat = tactus(TimeSignature)))) +#' show(within(humData, timecount(Token, unit = tactus(TimeSignature)))) #' #' #' @seealso {`timecount()` and `subpos()` are closely related to the [timeline()] function. The [metcount()] function applies `timecount()` within a metric framework.} #' @export -timecount <- function(dur, beat = rational(1L), start = 1L, phase = 0, pickup = NULL, offBeats = TRUE, groupby = list()) { +timecount <- function(dur, unit = rational(1L), start = 1L, phase = 0, pickup = NULL, offBeats = TRUE, groupby = list()) { checks(dur, xcharacter | xnumber) checks(start, (xnumber & xlen1 & (xnotzero + "The 'first' beat to count occurs at the starting instant, so there is no 'zeroth' beat" ))) @@ -767,13 +767,13 @@ timecount <- function(dur, beat = rational(1L), start = 1L, phase = 0, pickup = checks(offBeats, xTF) - scaled <- scaled_timeline(dur, beat, rational(0L), pickup, groupby, callname = 'timecount') + scaled <- scaled_timeline(dur, unit, rational(0L), pickup, groupby, callname = 'timecount') # phase phase_rint <- rhythmInterval(phase) checks(phase_rint, argname = 'phase', - argCheck(\(arg) all(arg < min(.unlist(scaled$values))), "must be smaller than all beats in the 'beat' argument'", - \(arg) paste0(.show_values(rep(phase, length(scaled$Scale))[arg >= min(.unlist(scaled$values))]), " but 'beat' includes ", .show_vector(unique(beat))))) + argCheck(\(arg) all(arg < min(.unlist(scaled$values))), "must be smaller than all units in the 'unit' argument'", + \(arg) paste0(.show_values(rep(phase, length(scaled$Scale))[arg >= min(.unlist(scaled$values))]), " but 'unit' includes ", .show_vector(unique(unit))))) phase_rint <- phase_rint / scaled$Scale # @@ -826,20 +826,20 @@ timecount <- function(dur, beat = rational(1L), start = 1L, phase = 0, pickup = #' @rdname timecount #' @export -subpos <- function(dur, beat = rational(1L), phase = 0, pickup = NULL, deparser = duration, ..., groupby = list()) { +subpos <- function(dur, unit = rational(1L), phase = 0, pickup = NULL, deparser = duration, ..., groupby = list()) { checks(dur, xcharacter | xnumber) checks(pickup, xnull | (xlogical & xmatch(dur)), seealso = c("?subpos", 'the rhythm vignette')) checks(phase, (xnumeric | xcharacter) & (xlen1 | xmatch(dur))) checks(deparser, xinherits('rhythmFunction')) - scaled <- scaled_timeline(dur, beat, rational(0L), pickup, groupby, callname = 'subpos', sumBeats = TRUE) + scaled <- scaled_timeline(dur, unit, rational(0L), pickup, groupby, callname = 'subpos', sumBeats = TRUE) # phase phase_rint <- rhythmInterval(phase) checks(phase_rint, argname = 'phase', - argCheck(\(arg) all(arg < min(.unlist(scaled$values))), "must be smaller than all beats in the 'beat' argument'", - \(arg) paste0(.show_values(rep(phase, length(scaled$Scale))[arg >= min(.unlist(scaled$values))]), " but 'beat' includes ", .show_vector(unique(beat))))) + argCheck(\(arg) all(arg < min(.unlist(scaled$values))), "must be smaller than all units in the 'unit' argument'", + \(arg) paste0(.show_values(rep(phase, length(scaled$Scale))[arg >= min(.unlist(scaled$values))]), " but 'unit' includes ", .show_vector(unique(unit))))) phase_rint <- phase_rint / scaled$Scale @@ -865,14 +865,14 @@ subpos <- function(dur, beat = rational(1L), phase = 0, pickup = NULL, deparser if (is.null(deparser)) timeline else deparser(timeline, ...) } -scaled_timeline <- function(dur, beat, start, pickup, groupby, callname, sumBeats = FALSE) { +scaled_timeline <- function(dur, unit, start, pickup, groupby, callname, sumBeats = FALSE) { dur <- rhythmInterval(dur) - checks(beat, (xatomic | xinherits(c('list', 'rational'))) & (xlen1 | xmatch(dur))) + checks(unit, (xatomic | xinherits(c('list', 'rational'))) & (xlen1 | xmatch(dur))) - if (is.list(beat)) { - beat <- rep(beat, length.out = length(dur)) - uniqueBeats <- valind(beat) + if (is.list(unit)) { + unit <- rep(unit, length.out = length(dur)) + uniqueBeats <- valind(unit) uniqueBeats$values <- lapply(uniqueBeats$values, rhythmInterval) @@ -880,27 +880,27 @@ scaled_timeline <- function(dur, beat, start, pickup, groupby, callname, sumBeat tatum <- .unlist(lapply(uniqueBeats$values, if(sumBeats) sum else tatum.rational)) - beat <- tatum[uniqueBeats$i] + unit <- tatum[uniqueBeats$i] } else { irregular <- logical(length(dur)) - beat <- rhythmInterval(beat) - uniqueBeats <- list(values = beat) + unit <- rhythmInterval(unit) + uniqueBeats <- list(values = unit) } - dur <- dur / beat + dur <- dur / unit timeline <- pathSigma(dur, groupby = groupby, start = start, pickup = pickup, callname = 'timecount') - c(list(Timeline = timeline, Scale = beat, Irregular = irregular, tatum = tatum), uniqueBeats) + c(list(Timeline = timeline, Scale = unit, Irregular = irregular, tatum = tatum), uniqueBeats) } #' @rdname timecount #' @export -onbeat <- function(dur, beat = rational(1L), groupby = list(), ...) { - subpos(dur, beat = beat, groupby = groupby, deparser = NULL) == rational(0L) +onbeat <- function(dur, unit = rational(1L), groupby = list(), ...) { + subpos(dur, unit = unit, groupby = groupby, deparser = NULL) == rational(0L) } diff --git a/tests/testthat/test-Metric.R b/tests/testthat/test-Metric.R index 1727121a..e956ebb7 100644 --- a/tests/testthat/test-Metric.R +++ b/tests/testthat/test-Metric.R @@ -2,40 +2,40 @@ expect_equalchar <- function(e1, e2) expect_equal(as.character(e1), as.character expect_equalnum <- function(e1, e2) expect_equal(as.numeric(e1), as.numeric(e2)) -test_that('count() and subpos() work correctly', { +test_that('timecount() and subpos() work correctly', { ## basics fourfour <- c('4', '8', '8', '4', '8', '8', '8','4','8','2') - # count() - expect_identical(count(fourfour), c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L)) - expect_identical(count(fourfour, phase = '4'), c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L)) - expect_identical(count(fourfour, beat = '4'), c(1L, 2L, 2L, 3L, 4L, 4L, 5L, 5L, 6L, 7L)) - expect_identical(count(fourfour, beat = '4', offBeats = FALSE), c(1L, 2L, NA, 3L, 4L, NA, 5L, NA, NA, 7L)) - expect_identical(count(fourfour, start = 2L), 1L + c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L)) - expect_identical(count(fourfour, beat = '2', start = -2L), c(-2L, -2L, -2L, -1L, -1L, -1L, 1L, 1L, 1L, 2L)) - expect_identical(count(fourfour, beat = '4', pickup = seq_along(fourfour) < 2L), c(-1L, 1L, 1L, 2L, 3L, 3L, 4L, 4L, 5L, 6L)) + # timecount() + expect_identical(timecount(fourfour), c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L)) + expect_identical(timecount(fourfour, phase = '4'), c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L)) + expect_identical(timecount(fourfour, unit = '4'), c(1L, 2L, 2L, 3L, 4L, 4L, 5L, 5L, 6L, 7L)) + expect_identical(timecount(fourfour, unit = '4', offBeats = FALSE), c(1L, 2L, NA, 3L, 4L, NA, 5L, NA, NA, 7L)) + expect_identical(timecount(fourfour, start = 2L), 1L + c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L)) + expect_identical(timecount(fourfour, unit = '2', start = -2L), c(-2L, -2L, -2L, -1L, -1L, -1L, 1L, 1L, 1L, 2L)) + expect_identical(timecount(fourfour, unit = '4', pickup = seq_along(fourfour) < 2L), c(-1L, 1L, 1L, 2L, 3L, 3L, 4L, 4L, 5L, 6L)) # subpos() expect_equalnum(subpos(fourfour), c(0, 0.25, 0.375, 0.5, 0.75, 0.875, 0, 0.125, 0.375, 0.5)) expect_equalnum(subpos(fourfour, phase = '4'), c(0, 0.25, 0.375, 0.5, -0.250, -0.125, 0, 0.125, 0.375, 0.5)) - expect_equalnum(subpos(fourfour, beat = '4'), c(0, 0, 0.125, 0, 0, 0.125, 0, 0.125, 0.125, 0)) - expect_equalchar(subpos(fourfour, beat = '4', deparser = recip), c("1%0", "1%0", "8", "1%0", "1%0", "8", "1%0", "8", "8", "1%0")) + expect_equalnum(subpos(fourfour, unit = '4'), c(0, 0, 0.125, 0, 0, 0.125, 0, 0.125, 0.125, 0)) + expect_equalchar(subpos(fourfour, unit = '4', deparser = recip), c("1%0", "1%0", "8", "1%0", "1%0", "8", "1%0", "8", "8", "1%0")) ## irregular fourtwo <- rep(head(fourfour, -1), 2) met <- rep(c('M4/4', 'M2/4', 'M4/4', 'M2/4'), c(6, 3, 6, 3)) - expect_identical(count(fourtwo, beat = met), c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L) ) - expect_equalnum(subpos(fourtwo, beat = met), c(0, 0.25, 0.375, 0.5, 0.75, 0.875, 0, 0.125, 0.375, 0, 0.25, 0.375, 0.5, 0.75, 0.875, 0, 0.125, 0.375) ) + expect_identical(timecount(fourtwo, unit = met), c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L) ) + expect_equalnum(subpos(fourtwo, unit = met), c(0, 0.25, 0.375, 0.5, 0.75, 0.875, 0, 0.125, 0.375, 0, 0.25, 0.375, 0.5, 0.75, 0.875, 0, 0.125, 0.375) ) seven <- c('4', '4', '4.', '4', '4', '4', '8', '8', '16', '16', '4', '4.') - expect_identical(count(seven, beat = list(c('4', '4', '4.'))), c(1L, 2L, 3L, 4L, 5L, 6L, 6L, 7L, 7L, 7L, 8L, 9L)) - expect_identical(count(seven, beat = list(c('4', '4', '4.')), phase = '8'), c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 7L, 8L, 8L, 8L, 9L)) - expect_equalnum(subpos(seven, beat = list(c('4', '4', '4.'))), c(0, 0, 0, 0, 0, 0, 0.25, 0, 0.125, .1875, 0, 0)) - expect_equalnum(subpos(seven, beat = list(c('4', '4', '4.')), phase = '8'), c(0, 0, 0, 0, 0, 0, -0.125, 0, -0.125, -0.0625, 0, 0)) + expect_identical(timecount(seven, unit = list(c('4', '4', '4.'))), c(1L, 2L, 3L, 4L, 5L, 6L, 6L, 7L, 7L, 7L, 8L, 9L)) + expect_identical(timecount(seven, unit = list(c('4', '4', '4.')), phase = '8'), c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 7L, 8L, 8L, 8L, 9L)) + expect_equalnum(subpos(seven, unit = list(c('4', '4', '4.'))), c(0, 0, 0, 0, 0, 0, 0.25, 0, 0.125, .1875, 0, 0)) + expect_equalnum(subpos(seven, unit = list(c('4', '4', '4.')), phase = '8'), c(0, 0, 0, 0, 0, 0, -0.125, 0, -0.125, -0.0625, 0, 0)) # subpos() @@ -56,14 +56,14 @@ test_that('metlev family works correctly', { test_that('Examples from Metric man work', { - ## count() man + ## timecount() man rhythm <- rep('8', 14) - expect_identical(count(rhythm, beat = '8'), 1L:14L) - expect_identical(count(rhythm, beat = list(c('4','4', '4.'))), as.integer(c(1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6))) + expect_identical(timecount(rhythm, unit = '8'), 1L:14L) + expect_identical(timecount(rhythm, unit = list(c('4','4', '4.'))), as.integer(c(1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6))) expect_equalnum(duration('M3/4'), 0.75) - expect_identical(count(rep('8', 8), beat = '1', phase = 3/8), as.integer(rep(c(1,2), c(5, 3)))) + expect_identical(timecount(rep('8', 8), unit = '1', phase = 3/8), as.integer(rep(c(1,2), c(5, 3)))) }) @@ -97,4 +97,4 @@ test_that("Syncopation works correctly", { expect_equal(syncopation(rhythm, levels = '8'), c(FALSE, FALSE, TRUE, FALSE, FALSE)) expect_equal(syncopation(rhythm, levels = c('16', '4')), c(FALSE, TRUE, FALSE, TRUE, TRUE)) -}) \ No newline at end of file +}) diff --git a/vignettes/Context.Rmd b/vignettes/Context.Rmd index 9a1293a1..bb24fa8e 100644 --- a/vignettes/Context.Rmd +++ b/vignettes/Context.Rmd @@ -137,13 +137,13 @@ chorales |> Another useful contextual group is the beat. There will be no automatic "beat" field in our data, so we'll need to make one---obviously, we need to have data with rhythmic information encoded (like `**kern` or `**recip`) to do this! -We can use the `count()` function to count the beats in our data. +We can use the `timecount()` function to count the beats in our data. We could count quarter-notes by setting `beat = '4'`; alternatively, if our data includes time-signature interpretations (like `*M3/4`) we could use the `TimeSignature` field to get the tactus of the meter. Let's try the later and save the result to a new field, which we'll call `Beat` (or anything else you want). ```{r} chorales |> - mutate(Beat = count(Token, beat = tactus(TimeSignature))) -> chorales + mutate(Beat = timecount(Token, beat = tactus(TimeSignature))) -> chorales ``` @@ -162,7 +162,7 @@ chorales |> ``` -> Note: If your data includes spine paths, you'll want to set `mutate(count(Token), expandPaths = TRUE, ...)`. +> Note: If your data includes spine paths, you'll want to set `mutate(timecount(Token), expandPaths = TRUE, ...)`. > Count (and similar functions, like `timeline()`) won't work correctly without paths expanded (`?expandPaths`). # Contextual Windows diff --git a/vignettes/RhythmAndMeter.Rmd b/vignettes/RhythmAndMeter.Rmd index 7f449440..ff06ba6c 100644 --- a/vignettes/RhythmAndMeter.Rmd +++ b/vignettes/RhythmAndMeter.Rmd @@ -336,15 +336,15 @@ If the `BPM` argument is not provided, the default is 60 beats-per-minute. Ok, the `timeline()` gives us a timeline in whole-note units, giving fractional (decimal) output. Often in music, we want to know how many *beats* have elapsed at a given time, rather than the exact time position. -For this, use the `count()`, and its `beat` argument. -The default `beat` is a whole-note, so `count()` will count which whole note you are on: +For this, use the `timecount()`, and its `unit` argument. +The default `unit` is a whole-note, so `timecount()` will count which whole note you are on: ```{r} row <- c('4c', '4c', '6c', '12d', '4e', '6e','12d', '6e', '12f', '2g', '12cc', '12cc', '12cc', '12g', '12g', '12g', '12e', '12e', '12e', '12c', '12c', '12c', '6g','12f', '6e', '12d','2c') -count(row) +timecount(row) ``` @@ -352,19 +352,19 @@ Let's try quarter-notes instead: ```{r} -count(row, beat = '4') +timecount(row, unit = '4') ``` -`count()` will even work for irregular beat patterns, which must be entered as a list. +`timecount()` will even work for irregular beat patterns, which must be entered as a list. For example, the meter 7/8 is often played as three beats, with the last beat being longer than the first two: a pattern line `4 4 4.`. -`count()` can count these irregular beats! +`timecount()` can count these irregular beats! ```{r} seven8 <- c('4', '4', '8','8','8','4','4','4','8','4','4','8','8', '8', '4') -count(seven8, beat = list(c('4', '4', '4.'))) +timecount(seven8, unit = list(c('4', '4', '4.'))) ``` @@ -374,7 +374,7 @@ This could be handy for counting subdivisions in swing time! ### Subposition -The counterpart to `count()` is `subpos()`. +The counterpart to `timecount()` is `subpos()`. When we count beats, some notes don't actually land *on* the beat, but somewhere "inside" the beat---in other words, between beats. `subpos()` will tell us how far from the beat each attack is; the unit will be whole-notes, unless we pass a `scale` argument to change the scale. @@ -385,9 +385,9 @@ Let's look at our last few examples again, but using `subpos()`: subpos(row, scale = 12) -subpos(row, beat = '4', scale = 12) +subpos(row, unit = '4', scale = 12) -subpos(seven8, beat = list(c('4', '4', '4.')), scale = 8) +subpos(seven8, unit = list(c('4', '4', '4.')), scale = 8) ``` @@ -395,7 +395,7 @@ subpos(seven8, beat = list(c('4', '4', '4.')), scale = 8) # Meter -The `count()` and `subpos()` commands are great if we want count in a single beat/measure unit. +The `timecount()` and `subpos()` commands are great if we want count in a single beat/measure unit. To take things to the next level(s), we need to consider musical *meter*. From the point of view of `r hm`, "meter" is a set of multiple "beat levels" occurring at the same time (in parallel), with "lower" (faster/shorter) levels nested inside "higher" (slower/longer) levels. `R Hm` defines a number of useful tools for applying metric analyses to rhythmic data. @@ -435,7 +435,7 @@ The whole-note level is `1` and (in this case) the eighth-note level is `4`. ### Metric position Along with `metlev()`, `r hm` provides to complementary functions called `metcount()`, `metsubpos()`. -As you might guess, these are metric parallels of `count()` and `subpos()`. +As you might guess, these are metric parallels of `timecount()` and `subpos()`. The `metcount()` function counts beats at a particular beat level (the `level` argument) *within* the highest level in the meter. The `metsubpos()` function calculates the rhythm offset between each onset and the nearest beat in the meter. From 8a8757204ed6e06916bb820321f34ee63b5eafd2 Mon Sep 17 00:00:00 2001 From: ncondits3 Date: Tue, 10 Oct 2023 07:36:53 -0400 Subject: [PATCH 04/38] Tests passing and site built with renamed functions. --- R/Metric.R | 2 +- R/Within.R | 8 +- _pkgdown.yml | 4 +- docs/404.html | 2 +- docs/LICENSE-text.html | 2 +- docs/articles/ComplexSyntax.html | 80 +-- docs/articles/Context.html | 50 +- docs/articles/DataFields.html | 42 +- docs/articles/Filtering.html | 2 +- docs/articles/GettingStarted.html | 38 +- .../figure-html/unnamed-chunk-14-1.png | Bin 29404 -> 29178 bytes .../figure-html/unnamed-chunk-15-1.png | Bin 24408 -> 24114 bytes docs/articles/Grouping.html | 4 +- docs/articles/HumdrumSyntax.html | 4 +- docs/articles/KeysAndChord.html | 6 +- docs/articles/PitchAndTonality.html | 14 +- .../figure-html/unnamed-chunk-16-1.png | Bin 29148 -> 28920 bytes .../figure-html/unnamed-chunk-17-1.png | Bin 35513 -> 35273 bytes .../figure-html/unnamed-chunk-18-1.png | Bin 29337 -> 29078 bytes .../figure-html/unnamed-chunk-21-1.png | Bin 33858 -> 33558 bytes .../figure-html/unnamed-chunk-22-1.png | Bin 30678 -> 30461 bytes docs/articles/RPrimer.html | 14 +- docs/articles/ReadWrite.html | 110 ++-- docs/articles/Reshaping.html | 168 +++--- docs/articles/RhythmAndMeter.html | 46 +- docs/articles/Summary.html | 10 +- docs/articles/index.html | 2 +- docs/authors.html | 2 +- docs/index.html | 2 +- docs/news/index.html | 2 +- docs/pkgdown.yml | 2 +- docs/reference/LO5th.html | 2 +- docs/reference/REparser.html | 2 +- docs/reference/RegexFind.html | 2 +- docs/reference/accidental.html | 2 +- docs/reference/bhatk.html | 4 +- docs/reference/bpm2sec.html | 2 +- docs/reference/census.html | 4 +- docs/reference/cents.html | 2 +- docs/reference/chord.html | 2 +- docs/reference/chordDeparsing.html | 2 +- docs/reference/chordFunctions.html | 2 +- docs/reference/chordParsing.html | 2 +- docs/reference/cleave.html | 80 +-- docs/reference/cleaveGraceNotes.html | 2 +- docs/reference/collapseHumdrum.html | 2 +- docs/reference/combineFields.html | 2 +- docs/reference/context.html | 4 +- docs/reference/crossEntropy.html | 2 +- docs/reference/degree.html | 4 +- docs/reference/delta.html | 2 +- docs/reference/diatonicSetS4.html | 2 +- docs/reference/ditto.html | 2 +- docs/reference/draw.html | 4 +- docs/reference/duple.html | 2 +- docs/reference/duration.html | 2 +- docs/reference/entropy.html | 2 +- docs/reference/enum.html | 2 +- docs/reference/evaluatingExpressions.html | 2 +- docs/reference/expand.html | 2 +- docs/reference/expandPaths.html | 2 +- docs/reference/figuredBass.html | 2 +- docs/reference/freq.html | 4 +- docs/reference/gamut.html | 2 +- docs/reference/grid.html | 2 +- docs/reference/groupHumdrum.html | 4 +- docs/reference/groupingFactors.html | 2 +- docs/reference/harm.html | 2 +- docs/reference/helmholtz.html | 4 +- docs/reference/hop.html | 2 +- docs/reference/humCoercion.html | 2 +- docs/reference/humMerge.html | 2 +- docs/reference/humMeter.html | 2 +- docs/reference/humSize.html | 2 +- docs/reference/humSummary.html | 4 +- docs/reference/humTable.html | 52 +- docs/reference/humdrumDispatch.html | 2 +- docs/reference/humdrumPitch.html | 2 +- docs/reference/humdrumR.html | 2 +- docs/reference/humdrumRclass.html | 4 +- docs/reference/index.html | 8 +- docs/reference/indexHumdrum.html | 214 +++---- docs/reference/int.html | 4 +- docs/reference/interpretations.html | 4 +- docs/reference/interval.html | 4 +- docs/reference/invert.html | 2 +- docs/reference/ioi.html | 2 +- docs/reference/is.major.html | 2 +- docs/reference/is.simple.html | 2 +- docs/reference/kern.html | 4 +- docs/reference/key.html | 2 +- docs/reference/keyDeparsing.html | 2 +- docs/reference/keyFunctions.html | 2 +- docs/reference/keyParsing.html | 2 +- docs/reference/lag.html | 2 +- docs/reference/lilypond.html | 4 +- docs/reference/meter.html | 2 +- docs/reference/metlev.html | 14 +- docs/reference/mutualInfo.html | 2 +- docs/reference/nbeats.html | 13 +- docs/reference/notehead.html | 2 +- docs/reference/octave.html | 2 +- docs/reference/p.html | 2 +- docs/reference/partialMatching.html | 2 +- docs/reference/pc.html | 4 +- docs/reference/pitch.html | 4 +- docs/reference/pitchDeparsing.html | 2 +- docs/reference/pitchFunctions.html | 2 +- docs/reference/pitchParsing.html | 2 +- docs/reference/pullHumdrum.html | 4 +- docs/reference/quality.html | 2 +- docs/reference/rational.html | 2 +- docs/reference/readHumdrum.html | 10 +- docs/reference/recip.html | 2 +- docs/reference/recordDuration.html | 2 +- docs/reference/recycling.html | 2 +- docs/reference/reference.html | 4 +- docs/reference/regexConstruction.html | 2 +- docs/reference/rend.html | 4 +- docs/reference/rhythmDeparsing.html | 2 +- docs/reference/rhythmFunctions.html | 2 +- docs/reference/rhythmParsing.html | 2 +- docs/reference/romanKey.html | 2 +- docs/reference/romanNumerals.html | 2 +- docs/reference/segments.html | 2 +- docs/reference/selectedFields.html | 10 +- docs/reference/semits.html | 6 +- docs/reference/sigma.html | 2 +- docs/reference/signature.html | 2 +- docs/reference/silbeFormat.html | 2 +- docs/reference/solfa.html | 4 +- docs/reference/solfg.html | 4 +- docs/reference/sonority.html | 2 +- docs/reference/spines.html | 4 +- docs/reference/step.html | 2 +- docs/reference/struct.html | 2 +- docs/reference/subset.humdrumR.html | 4 +- docs/reference/syncopation.html | 2 +- docs/reference/tabulation.html | 201 +++++++ docs/reference/tactus.html | 8 +- docs/reference/tandem.html | 2 +- docs/reference/tatum.html | 2 +- docs/reference/tertian.html | 2 +- docs/reference/tertianSetS4.html | 2 +- docs/reference/time.html | 2 +- docs/reference/timebase.html | 2 +- docs/reference/timecount.html | 538 ++++++++++++++++++ docs/reference/timeline.html | 6 +- docs/reference/token.html | 2 +- docs/reference/tonalIntervalS4.html | 2 +- docs/reference/tonh.html | 4 +- docs/reference/transpose.html | 2 +- docs/reference/unfoldStops.html | 2 +- docs/reference/validateHumdrum.html | 24 +- docs/reference/vectorization.html | 2 +- docs/reference/withinHumdrum.html | 32 +- docs/reference/wort.html | 2 +- docs/reference/writeHumdrum.html | 2 +- docs/search.json | 2 +- docs/sitemap.xml | 6 + man/pitchDeparsing.Rd | 36 +- man/pitchParsing.Rd | 36 +- man/tabulation.Rd | 2 +- man/timecount.Rd | 42 +- man/withinHumdrum.Rd | 8 +- tests/testthat/test-Pitch.R | 26 +- tests/testthat/test-Rhythm.R | 2 +- tests/testthat/test-Subset.R | 16 +- tests/testthat/test-Within.R | 6 +- vignettes/Context.Rmd | 20 +- vignettes/DataFields.Rmd | 8 +- vignettes/GettingStarted.Rmd | 34 +- vignettes/Grouping.Rmd | 2 +- vignettes/PitchAndTonality.Rmd | 12 +- vignettes/RPrimer.Rmd | 2 +- vignettes/Reshaping.Rmd | 4 +- vignettes/Summary.Rmd | 6 +- 177 files changed, 1556 insertions(+), 820 deletions(-) create mode 100644 docs/reference/tabulation.html create mode 100644 docs/reference/timecount.html diff --git a/R/Metric.R b/R/Metric.R index d348ea04..47a0fad2 100644 --- a/R/Metric.R +++ b/R/Metric.R @@ -1247,7 +1247,7 @@ metsubpos <- function(dur, meter = duple(5), pickup = NULL, deparser = duration, nbeats <- lengths(levels) counts <- do.call('cbind', lapply(lapply(levels, \(l) if (length(l) > 1) list(l) else l), - count, + timecount, pickup = pickup, dur = dur, groupby = groupby)) counts[counts >= 1L] <- counts[counts >= 1L] - 1L diff --git a/R/Within.R b/R/Within.R index f9fc1a41..a89a250d 100644 --- a/R/Within.R +++ b/R/Within.R @@ -279,11 +279,11 @@ #' Use the `~` operator to quote and save that expression to variable, then use it with `with()`: #' #' ``` -#' tallyKern <- ~tally(kern(Token, simple = TRUE)) +#' countKern <- ~count(kern(Token, simple = TRUE)) #' -#' humData1 |> with(tallyKern) -#' humData2 |> with(tallyKern) -#' humData3 |> with(tallyKern) +#' humData1 |> with(countKern) +#' humData2 |> with(countKern) +#' humData3 |> with(countKern) #' #' ``` #' diff --git a/_pkgdown.yml b/_pkgdown.yml index ac2fd70c..d2808cde 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -182,7 +182,7 @@ reference: - tactus - nbeats - tatum - - count + - timecount - metlev - syncopation - subtitle: "Lyrics" @@ -214,7 +214,7 @@ reference: desc: "Other useful tools." - contents: - draw - - tally + - tabulation - subtitle: "Information theory" contents: - p diff --git a/docs/404.html b/docs/404.html index d1e190d5..52104016 100644 --- a/docs/404.html +++ b/docs/404.html @@ -25,7 +25,7 @@ Georgia Tech CCMLab humdrumR - 0.7.0.1 + 0.7.0.2

We can now group by beat (and piece, of course). Maybe we want to know the range of notes in each beat:

@@ -405,9 +405,9 @@ 

Group by Beat

Note: If your data includes spine paths, you’ll want to set -mutate(count(Token), expandPaths = TRUE, ...). Count (and -similar functions, like timeline()) won’t work correctly -without paths expanded (?expandPaths).

+mutate(timecount(Token), expandPaths = TRUE, ...). Count +(and similar functions, like timeline()) won’t work +correctly without paths expanded (?expandPaths).

@@ -2911,7 +2911,7 @@

Slurs
beethoven |>
   context('(', ')') |>
   with(length(Token)) |> 
-  tally()
+  count()
 >    Object of class "humdrum.table"
 >    with(context(beethoven, "(", ")"))
 >     2  3  4  7  8 12 13 
@@ -2948,8 +2948,8 @@ 

Slurs > 20: . . > 21: . . > 22: =71 =71 -> 23: *^ . -> 24: . . . +> 23: *^ * +> 24: . . . > 25: . . . > 26: . . . > 27: . . . @@ -2957,8 +2957,8 @@

Slurs > 29: . . . > 30: . . . > 31: . . . -> 32: *v *v . -> 33: =72 =72 +> 32: *v *v * +> 33: =72 =72 > 34: . . > 35: . . > 36: . . @@ -2986,8 +2986,8 @@

Slurs > 58: . 16cc > 59: . 16aJJ) > 60: =75 =75 -> 61: *^ . -> 62: . . . +> 61: *^ * +> 62: . . . > 63: . . . > 64: . . . > 65: . . . @@ -3004,8 +3004,8 @@

Slurs > 76: . . . > 77: . . . > 78: . . . -> 79: *v *v . -> 80: =77 =77 +> 79: *v *v * +> 80: =77 =77 > 81: . . > 82: . . > 83: . . @@ -3091,8 +3091,8 @@

Slurs > 75: .(16eeLL|16ff|16ccJJ) > 76: . . > 77: . . -> 78: *clefF4 . -> 79: . . +> 78: *clefF4 * +> 79: . . > 80: . (16aLL|16b-|16gJJ) > 81: . . > 82: . . @@ -3185,7 +3185,7 @@

Slurs > 75: .(16eeLL|16ff|16ccJJ) > 76: 8r . > 77: . . -> 78: *clefF4 . +> 78: *clefF4 * > 79: 8C 16r > 80: . (16aLL|16b-|16gJJ) > 81: 8r . @@ -3229,8 +3229,8 @@

Nested windows> 14: (2b > 15: 4a)) > 16: ((4e -> 17: . -> 18: 4a +> 17: = +> 18: 4a > 19: 8b > 20: 8cc# > 21: 4dd) @@ -3529,9 +3529,9 @@

Lag within humdrumRpaste() isn’t the only vectorized function we might want to apply to lagged data. Another common example would be -tally():

+count():

chorales |>
-  with(tally(Kern, Kern[lag = -1]))
+  with(count(Kern, Kern[lag = -1]))
 >    Object of class "humdrum.table"
 >        c(lag(Kern, groupby = list(Piece, Spine, Path), n = -1))
 >    Kern  c c# d-  d d# e-  e e#  f f# g-  g g# a-  a a# b-  b <NA>
@@ -3559,7 +3559,7 @@ 

Lag within humdrumRLarger N

For functions that accept unlimited arguments (...), -like paste(), and tally(), you can easily +like paste(), and count(), you can easily extend the principle to create longer n-grams:

chorales |>
   within(paste(Kern, Kern[lag = -1], Kern[lag = -2], sep = '|'))
diff --git a/docs/articles/DataFields.html b/docs/articles/DataFields.html
index 0593a17d..1dbf731b 100644
--- a/docs/articles/DataFields.html
+++ b/docs/articles/DataFields.html
@@ -27,7 +27,7 @@
     Georgia Tech CCMLab
     humdrumR
 
-    0.7.0.0
+    0.7.0.2
 
     
     

The pitch() function creates a new Pitch -field, and selects it; the tally() function is then applied +field, and selects it; the count() function is then applied to the Pitch field!


When a new field is created, it can immediately by piped to a @@ -1199,12 +1199,12 @@

Multiple fieldsOnce we get to have more than one field to work with, it gets garder to use the “humdrum style.” Most humdrum\(_{\mathbb{R}}\) function wills only pipe the first selected field, so it doesn’t matter if you select -multiple fields. However, the tally() function can accept +multiple fields. However, the count() function can accept multiple fields. Now that we’ve created a Pitch and Duration fields, we can do stuff like:

chorales |> 
   select(Pitch, Duration) |>
-  tally() 
+  count() 
 >    Object of class "humdrum.table"
 >          Duration
 >    Pitch  0.0625 0.125 0.1875 0.25 0.375 0.5 0.75   1
diff --git a/docs/articles/Filtering.html b/docs/articles/Filtering.html
index 55cb1f91..9621c859 100644
--- a/docs/articles/Filtering.html
+++ b/docs/articles/Filtering.html
@@ -27,7 +27,7 @@
     Georgia Tech CCMLab
     humdrumR
 
-    0.7.0.0
+    0.7.0.2
 
     
     
## Loading required package: rlang
## Welcome to humdrumℝ!
-##  You are using humdrumℝ version 0.7.0.0
+## You are using humdrumℝ version 0.7.0.2
## 
 ## Attaching package: 'humdrumR'
## The following object is masked from 'package:rlang':
diff --git a/docs/articles/PitchAndTonality.html b/docs/articles/PitchAndTonality.html
index f006e24b..38c72c9f 100644
--- a/docs/articles/PitchAndTonality.html
+++ b/docs/articles/PitchAndTonality.html
@@ -27,7 +27,7 @@
     Georgia Tech CCMLab
     humdrumR
 
-    0.7.0.0
+    0.7.0.2
 
     
     

 chorales |>
   kern(generic = TRUE) |>
-  tally() |>
+  count() |>
   draw()

 
 chorales |>
   kern(simple = TRUE, generic = TRUE) |>
-  tally() |>
+  count() |>
   draw()

@@ -683,14 +683,14 @@

Transpositionchorales |> kern(simple = TRUE, transposeArgs = list(to = 'C:')) |> - tally() |> + count() |> draw()

This looks exactly like calling solfa():

 chorales |>
   solfa(simple = TRUE) |>
-  tally() |>
+  count() |>
   draw()

diff --git a/docs/articles/PitchAndTonality_files/figure-html/unnamed-chunk-16-1.png b/docs/articles/PitchAndTonality_files/figure-html/unnamed-chunk-16-1.png index 22899338c8d44d22c59816eaedef439cb2affdf6..b364bfc38961196bac172e6169f87add2af910a9 100644 GIT binary patch delta 16606 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%0A; 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 G`o92z3P2

>)< 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 K<$v9N^#1@7u3e`9 diff --git a/docs/articles/PitchAndTonality_files/figure-html/unnamed-chunk-17-1.png b/docs/articles/PitchAndTonality_files/figure-html/unnamed-chunk-17-1.png index 6cd4c2fb4d7022d8beb36acab000171dd888bea6..d1ed6ff37b2d6089dbef1f20909b1a49e04e77a2 100644 GIT binary patch delta 11270 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 Da=>k{ delta 11511 zcmZ8{cRXABAGce#SBKH1ilVKkO>5SQ4ob|{Y|YwLs}%&nxz(c7s2DMds-UPutu#gy zHDb0=BNDV$#7eDbjCkVyoXEj zG}BC!h8SBB+VkHvp!g|`0u5%qc@8~da9ft(Fxp6q^beo%51#i^p>LiPcCtQqJRh+s z4RfAdHZ5|lm=#iV{4p*&P=tKc_nK@@vdh6WM6P$ zOrCIm^!F1%l@RqtTHblRe9g)oM4Ew2vdM;C;e1+ZreAWmftjF`ZIBK~=Q6~TQHCBh zGERWvZ}`_U3-4_}!0x%?CnQSWJ-r?+(EY|(6>$#okMLdK{bZ{Q&a1Dn#JYcKd^cFQ zZUflOtq8mp%xl8BOGvNkzC`Z1w^3#AkrJ`R$#UeA;6^=-4t{B35$JP&~i(g_^s%xHOC z?EGg=P*vc-{6ehH6(g1ru?o1J1e!nnCoQu;3 z{+FC6c5>DWEbomi{5+}zO9TaHdF+b4Z5`2)%HB1f*ctl-rTBohm<0u`KQyk9+#!fv z2Fu8#B1gA{TAv$0g71$0mm~6P`$ebQFi5>Au_#ZXV}BB-G{(+PnqLM;StJ`dBk(lp z7%U|Umtud_W8G)8(qSFgN_~y`4ZZXD7ZpUfk}AxIztb>@g7>W$K?+36Lc?Xh?ma3* zo9+ucj29{2Mbx_Vw+XDDP6Ne24$@5mnJrrj6jNHFTA36ubSsBuj6g_eU5zT<#t%vA z19i`!)P7NrLZ(%B(S*U<#sX=GupQEOnHdg&p#01Yq||kd0U@Thm8f%Ftz)Eo+rkdc z1gdka#IVPi3qvXm5Bh3|5cOtG9I&%?@By`97C96xF4pMveWP9Ic5K-Ddm9A9UNwU^ zmeqrNF*)YzSI8Idb7&lmN#b?71icP1AowmH8`hEvzS`bS#0K;EL5F{rQd#)y=aeY5pl8J9R@c)B-HpZ*AORSZnrZ z$V-aH`Pn(XFVO>hB^8e09h8rv$(ybY?A~;;w*=B}JIXQLmh4tTKT;0^K%e@I+bHmF z*cn!(x2)3T)#;+~S>dvMdq1HdW3*4>Oj)W9uo{)M2=cx?JBL5NPmoLtDnvaR%#znC zv7v9|#j5$6ZF}SLu1}}(igQ}&7{Z$A-l$whs5eL)%s=->Zsr_@4QFd;@nN=|c_ZR7 zHSV1|b?~HH&a1Wo9toFC3nXA%Eg7Byijtd@R`v^`?QLH1Z4o4lHMq%D?cKAqJR7M{ zYeATi`4E#L#7Q%skqE}SZu;k&7DPP^N~!-F;p*Q|G8O$?jnPOy#h<>q_v|x#GfvzH ztX&!2igaY5Ca)a9}VNBNPpAuHxur8a|P`G>UFT>uAnlaao(?tnk+86sfvP zL=S}78)n+ogJtw}IG$Xst((UjDyQ1)CO^W-$*D2}Px{3Jx#JSLw$*%8@sh;PB9duW z67a69KMp6s8@Zuwim>$zawuC06c>dDOnQU ziN;gTErFl5w%^p=CLS-f9n_H>yi6A_V75}|8Rs;L8d$^PVH9p{5Cl_MHrU%l;jGb; zNYdR%3O1l>Avg&nYo4>SEI6$B*?v!lWC^Bs^rJm)c8R$|gmxyz-beogr;TJR8z$Sg z1VSbnMmn7BS_0Pwj|>5rjnkH%LY&3;Zlm*b&A>4#*8uzMPr-sN|CIo{0#0o}Tn>-! zYj(@!umT>qJ$9+Ju^>A3Tb9o^TbBjkwy%2_-C6rl&Qv#H52~6Utk#kC%iZ$JS&H7T zaZx&3(M&PF$B$oaT30>pT9}C~WZkL^f)lzV2z__}BX_ryyMD6OcW1LVfepe34G`O$ z%`e_(UmHAay~cg}*Ze;l7$b!K*2MFKut&}a)GK|k))^NM8FpwaU++p;%^EZV`Ce9| z1=s4rCqIb`nyU|`NR-_WY!06iNqU~3i5WC7bTpZif)EB4`c+j`n^)a^xl2a+Ff{u3 zjdURRfol%xrY9yBykGr3qDve?PS8w7oO@ZFS?7}*ZX!E$0i^Sx-~N$K7FoZ{+nA9P z(psR95%igYpM+np`Spg4Z(|WkZESp-O<&%)b9p{3f*q`Lw-1AL_INkZdl>ol;{A0q zh$Lb2^DH(eT5?t? zA&}O7rwn>6E6Sz4f)NzNav*jfoYMD@=$|R;PvefZy2s#emgHD@@9ynnyv8GXceu*& z9Ft#~)$HhtlI0VK zInl{gB1_rFBG73}KlWpR^?}r6Q$&f)V9Q;i`rJ-jZ;Qa+tyghQGsFx8GLA4Sn1X&X z{w8IN(RqVzfQY^>YZH`6i-9ZsM#rG^Mhzf)eqhIDD7>B^d zyT1?6JUl$9Nx52N3Dck<C4K1p$THUvLrL-1>j(C2b~4q;tq+5e%`KT%Q<5kr4No>S1hOYB96s?>B2 zeDDuj&IdXMscZ_`NdXr3BkJ5wM9I+B9e!xMDLyzGLJ;JKny)>cT`8;>pQR&74{!l$ z%z}yKa$aNByrR76;9LXiIob<;9TEsPTjz2B2ekJR~^&zz9?87xGbe6m_}v3+H052{GAdUI=Wp+%Uy<-UA;9Wk)^yA?PIIt!I!V@FeQN zRKuTgc3@Vm77DIy(6fI?mvzWT%*5^@Cy^;xBj|l^YN8;ISAgu|9s>Ty9}@h$_6qkt zr?8!X?v0h`qXApmtO1LY#c zT~g)LS%yATN9-T)IO@Y}SI^chf`4vEYt#3oRp<5BsVBUDwZ#yI$`!z}uD`bX_tO-D zyX(H{Fk^ZAhS-djHRK`AZw$yKHW_^X8h?JVS0PW9CQSghz&BR|Sdq+raYoENHVt48 zvO^KT%Y2LQi<0^hflwsP1Fvoqq@^4Ze;(yvf129Tb7DW855dp+(@EbN7V0N=ogFt= z#81DB8$pf1`#t*fUV}uAb#e0EP4Hi_0?^+_4sUak{fjaO1T}j^wD~C{`h= zfOlF$`L9js|2_V+NYmk6|FXu?bB@-?ZSq0DmeuhHwZ@<5JGK3F!^#^X2A8KP95-3o*Wn?MkN9$4@9R3#G9c=E#~*1fqRgjwoC(=f}WeaBtb;0#?PO$U)KWr|-Mi}4BJG2o7Q z@(!x}AZ}elq)aV|vuhs5AHX}|pSl;XXYd*LIo3GR^oE`lDB)zg7NWj8cWnM+jS7>Z%#$0rq}LCw667%ap|$PChY15d(Gh)sC6o4ugF; z&-7|@Y2hct70bh8nb7_%O3@ZaDKFAb6`R#6d8>4?fxLT4bRJLt`R;j-u>oQ0A4q|c zt}vL82zC)?q=#msY2K$HqDb z1+zRY|Ka%e*OzlV931DW9(&iyO>g_@CH_U9ez?c+A+SQ^5VIEzqkx_ zY@U7n;MN(&1h%fqruOJ6UAX_zYaGZE} zL9~E=DwbTcQJxY^lY^{(!ROOMPaLQI^QEeV8?uMi{X2H+Ih6C~qfrf}@?*FAj%r@yYr ze#Ps8ES*O8Zyp>R-IwPNgZ-s;bo3&B=yZib?&3Pl5hM1=XK&y^YP;n#z#{L9# z6MwsnG4PzDEm9r3e-q)lQErCS3oXm-N2)-G;mZ5l^9kWnj2Jt;?1_nT`qwXd-P}b9oL-o@p$E@Tl&fUTgmv64A|FG-4J0cY3lz3 z-p~>n7~Cvk)P~CFAqt~8;pN$=Ron0HV@NQF$?aV* zOc4*{57v!tcK+f2ILqQ<1!m9leK)y(pB(52@@_(14{W~WsovFfbwo$CW&XEA$3xMn zFpNW9AU|XWt**lTS%{)s<9YG&kio2s5;nlj*tkuY-!S|Ih_JW)BB?{-b&@H?)pKK3 z<^*T%a19g~73TlCB*PLf@4l*jkdP|_N=gk%Hwj1!gGTtxaUPz1YVh*=vO#aQ_r-3l z_t^*FeQ+_N=Y5Hu*c>&qC_2=y1DmnQ;~!FoItxn549aiBtE*M7ta*9%-ZToAc?jDtrIbq~r3Gd6PEF6NFALTIa36T&umopbi=Gz*@)12PY_#)F8oEcN z6Mcb=B?q4QV~a$XM1LUdDa4Ipb-6~-?$n-+jqMr_rcChh(_5X?(9h)Ed*t2`9RJKT zpEX#Hqy!1bu*w7%3`sZ&fZ9vlf-{n61<%atMr|D}e8bJw1F}?*A7}1m@+}?7}EwWhbgD0rxt5`~h_EFa zh@uffTRWiYFo_bHp?`5mT{D;>G4$SWn7$sHa6PSMBk5t<)2{<- ze7(V@ED^E_TT538wM`Vz&sH&Wkwqh^NBS`|kc23B`We}>oCudCGj zG)34A6(^^h*FV3F&LQAP4$e$B*uGad^mQ(9Lon7$*447l7w_)FE-YpeI5PY`AXcuD z{l}RA&h|@WS4YJj8bvQvFUZ_{eyK{C|C2OAH7h;et_>_GhJ4)f&Jy|ss(of9Qfj3` z!uVyq2~m)Si~{`Ul_@WVOhXD$&Lz$V*cR}$#;F3rquNp1Jh#;r>+%V0?-Cdx;>o2v zkCGI~c%fC-d?;kbLnv41cy8_>KIL-l{@X6ZN-#Oa!7-q@!>0l)RDoIUW_$|v@Azzz zl4?Hr?bP*cOpu>J|L%Ua*bTYiSj)V|2I>%%}A>VcyNd~``M zIqKO&dW^8<)L`*Y}C zVs2&peZs>o1&5jngH!_v`S@Y$kx-?Go)I*#a`DoD@;_&1=EoPa3)?C{kP;8YbbRPD zjM~lz^+nj4uGM6gXmjL!HgnlF^uzL=>Wvy)ds@F;Sda9gTIF9%EhiStDbMwehbtsw z?-O;_jwN_NK*0?c$HpTGktwB{1sKO4%y%B!zr)@xBWSDmGNoVEau zw5E!i$(W2=*nO8*5{*msd>YM@;mUkO*lqXH!DpQ@9(UT)r~jbGOxY|Gg!Ip<3bNjf zD(Bb6K5fSJXV55xY#w*X_K+-px%KYDm1>NHZXmS*<; zQq^e23b{2Sq2#{HPgeG-pZ?_MLDv3TVdX~YeHDsG(!k0vsdgKvQN`9R2e8Pkofqu> zY-|ppRs{DM;FflO)b!;|AGnyK%b^~6KQC#kI7$zX{x-|vg^ zXIGyjc?j8Foel`=y?`qzRu|sQAv4D2RR?=?hH;_`ZTWeP?N2MY8yxxDf_D?LprOrM z^|C_E#ncJGY%q|l={20}tK0Q7e$=+$8`x`pZ3XHnDu%&;FWcA#J2m0g%f&;I02?CQ zvUqu5edW8)y3k|0CUiCQ%V}b8MlM$r7u*D465jufP5<5qA8MkXr>;G7>1D9#qd%m0 zUQ@O-K=dDHi&IWgkP~~&2>fuPA?O&|NH_A+UQ-6(*PvYIQoTkKEy*K=H29(`wXbux zWm*YjR7#UYnaF$*8}?)=c$R=m&IGAP7Grq373Q?AY=7;#3X)ce>iXqn82+K)y={Kg zXNj4Cg=ECnv->M#LHWrCISZ^YOZckr0);(GL?z9WUZv3_Nng_{F2Fk=w0x;7jj z8v1*b)f09~+jUh5s~nC8UmWduM2@=bfYq7X315=mk0P~rK^2NF2yOp{oQy_OX+R?k zW*B8k!ujc5?75wzaX!`OUDyoQ#ruF?VE`fCf*PaDji+vw& zr~VEhi<6G5AoMiN7`Vf0tc65MmmL6%eS!-~Louoh*Myiqf#>zktANpG3O_YB(an-m7+WU6A1W(w8% ztnFk|dtPu!KvoOF8K1lPYHbGjtfu-Y3|^+l-f~+#-SOgnXCo@ujjjc*p1z;9LjB=o z!4^Rm3ttFu{QE-hBYyEn*dGyz_8K?~2-E)4@<8CmY6(Xg2?y)Ga0TtJFh74C?z>NLXPs(i^Ma1@UP&-lW z4f*hU>Bz7f@XkxGmnqK7>4gOy!oZJ9OF>-AZ@3NMgVyluCSPlxh}J$reibm-yCQB> zM|wC9mTizd)45oIRwSQiE?Bpp*lA`_jlD?hpQf*QTkB4pO8ST%ut;+-tvLAR zWcw_J5C!r!sVxePH@4;s{s4qup?r^|$4OV5rc0zErcq}cgR$HWn(CAWdet`wRgwN< zy*1+yVGf1u&r7G+d_0GuJK^?oNN2wO>#XqE)SqF}IOSu0m8k3O&-Tuq$2Og-sBCg9 z!9vOb&yhs&!=G?{7h}mk)7Fr;d5nX(DJ9B4~rVnI))DD-wrGf$|0AGX(0*N4t+u(i+IF4ucO z^Ng196{D1&s=ZH)k|$#^%~W)Ay1ZSpKGB-(Bt*FGt*%jzqPH71Z$X|@FexdO>=8JW(*;aJWt{2HS2Kd5af(Jg9#_M5ygZ1;gfGszF5dLy*4qs>C#28wcW#CJ zD;?mpl@{ta*9fx4mAOLwhBNF&!rg$m*Ijz#v__&chlhrF#1+I_UpVGH7nfk5jYHI1 z5a9=DN^0?cV=aiSb)WwGden9Vw={$R4YeU0ivcms>D5N(RYwIITT-FR;?E2a-}2Ht zOAR8EaCb_c)_Lul2Q4Zm^dWRfEPV914o<_h%*8%8MOF|~w<{Jo{7{I+9E+(4@yk)J z(LD1vpYaK~V>V!GOK8t=dHKd|`8>+Ey4imv(}04kxkUz3g#=HV%JYr3Ue{r`kBA9eY6r6^M@tyKZIh zKY8LKym*~)`gmt|`_1(@kIeL?i;&~c{ma~YNb=dZiHN`ryrnwo9I?*A@DumJmdyx- zp#z!forBNkLMHvczwSRfXe1M|Aza@FHEv5H1=U@}1QKzhJX97Ow9Fl*HCF^TFWRRYAk` z6W_ZV8|yh~ZyoRlB^nu+U_N@PuO*4`exoOM+{t#5a$Y*XUsl?F#6|<>J!~F6*h?;c z^IxmVBrdJoRKb!8Ou_TMA`(v?e(zQw+di13|uf)vGF z|6z5kehF()KGaVE%R)Q>R)siH_Z#(X1c zHZqVsG(T(7{$hJ^(udpiF6>}-7@L}ur$j!9>i^Yj&;XN0`4qo#m43-CJWr9LsQ{ue z!kuUhtkm&aM`maRGC2=|!bTkhv_N_2nzDfHw zzZR4h=y;mU-+0Z*IV`VN?7DtPEMYeF#79lm8?dxxb{z50A__aicHlyvMt9j?1E!?v z5v`eEYnTzZ3w5&VZoQ5u2D6ufVv6awi1Gv(IYc$jdKp{zM)fDny|!oN_x?U~hW~T> zH~-3>JTI1eL)poG_(BisqN>F0ljiY_kv8js2+&5xT+!77U#YH(s|@fgW4efCNwju( z5aifYKdt58>IXdEg%ZB-^0oce@o%t0nAE@bh4^e&9;|Gs8sH@H$VnJ2Q`d%~P`NYp zalrKccOD}U`i+&$D8FZjzD1#&;TFHWl2zI5jwKmbSAUd4`od>46{#2#RC&%q&cekZ zfUCTkUp7Qr3tO&mtl1RN_c4skyWE^`-wIT4VZ%Tduqaz9tvbjkBV1bZW$!$+0#&)t zrR^Uw?3CWlSEn>q`0OMD4YXj)+ZWA%z2~6zr-}6M^qh4qTipq0LgB!N$#hmMNWzYC9Z#PPdpW42-W;@cfID|l_gVM}GMlo~slR6Q^BfBpkQwS?hV$G^1_L3${^*8Q1 zq1RQ5YP_SrQ#>=VwREYr>&kOcn0FcA?qxiFmB!OPOtK2`C&%?|iqZNlDSPUkzltC+ z0Hki%ii*yTvKztg-nRdIO(T6KNe?b&1dosXen8QBPeEtyJxBksAR~+`?vQcssMpg( z;EZhlE7`SYtCJfaw<#l{vL+)Oh{;h2nGL%wFum8JK9~ahpds}?W|0Zp#!d2C87TTW zN^A%Z<;F?e-lendB9Q8Jk)85yi>-EfW*hDjBMWH(Y+n#LakW?rX4;#Ome*x==&@q9 z7tJpmXFa*~d)q{`yo}_v`8gYA8neE{!oTVJPfzG^DY6}&z7h0F;y++(B37cq5?Vbj z1aovcPY!E<_yg>Asvbi_O?O}rVUUD`-!t0i`Ngd?WMxi)5XpU8N~h)5)9|pq*8u$! zGX{U&cFCJavo?{$NqLl6Ddsh~{4mLNnP z5mG|^97#mw_C>3k3Ry?(&3gD9t+_P78c3>iBm)m8DU84P_Ja}o4~UkC+k|}NvYB!- zoNbuAT%WJc{FU%sh(A-cE>ga5_WC?Sqj)}dSrhByxRV2a8vf9dJXas$M}3o`e&oalXyu z51Y}cb2l}VU2bpFtNQCQB!Tiqs7BK#%=CY~GrD8{k-bxWbkDUegGXsX0Wxwu+?SNV zzt5(tBTl*-^7E~Zh;u8oghSJV2lkfh#6W+c#|EWbx$WD*N0h0Y^JIhSP&lnji8b8c zqRA#5)PH1_*!%oHt78hd1duBGY>v7=K0m*6s|mlTwaTIcS9P>#l=_(+yM^m%N*o-s zLgMUkeskcnyHcd1(G;TK78MQ3Fn5l`qDMP9% z_d-_n6v7-Vh|+>dkYat^{^r$Zv&KZ|Hrr71FIcFUQ9FD%H`k$6d~?7Tjk)1WJdQXQ z+X}$8Et_&xWrDEAL-qv}?d?5C`F!$#KsO*qrQzeC240y>6u&%uHLu0qZ9e_|lw><( zE|%Nm>tQ1shg9@&JdLS{xJL|gc@P0Kq53uWesgr-H2#E{nyUE6dnf_B*L&@&a{yaJ z^cM{89eWodfh}u8*|L!w*fJ_F$d{ISO(toZjr(FmRYbuhNXgIl?A4Zk?|$iDyx`Sx zC5UJ1?vA~j(*MqUxTNCHIGyXf@kHW`IRw!+(E-E2MIGO4wHyG4!A_L{vnI&i7#I>M{U=7pptEw#pvWtCx4 zYzO`V@1e5z_wB1;>wUv@KI8C1yU|-x(HSo}b^Win94{fy#DrDe#RC9`(VrsS84?&oKtQ?>9Y-_-WC%)0C@N9|1ZkmvRYn~PAPGgf zN&+GTq=XnkwSb{Y3nhf!LkKNED9KBh_y4c^-nw_ayVhIlvS2M%&N=&>v(Mi9^V$2H zq)#76ojmY<{db`D+nam1!+wb4y0T5Mi){}N+r$#hsx}k~AKMj~J*~=#EcUU9+V07< zFY^D=y7CY4p#lBy!F&?plIp!T#zD02T~8BkAN@z>@S$JzD*8Ezpp%!52BqKevKis@ zqw32yT~TJNo%1`XytWLlLt;^$!v{yOt6xAq@uVEG!;#)5AT@4w|C=VvplWR))SMPhXO!cd`Z9h_zX0wnNb8ORSkT zAleN&ncE~s+_B3@q$kmTacOVr>>a8$lHEf?BeD3@-Nc?!BrkjA-4T(bvB0xAZsn77H`WuJI2#r=+t3&vlUA>4Oy`v7R?pyB=)Hby?;#zCXjH@a*uBFwwA8*Dr>fNv(59+W z*sGZXq81}(c8|Ioy(9bXRJc_gfBH~Q9YB*vkWKU#HUmPX2W*&(DY_2y+b#Ses1E2T zmfqKV=ma-d+|^m0XliIk6;QO~MuQI=63J7L+Awi6i|y$dc`?pF}bS| z%4lKEmLkp83^zkfMLoqH7uEh4&QVlYwAK`G=$Wn8cx~?(8=(_Dsgj!3G*cYD7g*&- ziHk>Vh9dtRkS81vl_(bl#d>1z6xZZ~LIG95MUJ%K6io#hsj6sf@&Urww*sT##TyOC z?no#WKf@_FqdfG!9=EBfG?F!ChSZ=00%UQK#6Y9LqI=}jCJ7w=T+3(z@(7{$Di&K4 zI9&C^elu`#p!IkSHw&Z=-b`>f;O-vEO!c3wSs79lH8+gkw5c+LMU+h~A#k4(=LHs?SBj`yxU z&=gEPo2;@HjlK7&!8Iq2{1X6%5+ht(D*KCoT)ZkFzvfqHcgxc~rjn>r!}y)jKZa(! zo$9y?oy9w=#cs?|T7Tz~KpGqohCP>I<0ro_%S^Zq4peZivVob3I@8>8)k}piCSdA2GXaycdjuZ-hi!w`>pU z&FafjSWkGcJ!x=Z6jI{fwG^Y!;=65FMqPctQX8*uTCZ@vgvOO_o3D?FX~|UHxw|%_ zXJ0%}S#fu?W(o_%$xFMvubVQ1MvNSj)JNw8eQN)-Qzk8vCH9z5D;18r(^8%Zq?Kms zp>Dxt)S%WKu!Y%3wM0*57JmmGgoN?}5JZICH5;0?YGT$3{$U-V#=S-I5@%4r+?Qgs zyJ**t39<_~x!pUI=C)jXP7Xj~C8|)7p1wIwcDV8)J;P));rZS|vIjXj!fkfnB8-OF zT;p&uX2>gmf^GpMi?&g;Vt==~DkP!g3^>?k@8Ro;zp48Z?0DrmEC<+OGdzmy!A>{C z#i>iVyIbn*LtBFuLC!^8-pL5%ci>U}Esk{mzUhISs_HBDt@Hip0nSFt)8l#2Ix2Vn zlZFG8ZUx@^a$m(9uG#-b(GqCb*Y3C1|NY7T@`LIjmxez>Hee^RzUjm3Ura4-?=8_j zeR^idd50ct*tJQ$Gp?19Ms%XAA2(&h2IILi*wv??0yRn=-j!LglAK6%-5XC@8Qh<6 z>@T%3MK3!qpgl7u$s~E|rP;h27KRN%X>#AGk@~8An|JcLow>GG7Br!<>a-}N`lw}L zT;cS)=ETV57N5Nex4`~)@_>;Pb$@dT6NhUiy%!n?^;yX%+;Hw4J1h>$F<*f0$5jR{OhXi397ap)o^#EadbmT?7HOy9 zb*FK7^ObZ16yFpVLE>hXdlr~f#*US7W3&q;ky4$GE&->QtsMq>T^;bz?aG+0@ zU}z26j_>M&I;XYVdTrDF2pDqW0B7qhY3eh!2HpNGLYuNyk<0vWCC<`V8-PYC`|mN7 zLbOSA4czmrVEE>@YfB&;&U-B-6Vd}X36+rO0bdW9YI(b2c% z@($ThB=v&Y`v+to-d9c@JKT3QfLMsO)O4U{T!F9gN8)iyY*S!-#b#YmQ%wyDt)mpN zC8f1TvhD<1=A@rl9S~`~;jq^cv^-H3v04Q}Gsc&SwmmhsQs4{vgs3$&Y#S6?rc2K} z2gg3nyQ zWr~?tg2Ub6F7$*&%I!PO&556vmEQUC{=hzee$8A5iWn3Ht9M>YzF(iqma?x|qOm); z%l4dqm!>vm_Gcf~9e1Z#zg!2pgb1Cy1U1N?df<}nhFSkd(#ubAw^O|6nh<})#6Ce!>_WDbjnK3!n$|*Nm`@Gt-FzXv}+uJf(nTQcA zwhv|RiecR!JtV?Eu~*D}*IFrV9Gx>e4UvnUNU%2pLtB2xlv$V5+Ooyoxzu0(lSum@ zoKkj(Qz4I$b$0b@uakuN3pnR3A;-~|@*Ax(W3^-aHCXU|PoW4x-n!Bwu1$U4=Sy4+ zFj&eoct7T%PmHo_ZA;$X?j1H9a?$Dtdwq5vf6v}^YBar;K>MVYYVT6V#@=a3O$}mK z?O0qJ3Tdn2e=^jp%^y7N)t8Zo?{!e6i!Sk4st#z3mW@M!L z^rX;=v8%LmK^HA~+15B^2rH*ko5$~H+V_KFiN|Xur#g=3)kr3v+u=#94I8eN<3%-yn;ma<{x#ter)-(Q5Psz!KoS1)iM1{kaNt5P7e ze2^OF9mh#;R?$U1^afmM(f7^}TO-xHk~F^{^mmA(WnHqx<|;^gI9EqBeZyyuBb=?@ zdpz3#FL;S{`%?=}o|l>vm3qL;rQJ}KU>LtU6n4=cdnep`-X9#{X6^b-7>L$3z5ZSN z-5-SEhX{bxQm0~2k2<1g*|~d*O$BpqzC;IAS>sv!((CLE?{ko3P<(Ieru)Bx?i*kJ zWaLy4G>@usMs6p^bjoJ|i{2W|y?4ADkncR*p;90}^PP7{-%|99pPHMQ)tdpQ}=vu)I_AP zdzUirktH)o6m_VtIu0{haqSwmugFH8k*2fbw(m57zaJA$q>*XpM}c<^-^i8Kb7f>F z3(2C|GsKRrXLQlO^XLm*>jSDUUK%|35-S0Og_aC=sTgD>feNQ{H$(s3X4wznjJ(vT zT4-dx+g4w?DeElV&m{+>PE1^CJ}Fx5&4a?Zpf)y}RGeQxUl3PxYPB&)H^GBoyH+H; zJhHuo6~O$jbL#6`I;i^8OOkKFvE_A*9m7;Es6*k`25MfRfxyN@EJ(hZ?-3rpG6Qnj zqkMs6n1>HOB-*1qFha6XdH)FKoewh;;hEptUocbGwG?z0TkVhA(cRz9%MZn4ifYYM zVyfhMyBo>9$pb>&y*--olHaQ7fLrz&GCY!uO zltk{n6)(-ALw1f}h}A2P#S0=u0$ybUhim*p=xq^K)Qn3~Bm0)EVWopOKFQVrJl$Ag zkFxo+5pBR{37gzh?UU9y#7ueHIMmL(1h^*Efs*e}F6QuO15=bJwWyy20&gYQC$c>(ALsFYnVW~}fOdfN3!cXSM{aAV|?Rbs9 zZgfvKDuWngPvl*-jPbytEd6(5eR-C7w)v8!&a3q7cxv#Mg8G+B^d8tnb>&i$Yf`dJ zev$;dh2xj8yXCYQ9ZTE97)Xh9^)kG8%sNPI5|Jk163s2QtB(iBU7 zpN0p9BLs_+LoOtAvO|LPs2MGV8)IyJ3Cbi)1UDKRD81 z`#%FcY0q1t4i}=n4>$cB5x16T9b{!)_hFy$a((>0qfMbgzAH}Jj~1^q57#KZNk|27 zI6P=n2tVWFUovri*JygU%S!v{|I4vx8shOj#HoNIw$!W5v!*`F>d_4xO0ThQ_8KIS zEDY<(U31%iQdzI|N!OZh&%jh!@jD+7R@$L?()DCP@51}G`P#vHHrL_+A5Som~D*H>HLb1F4-wts7-iIFX@WY z?|0PGX3G(o;wW<|m&C;NSTa*Ta5*_l#`g4Sx|rB0G3cKcuQ%ivlYz$ICOIxkeL4>n zfLP6>E*OT6bvI+Xsh-mj?RS#y$%r(hdKPFJ{Z+`AZ?&cXkuxRRZ7)}bmhkJU6t@ri z`Pi}Cd*n;Qq=lx(SU)S;5voc3(%did9apivtDWK%`&q~i9=y^Ha(AJKT(ve&&!%{?Yw79QQS?IP~RwTw1M& zrdq8|VpmHt=(U9&o|dk;89NqHEzhIO>!)_uCHvJ5qh;aoc`v|bvf&n)^$tjGdGfB6 zWq?hKnt>u^{?aI-Zg)j!xk=+&z}ck?ww9P!7=g3onOhmL9=$V#E4{ zj;dg??dcM^qTXpTyM)V)pc^XHa9E$%CE`PbBIXgX2D`ay?>aSZ{*i8ecJsM?^$9T7 z16nN~-_*)+UYXafBA*tUJKJsnEeh+0%dxeN4AG?9gg)@Iwc>~Mc_NUE26M~syFO6X zNPGKsdszPwu?t>Dmk)|HT)b{M3F$+~lV-jM^PT_{#!O5s!~iyMKy2*PJCZ&asynnt zG)NQnJbd$r_IsF}moPu>uF>^zNlwm#uMvjca+K@ltL3r1Vg1dYb^ULST(F+p#5%v6 zYV3{17a0e&dlxZ*6rCh4SKEkuj+JQ_Y>OSimcPm8cIa!AQVC3w&dR!ETc$(z)^+R> zNS&!7eNFM@s4&~i(-~8!QTSezs)S%FR`Qc;boC)roEF4cNG8?AYtO1y)~(4Xjn2vL zv3pJG^K)>?=(OI=QPOIJGV}y*R8joT(Xo#-0*MC@3#V_W8&~z7LHCuBrAiSS9CnGM z)H#jt``H;Lf%BPmau`tPSz46u0=mGKPwWla>%GrIdt+j(&h%(GFN^EPXJWJLP%%+h z2$aUlBkqod^*4Ri52f!4T;;eMpjrG>B5t)Q!z3d)v%occofHJl_!B(jB>ko78+LRTb+rin1R$MN2}A6OPnYn zT{a~Dn2{9wwb>;ES9&zS=AqRcJ8`YOoA46vb8q&89?r4ILY$fbviqIG3SiEjO7b3yc-om|;`$ul2H@`YtEJ$iA? zk}115=}8_su(8#$NXuqnyKHEeM}2Hw8-Qf2H@3PC_>uywgBT*V_^nBI{9eTanQ&}( z3xm81Fg`>#pTca>zd(Lo(#=7*b1^u4eqF#$pdnPZn^dfMS!X;2D@ecNC)AMOPIJ|4 zPB+(3STWB_Q(XTj)?`cM4hx~6dTEKx$vsy{ISutKoF(OHsaBPaM(+)cXO`>~sqMA> zwN?fyjJI$@{^)*NV;V!2#^CO-3KQ#6fhpcTd1b5rBqcRFb|mag-FbC)3~~E$6vO3* z$M>;BQl~Heux`KfvHci#%d~9!=e1TM(psn%Uk z|$!s51T(Yk7AOmvc*`0yKxpq;x=i=4_x8L1bdB#0ZXH3<6v?f#{lL!zFPl9|?n zYME|+3BFc8=@zgRKrK38^mC3OY8Zbz`ooYF@^5JKjG2URs>Dt;+NU1=7^~c_%|Pev@Rd0ocgqkm#{XE0jR876H)l6wI@(HV)AjuV=C=UlcRrI0P>bq zI3YF7-*}H~er??o1k?#3W`h(5Bsn>9X zOjXscQ(qLehQbWh)v?-Mq4k@a^BT!u?q-3@hcV+qBA9qC0hMgZM-h3zbt=pKb~S1` z6l1OUQZSQTvlHcRvtvJ63=`CJc@O7i0IkDCU~)#($CL3!hurGM_#79I;Ibi zn>5Tv7ETW(hdBUWKi|kT<9=kIi=38UTeRotbITFIPL_52$)++v1+%a5zNZk}>`;$V z>s}kQfJrm_l+pwNAQ=*Z3lX-5 z*s5P{XgW~lIo-XP+&fR2nt`_25IB6l_1f7o*Behf>0Z9;WdvsI7M<9BaZ?1|0pf(x!R{baF2Ol93UNLM>hv7F}YZ zjuuQ#-20t4Q)F3)_V3-!$cPNZ&O>?1nF-Om!vJz+#hP6rEp@IQBBT{BZ*G4la}CfU zCO!7mER|D21hEs?opQVJBQ)Y;C0L6Zz1VqmA*}a%vFFkn;X)Rqn$cz5tmczy!Sce; z&r`Ucaz}%RBjG<69Tbxi`?p6q!-AmgL!D_hD)y=f^^-MzcqjMs$H zgy7|a7p@!=@(VE`OrZni8@~{40D6Topy?@)bnlb|n5*3{4Ctw0GT$eSzXGiOM0rVP ztu-v(ml$$se%*BUfS8ob{+$VHW)75 z3}Vf!182acme{V5GWXoNEqe11V(wy9(PTM9YSz6vEI=U4xf4Kz^Cs*{4~@G1rHrBZ z`w@CTp|B1L-J6-40q7431U*EEH^zF${SBm!HQTm3jc9S>aKbD#)3PEzeVfJMrKG}$ zkjV8em#`9^t>uzsdm4&XuC8a#gr6Xgik3#R4VP;y{9}At&-1nl4T~e$IdpFJvrb4| zQ2`~ERfDmi-0Gv)oSrRQV8+`;6)4!A&{krkl|9dWvH{dpn3Z;|M8ub5G5{~%{JyF3 zo&ZPE9j};8yz~Xrb3-m-V$Tc2J*A!BhbxUTY=xbZ9QVE{kdk)(i7YJrX0^@X>=)oAsIJX(84CrF|mDUHT68?t2 zjACM+_Rrb%Q`Jhls=**_nm|c-Us|zdyzxrBY&aR zj7?GUK6irh`nKyC0c1Ju;*x!ELD80lynH>i$hb-&8E^${u*!KbNm;2>E6ju?{3+6)+$3 zCjm3s70e=4Ek&L&8RcUPoo z1JQen>1lL0UzKKP>AVKnGRjNXvZ+J%_%A9&hqi&e(mlezapUJ;qq`<%@aOv{t%@>HSiqc-^96}EQs z!$a&|d32pQO^00)*AX}re+j4vxF*mB^SGcZsgYByxafC4yGPfp8jga|v3dQW8wiJZ z`sxO#naJ2`Xai|%5~Ld%XB2A0tQ3fJz0FD%Mq4pFQg}6q9r~SfKJaqriRL3l=TdUB z^hlN84LN@Q-tO3>ex#5-m0Hteu=sPx`ijyRF)4!s+G58neDphp*XrE0MUxiw zSg_9~Ig`Lag{RfR2M0h<(XQXl=>uV&f7Du_ctx6mnR2vadf z0nXf3MnEd!L_qB}#=|yj+e5{MAc`ZVzEgGtTi2Y7_W6Yj6AxhiDZnTj#mr;@kr;Ml zDBR5z)&W~}^yP!qbB(w%k5f5*e6{QFY>kS$!(McfF@%r0!aP9{Z&S-;va1&9 zQ5%~l1JLM%R{nWT&Oj&3%Z!}RCxBxqQHaTnjWr(Cq1gy(;Cvp{a@8i5fOk#KkO9p@ zY5qQaMSu-+V2@UQ`^%hN-|qE|X(tv!Xe?BMXKUO82Mef4P64s8-EFz^_BSN~2z#-QIHu~}3|c>|gSb6Mbs zS#`tV-AzVEsiTaRpZW6K_Cu1bTV{sa)pDRLd7IKzww;s9Yty9eUjAa^YRI*=3;4j( z#!lUbX>C#L9VQJ??H*v`nAW=FdX!Sv?ilTv!)`c`(8oVt^_WU`oVOl~%$s>{9@-XD zv6Cn)KCEV#)PrVKg|`Ms%a$wG=FPZ|%*>SM>dcj!S!cg==M9`!;o( z-<&v5d5b;lR5~y?5E{Jg=CCmLD5FN3_C-Gefz9)!wI#1!A#`n#LxVl*iln5LCS)EE zgpoSpo!iL-lBI98U5^Vq4A{{0Mw0DZU1bPmu^VlWR!7AWLX8eh7MftSx+{E~gUd{e z-ZPcS1$L|M6U(|LQLC9yGYGE`{UsnEQ%|4ivx{%4{yiR~Jyb5iRmLE9w0iNyndc)z z)u+3AL&$Q|6N;ah!VcVEPyS}fIZi2o57kUhpLz>Y%byZJ0U=(wF$IJj&rM}=rn~M- zA*6O}=fM{s0Za=t){bgvf$0WH6URrC()J=o{Pj$9eY&fS^+r?5Oq{WXi$3v;{`Z2; zQ8P%>CyAX%dOI7~^v1X#efKJQYtGQ_LK7_8pTS$2`)!nJStGnS8^(=x8xKgX_TX9c zOc$#j=oa+hhhI)XK*svWg!$(nj`wpCKSucK;WAQr_HJ2eaB6aHjd?S|<8gaHgtKpY zEnj#si>UWu%D~#yEQ1L z!~7!O_S}G4-c3#J(=vNjgimT6yk!?ZTn)ZXRDP@H8G?p{33ajw<~<`C3e0Fgz_}KR zuoM2w85;ctdRmi}sN`ah^ZJ`s%61LcEuB=Hy4r*Yw$7VL^OZF%NN$2*fAVK@+e(&Z zy8SO*6STcU8#E!j40?d@YuHXSwVuBFhhF@wA2q~ZtG<@Vjv{xMfRT_xu%cLhH%k{t zfj|+=>(dNQaWmc9ew~R~tXR^}gIu@c_oqHsC1JNU)I)vqY&)!18Nz$*8JS4Sy6Q{_ z$JB$pm|g*AF))5}k?U_IZ5C>!n*%e=%(QmaY8d$#zx7-Ix0+f@yqkG9mcO)dvLCM? zn7iv{-JbgD{R{`?9&XD-DDuxST zX|?v&Z%9)Ny)z8~Nzvr=jB0`FGXQvj0alnRb3lVHHDAvN{RKvw(k!|O41F+D-keUnsB6tQ#m-DtG4F+%N7jkeC%> zqJRH13R;3RECAjokd`!y91{Id;WsxLju0zHUVzjoE8?|~nqu_I@(jRkreEf*Z)Ej+s>W|M4gNpXAZ0H)&yu%WpnvMu}w} zHkbixUudu=x1pAwJ@1Rj-OHnT{7S|Lgu;9WM{QDC0Wx!TIBI*2vRR$j5tA@_oce0E zHuo3^;mY3JkqJTz{0cKq0(n!oPYa zeBQ9Y5DI-H-4;DiS@6BaBo2+Kzq_|HCv-C+kfau zUA!rCW^riudfCQ0i5LIc?-?llHz0p_3^sUX`N--pIe$y3*6A8^ckK493!5VkU1+60 zX-{Ig=}RrjY*N2h?cEzSSNRQFkJ?Mus|)}EFZs&!OkKL$)Lu2T zn;J~;i-|_xsZ5r~sWMYfULE{hXAFo`8A)+=Bu&OF$2EW8K-2_5H_B?N)I$83DZc*O zGU+kS_qFurQ5-)wck*sc|LPCku))oiPeaax9i&cH9hwVuJrrB^qB|c*~2nYp7y!nflG-l*Zzsq z)2o-AuifjC?dGvpZZyt(B;TWqqg zTVyq5Lm>fS* zJU^1@3sZP;9bK}SW(SbvRwkC>;$AtC*Fe@=i-k~Q&rjb=aQ|En8E*^b4gDgHw1(h9 zQbFwD>UBpS);|&gg)IH$XGtTbQSAwFg&Us}r>YU~y`|=3YB1VtvoHU!v&7Su<^bLb z<3?Eg50gsf=!<_1bO_A0HZIai6SH%7T_rXDlu0UbyvBR*4iEgH{(c+MwsDr++7LII zaJ?gLOg%V_qL`X`=eLP{eVZ6I#VD4}>=93PbgA2R8T-EGB&UOpjCB2?UKM^z-9zkV z`HMIivHV|ym3QAv{n*+PY)~0+(s%Jlla;jcP?bcBv3*}{;h{K2$&V*gRv+y)Aqn)W zZe@NKy*C{BzW}YHjK)V0WuHK!<*}GJ#;uLnJhowdVm224PqtHWTiYS-X4+7PPW;g0 zyiFMRu0yKrkdf^Ql3>2nsl4_f==2R0*WV<&{2yjjELB7L=ppUlL0?kcPbWCtl$FnN zlKH@mckE!3K8Dr4@tCbrY+;J8`901*1}n5)$1>pG&Ww8{)oGB+HgvaH?h2_YNm9Bl4|oO@-!vEW@wLnHRSJ{y!*VH zyZkWD$eUx6mg+hCx z=RQ;xtSUYPW~Qe|&o-`XeE1K|hR$>k9e-F>lH`?8eWXAppY-8Ky%kB#LhupS+3NK= z*Ljg0v$m14`*y?8g8fNHWLO%_-u_u{w=@e9F)?!!$IeVDpS8nHdA+Rs8vIPI{dB1E zC82^uHpgHLg*-_&JEQ*F;DR6E8TwAMtgF2)7a(@}DWt;6Z`<8%JD6xOd|t3~+%)>c z-YJP%1oTXMA95gts_15!?dv9Cu{yL04j!$#I#|E{)a}FcG(z^plTh%XR_pI8Lw3s7 zrY~x_JldJXWS``fRIx~13)FPR>-oPY1+NoN*j!>n31+;Wnl-hA)l+*Cv)`3SH_wtFdo4qLB;YtEFYWmO7QKKsb3`64y_Lm{fh1yQI95 znP+up-ut1;__y>2zfcw|_HbVJt-WJ~Z$|+kJNxWHvhvu?AIgNh@I^)b_Vtl=I**A3 zEa9-&`z3cJmu7};WQY4W_g4%qe6&a}O}!p&wXPdnuRWwZnCXk=KP6XQ=cerl6<9cN zY1{Ps>u&IDX!VJo{#-D>b#eJN1#pddGygIuK`-gYLprJvHNmZuTBxC`!V2jxN1=f5 z;=0~MK-cMt(_2zT;YakwU!$;v#pzReDtcZ&6(akb`}(F*HP48JbuWI+@rq<*YL7C* zR^E)zpLJT14PDZIU^`9Mjn>}qiru-zMa_*|hxsR|^7&21CVL&W)GkRhz(<;jv{ zU9q!H3I7NJ4>i~}N271)oKgN>z6to<#g-YDzNe?s(s}QkhB4uyro^QvW*fM0L`J(r z9yM;H=O*W=qIc$dDyaSLrhq}cJy;meBJb9P$B*?jLRCC9e<5Roa7&D1&y7_=e~Tad zSD&^*eI6sz_9QOV)th?`N4RX5V z*&hX+#MbEtyWH>vi{Az(!Df00-c_UE@z-}{cL0_DWZK*O{dW%gnPUkpMy(^OfSuR* zo$Oob-1E1rZ3G?1TeT7nH)?~9oH(3V^Q}8*Tb;=imjX(Yn6`6AJ3ZZ;&rVzj^p`Di zJN<;}oBnD`@kX^-*G!4_RM=~My&aZd+(r8Q^5gMoxc`$lxqdM;cM@EG(-sb26*^A8 z*T*qen!{IaLE*-qI1?PrGSOC|IZMcR3L;|vZoIVP;zLrMMf}XNjJ?v0QN2BC_XWfu z&ADZG0b$UL@fkA5l@jvl0SWm`>ujpqTp$^LL{&4A;_h>)Q2mdC5x195|FWHWI_B>u zzx;76~dg}RoGC^V&5l16rN0}gZ6IpmAIjK?5%To$^zT6GnZl>s z5zq-2nsRzb0f-WES>z(0THD+hJt%kyx-Ed4knnX`m*ib6N*dk)gp3vBqu|w@@Y|o8 z&jm+#dYy+@pOK(-z{WDuwEj0?5`V z7Vgl{soD^~KpGfEHULceQnzNlRl@^P{3#1>c2qFOk%xsXXjHXk{k`P#z50*ae=5Jp z91H6$)uz)!kZWM9((h|33C}3?h=CmW#R!{Q42Rk^AU2H?XU)SnBu8aEjLH)@<@;l& zX2_dWswbqik7c-|j|zO|4;A*Q#6)m!{Mb#j*4VK(*o&aB-&Xxg?1JPWIgr0RR*==R ztET=V!f5t<99<_m(e=f)OYd&JCRt7r$T2I$*O9kxjJAL!p7j+mlzBFB+P`gh-_iq^ zIUfv|so{BK;(W*WEX}bgstu9C?u;&QR9>&r&hfa~^c0P@xi)10$=|z0?Oj z>dkarC@7dVgz?p|$<;L;p}Pf4ZA*BK#$dKDZ1=BjHIHrS`N8x}fPl<&cv!BMmv7}g zKJP;ooaVuySf0wtqb7lVjpWM69;Pyz z3jaJ@io<^kajPcsDs<6T(LIK6Vk|P+r4yojdJ%Pp?t9;SQBzY{!^zWoduh!z5x#q`^c?*$imvBR`mEpX}Fz$QC zsEr;htj)(R$**vcuDUc0v)P)Gr7#a&2iUtbmaiVwr0A~`Q%z4a<=?r!?)HCj$fttS z?;#b-{UDiG=YFx_e+Y~VSB-%y5~bpAszCxIcJbrh#V%)oh~3dXi`ZShmGB-yFpZ5( z78KxyLv4N@sz|!fNvX6iha^>A>CTlB96f3Z;YoXL-{w!x2k_CJ<2_Cf>%$zpZUwek z3H0buV{l}JYLugV6JwONW= zhx4Z?TEMAIr;tZywpPD6SziRL=|QnYC76IPD5W{F|B&?V#b01kZbDAs8EX)|VOv}@ zD}gOZ0^v?jSW1+=7PIJ)gHgkHwB^(E%2t=z{*U)M9QWWp!#8016XfeFwMoj*NK5Q+ z?|)7YV4vL`4FF1z!!eWhW4gZR5)0?_Zv3p>b#^=Pv1bY+6bnIkyDyQZx>LVxxY@qN z2{Sm;ZtFW0_V%Y!Run2yDXh~_j^XA``HujxnDb)&((&&w)1&{myx3j;oqDn>q~=6# z#%3{dSY@q`mlmw|dXIHg@5W>{O`iF&6~xB<=WA#!{xNW=hm*`z)S^1HNGqh%+rLU> zeH%!RE*z+{IBM}=6!CM7V~aAW@=ttAC&iJun+A^27OYZsXEpLin2_MJh)qBA&cvsj zGj9pu#e}NfmOcM!lcOD72lcd_SsYoPgBSLLg^uuhbUiQqN6mlcSjKi=s=rXqfkj?~ z|2~KUutdY2(Z%+TbY+fZn6f=4<)fq5YSr`d=1fLfa;tI`BsVUU3L{g*y}p>>90oVo zhg3+vjto|)=)H(Zv=U5pqd^{EGwmKjl^^-PkEGNX=aMVmG?u~#ggv_&1diQg5Ft4C zOI0=NozR$^E_r#Kao+LHg&{%e-|ywG01Dc%f|&v^>qT-33Mwr2jE;0E(I#DJobMVh zSe3|wLs@?*L(tvXo{eA$`3W`s5*YpSK}EuU`#LtEkD2|1u-!=>&f}RTKU-mHG2LHl z`8xLpM+Dd>nZ1n;XuPXf@F3jjeVwTy%gWXJg!7x>vClB<$LMRcD8M?*r$!^)dvUm~ z{;%1;;nQ?kN8VM5$J;R1aY3XZe76qbtIu)+nY zUv^%(AekmT>L7&e|3Ym8W~VK50cD-_uCZ}CFtlu9-+K*i#|po(n-EgVZZ-E-@=M0g z-P7+F{a~!$=l|}=dTSQ}?XgC=HD_}gB>_yx8`SIevD2*zt3KCX-F^%5kSnja=2$@j zo@V}?*AU)8iAH4DeBcp<%*suUSd0nzvs)a#7t{wu9Oqb$ILC(_x)K)>wMJ&{>8Y|2 z;jycqZ`TiKh0%GM0Qt3sd9acAVJk)MDE8}9lg3BM9+OR6VxBM`0B)`R| zladI1KuLmaQ&w64RK&^`Hdf$ zY|dJ#c|SRb_Oa04*8i1Tf>I3e32b`dtEY-Xyo=lg!fB&fVP(p2r+XWv?_ z<-Df5kEDP1=HiFDyTl_2TCxCHTiwv2Jb1j=v8(sCNPC4pXDhY+ zV+Kvz`<3ix(q{4T?YYiF*|{V6EHLCU)~eC1&28sv&J*6bhNNbfc0iSOW{aA1!b?-6 zu_OB$^Hq&7kl!mhC7*LbRJ^@TF0dC(%UbIAQ+#nsSno|NsMc)gdW8)R7$3^Xh0&AT zq8Cq6MnUtp*1qZqLv+L|AT8uE-VVf0ekjvqq8#zIMfrfyn=kScGMR-jmB9s~gy6X2 z9Z4~<-^H$gPdI%FSqp0Jel&Og6_aUxr#nKo)}iD=cZI6IPJg0I+fzte+aG1)hYp_f d9TJG|dcXc>wt}D`dSeZ}eC^MYKW;wwzX0?&ka++A delta 17254 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 delta 17570 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
v|7H*PS{RaaPvBalt7tcx0EFv8>> zaJ>KYXT|K)Oeg#vV5r{*AUa%n%!d(DYt zZEnq!xH-u>FcMA8m9J|H2K!h`-~CsB)GY7IF4DFyp9Mgz3~{0+X)sL-o2_;ieEvm9 z5tHisBd!u|X18jp@Acq4abA%LkOoajZH+DBp4xi)WfG)t`U(1gC-7M`jw#$_^>)3< zDZ4brMi*&Hb7mUW1x%&FcQl7eK7T6pSa}o?uA%7|Deg(`E{O^`Ivrx-2>^`Qtx#*r zQ_&Iw?Wqs_!4lEPeD64MVJ~eymBITMqG=yF_XY8M8`vz!bj4M6n5~&uNvS7tSTT71 z>>8Qb>TO*mX;Xq#Z%`KSo@?)V?nDWizg6;L$#ElI3C&}$%07x|L{p>-!f9v09Z7%j zj=?2zM!Kv&^N;eiDE%;?-ZYAkBv>A%aW$kDQ$75$Rt&NY9mbGraAa{QnRC45s3|jQ zC_D`xLy`E%tR0}}(MKaIYNau<=00=jyK>8d+$Zfce_Q*fZ zi?*ijAyBkPKW-g8uFBVn@Bi>&aw_8hU2+ali&R|{u6vo+m);~#o6~}M#dQleMpN?c z*^DeHD=O!;areLpw3Uy&-6gbg@swIKJm1dH=xVFdKuIXfY-x3PD{D-I5cU_>wn$p6 zYv}JvP(ol1y^P@b_1*`u@?JRxJ`(5P&9Ep>e%QvOGE&=t`c)BIlsi)ubp_D`g4V2k zPSj94pcen39nWf>uu9TXDlKZ>=MU>GGkeL*LmgJ8FF&;zKZ`T&OSoN)#gf<0-9t>sPgA z-I?FJfBnHHM@1JsIbEi`k40B*+^eC%5u}h-bp$sMjr7xmaSWn1#4KSx0rN92nH*QK zyT>}wN1CA=57lFrl=$5UPI;*vW$ksX;ro!4XOt6iveF~6Peai}AY6_4*zGz7ja>f< zuo6DR#CZ-3x@lBh?IC9R!KTyLUge{hDuR1bf=p9%aYol?p}P7tdcS!YKi1X9M<*S@IF?@Po1pRqqF{6 ztSe=p%CbFNf(4Q*@bPORYnWv}u<^3w?ApueF;px7ZLX{B+C%VjaR$I({9H7EsZ9}U zO~`me1k_eKva{TJXf7qkD&KQamlmwi+fHz2q9@%Iw`a99nME$71$U+*A}79l?*|BX z)-qwabnYI_g~!w717a%32hU3nS=}9_-`Xv!ObnCB2vD!OHTP39V1O;O>(AflQeEV^ znAqXyfMThAPdlufnISj?b+iZ*{Ao;uWcjrB#yS!iz4;6i2?P z5vs**d2lqv>5O?R@gwsNE+9hQ1ef7=r!ln07U7Xsq8x!4ke$tirJ1zU_~r!5%0AJ1 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 Tech CCMLab humdrumR - 0.7.0.0 + 0.7.0.2 + +

+ + + +
+
+
+ +
+

The count() function is exactly like R's fundamental table() function, +except that 1) will give special treatment to humdrumR token() data 2) +has more intuitive/simple argument names 3) makes it easier to combine/manipulate +disparate output tables.

+
+ +
+

Usage

+
# S3 method for humdrumR
+count(x, ..., sort = FALSE, na.rm = FALSE, exclude = NULL)
+
+# S3 method for default
+count(..., sort = FALSE, na.rm = FALSE, exclude = NULL)
+
+# S4 method for humdrum.table,humdrum.table
+Ops(e1, e2)
+
+# S3 method for humdrum.table
+cbind(...)
+
+# S3 method for humdrum.table
+rbind(...)
+
+as.data.frame.humdrum.table(x, ..., responseName = "n")
+
+as.data.frame.probabilityDistribution(x, ...)
+
+ +
+

Details

+

The count() function is essentially a wrapper +around base::table() function. +However, any token() class arguments are treated like factors(), +calling generating their own levels. +This assures that, for example, pitch data is tabulated in order of pitch height, +and "missing" pitches are counted as zero.

+

count() will, by default, count NA values if they are present---if you don't want +to count NAs, specify na.rm = TRUE. +You can also tell count() to exclude (not count) any other arbitrary values you +provide as a vector to the exclude argument.

+

count() will always give names to the dimensions of the table it creates. +You can specify these names directly as argument names, like count(Kern = kern(Token)); +if you don't specify a name, count() will make up a name(s) based on expression(s) it is tallying. +(Note that count() does not copy base::table()'s obtusely-named dnn or deparse.level arguments.)

+
+
+

Manipulating humdrum tables

+ + + +

The output of count() is a special form of R table, a humdrum.table. +Given two or more humdrum.tables, if you apply basic R operators +(e.g., arithmetic, comparisons) or row/column binding (cbind/rbind) +humdrumR will align the tables by their dimension-names before +doing the operation. +This means, that if you have two tables of pitch data, but one table includes specific pitch and other doesn't, +you can still add them together or bind them into a matrix. +See the examples!

+
+ +
+

Examples

+

+generic <- c('c', 'c', 'e', 'g', 'a', 'b', 'b', 'b')
+complex <- c('c', 'c#', 'e', 'f', 'g','g#', 'g#', 'a')
+
+genericTable   <- count(generic)
+complexTable <- count(complex)
+
+genericTable
+#> generic
+#> a b c e g 
+#> 1 3 2 1 1 
+complexTable
+#> complex
+#>  a  c c#  e  f  g g# 
+#>  1  1  1  1  1  1  2 
+
+genericTable + complexTable
+#> generic/complex
+#>  a  b  c  e  g c#  f g# 
+#>  2  3  3  2  2  1  1  2 
+
+cbind(genericTable, complexTable)
+#>    [,1] [,2]
+#> a     1    1
+#> b     3    0
+#> c     2    1
+#> e     1    1
+#> g     1    1
+#> c#    0    1
+#> f     0    1
+#> g#    0    2
+
+
+
+
+ + +
+ + + +
+ + + + + + + diff --git a/docs/reference/tactus.html b/docs/reference/tactus.html index f88527aa..453b225a 100644 --- a/docs/reference/tactus.html +++ b/docs/reference/tactus.html @@ -3,11 +3,11 @@ specific levels from the meter. tactus() extracts the tactus of a meter; measure() extracts the length of the full measure of a meter. nbeats() counts the number of tactus beats in the meter. -These functions are particularly useful as arguments to the count and subpos functions.">Extract levels from meters — tactus • humdrumRExtract levels from meters — tactus • humdrumR @@ -18,7 +18,7 @@ Georgia Tech CCMLab humdrumR - 0.7.0.0 + 0.7.0.2 + + + + + +
+
+
+ +
+

The timecount() function takes a vector of rhythmic duration values and +counts (in the musical sense) the number of beats (or measures) which have occurred since the starting point, +associating each rhythmic onsets with a beat. +The subpos() function is paired with timecount(), computing how far (in rhythmic time) each onset is from its +associated beat; if subpos() returns 0, this means that an onset is on the beat. +Finally, onbeat() is simply a convenient shorthand for subpos() == 0, returning +a logical vector for indicating where onsets fall on or off beat.

+
+ +
+

Usage

+
timecount(
+  dur,
+  unit = rational(1L),
+  start = 1L,
+  phase = 0,
+  pickup = NULL,
+  offBeats = TRUE,
+  groupby = list()
+)
+
+subpos(
+  dur,
+  unit = rational(1L),
+  phase = 0,
+  pickup = NULL,
+  deparser = duration,
+  ...,
+  groupby = list()
+)
+
+onbeat(dur, unit = rational(1L), groupby = list(), ...)
+
+ +
+

Arguments

+
dur
+

An input vector of rhythmic durations.

+

Must be a character or numeric vector.

+

Is parsed using rhythmInterval(); +Wherever the input can't be parsed as a duration, +that element is treated as a duration of zero.

+ + +
unit
+

The size of "beat" (or measure) to count.

+

Defaults to a whole-note (one measure of 4/4 time).

+

Must be a character or numeric vector, or a list of such vectors; +must be a singleton or the same length as dur.

+

Is parsed as a duration using rhythmInterval(); +If the input can't be parsed as a duration, the output will be all NA.

+ + +
start
+

The number to start counting from.

+

Must be a single whole-number value (either numeric or integer).

+ + +
phase
+

The phase offset between onsets and beats.

+

Defaults to 0.

+

Must be a character or numeric vector; must be length 1 or the same length as dur; +The duration of phase must be smaller than the smallest duration value in unit.

+

Is parsed as a duration using rhythmInterval(); +If the input can't be parsed as a duration, an error occurs.

+ + +
pickup
+

Indicates which leading values in the input are pickups, if any.

+

Defaults to NULL.

+

Must be NULL, or a logical vector of the same length as dur.

+ + +
offBeats
+

Should off-beat onsets be numbered in the output, or NA?

+

Defaults to TRUE.

+

Must be a single logical value: an on/off switch.

+ + +
groupby
+

Optional vectors to group by and count within.

+

Defaults to empty list().

+

Must be a list(), which is either empty or contains vectors which are all the same length as dur. +To function as a by-record timeline, the groupby list must include a named Piece and Record vectors. +Luckily, these are automatically passed by with(in).humdrumR, so you won't need to worry about it!

+ +
+
+

Details

+

In many basic use cases, using timecount() is essentially the same as using floor(timeline()). +However, timecount() gives us a few additional options which add musicological power compared to timeline(). +(timecount() also starts from 1 not 0, as timeline() does.)

+

The first beat in an input vector is assigned the value of the start argument, which defaults to start = 1L. +There is no 'zeroth' count, as the first beat occurs at the instant of the starting time---i.e., the first onset in the input vector. +Every rhythmic onset is associated with one beat, but multiple onsets may occur within the same beat---thus +the output of timecount() assigns (rounds) each onset to the previous beat onset. +However, if offBeats = FALSE, only onsets that land on a beat are counted, with offbeat values returning NA.

+

The phase controls how offbeat onsets are associated with nearby beats. +phase is parsed as a rhythmic value and must be rhythmic values that are smaller than the smallest beat value. +The phase argument shifts the "boundary" between beats backwards, before the beat onset. +By default, phase = 0 so the beat-association boundary lands on the beat: only onsets on or after each beat "belong" to that beat. +If phase = '8', the beat boundary is pushed back to capture one eighth-note before the beat itself. +This can be used to, for example, associate the last 3/8s of a measure with the next measure (like pick ups); +This could be achieved with a command like timecount(dur, beat = '1', phase = 3/8).

+
+
+

"Beats"

+ + + +

The unit argument is used to indicate what size of beat you want to count. +The default unit is a whole note, equivalent to a measure of M4/4 time. +The unit argument uses the rhythm parser, so it can understand unit values input in a variety of formats: +thus, you could specify quarter-note units as either unit = '4' or unit = 0.25. +The parser also understands how to parse the (full) duration of time signature: for example, unit = 'M3/4' would use a dotted-half-note unit ('2.').

+

Changing meter

+ + +

If your data has changing meters (either between pieces, or within pieces), you can specify +the unit argument as a vector which is the same length as dur, indicating the +beat size at each moment/index. +This feature is very easy to use with any dataset that includes time signature interpretations, like "*M4/4"; +these interpetations, if present, are automatically read into a field called TimeSignature. +For such a dataset, you can simply pass the TimeSignature field to the unit argument of timecount(), and +the measures of the piece will be correctly counted (even when changing!): timecount(x, unit = TimeSignature). +Alternatively, you can use the tactus() command to extract the tactus beat from a time signature, like timecount(x, unit = tactus(TimeSignature)).

+
+ +
+

Irregular meter

+ + +

Some musical meters consist of a pattern of irregular beats. +For example, the meter M7/8 is often realized as two "short" beats (two eigth-notes each) and one "long" beat (three eigth-notes), forming a 2 + 2 + 3 pattern. +If we want to count each eighth-note, we can simply specify unit = '8' and get the M7/8 beats counted as c(1, 3, 5). +However, if we want to count each short or long beat as a single unit, we must specify the desired pattern as a list of beat durations: for example, unit = list(c("4", "4", "4.")). +Let's see what these two cases look like, applied to two M7/8 measures of straight eighth-notes:

+

rhythm <- rep('8', 14)
+
+timecount(rhythm, unit = '8'),
+
+# output is: 1  2  3  4  5  6  7  8  9 10 11 12 13 14
+
+timecount(rhythm, unit = list(c('4', '4', '4.')))
+
+# output is: 1 1 2 2 3 3 3 4 4 5 5 6 6 6

+

To accommodate changing meters, the unit argument can still accept list of such patterns, so long as the list is the same length as dur.

+
+ +
+
+

Pickups

+ + + +

Another option is to pass the pickup argument a logical vector of the same length as the input dur. +Within each piece/group, any block of TRUE values at the beginning of the pickup vector +indicate a pickup. +The first index where the pickup logical is FALSE is used as the location of beat 1: +all the earlier (pickup == TRUE) points will be negative counts, counting backwards from the start. +In humdrumR, and datapoints before the first barline record (=) are labeled Bar == 0 in the Bar field. +Thus, a common use for the pickup argument is within(humData, timecount(Token, pickup = Bar < 1), which makes the downbeat of +the first complete bar 1 the stating point---any notes in pickup bars are give negative counts.

+

Note that there is never a 'beat zero'. +Beats before the starting point progress directly from -1 to 1 (the start). +As a result, doing arithmetic or other math with beat "counts" can be problematic when using a pickup argument. +It may be better to use round(timeline()) in cases where you want to do much math with counts.

+
+
+

See also

+

timecount() and subpos() are closely related to the timeline() function. The metcount() function applies timecount() within a metric framework.

+
+ +
+

Examples

+

+humData <- readHumdrum(humdrumRroot, "HumdrumData/BachChorales/chor00[1-4].krn")
+#> Finding and reading files...
+#> 	REpath-pattern '/home/nat/.tmp/RtmpXk1jiY/temp_libpath4c5933cffa0d/humdrumR/HumdrumData/BachChorales/chor00[1-4].krn' matches 4 text files in 1 directory.
+#> Four files read from disk.
+#> Validating four files...
+#> all valid.
+#> Parsing four files...
+#> Assembling corpus...
+#> Done!
+
+show(within(humData, timecount(Token, unit = TimeSignature, pickup = Bar < 1)))
+#> ######################## vvv chor001.krn vvv #########################
+#>      1:  !!!COM: Bach, Johann Sebastian
+#>      2:  !!!CDT: 1685/02/21/-1750/07/28/
+#>      3:  !!!OTL@@DE: Aus meines Herzens Grunde
+#>      4:  !!!OTL@EN:      From the Depths of My Heart
+#>      5:  !!!SCT: BWV 269
+#>      6:  !!!PC#: 1
+#>      7:  !!!AGN: chorale
+#>      8:           **kern         **kern         **kern         **kern
+#>      9:           *ICvox         *ICvox         *ICvox         *ICvox
+#>     10:           *Ibass        *Itenor         *Ialto        *Isoprn
+#>     11:          *I"Bass       *I"Tenor        *I"Alto     *I"Soprano
+#>     12:        *>[A,A,B]      *>[A,A,B]      *>[A,A,B]      *>[A,A,B]
+#>     13:     *>norep[A,B]   *>norep[A,B]   *>norep[A,B]   *>norep[A,B]
+#>     14:              *>A            *>A            *>A            *>A
+#>     15:          *clefF4       *clefGv2        *clefG2        *clefG2
+#>     16:           *k[f#]         *k[f#]         *k[f#]         *k[f#]
+#>     17:              *G:            *G:            *G:            *G:
+#>     18:            *M3/4          *M3/4          *M3/4          *M3/4
+#>     19:           *MM100         *MM100         *MM100         *MM100
+#>     20:               -1             -1             -1             -1
+#>     21:               =1             =1             =1             =1
+#>     22:                1              1              1              1
+#>     23:                1              1              1              .
+#>     24:                .              1              .              .
+#>     25:                1              1              1              1
+#>     26:               =2             =2             =2             =2
+#>     27:                2              2              2              2
+#>     28:                2              2              .              .
+#>     29:                .              .              .              2
+#>     30:                2              2              2              2
+#>     31:               =3             =3             =3             =3
+#>     32:                3              3              3              3
+#>     33:                .              3              3              .
+#>     34:                3              3              3              .
+#>     35:                3              .              3              3
+#>     36:                3              3              3              3
+#>     37:               =4             =4             =4             =4
+#>     38:                4              4              4              4
+#>     39:                4              4              4              4
+#>     40:               =5             =5             =5             =5
+#>     41:                5              5              5              5
+#>     42:                5              5              5              .
+#>     43:                5              5              5              5
+#>     44:               =6             =6             =6             =6
+#>     45:                6              6              6              6
+#>     46:                6              6              .              6
+#>     47:                6              6              6              .
+#>     48:                .              6              .              .
+#>     49:               =7             =7             =7             =7
+#>     50:                7              7              7              7
+#> 51-133::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+#> ######################## ^^^ chor001.krn ^^^ #########################
+#> 
+#> 		(two more pieces...)
+#> 
+#> ######################## vvv chor004.krn vvv #########################
+#>   1-53::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+#>     54:                4              4              4              4
+#>     55:                .              .              4              .
+#>     56:               =5             =5             =5             =5
+#>     57:                5              5              5              5
+#>     58:                .              .              5              .
+#>     59:                5              5              5              5
+#>     60:                5              .              .              .
+#>     61:                5              5              5              5
+#>     62:                5              5              5              5
+#>     63:               =6             =6             =6             =6
+#>     64:                6              6              6              6
+#>     65:                6              .              .              6
+#>     66:                6              6              6              6
+#>     67:                6              6              6              6
+#>     68:                6              6              6              6
+#>     69:               =7             =7             =7             =7
+#>     70:                7              7              7              7
+#>     71:                .              .              7              .
+#>     72:                7              7              7              7
+#>     73:                7              7              7              7
+#>     74:                7              .              .              .
+#>     75:                7              7              7              7
+#>     76:                .              .              7              7
+#>     77:               =8             =8             =8             =8
+#>     78:                8              8              8              8
+#>     79:                8              8              8              8
+#>     80:                8              8              8              8
+#>     81:                8              8              8              8
+#>     82:               =9             =9             =9             =9
+#>     83:                9              9              9              9
+#>     84:                9              9              9              9
+#>     85:                9              .              .              .
+#>     86:                9              9              9              9
+#>     87:                9              9              9              9
+#>     88:                .              9              .              .
+#>     89:              =10            =10            =10            =10
+#>     90:               10             10             10             10
+#>     91:               10              .             10             10
+#>     92:               10             10             10             10
+#>     93:               ==             ==             ==             ==
+#>     94:               *-             *-             *-             *-
+#>     95:  !!!hum2abc: -Q ''
+#>     96:  !!!title: @{PC#}. @{OTL@@DE}
+#>     97:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Jo***
+#>     98:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: B***
+#>     99:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint:***
+#>    100:  !!!YOR4: Chorales (New York: Associated Music Publi***
+#>    101:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, p***
+#>    102:  !!!EED:  Craig Stuart Sapp
+#>    103:  !!!EEV:  2009/05/22
+#> ######################## ^^^ chor004.krn ^^^ #########################
+#>               (***five global comments truncated due to screen size***)
+#> 
+#> 	humdrumR corpus of four pieces.
+#> 
+#>    Data fields: 
+#> 	         Token                                                    :: character
+#> 	        *timecount(Token, unit = TimeSignature, pickup = Bar < 1) :: integer
+#> 
+
+show(within(humData, timecount(Token, unit = tactus(TimeSignature))))
+#> ######################## vvv chor001.krn vvv #########################
+#>      1:  !!!COM: Bach, Johann Sebastian
+#>      2:  !!!CDT: 1685/02/21/-1750/07/28/
+#>      3:  !!!OTL@@DE: Aus meines Herzens Grunde
+#>      4:  !!!OTL@EN:      From the Depths of My Heart
+#>      5:  !!!SCT: BWV 269
+#>      6:  !!!PC#: 1
+#>      7:  !!!AGN: chorale
+#>      8:           **kern         **kern         **kern         **kern
+#>      9:           *ICvox         *ICvox         *ICvox         *ICvox
+#>     10:           *Ibass        *Itenor         *Ialto        *Isoprn
+#>     11:          *I"Bass       *I"Tenor        *I"Alto     *I"Soprano
+#>     12:        *>[A,A,B]      *>[A,A,B]      *>[A,A,B]      *>[A,A,B]
+#>     13:     *>norep[A,B]   *>norep[A,B]   *>norep[A,B]   *>norep[A,B]
+#>     14:              *>A            *>A            *>A            *>A
+#>     15:          *clefF4       *clefGv2        *clefG2        *clefG2
+#>     16:           *k[f#]         *k[f#]         *k[f#]         *k[f#]
+#>     17:              *G:            *G:            *G:            *G:
+#>     18:            *M3/4          *M3/4          *M3/4          *M3/4
+#>     19:           *MM100         *MM100         *MM100         *MM100
+#>     20:                1              1              1              1
+#>     21:               =1             =1             =1             =1
+#>     22:                2              2              2              2
+#>     23:                3              3              3              .
+#>     24:                .              3              .              .
+#>     25:                4              4              4              4
+#>     26:               =2             =2             =2             =2
+#>     27:                5              5              5              5
+#>     28:                6              6              .              .
+#>     29:                .              .              .              6
+#>     30:                7              7              7              7
+#>     31:               =3             =3             =3             =3
+#>     32:                8              8              8              8
+#>     33:                .              8              8              .
+#>     34:                9              9              9              .
+#>     35:                9              .              9              9
+#>     36:               10             10             10             10
+#>     37:               =4             =4             =4             =4
+#>     38:               11             11             11             11
+#>     39:               13             13             13             13
+#>     40:               =5             =5             =5             =5
+#>     41:               14             14             14             14
+#>     42:               15             15             15              .
+#>     43:               16             16             16             16
+#>     44:               =6             =6             =6             =6
+#>     45:               17             17             17             17
+#>     46:               18             18              .             18
+#>     47:               19             19             19              .
+#>     48:                .             19              .              .
+#>     49:               =7             =7             =7             =7
+#>     50:               20             20             20             20
+#> 51-133::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+#> ######################## ^^^ chor001.krn ^^^ #########################
+#> 
+#> 		(two more pieces...)
+#> 
+#> ######################## vvv chor004.krn vvv #########################
+#>   1-53::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+#>     54:               17             17             17             17
+#>     55:                .              .             17              .
+#>     56:               =5             =5             =5             =5
+#>     57:               18             18             18             18
+#>     58:                .              .             18              .
+#>     59:               19             19             19             19
+#>     60:               19              .              .              .
+#>     61:               20             20             20             20
+#>     62:               21             21             21             21
+#>     63:               =6             =6             =6             =6
+#>     64:               22             22             22             22
+#>     65:               22              .              .             22
+#>     66:               23             23             23             23
+#>     67:               24             24             24             24
+#>     68:               25             25             25             25
+#>     69:               =7             =7             =7             =7
+#>     70:               26             26             26             26
+#>     71:                .              .             26              .
+#>     72:               27             27             27             27
+#>     73:               28             28             28             28
+#>     74:               28              .              .              .
+#>     75:               29             29             29             29
+#>     76:                .              .             29             29
+#>     77:               =8             =8             =8             =8
+#>     78:               30             30             30             30
+#>     79:               31             31             31             31
+#>     80:               32             32             32             32
+#>     81:               33             33             33             33
+#>     82:               =9             =9             =9             =9
+#>     83:               34             34             34             34
+#>     84:               35             35             35             35
+#>     85:               35              .              .              .
+#>     86:               36             36             36             36
+#>     87:               37             37             37             37
+#>     88:                .             37              .              .
+#>     89:              =10            =10            =10            =10
+#>     90:               38             38             38             38
+#>     91:               39              .             39             39
+#>     92:               40             40             40             40
+#>     93:               ==             ==             ==             ==
+#>     94:               *-             *-             *-             *-
+#>     95:  !!!hum2abc: -Q ''
+#>     96:  !!!title: @{PC#}. @{OTL@@DE}
+#>     97:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Jo***
+#>     98:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: B***
+#>     99:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint:***
+#>    100:  !!!YOR4: Chorales (New York: Associated Music Publi***
+#>    101:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, p***
+#>    102:  !!!EED:  Craig Stuart Sapp
+#>    103:  !!!EEV:  2009/05/22
+#> ######################## ^^^ chor004.krn ^^^ #########################
+#>               (***five global comments truncated due to screen size***)
+#> 
+#> 	humdrumR corpus of four pieces.
+#> 
+#>    Data fields: 
+#> 	         Token                                          :: character
+#> 	        *timecount(Token, unit = tactus(TimeSignature)) :: integer
+#> 
+ 
+  
+
+
+
+ + +
+ + + +
+ + + + + + + diff --git a/docs/reference/timeline.html b/docs/reference/timeline.html index aac75b1c..7e3ae72f 100644 --- a/docs/reference/timeline.html +++ b/docs/reference/timeline.html @@ -30,7 +30,7 @@ Georgia Tech CCMLab humdrumR - 0.7.0.0 + 0.7.0.2 - - - - - -
- - - - -
-
- - - -

humdrumR contains a rich set of built in representations and functions for representing musical tonality and meter. A core philosophical/design choice is that both structures are conceptualized/encoded as intervals.

-
-

Intervals -

-

Both pitch and time are perceived relatively: as a relationship between two points. Thus we represent them, conceptually, as an interval—a difference. In the case of pitch, an interval between two frequencies (or more abstractly, a “tonal” interval on the circle-of-fifths). In the case of rhythm, an interval between two time points—between two onsets, or between an onset and an offset. In humdrumR, these abstract intervals are represented as tonalInterval and rhythmInterval objects, respectively.

-

To concretize our abstract intervals, we must establish what they are relative to. What is the reference? There are actually multiple, useful ways we can represent the same information. Since all intervals are relative, there is always an implicit reference—the origin, zero. For tonalIntervals the origin is the unison interval. For rhythmIntervals the origin is zero.

-

tonalIntervals and rhythmIntervals constitute each constitute an algebraic module over integers (module over \(\mathbb{Z}\)), with appropriate arithmetic operations fully defined in humdrumR. Since intervals can be added/subtracted, any interval can be thought of as a combination (addition) of other intervals. In humdrumR, we often “partition” a interval as a combination of useful sub-intervals.

-
-

Serial and Fixed Reference -

-

Vectors of humdrumR intervals can be represented in two fundamental ways: serial reference representation and fixed reference representation. To illustrate, we will use two examples, one rhythmic, one pitched:

-
    -
  1. The major scale
  2. -
  3. The “tag-line” rhythm 3+3+3+3+2+2 -
  4. -
-
-

Fixed reference -

-

In a fixed-reference representation, all intervals are interpreted relative to a fixed point (implicitly 0). Fixed-reference representations of the major scale (using semitones) and the tag-line rhythm are as follows:

-
-referenceMajor   <- c(0, 2, 4, 5, 7, 9, 11, 12)
-
-referenceTagline <- c(0, 3, 6, 9, 12, 14, 16)
-

Note that this representation is quite commonly used by musicians, in various forms, for pitch. In contrast, fixed-reference representations are not commonly used by musicians for rhythm. However, they are used in some contexts, as they essentially represent “time from the beginning” of a piece: Thus, the timestamps/timelines in DAWs or “offsets” in music21 are examples of fixed-reference representations of time.

-
-
-

Serial reference -

-

An alternative representation is a serial-reference representation, where each interval is measured relative to the previous one. Thus, each data point represents the local change (\(\Delta\)) in the parameter. To be lossless (as explained below) the first element of a serial data vector is measured relative to the implicit reference (0). Serial representations of our tag-line and the major scale are as follows:

-
-serialMajor   <- c(0, 2, 2, 1, 2, 2, 2, 1)
-
-serialTagline <- c(0, 3, 3, 3, 3, 2, 2) 
-

This representations is also fairly intuitive to musicians—representing “melodic intervals”—but is not how music notation or sequencers represent pitch. In contrast, the serial-reference representation for rhythm is normative: traditional music notation note values are a serial-reference representation.

-
-
-

Transformations (“Interval Calculus”) -

-

Since addition is defined for intervals fixed-reference and serial-reference representations can be translated between each other.

-

A serial-reference representation can be calculated as the pairwise differences between elements in a fixed-reference data, with the first reference element appended at the beginning. Conversely, a fixed-reference representation can be calculated as the cumulative sum of serial-reference data. Thus:

-
-identical(cumsum(serialMajor), referenceMajor)
-
## [1] TRUE
-
-identical(cumsum(serialTagline), referenceTagline)
-
## [1] TRUE
-
-identical(c(referenceMajor[1], diff(referenceMajor)), serialMajor)
-
## [1] TRUE
-
-identical(c(referenceTagline[1], diff(referenceTagline)), serialTagline)
-
## [1] TRUE
-

In humdrumR, we refer to these two transformations as delta (\(\Delta\)) and sigma (\(\Sigma\)), for differences and sums respecticely. In humdrumR, we note that the relationship between fixed- and serial-reference representations is analogous to the relationship between a function and its derivative. The fixed-reference representation represents a sequence of independent values as a function of (serial) index position. The serial-reference representation represents the same sequence as the differences between adjacent elements at each index—how much the fixed representation changes at each index. (Since the first element in a serial-reference representation is relative to a fixed (implicit) reference, the normal one-to-many relationship between derivatives and functions is removed, and a lossless one-to-one relationship is maintained.) These two transformations are thus inverses of each other: \(x = sigma(delta(x))\) and \(x = delta(sigma(x))\).

- - -
## Loading required package: rlang
-
## 
-## Attaching package: 'humdrumR'
-
## The following objects are masked from 'package:stats':
-## 
-##     lag, sigma, step
-
## The following object is masked from 'package:methods':
-## 
-##     signature
-
-identical(referenceMajor, sigma(delta(referenceMajor)))
-
## [1] TRUE
-
-identical(referenceMajor, delta(sigma(referenceMajor)))
-
## [1] FALSE
-
-Derivative/Integral relationship in Major Scale

-Derivative/Integral relationship in Major Scale -

-
-
-Derivative/Integral relationship in Tagline Rhythm

-Derivative/Integral relationship in Tagline Rhythm -

-
-
-
-
-

Dynamic Reference -

-

Since intervals are additive, another possibilty is to use one vector of intervals as the reference point for a second vector of intervals. This allows us to create dynamic reference points.

-

Some examples

-
    -
  • -Figured Bass: the bass voice in the texture is encoded (in serial/reference reprsentation) while other voices are represented relative to the bass voice.
  • -
  • -Chord Tones: the abstract “root” of chord progression is represented in one vector, with other vectors representing the “chord tones” (root, 3rd, 5th, 7th, etc.) relative to chord root.
  • -
  • -Scale degrees: The tonic of the key is used as a dynamic reference, with notes calculated relative to the tonic.
  • -
-
-Figured Bass

-Figured Bass -

-
-

Calculating dynamic reference intervals is lossless only if the complete information on the reference intervals are maintained. For instance, we we keep track of the serial or fixed intervals off the bass voice. Or, if we keep track of the local key (usually using a fixed interval to “C”).

-
-
-
-
- - - - -
- - - - - - - diff --git a/docs/articles/Intervals_files/figure-html/unnamed-chunk-5-1.png b/docs/articles/Intervals_files/figure-html/unnamed-chunk-5-1.png deleted file mode 100644 index 37b5f538d858a87011d14033fe1bbf71a9fa16ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32866 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
-X%IKGP0*eDI5x% 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

8?XE_0RuQBx4v&wbF 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�w3Pf$A-JY6MY<>j+S&m-|7-OeskQjNq>6ku<&LJ z#bnm8U9x^}I$Hb(NO2{nHu~q}%XeGVv3S21HwodP*_0!8cIrz0N!lMb?X}ZZXST+U z&j}zlI{DdNQz^Spp?30#@$hoPsfF3%y`;J2{uS~4vzszj*mjfV6$Newrk+1#k1wX~ zOAOBhZ6LyiXk1<^uFu_P?={@DJRT(%R8>E(EtWW+S*>X>m%%5d9G|+EG&|M9=T~_O z^9HBGs}HCd|HdRXJ?6~r0^6W(4l3R6I~><0+;M0jtUfKvA4ADI7Hk~yqs4H-%tM~maP8uI|HR>D8K!o_l6A-6{nx4qOgt+05iC<|o zlWhTgWqA&{S0t|j$&J*>cLM+63!}9CMkg`0npGW#>sw-c+l57020HT3Lwn876Qc1} zf*Hg7Y^h{OX=i2#I2FE`*c)iawYjx^?yNdvRp!(Vl9oNB#`V6ah~nN z&$@K8`FV)T@O(R+Lkk%WG0rxt-}Gf?U4XB3-KlGtd*sI=qMJ(F4r8v5EvG7ay;(3% ztwiaw7DhjN3o?kVd1DUV_7)6%o7IW~LdlhOTP5S)uqMNj_2lql^i#fMr`W~c@lIbT zn6gZgBK3N}iu?km;?|mk%Td!*i^8?*RHhK6Nhx2o5=*P2m253L0q^vvE7*I zV0`oy1Sv|#PHaRO=wCNOlmV#q&iRc{1>?94LX{kn-N}TnMnu-4)`l1x!SCDx;2TGX zM^=qjY+<#$TvlDQO0kZ)k$0A`?&7H-UJbq3M}nQtU|N; zd^jT#ol(YA+g5I0W?{(XKa!gwyCkrtFV5N!Q~f*b(0#*i{OdOJ?9+v#uCyxQ9k&aC zjCIJrv$X`G*EcJP=|(!U)c#c*?o@owM^=6$x9bO4|2b7ohZf_j8beOAr-HE&lcd_2 zaL?@2$_x*EW+gXrghm%V>tC`r*qN(x>b#g)Dm9vaz4|jlCA;shEthJgFSrZ+dtB%B zWm8924L>Y5Ucx&*O|mBBH}xzFSXBKm=KT7vCM7mKKJqc5>9scXsY{B z(so6(Us28rwgM(97@<(5(l-vHqrYz{oafi=ZK6gyuBLM*4_NSxB8?-eVqOG^-f-L8 zVy`eQEUzkO40lw0<*K)|u7|^#wfL=Yyj%elxxW*`o^BK(UDSrCrr+%3CQ`p2$;T|8 z;0;f*eCwK9yqUe(&vz6?#Jx2PI{G&pheFD(n-jHg#}AAvpy-^PA~!7Q75RlkptmK97iWz}}8(d*FmBUL;tH2e8W z_?a2wuXlp%Pkb`R5PWLIM}x7tKKELix}v0!wc?xuog=CKu9WQHgvQ3I^~N@7@w%`T zo;yVL+?L};BK|pnM$;!+dCa6PVcbBCce&)xgJ>1kx-@L-6Q8jOULMT?3$%f&Y}UUG zi*2{+XOg;9KAk$o<*VD=UH{cl>QQ@2GTOfsOSIX2H@rqT@5mN#8-sEKPsvz2>3v<|u?6oAuSarO;oBlZId*3l;q1JRnRb${=j;cb3EHE?nEk3x& z)DK^|r|C%_8`dO_k1oiK`!Z58_uv9YD(Is3{YxVC%&V;42Ziyg&MLYe{)?lnJ{ugk~)2=!=947n`lsm|Sri*T&|P^gcJ4n^8Mwi6w-55}xhRdRGglGFec# zZ@A{>F~u7ONA(0_`?#VuDO>#xQQ1Y=Sy~Z;=c`ugU0YRc_Ej-33z}CUf?_0S0S!Yd zi-}0p4r%uN1iK(PZ=dzyEB^Kw|iBQu+V*OIPTE?}1U|qaV)N LovHZF`{w@v9sJgQ diff --git a/docs/articles/Intervals_files/figure-html/unnamed-chunk-7-1.png b/docs/articles/Intervals_files/figure-html/unnamed-chunk-7-1.png deleted file mode 100644 index 7f45a88db51b20a715406f10ca369159c2f798e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18060 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 R)v9ZpkGlO-_T!n~{|o*j`9%N# diff --git a/docs/articles/IntroForCoders.html b/docs/articles/IntroForCoders.html deleted file mode 100644 index 8d6114d1..00000000 --- a/docs/articles/IntroForCoders.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - -HumdrumR for coders • humdrumR - - - - - - - - - - Skip to contents - - -

- - - - -
-
- - - -

This document is tutorial/introduction for the humdrum\(_{\mathbb{R}}\) package aimed at -experienced programmers/coders. It moves along relatively quickly and -uses more technical programming jargon. If you are looking for something -easier and less technical, check out (Getting started with -humdrumR)[GettingStarted.html “Getting started with humdrumR”] instead. -This tutorial assumes you understand many major principles of coding, -but not necessarily that you are experienced coding in R -specifically—thus, we will take time to introduce an explain -some R-specific syntax and philosophies.

-

UNDER CONSTRUCTION

-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/KeysAndChord.html b/docs/articles/KeysAndChord.html index 5faf84ad..e6573c0c 100644 --- a/docs/articles/KeysAndChord.html +++ b/docs/articles/KeysAndChord.html @@ -101,7 +101,7 @@

Nathaniel Condit-Schultz

-

2023-10-10

+

2023-10-11

Source: vignettes/KeysAndChord.Rmd
KeysAndChord.Rmd
diff --git a/docs/articles/Overview.html b/docs/articles/Overview.html deleted file mode 100644 index e676ba2a..00000000 --- a/docs/articles/Overview.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - -Overview of humdrumR • humdrumR - - - - - - - - - - Skip to contents - - -
- - - - -
-
- - - -

Welcome to “Overview of humdrumR”! This document will give you a very -brief overview of what the humdrum\(_{\mathbb{R}}\) package is, and what it can -do. If you’re all ready to start learning how to use humdrum\(_{\mathbb{R}}\), checkout getting -started with humdrumR.

-
-

What is humdrum\(_{\mathbb{R}}\)? -

-

Humdrum\(_{\mathbb{R}}\) is is an R package—a “library” -of preexisting code for the [R programming language](https://en.wikipedia.org/wiki/R_(programming_language). -Humdrum\(_{\mathbb{R}}\) code provides -tools for the visualization, manipulation, and analysis of humdrum data.

-
-

Note: The name of the package is pronounced -hum-drum-ARRRRR, with the last syllable -emphasized in pirate fashion. The name should always be typeset \(h\mu m_{\mathbb{R}}^{\Delta r \mu m}\). -Failure to pronounce or typeset \(h\mu -m_{\mathbb{R}}^{\Delta r \mu m}\) correctly will void the -warranty.

-
-
-

What is humdrum? -

-

Humdrum is a system for computational musicology developed by David -Huron. The Humdrum “universe” includes two parts: a data format called -the humdrum syntax and musicological software system called the -humdrum toolkit, humdrum\(_{\mathbb{R}}\) is meant as a modernized -replacement for the original humdrum toolkit, leveraging the power of R -to give us unprecedented power to manipulate and analyze humdrum data -using concise, expressive syntax.

-

humdrum\(_{\mathbb{R}}\) is mainly -used to manipulate and analyze data encoded in the humdrum syntax and/or -humdrum interpretations like “**kern”. The humdrum syntax is an -incredibly flexible, and powerful, scheme for encoding musical data. -Tens of thousands of musical scores (and other musical data) have been -encoded in the humdrum syntax, many available online through -repositories such as KernScores. -Our the humdrum -syntax vignette gives a detailed introduction to the data -format.

-
-
-

What is R? -

-

R is programming language, designed from the ground up for -statistical computing and data analysis. R has many features which make -it ideal for data analysis, particularly if research and analysis is -your only background in programming. Our R primer introduces the core -concepts of R programming.

-
-
-
-

What can humdrum\(_{\mathbb{R}}\) -do? -

-

Humdrum\(_{\mathbb{R}}\) provides a -number of tools for working with humdrum data and more -generally, musicological analysis. The package has seven main -components:

-
-

Representing humdrum in R -

-

To represent humdrum data in R, humdrum\(_{\mathbb{R}}\) defines a special data -type—the humdrumR class—which we call “humdrumR objects” -throughout the documentation. The most important part of a -humdrumR object is the “humdrum table” which it -contains. You can read about how the humdrum-syntax data is represented -in the getting started with humdrumR -vignette.

-

-

For more details, read the humdrumR -class and humdrum -table; If humdrum\(_{\mathbb{R}}\) -is installed and loaded, you can read these directly in an R session by -typing ?humdrumR-class or ?humTable.

-
-
-

Reading and writing humdrum data -

-

To create humdrumR data objects, humdrum\(_{\mathbb{R}}\) includes a humdrum data -parser, which finds humdrum data on your local machine, reads it into R, -then creates a humdrumR object from the data. The Reading and writing -data vignette is the best place to learm how this works. You can get -more details from the readHumdrum() -and writeHumdrum() -documentation; If humdrum\(_{\mathbb{R}}\) is installed and loaded, -you can read these directly in an R session by typing -?readHumdrum or ?writeHumdrum.

-
-
-

Shaping humdrum data -

-

Once you’ve imported humdrum data in R, the next step is often to -organize and prepare your data. You’ll often want to pick out specific -subsets of the data, or rearrange the data representations to be easier -to work with. Humdrum\(_{\mathbb{R}}\) -gives us a number of powerful tools for “shaping the data”: The Shaping -humdrum data and Filtering humdrum data -vignettes are the best places to learn about these processes. You can -find more details on subsetting data in the subset.humdrumR() -and indexHumdrum -documentation; If humdrum\(_{\mathbb{R}}\) is installed and loaded, -you can read these directly in an R session by typing -?subset.humdrumR or ?indexHumdrum.

-
-
-

Working with humdrum data -

-

Humdrum\(_{\mathbb{R}}\) makes it -very easy to manipulate, modify, and analyze humdrum data. The Working with humdrum -data vignette gives an overview of this functionality. You can find -more details in the withinHumdrum -documentation; If humdrum\(_{\mathbb{R}}\) is installed and loaded, -you can read this directly in an R session by typing -?withinHumdrum.

-
-
-

Pitch -

-

Humdrum\(_{\mathbb{R}}\) defines -tools for manipulating numerous representations of pitch and tonality, -including diatonic -keys and tertian -harmonies. The Pitch and tonality vignette -explains how to work with pitch data in humdrum\(_{\mathbb{R}}\). You can find more details -in the humdrumPitch -documentation; If humdrum\(_{\mathbb{R}}\) is installed and loaded, -you can read this directly in an R session by typing -?humdrumPitch.

-
-
-

Rhythm -

-

Humdrum\(_{\mathbb{R}}\) defines -tools for manipulating numerous representations of rhythm, timing, and -meter. The Rhythm and meter vignette -explains how to work with rhythmic information humdrum\(_{\mathbb{R}}\). You can find more details -in the humdrumRhythm -documentation; If humdrum\(_{\mathbb{R}}\) is installed and loaded, -you can read this directly in an R session by typing -?humdrumRhythm.

-
-
-

Development -

-

To facilitate the development of new functions to work with -humdrum tokens—which are simple character strings packed with -information—, humdrum\(_{\mathbb{R}}\) -provides several useful development tools, including our struct -data type and a useful API we call our regular-expression -dispatch system, which makes it easy to dispatch different methods -based on matches to regular expressions.

-
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/PitchAndTonality.html b/docs/articles/PitchAndTonality.html index 38c72c9f..010b0bdd 100644 --- a/docs/articles/PitchAndTonality.html +++ b/docs/articles/PitchAndTonality.html @@ -101,7 +101,7 @@

Nathaniel Condit-Schultz

-

2023-10-10

+

2023-10-11

Source: vignettes/PitchAndTonality.Rmd
PitchAndTonality.Rmd
diff --git a/docs/articles/RPrimer.html b/docs/articles/RPrimer.html index 34187487..38b8fa8f 100644 --- a/docs/articles/RPrimer.html +++ b/docs/articles/RPrimer.html @@ -154,7 +154,7 @@

Basic Commands> [1] 1 2 3 Sys.time() # no arguments! -> [1] "2023-10-10 06:52:25 EDT" +> [1] "2023-10-11 16:38:25 EDT"

Different functions have different arguments they recognize, with specific names. For example, the function log() takes two arguments, called x and base. Other functions @@ -425,8 +425,8 @@

Factors

 sample(letters, 15, replace = TRUE) |> table()
 >    
->    b d e j n o p r s t v x 
->    1 2 1 1 1 2 1 1 1 2 1 1
+> b e g k n p u v w z +> 3 2 2 1 1 1 2 1 1 1

Notice that not all the letters from table appear in the output. E.g., if a letter never appears in the sample, it doesn’t get counted.

@@ -436,7 +436,7 @@

Factorsfactor(letters) |> sample(15, replace = TRUE) |> table() > > a b c d e f g h i j k l m n o p q r s t u v w x y z -> 0 0 0 1 0 1 1 0 1 1 1 0 1 1 0 1 0 1 0 1 0 0 2 1 1 0 +> 1 1 1 2 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 1 1 2 0 0 1 1

Ah! Now our table includes all possible letters, even though many of them appear 0 times.


@@ -464,7 +464,7 @@

Factors table() > > a e i o u b c d f g h j k l m n p q r s t v w x y z -> 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 1 +> 0 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 0 0 1 0 0 1 1 0 0

Note that if a character string contains values that you don’t include in your levels, the value will show up NA in the resulting factor, and you may see warnigns like diff --git a/docs/articles/ReadWrite.html b/docs/articles/ReadWrite.html index a25bc4c7..f1d4a7a9 100644 --- a/docs/articles/ReadWrite.html +++ b/docs/articles/ReadWrite.html @@ -101,7 +101,7 @@

Nathaniel Condit-Schultz

-

2023-10-10

+

2023-10-11

Source: vignettes/ReadWrite.Rmd
ReadWrite.Rmd
diff --git a/docs/articles/RhythmAndMeter.html b/docs/articles/RhythmAndMeter.html index 3a12e61e..0f09f496 100644 --- a/docs/articles/RhythmAndMeter.html +++ b/docs/articles/RhythmAndMeter.html @@ -101,7 +101,7 @@

Nathaniel Condit-Schultz

-

2023-10-10

+

2023-10-11

Source: vignettes/RhythmAndMeter.Rmd
RhythmAndMeter.Rmd
diff --git a/docs/articles/Summary.html b/docs/articles/Summary.html index e3c798d9..8510eeac 100644 --- a/docs/articles/Summary.html +++ b/docs/articles/Summary.html @@ -532,7 +532,7 @@

Summarizing Metadata> COM: Bach, Johann Sebastian > EED: Craig Stuart Sapp > EEV: 2009/05/22 -> EMD: Edited in humdrumR 0.7.0.2 on 2023-10-10 +> EMD: Edited in humdrumR 0.7.0.2 on 2023-10-11 > OTL@@DE: Ich dank dir, lieber Herre > PC#: 2 > SCT: BWV 347 diff --git a/docs/articles/Summary_files/figure-html/unnamed-chunk-15-1.png b/docs/articles/Summary_files/figure-html/unnamed-chunk-15-1.png deleted file mode 100644 index ff198890181478e9dcb39ee1529ef8a12b1e760c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23275 zcmeIa30zax);AodTBQ-Ittg|`w$zG%1M_sPwbZJh0tr(Hh!B}U3_}=#TA>z%wkn`Z zMJhuA1PmlV2tiR$nN&PXAqj{OJrDw75=jVo_X)kv{odz3_r1@1zv+43@7up$O*uJd zpS{;!d;R}w?X_~{gp(tBz4m$(3WYxM{kNx3s5NmY)GEIZKLA&7EBk!F#|Nj6I(`d2 zL0dS)B7={0k>7hnqfmNj$bT!cCguWAsO_jD-yU?0%b(^YG@KzE6e=PF=Pr0#uXuHO z`{&-SCu$ByHT>k;{MpM7*O#C9CEfJ1izDy0eO6rYbnmRoXSiRup+k*aj!7GpB{{@V#=|u0kW3^ z5p1e@eE-@%zPOTl9j=qa)Ol@iK4VZ6vj z=&k-n_x@V#^}~G_%cW}ioL0}CkJVSx0tkl=vf@AOtu1TvvyVcdd_6JIpP^AGDiI1L z|IxXBn)o7=+^u^Tg=&5ERon{H*1kr%avb!sm#$0@{;~$?C1qz#iQkpWcF;||rPV)n zLz|`B6niv|tVN-YhW8Dw0J53&!P_SG=0N^7aVV2G~AO0DvXA7zIVBvV`2D?rzAg1xe*v}Z5dO*sz zTdIdi@18lvK0ji3wIJYO%*@D;7U%s#isI@gV`Fp&MJikj9ah*%kE1&ej8w^eC1L3O zq!lQ4TOn(6@#q?q`{gvdX+QSs!zS7`?LRBW43_*N;@WiDGa@HLRj*p^f@ktzK18M_ zH#GfD`c~r5|Ft*KRpLg~RXIb)qmQgY)wJh}jUCpQpiusD#?TUu`S!g88mCxbRE;FE zqyQ?~WAEvuot@Dj{JKb3M0LR!fCUXda!&)*nk(H>WTSbms}R14*6N50m$bkM)Mzc8 zsys?M)gNn_d=!Y65q)$u3Z*zXyAowuO4a${X^D2=6#teTG*87r8dQg>7LNSdnn13L zo!_V9&Q#-&xT|0RHs*C~0J@ecof}%xPm7u^goPArPja%en2d zZ$+WZjnwLJY{1;xH|$PwJxQ7WZ%UrqG=+=;8|d{PHyeVV!_t_Wv$_S11rH7Qn-PVEBIIlvn{G22q!6n?pPZfZUqjHK`Gt&6co zC2!#$-2xk8K?f;U;UuVpDyX(+-WR?%xw+;eRO<)z;HFr~D4e`omz)My!UD{%D^Mvx zHq7EtHeN#5NdSL6_7H7C8x)1@j`BQokCkv^8w!=1>}t?l*)i|u=eb)G?f z@pa)i4>IW80nF90o?rr)Vr#HB7pA?L&5d6T`r360SrUc`qS&a?C&;b@ZSx(VrJ&`0 zh4cuP^uLoKxL|q`kpQqBSCHpH`+KSV@7qO~o(-6>Q7yhg|L*}b&bzqDL`-TuK- z2%LePv6A81Tj8|L=8^8mi2|H*eDI*Vdgp+>Gkl4H*8}UqD<;8%JN|Y#jN)W9aXoo- zZL;sQ(QfG#=fvAGwm8Ww!R}bmvbosMrzeiE>gjW7nO{&_rY_wAA)YifUdQ9#5eR(swUw}SoW>IOhmYB=qVsGU^;>6ec zfco zdn4YL4i=BN7Pzr1n@ATLfnX}C7~oYYkTqNWJ#o=qhV#OmN-Fh}&g_M76oo4@sKI?U zno4j*XpJe*Wh1m2fvg!#4aFnu+oXd;AIZX{466$364LRuO&he#u5)a(ZheA6Wj~#) z1rw_&wyPiZ!JXjINg-=ZVyV>>z7LN@BDcNW;EeYLRLk8HvBIXMhFwxZ%qy+qtYXqB z$(y11=9tVzR7%_YAnfCxmV1eZR;4UHuD#UytJ-{(>d}>DfY!WK7Oq9P+mxAIzdiNv z64gN4X0`4v^$?pVW4D7Gu>)1Uizn$yGX&jqt2a{^5dyv}NgzW|++H!%i!2+qz%piw z`?}?sF-bp28ekd5beS@NjcNIrVNv2ahlOhnR$z}QX44#+nWLAFocq-bV8lE5&{BRX zF-}vqcs{zVi4}2Ex!APO4xlf{^b#Nudy^W9UnOBAr9&b>iM0DC*riRiW6hEWa5#Eu z+^%uhJ|UA%P4C}#00>tD48f@9BxFNL$O7gh21_eXCQom#Jlb1PUFp+blP#bVxMOjL zCC}GPfH&MJ8(ov~aG@!<37gk&r|A28ou@}!+0CRwZTrv;7`xf+9e8hcqhB|ljE}Ph zl0FSAxO)wYFR5m~y+P9jLthwO+PoA8LG-X=s$zNRrlv zj9SZJ$={@UH17uNdK_~58|SDo3U^5&*3;!V!M({@0y=3iRCNgvi zX7))lz7VgALcRY%4aSTrxdgtc7>PYBc?6fxi}0=@a{YaLx&6r`FUimv!fGI)y7+0Z z|3l-%uXlIyC@z5S*qDFPkkHB7O?99y5vB8N3Mbgz1i-(!u6q6D{i!#b+&C{z4Dw6l zjj1=;CRIKzJa@b1;#p-6+=G57zKTA&BeB;r^#fE&fZrA1JGH;tOjpiR@m%4O>J-jJ ziAP`Clzdx0uWV2L9q968YJIrs%mu3zDBoQ-)pShXo?8^1(!qb;Eu@MYZp?{qi3|>K zz6Thqr=Hk(+0YUN5ZH%F;p8z)yEtFuT!7sUuz8buh{Ik__0PVk*~2`SfKTWp(DJ;1 zGm*P-dH9b)$%0k3F*L76HjULQRfYIm0NebBWm2Uo5D8rMIK4_{n0t1%Ul{E}WL&pat~)^9GH*{$y8ni8YfHEV&BVXwK?#+?DgE{Q(g;`MasSfjBv`X#ux^$@QshO!78I#&-~T!BfJl^|Ccz6nl0$`Jcfc0%Vh_3P;}Zi z01$3%2TbHja)iliK;HV-ii^i*49vC@xPvJH4^>-miV2?Y&w6&k(Cl$ z)Wc8RWZE_wk!RJcFU4xOB`JYWlq4P8i|H~m^!5Bt@QaDhLV!)XRzg)^G%KBGPF0x| ze-Bm2;EXP*(TT>;ZJ)DnBe6i4%6##R}FkGqz zB>@v58l4D-+#oJB0V|Gh=a0S7=mLA;Xy->hz8+yZHm&*76shjZ+~ZY6f({EnoOAR4 zL%2fuZt6c;jH)z=s7^jVy)pVN0g5F~eIYJQrF~XZ8+c{Q)E+47s@}@n>;FgiLYaTE z#-t{rg&I6R*&Q}q7X<>T0ih?@Iy|A(IG${PNp-8b(!2j#3mRXh}jyN&7ZJ9ig`vL)aQRTvsvQV-s=j z$`&C^rOoWkitifSn-T=J>7Rg?EH){UsUr=?ep;5#K(ADIpt3EYL0Fcj)6YxloE8pr zTWkSj^3pc2ZW(Xd&|iq@6pQZgA{X4#8e_2;S}StoZ;=A=fNf8;v1jK~pyNhr6C|>N zZa|%s%@jf}qiybI_>RUC;C3ACMZAyY&Qgp7P|{Ra$jO6;&^43bP7H6W1isZ^WEbFKzQ-KQ zxka%l9r_+TW>c}e2R4x=EFOdwphJ{2i>`Obn;)v9Q15;kT6zLt;?>YnSGdOvM(Nhp z)a>S*7Y(*f?rJq0SjRI2NuVohE=RF_ythDP5cP{czyqEq@FzJ?w;|s#m>WvI|Mh-g zEOAAl?x|xBU|6Yd6VBkwY#*l;i8#SM2v6LEahVOTXrWmL+}M_hn*edc(y5Wui?Rf& ziooeuqKthO+JVIbEMwjjnRtDVu#I!nU2(BkyjMZf{kgIO`A-ebvH@W-PZd-Y4$OAf z%qyNmw+X_(ic`5rCd zk=3KU0<5wuxbN2Io|T$zv~4yZu!CwP{XQB%Nv@R_)*kA5=0)MyJR0YCi`+|$(xvZ# zTm;|sAik1m{Cb~KxSV2WKX-+voQXBCdh$fsAECrxec}VUeR>b-x=At!wk0+rV;eMj z>%XEUi9)!I(FBN5O9zjmD%Y;}`7*2{Q%^Lwmv^NqB6&Vfwxv03;(}(PZ&^Xi@XF15 z`gH{F+u3TgLPaloI$Pc_sbb)TYre{(0>}DvX5nuawcPiqp~!cP zFJ&;V>iIovnZ0cCuCB~3Y2cnYlxYCSZ5WSYzao1;?S_Dn)hs{% ze^UTM9VbLdqs|ir@CE1%Q~~XUa;TluPKpLK%WWX*Itbuqry`ssAo3f@OLzgwZnIn} z1@WE$2-4_6jNoyEc?~+z>`wuTmNbCLaV-kUWhWdX=D_w)n0B^yLbxO&*pc`~dvc9? zmC((3D-c+|7yHcgMwHG?r0czUUbvAHGd?HTzgyGfiwE2DT?`;$2^g~GUemtD4Yvb1g$~e5sg(+6WkR;NQTbSo;f%etslI@Oi> z1-Ac?N8CvXJuP~aJwv1c=c{GZGMygOS1O$z+8^^#3flP|D|xXam9|UYEan%hhTEhw z#$KY$?r-KO4Z-f2)R%?+&IjOb6Gb<0vqPHt!HQAdlO=Y zgUYUgyMaq&9r<) zVC2MlPJncNYRktPfHv?*#&KedUD?=fvWu({hM*oWHB{G7n$8b=f?LEbo_$%X@tDAmR>oSAW-m^mc*(Sco5mVMvsm|om2}~ z0>+^~@*dn<~p(BO=!XMJvl+|^BO+~e)GEJAh(82wzuUe z1KZZ5kowS7VE*W%zzGNK*!5+0)1JDmne1xEYLag3zz@|NYtuV72f{DvkT!*dCA%w6 zNX#Hjj4JY%@rYo6WMN~EfuvR%Jp<-8*B+acAbA0YP@P>(dcFlF*wRQ%XBlPk0=OEW z5Z0B9P2%MigGbh@p&`B3RWMw$MQless{Mo?=AR128c>Q%_a^Y`tF5c#aX_*~G@^9^EWYo= zEI;-YSb`c?6kY{ug#{mR~y$6ADals+rALK3vQ%K5C zvQwLNb6P@jQ==b`$LvZ@<|Xp$VqCy!OAOSDF|d6w2Lhh7a6J2rxjvwspYKQff-Oa~o?BsF z)N$?XfI&}DuzU5`Q93tdVhOUSj-1vDOc0I$JCJehII^*-VR*m4b$Z=tI7Wqvhds&41y#2_VyJiSSZ! zQzSs?8XvXGo!zTL?YOFU+DYmP0-{@OK15YIs`v7}et0d_5gSV}u2?GfLyy>{ZB=B^ z=gN%tZLh4gaTN{LmRxhTk4NIs17ziZXrwXPr7hzOP-3GL#A?$YOzGazw&_ ziwF)54RTjWN_`gCFrCf_Gs)HW;nA9kLD*RU&q2G;cYdt9s{Cs%z)TsngraGFoefmQ z9v9m1_s>rw)MQM7+c<{UgAUTx!+3F7zxG8yoCSkjXFUGRsKG^;D9d zqzsZ_$#-9;91Zo7)WGKcYj0lab<;9$?qyEq!dxBu-7X+dIEDmVrY@<;Qc^QGVRIxt z-jT_3QF;^oB^nTL0KLyPO-P$zZ2N}2jsg$m&_R82fMmq%$=xk8*d*Z8qgvk~i@3FK zt#<#5q*IdlG^@#n& zXCP4oS#eqDdHtwy;~yc_jispr$R5I|*34m?_$_G2FT`roJ``by}Y^C zLFrT>)@#G~`#cJrlH-OoF$GSikr{$P{x<*U0LDFdx)It>(Sz=UhT|H91us=yD#h44}6Ds^#Q z74_-3=42A&e8Brhf7l+2i~GrcsZM?YE`QkJ(Xd(xI+KM7%m`T2>Zk+{l>&sZ{Nrf#rB0 zTWCMfwdYxPzPMUX$YO$NHRX$wzYwzeCK6@Y`C_MmTqGH$rdk=(rn=xA^la|Oq4yTu z|CVFqXh9B}>DoZ9NbTl%&&*V`1nfXOfX7v7G!8HXVKi!?8B2K?1Pw02F6g5sBZD$!)?xG*S~w2Iunak$;&dyDTM zd29)?OLh`U_+i(3TlXmn!;>|of*6cJ$oqVI->Zd$Z3QO^Je0{q4A+MV&e;pK$`@0Rw$f607B z6bF4J^YiH+7eDceK4-zn-dRw;keMp5Q7o+*o=hcg=YRvstQ3vAGVxWxR+~qgJh};f zaOt9l{Vxt-aR!3tvzntWot%%WChfc;itxTSGOO%gbdxJM^>R(<3Yw#9?#892xrv8` z4Fq*&b{gN+l(Iksj1p^68zQZb)+K8dZ>Ex`i>KRvdVv)bk-BF>( zmJSTL54)v7^K9;~oQmS}jUke2Xv2mCipAC6&QAcja$lIz$1|Z4imI_Us_5){o>{OEhIJb9(h>WQsaC3xk4@X zJK~v1{8w4l7o!YaH9anYk;RH9WpfYUdvxxA+0`%BZwRm>JBj&;d{(@jCN;Jpplzqr zYUb4%``&$)C3*YprKTOB6#d4UZ_}gxI4sPHeWhX9V4&S-AJyDe` zE3#p!oT85~E!XqChRfH8UpRCsY--=Ae1^|r<_oKsy(Tq3Xqhc`sA?zoa|!(34ohjW zWR^!SVjl2*L2y1)yN@`v5N%D9g|o>Yl)j4WOidF@VS@njLytma6C zRx^|8^DOe$9uqeqHY;LyYPZ3o&+Iiq-poK#O_Id~lhlS^?K>0f>c;BD@T4pXi;w^H zk>p%UT}2aCvLCH-nAoqvC&=`}xwrw@65FJ4<8L*G{xY-f$j3j{1wU~!O3N#U)>pYc z2>$t}i(0Gqjs~rHVztAu`S-A&>$7feJvjFJ@7~}3TpLOH;np|b7i;hO=IZvb&n|nL zuKWD+A*Fwpr1D{)xL)cL(qlI1J|!U)&Sf-C>iSQMN9HYr+Vk|}aaqXgl()}P_lBzc z`Wh&w^=U&+L7cRvh>qip zTjcNk?qqb`HSU{cA65bXgVM>fZK-4j?xeqleb1m%h$Mb-@KL?daNxzB`GM(Z027`E zR+#t??<%_CrmBO4=U%_nfp7zhiGP?pah~d2mFCqyO*hYQ*Evi5Z%8J{bkVL*^0b7h7UGfS$fM@;K;jfz&B+jX&>F~4f*U-T%{ieKV#VWJ)YT;>% z9>&78UxV|@;_ENhRw~&l81|{^S3ONF%wyH>F$fNG%w}bP*V#76$=W?DoP&txrmyL= zv@Hg-&8yhI!ZsL3#Vt{))P^RLyXv0J-7fZRyAi7yW+@)*dwRq_;KR&Iki}KkotxiY z$LMtNvS;Hm#`mCUV~5k?LnpK*v%*6T&)5HL%>u&)Bmdw$H3-f9b~-=IvS+Y`3VFuL z2T$j%v+nh#_ga{gS0A=HXe^H*2{L+|~>8;_WhgZk*%YnX(Nj5cv$&a*+3c zo!M$xv%r!&X~8ThU*mDcYjA@sxW0P-z)*M?P0o9ft@*{MUUSu(#o`1y*gPSe^hBCT ziHn!YM)tEETBx%&Z{|ikH+-9O7o$z9f5b(e)ED$j)pOBdzE7Nj-yi1OoepcT6-A-R&z5A6LH(S#K3 z9^)}ZPHqloEID#dblx_i>KlF=9_`&`P>aVUm5(JgGxql| zyBRF;)`wx23I>z4BtCddNZQYfqt;x#%BAsXDe0hTh!OY5P|O0=j5)w^RXWPwUgL@d zrQ@}1>48O%WGvLSKemAwCh4Ga9q#HK-qY$73iyF2=BQ5YU9RTBf^XZ8abk+TIZN#2 ziH5b3^7nezPfDG10t57C!2ducZhIZl7;b}3F3L*pH_CTfdP}hjKRX+YNA(s|krlrv zu%ySzvAy~cp=pXkQqSEx+Hl%|RzS#1Oab z_SgUz_>L-jX2l21^T8Va&$6?+oeXaKIZMV;g|PvW*Qvrrj){Twj4Y75I2fbVu+DK_ zZ5SlI6#x30N9GG1ez>!_&MRRyxmw;jEv4to#)Z-hz#Pw}8V+)wh6Du1oVF<#2w{2+ zw>nA3hUCRZ&*dL(D21+ZglCLi*Guc~1*KleOA^qVf>B!=In8BENtzdBvf60~>1=&CrF zxT&DXBjS*+akhkhZer8GHBa*0TM>d$%Mh}-Xdg?wGi^lm2oRnDY~k+E1FP>3>JQD5 z&wuV*P$g(V*Bd=S=7NDi`NjpsSm=S9{p!g)`2r?GksgY%{NY)>2*V+?DAq?Tsd!Hx zlD|v!bM!Tq9>~}kQ{&g1#UX#9sEnax}n zYypqM^!rk-iRBE>gm$J4zgZ!kt6JLoG7P;ry6W92wzFh7RU9imEBv4tkcl1zyJdQ2 z1Qy>?4Vz9s((AWP_9phiSJ2niI}wfIzKishkn81vLuVJ-FeXR2nd7yVu@Mqt+{oT( znMt6+n|ogM@_=L+pqLi`u$Yew|7z%AX~`1T08kt2%w}Ys zRZlu-vvVVkR;3?qb;?(Vimv|Dgg*>s<8YqS+|)F-DCVIryk0s< z@yd^{ySz7vc!<_=LvB*B6m&>QsPj~j3O2-edfC4S|1d6O>o*fO&_x~01IJnv*Qyx2 z0`1wEcT(1AeISG(FT1AVEcihM@f33EWcj74VaM#k)4|IqjR`h5 zz(v)x0lE+{CCu_#U-K9K6cVG@49*|8+QxqPMkB=r^k)6)V-51lsYk9~c=Of=9A2UZ zFYtMCe}6n)$$myzHTf_B$U( zOZYncg(zcNas(y0MNX~N0Li35mI83};+XKm6yC|AenL2@5UfJAJ^(?hpOpR}QfPY8 z(ADnsK~31EW!$E{I-t*(v-p<3&=cD~y#S*08S}g=8^M`H=so0QzGcFzC184=xhPd9 z+}&ynBpK006Jr-ddLT}OG;_yR4dm1GP5aUhqbl>{DWZ62Y?Pt-?De>3^&BK(EF z77%oeK6ud7gn(5z+0H#cj@vVFou$0UHgwYD{-TN|)nGm7HuPICpf1QtnBQlzc;6%g z*Ivq=FAz`P*D%p#eFO$ra{4!rZuFlTX}MZnHiL7Jft$>L1=0|zntqpeBT`2B-T?F4 zBD?^NcNm|}>^X{vp~e*qy~dZ2AN8GsYTm&iW?Np�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 Ijqk<(1{7GekpKVy diff --git a/docs/articles/Summary_files/figure-html/unnamed-chunk-18-1.png b/docs/articles/Summary_files/figure-html/unnamed-chunk-18-1.png deleted file mode 100644 index 4172db27f66737abe0def88ded602a0a4820d45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19116 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 E3pHm0G5`Po diff --git a/docs/articles/Summary_files/figure-html/unnamed-chunk-22-1.png b/docs/articles/Summary_files/figure-html/unnamed-chunk-22-1.png deleted file mode 100644 index 07c29b4ab1cc60b22cd3eef1daef2407d1bed919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24472 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 aE80iu>|gi#*n(H*@bgwbmYsFK_ul{%xeg)# diff --git a/docs/articles/Validation.html b/docs/articles/Validation.html deleted file mode 100644 index 5b2bc5b1..00000000 --- a/docs/articles/Validation.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - -Validating humdrum data • humdrumR - - - - - - - - - - Skip to contents - - -
- - - - -
-
- - - -
-library(humdrumR)
-#> Loading required package: rlang
-#> 
-#> Attaching package: 'humdrumR'
-#> The following objects are masked from 'package:stats':
-#> 
-#>     lag, sigma, step
-#> The following object is masked from 'package:graphics':
-#> 
-#>     segments
-#> The following object is masked from 'package:methods':
-#> 
-#>     signature
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/WorkingWithData.html b/docs/articles/WorkingWithData.html deleted file mode 100644 index 882d3b8e..00000000 --- a/docs/articles/WorkingWithData.html +++ /dev/null @@ -1,1350 +0,0 @@ - - - - - - - - -Working with humdrum data • humdrumR - - - - - - - - - - Skip to contents - - -
- - - - -
-
- - - -

Once we have imported humdrum data into -R, we’ll be ready to actually work with our data! The humdrum data -you’ve imported is stored in a humdrum\(_{\mathbb{R}}\) data object, which gives us -some special tools for working with it.

-

Let’s load some of the prepackaged data, as we learned in the read/write vignette.

-
chorales <- readHumdrum(humdrumRroot, 'HumdrumData/BachChorales/chor.*.krn')
-
-chorales
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:          **kern        **kern        **kern        **kern
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:             4GG            4B            4d            4g
->        21:              =1            =1            =1            =1
->        22:              4G            4B            4d            2g
->        23:              4E           8cL            4e             .
->        24:               .           8BJ             .             .
->        25:             4F#            4A            4d           4dd
->        26:              =2            =2            =2            =2
->        27:              4G            4G            2d           4.b
->        28:              4D           4F#             .             .
->        29:               .             .             .            8a
->        30:              4E            4G            4B            4g
->        31:              =3            =3            =3            =3
->        32:              4C           8cL           8eL           4.g
->        33:               .           8BJ            8d             .
->        34:            8BBL            4c            8e             .
->        35:            8AAJ             .          8f#J            8a
->        36:             4GG            4d            4g            4b
->        37:              =4            =4            =4            =4
->        38:             2D;           2d;          2f#;           2a;
->        39:             4GG            4d            4g            4b
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:            2AA;           2c;           2e;           2a;
->        62:              2A            2e            2a           2cc
->        63:              =9            =9            =9            =9
->        64:              4E            4e            4g            4b
->        65:             8DL            4e            4g           4cc
->        66:             8CJ             .             .             .
->        67:             4BB            4d           8gL           4dd
->        68:               .             .           8fJ             .
->        69:              4C            4c            4e            4g
->        70:             =10           =10           =10           =10
->        71:              4D           8F#            4d            4b
->        72:               .            4G             .             .
->        73:              4D             .            4c            4a
->        74:               .           8F#             .             .
->        75:            2GG;           2G;           2B;           2g;
->        76:             =11           =11           =11           =11
->        77:              2C            2G            2e            2g
->        78:             4AA            4A            4e           4cc
->        79:              4E           4G#           8eL            4b
->        80:               .             .           8dJ             .
->        81:             =12           =12           =12           =12
->        82:              4F            4A            4c            4a
->        83:              4C            4G            4c            4e
->        84:            4BB-            4G           [2d            4g
->        85:             4AA            4A             .            4f
->        86:             =13           =13           =13           =13
->        87:            4GG#            4B           4d]           1e;
->        88:             4AA            4A            4c             .
->        89:            2EE;         2G#X;           2B;             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->               *Token :: character
-

So we’ve got ten files of **kern data. How do we access -or manipulate this data?

-
-

With and within you -

-

The key functions for working with humdrum\(_{\mathbb{R}}\) data objects are -with and within. These functions allow you to -get “inside” your data. Basically, once you call -with/within, all the data fields within the -data become available to you, to do with as you will.

-
-

With -

-

Let’s start with with. You should call with -with a humdrum\(_{\mathbb{R}}\) data -object as the first argument. Your second argument can be any arbitrary -R expression you like, and can use fields of the humdrum data. -An “expression” is just a valid bit of R code; for example, -2 + 2, c(1, 2, 3), -(x - mean(x))^2, and -nchar(letters) |> mean() are all examples of -expressions. So “any arbitrary R expression” is just a fancy way of -saying any R code that you want. When we execute an R command, -R “evaluates” the expression(s) and returns their results.

-

As a starting point, lets tabulate all the tokens we have in our -dataset. When you first load humdrum data, the original data tokens are -always put into a field called Token. We will use the -awesome built-in R function, table, to tabulate -the unique tokens in our Token field. However, we can’t -access the Token field directly; if we just write the -expression on the table(Token) we’ll get an error—R will -not be able to “find”, and will say -“Error: object 'Token' not found.” Instead, we use -with to enter the data, where R can “see” -Token (and all other data fields):

-
with(chorales, table(Token))
->    Token
->        [2d     [2e     [4a     [4A     [4B     [4c     [4d     [4e     [4E     [4f 
->          1       1       1       2       1       1       1       2       2       1 
->       [4f#     [4g     [4G    [8cJ    [8CJ    [8gJ    16AL  16B-Jk 16b-XJJ  16BBJJ 
->          1       4       2       1       1       1       1       1       1       1 
->      16BJJ   16C#L  16c#LL   16ccL  16ccLL  16d#JJ  16ddJJ   16dJJ   16EJJ    16eL 
->          1       1       1       1       1       1       1       2       1       2 
->      16F#L     1e;    2.a;    2.A;   2.AA;     2.b    2.b;    2.B;   2.BB;    2.c; 
->          1       1       1       1       1       1       1       1       1       1 
->       2.C#   2.c#;     2.d    2.d;     2.e    2.e;    2.ee    2.f;   2.f#;   2.FF; 
->          1       1       1       2       1       1       1       1       1       1 
->       2.g;   2.GG;      2a      2A    2a-;    2A-;     2a;     2A;   2AA-;    2AA; 
->          1       1      17      10       1       2       9       2       1       4 
->         2b      2B    2b-;     2b;     2B;     2BB   2BB-;    2BB;      2c      2C 
->         10       2       1       3       8       2       1       1       1       1 
->        2c;     2C;     2c#    2c#;     2cc    2cc#   2cc#;      2d      2D    2d-; 
->          6       1       5       3       3       3       1       6       5       1 
->        2d;     2D;     2d#     2D#    2d#;     2dd    2DnX      2e      2E    2e-; 
->          6       5       1       1       1       8       1      13       4       1 
->        2e;     2E;     2E#    2EE;     2f;     2f#     2F#    2f#;    2F#;    2FF; 
->          9       5       1       1       4      10       4       5       1       3 
->      2FF#;      2g      2G     2g;     2G;     2g#     2G#    2g#;    2G#;   2G#X; 
->          1       7       1       3       1       4       1       1       4       1 
->       2GG;     4.a    4.a-     4.b     4.B    4.b-    4.BB     4.c   4.cc#     4.d 
->          2       2       1       2       3       2       2       1       1       1 
->       4.dd     4.e    4.e-    4.ee     4.f    4.f#     4.g      4a      4A     4a- 
->          1       1       1       1       3       1       5      90      58      15 
->        4A-    4a-;    4A-;    4a-X     4a;     4A;     4a#     4A#     4AA    4AA- 
->          4       2       2       1       8       3       4       2      20       2 
->      4AA-;    4AA;    4AA#    4anX      4b      4B     4b-     4B-    4B-X     4b; 
->          1       5       1       1      81      56      16      10       1       9 
->        4B;     4B]     4BB    4BB-    4BB;      4c      4C     4c;     4C;     4c] 
->          9       1      25       7       3      49      23       8       2       1 
->        4c#     4C#    4c#;    4C#;     4cc    4cc;    4cc#   4ccnX    4CnX      4d 
->         27      19       2       1      48       3      28       1       1      53 
->         4D     4d-     4D-     4d;     4D;     4d]     4d#     4D#    4d#;     4dd 
->         30       9       4       8       4       1       9       8       3      29 
->        4DD    4dd-    4dd;    4dd#    4dnX    4DnX      4e      4E     4e-     4E- 
->          1       7       2       3       2       1     103      43       7       6 
->       4e-;     4e;     4E;     4e]     4E]     4e#     4E#    4e#;    4E#X     4ee 
->          2      14       7       1       1       3       2       1       1      20 
->        4EE    4ee-   4ee-X    4ee;    4EE;    4enX    4EnX      4f      4F     4f; 
->          2       3       1       1       2       1       1      50      12       2 
->        4F;     4f#     4F#    4f#;    4F#;    4F#X   4F#X;     4ff     4FF    4ff; 
->          2      47      30       4       2       1       1       6       3       1 
->       4FF;    4ff#    4FF#      4g      4G     4g-     4g;     4G;     4g]     4G] 
->          1       1       2      66      33       1       8       3       2       1 
->        4g#     4G#    4g#;    4G#;    4G#X   4G#X;     4gg     4GG    4GG;    4GG# 
->         34      21       5       3       1       1       1      15       5       2 
->       4gnX    4GnX      4r     4ry    8.cL      8a      8A     8a-     8A-    8a-J 
->          1       1       2       2       1       5       5       2       1       2 
->       8A-J    8a-L    8A-L   8a-XJ     8A#    8a#J    8A#J     8AA    8AA-    8AAJ 
->          1       4       1       1       2       1       1       3       1       7 
->       8AAL     8aJ     8AJ     8aL     8AL    8aL]    8AL]   8AnXL      8b     8b- 
->          4      15      17      10      12       1       2       1       2       1 
->        8B-    8b-J    8B-J    8b-L     8BB   8BB-J   8BB-L    8BBJ    8BBL     8bJ 
->          1       1       6       2       3       6       3       6       4      11 
->        8BJ     8bL     8BL      8c      8C     8C#    8c#J    8C#J    8c#L    8C#L 
->         15      14      18       1       5       2       3       2       5       4 
->      8c#XJ     8cc   8cc#J   8cc#L    8ccJ    8ccL     8cJ     8CJ     8cL     8CL 
->          1       2       2       2       7       7      15       8      14      14 
->       8cL]    8CL]   8cnXJ      8d      8D     8d-     8D-    8D-J    8D-L   8d-XJ 
->          1       1       1       5       3       1       6       4       2       1 
->       8d#J    8D#J    8d#L    8D#L     8dd   8dd#J    8ddJ    8ddL     8dJ     8DJ 
->          5       1       1       2       1       1       2       4      19      15 
->        8dL     8DL    8dL]    8dnJ      8e      8E     8E-    8e-J    8E-J    8e-L 
->         24       6       1       1       6       2       6       1       1       1 
->       8E-L    8EEJ    8eeL    8EEL     8eJ     8EJ     8eL     8EL    8eL]    8EL] 
->          4       1       2       1      20       7      35      15       2       1 
->         8f      8F     8f#     8F#    8f#J    8F#J    8f#L    8F#L   8f#L]   8F#XJ 
->          3       4       2       3      26      14      12       7       1       1 
->      8f#XL   8FF#J    8FFL     8fJ     8FJ     8fL     8FL    8fL]   8FnXL      8g 
->          1       2       2       4       5       5       6       1       1       3 
->         8G     8g#     8G#    8g#J    8G#J    8g#L    8G#L   8g#XJ     8GG    8GGJ 
->          4       4       4       7       7       5       3       1       2       2 
->       8GGL     8gJ     8GJ     8gL     8GL    8gL]    8GL]   8gnXL   8GnXL 
->          2      14       8      14      17       3       1       2       1
-

It worked! However, there’s a lot of unique tokens in this -data, so its kind of a mess. Let’s take a page from the pitch -vignette and extract just the pitch information using the -kern function:

-
with(chorales, 
-     kern(Token) |> table())
->    
->      a   A  a-  A-  a#  A#  AA AA- AA#   b   B  b-  B-  BB BB-   c   C  c#  C#  cc 
->    160 114  29  11   5   5  44   5   1 134 115  24  19  48  17 102  57  48  30  73 
->    cc#   d   D  d-  D-  d#  D#  dd  DD dd- dd#   e   E  e-  E-  e#  E#  ee  EE ee- 
->     37 134  70  12  16  21  12  48   1   7   4 213  89  13  17   4   4  25   7   4 
->      f   F  f#  F#  ff  FF ff# FF#   g   G  g-  g#  G#  gg  GG GG# 
->     74  30 111  65   7  10   1   5 134  73   1  61  46   1  29   2
-

Much better! Notice that the whole expression -kern(Token) |> table() is executed within the data. Our -expressions can get as complicated as we want. Let’s add a call to -sort:

-
with(chorales, 
-     kern(Token) |>  table() |>  sort())
->    
->    AA#  DD ff#  g-  gg GG# dd#  e#  E# ee-  a#  A# AA- FF# dd-  EE  ff  FF  A-  d- 
->      1   1   1   1   1   2   4   4   4   4   5   5   5   5   7   7   7  10  11  12 
->     D#  e-  D- BB-  E-  B-  d#  b-  ee  a-  GG  C#   F cc#  AA  G#  BB  c#  dd   C 
->     12  13  16  17  17  19  21  24  25  29  29  30  30  37  44  46  48  48  48  57 
->     g#  F#   D  cc   G   f   E   c  f#   A   B   b   d   g   a   e 
->     61  65  70  73  73  74  89 102 111 114 115 134 134 134 160 213
-

Ah, now we can clearly see that the top 10 most common notes in the -data are e, a, g, d, b, B, A, f#, c, E.

-
-

The last step might be to make a plot. We’ll use the built in -tail function to grab the top (last) 10, and the built-in -barplot function.

-
-with(chorales, 
-     kern(Token) |> 
-       table() |> 
-       sort() |> 
-       tail(n = 10) |> 
-       barplot())
-

-

Notice that when writing a big complex expression like

-
 kern(Token) |> 
-       table() |> 
-       sort() |> 
-       tail(n = 10) |> 
-       barplot()
-

it’s helpful to spread the expression across multiple lines. After -the |> (pipe) operator is a great place for this.

-
-
-

Within -

-

In many cases, we want to apply functions to our humdrum data, but -keep the humdrum/humdrum\(_{\mathbb{R}}\) structure in place. This is -what within is for. Where with just returns -what ever the output of your commands are, within will -(attempt to) put the results of your commands “back inside” the -humdrum\(_{\mathbb{R}}\) data object, -as a new field.

-

For example, let’s say we want to translate our kern -data into a different pitch representation, like scientific pitch. We -can do this with the pitch command. If we use -with

-
with(chorales, pitch(Token))
->    **pitch (character)
->       [1] G2  G3  E3  F#3 G3  D3  E3  C3  B2  A2  G2  D3  G2  F#2 G2  A2  B2  C3 
->      [19] D3  G2  G2  G2  A2  B2  B2  A2  G2  D3  E3  E3  D3  C3  B2  C3  D3  G2 
->      [37] A2  B2  G2  C3  G2  F#2 G2  A2  B2  G2  D3  E3  D3  C3  B2  A2  G2  D3 
->      [55] G3  G3  F#3 E3  E3  D3  C3  D3  G2  B3  B3  C4  B3  A3  G3  F#3 G3  C4 
->      [73] B3  C4  D4  D4  D4  A3  B3  C4  D4  E4  D4  C4  B3  D4  D4  C4  B3  A3 
->      [91] B3  C4  D4  D4  D4  B3  G3  B3  E4  D4  D4  D4  C4  D4  D4  C4  B3  C4 
->     [109] D4  D4  C4  B3  C4  D4  D4  D4  D4  E4  E4  D4  C4  B3  D4  D4  E4  D4 
->     [127] D4  B3  E4  D4  E4  F#4 G4  F#4 G4  D4  E4  F#4 G4  F#4 D4  G4  G4  F#4
->     [145] E4  F#4 G4  G4  A4  G4  F#4 G4  F#4 E4  E4  F#4 G4  A4  A4  G4  F#4 G4 
->     [163] F4  E4  G4  A4  G4  F#4 G4  F#4 F#4 E4  E4  F#4 G4  F#4 G4  A4  G4  F#4
->     [181] G4  F#4 D4  G4  G4  D5  B4  A4  G4  G4  A4  B4  A4  B4  D5  C5  B4  A4 
->     [199] G4  B4  B4  C5  D5  D5  C5  B4  A4  G4  B4  C5  D5  C5  B4  G4  B4  D5 
->     [217] C5  B4  A4  G4  A4  B4  A4  B4  D5  C5  B4  A4  G4  A3  G#3 F#3 C#3 D3 
->     [235] D#3 E3  B2  E2  E3  A3  B3  C#4 B3  A3  B3  B2  E3  C#3 F#3 G#3 A3  E3 
->     [253] C#3 A2  D3  C#3 D3  E3  C#3 B2  C#3 D3  G3  F#3 B2  C#3 F#3 E3  D3  C#3
->     [271] B2  A2  B2  C#3 D3  E3  B2  F#3 G#3 A3  G#3 E3  A3  A3  G#3 F#3 E3  D3 
->     [289] E3  A2  C#4 C#4 C#4 B3  A3  G#3 F#3 B3  A3  G#3 E4  E4  D#4 C#4 B3  A3 
->     [307] G#3 G#3 A3  B3  C#4 D4  E4  E4  D4  E4  E4  E4  F#4 B3  A#3 B3  C#4 D4 
->     [325] G#3 A3  G#3 F#3 E3  E4  D4  C#4 D4  E4  F#4 G#4 F#4 F#4 E4  D4  C#4 B3 
->     [343] C#4 D4  E4  D4  C#4 F#4 B3  E4  D4  C#4 E4  F#4 E4  F#4 F#4 E4  D#4 B3 
->     [361] G#4 A4  G#4 F#4 E4  E4  D#4 B3  C#5 B4  A4  A4  G#4 A4  G4  F#4 G#4 A4 
->     [379] G#4 A#4 B4  A4  G4  F#4 E4  F#4 F#4 E4  D4  C#4 D4  E4  F#4 G#4 A4  E4 
->     [397] B4  A4  G#4 F#4 E4  F#4 G#4 A4  A4  G#4 E4  A4  A4  A4  A4  B4  G4  F#4
->     [415] E4  B4  C#5 B4  A4  G#4 F#4 G#4 F#4 E4  E5  D5  C#5 B4  A4  A4  B4  C#5
->     [433] B4  C#5 D5  C#5 B4  A#4 B4  E4  A4  B4  C#5 D5  E5  D5  C#5 B4  D5  C#5
->     [451] B4  E5  D5  C#5 B4  A4  B4  C#5 B4  A4  E3  A3  B3  C4  B3  A3  G#3 A3 
->     [469] E3  B2  C3  D3  E3  F3  E3  D3  E3  A2  F#3 G3  F#3 E3  B3  A3  G3  F#3
->     [487] E3  D3  C3  B2  E3  F3  C3  D3  E3  A2  B2  C3  D3  E3  A2  A3  G#3 A3 
->     [505] G3  F3  E3  D3  C#3 D3  D#3 E3  E4  E4  D4  E4  D4  C4  B3  C4  D4  E4 
->     [523] F4  E4  E4  D4  C4  D4  G#3 A3  G#3 C4  A3  G3  A3  B3  B3  B3  A3  B3 
->     [541] C4  F#3 E4  D4  C4  D4  E4  E4  E4  D4  C4  B3  C4  C4  B3  A3  A3  Bb3
->     [559] A3  E3  F#3 G#3 G#4 A4  G#4 A4  G#4 A4  B4  E4  F#4 G#4 G#4 A4  G#4 A4 
->     [577] G4  F4  E4  E4  D4  D4  D#4 E4  D#4 E4  D#4 E4  G4  F#4 E4  D#4 B3  A3 
->     [595] A4  G#4 A4  E4  E4  E4  E4  E4  E4  F4  G4  F#4 G#4 A4  E4  B4  C5  B4 
->     [613] A4  E5  E5  D5  C5  B4  D5  C5  B4  A4  B4  C5  D5  C5  B4  A4  A4  B4 
->     [631] A4  G4  F#4 E4  F#4 G4  A4  B4  G4  A4  B4  C5  B4  C5  B4  A4  G#4 A4 
->     [649] A4  E5  C5  D5  E5  D5  C5  B4  E3  D#3 B2  E3  F#3 G#3 A3  E3  A2  D#3
->     [667] E3  F#3 G#3 C#3 F#3 E3  D#3 C#3 B2  F#3 B2  E3  C#3 D#3 E3  F#3 B3  G#3
->     [685] E3  F#3 B2  E3  G#3 E3  A3  B3  C#4 E#3 F#3 C#3 E3  B2  C#3 D#3 E3  B2 
->     [703] A#2 B2  E2  E4  F#4 E4  D#4 E4  A3  B3  C#4 D4  E4  D4  C#4 B3  B3  A3 
->     [721] G#3 F#3 F#3 B3  A#3 F#3 G#3 C#4 F#3 F#4 F#4 B3  A#3 D#4 E4  B3  E4  E4 
->     [739] C#4 D4  C#4 C#4 B3  B3  E4  E4  D#4 B3  F#3 G#3 G#4 F#4 G#4 A4  G#4 F#4
->     [757] E4  A4  G#4 E4  F#4 E4  E4  D#4 E4  C#4 F#4 E4  D#4 E4  D#4 E4  F#4 G#4
->     [775] A#4 B4  A#4 B4  B4  F#4 F#4 G#4 E4  F#4 G#4 A4  E4  F#4 G#4 F#4 E#4 E4 
->     [793] D#4 C#4 B3  B3  C#4 B3  B3  B4  B4  B4  B4  D5  C#5 B4  A4  B4  G#4 E4 
->     [811] F#4 G#4 A#4 B4  C#5 B4  B4  E5  D#5 C#5 D#5 E5  D#5 C#5 B4  B4  E5  B4 
->     [829] C#5 G#4 A4  B4  A4  G#4 G#4 F#4 A4  G#4 F#4 C#4 D#4 E4  G3  C3  D3  E3 
->     [847] F#3 G3  A3  D3  G3  F#3 G3  F#3 E3  B2  C3  D3  G2  G3  F#3 E3  D3  E3 
->     [865] F#3 G3  D3  G2  C3  G3  F3  E3  D3  C3  B2  C3  D3  E3  A2  D3  G3  A3 
->     [883] B3  C4  F#3 G#3 A3  A2  E3  G#2 A2  B2  C3  A2  F3  E3  D3  E3  E2  A2 
->     [901] A2  B2  C#3 D3  C#3 D3  A2  D3  B2  E3  D3  G3  F#3 E3  B2  A2  G2  C3 
->     [919] B2  A2  D3  C3  D3  G2  B3  C4  B3  A3  E4  A3  B3  C4  E4  D4  D4  D4 
->     [937] D4  G3  A3  B3  G3  E4  A3  B3  C4  B3  B3  A3  D4  G3  A3  A3  G3  G3 
->     [955] F#3 G3  G3  G3  G3  G3  G3  G3  A3  B3  A3  A3  G3  G3  D4  C4  B3  A3 
->     [973] E4  E4  E4  E4  D4  C4  B3  A3  A3  G#3 A3  B3  G#3 A3  G#3 A3  E3  F#3
->     [991] G3  D4  C4  Bb3 A3  A3  G3  F#3 F#3 G3  D4  D4  E4  D4  E4  D4  C4  D4 
->    [1009] E4  D4  C4  B3  G4  G4  F#4 G4  F#4 E4  G4  G4  F#4 G4  A4  G4  G4  G4 
->    [1027] G4  G4  F#4 D4  D4  D4  E4  F#4 E4  E4  D4  D4  C4  B3  E4  D4  E4  F4 
->    [1045] E4  F#4 G4  F#4 G4  A4  F#4 D4  G4  G4  A4  B4  B4  G#4 A4  G#4 B4  A4 
->    [1063] E4  C4  D4  E4  F4  E4  D4  C4  A4  D4  E4  F4  E4  D4  E4  E4  D4  D4 
->    [1081] C#4 D4  D4  C4  B3  A3  G3  F#3 G3  G4  F#4 G4  G4  G4  G4  F#4 D4  D5 
->    [1099] E5  D5  C5  B4  C5  D5  C5  B4  C5  B4  A4  B4  C5  D5  C5  B4  A4  G4 
->    [1117] A4  G4  G4  A4  B4  C5  B4  A4  B4  A4  G4  G4  A4  B4  C5  D5  E5  B4 
->    [1135] C#5 D5  B4  C5  D5  E5  D5  C5  B4  C5  B4  E5  E5  E5  A4  D5  C5  B4 
->    [1153] A4  C5  B4  A4  G4  A4  G4  F4  E4  D4  D4  G4  A4  B4  C5  D5  C5  B4 
->    [1171] A4  B4  C5  A4  G4  F2  F3  E3  Eb3 D3  C3  D3  E3  C3  F3  Bb2 A2  G2 
->    [1189] F2  A2  C3  F2  .   A3  B2  C3  D3  F3  A3  G3  F3  D3  G3  C3  F2  G2 
->    [1207] A2  Bb2 C3  F2  A3  C4  C4  C4  D4  G3  C4  C4  Bb3 C4  D4  Bb3 C4  C4 
->    [1225] C4  .   F4  F4  E4  E4  D4  C4  C4  B3  E4  C4  Bb3 C4  D4  C4  Bb3 A3 
->    [1243] C4  F4  G4  F4  F4  E4  F4  G4  E4  F4  F4  F4  E4  F4  E4  F4  .   A4 
->    [1261] A4  G4  G4  C5  Bb4 A4  A4  A4  G4  G4  F4  F4  E4  F4  F4  E4  C4  F4 
->    [1279] A4  G4  A4  Bb4 C5  A4  D5  C5  Bb4 A4  G4  A4  .   C5  D5  E5  F5  E5 
->    [1297] D5  C5  A4  Bb4 A4  G4  G4  F4  A3  F#3 C#3 D3  D3  C#3 D3  E3  A2  A3 
->    [1315] E#3 C#3 F#3 E3  D3  C#3 D3  E3  A2  A2  D3  A3  G#3 F#3 E#3 F#3 B2  C#3
->    [1333] F#2 D#3 E3  D3  C#3 A2  B2  E3  C#3 F#3 E3  F#3 G#3 F#3 E3  A3  A2  D3 
->    [1351] C#3 B2  B3  A3  G3  F#3 E3  F#3 G3  F#3 B2  E3  A3  G#3 F#3 B3  A3  G3 
->    [1369] C#3 D3  A3  D#3 E3  A2  B2  E3  C#3 F#3 E3  B2  C#3 D3  D#3 E3  E#3 F#3
->    [1387] G#3 A3  E3  F#3 D3  E3  E3  A2  C#4 C#4 C#4 A3  G#3 A3  G#3 A3  C#4 C#4
->    [1405] B3  A3  E4  E4  F#4 E4  C#4 C#4 D4  E4  E#4 F#4 G#4 C#4 D4  C#4 A3  A3 
->    [1423] G#3 A3  B3  C#4 B3  A3  G#3 G#3 A3  D4  B3  E4  E4  D4  E4  F#4 B3  E4 
->    [1441] D4  C#4 B3  A#3 B3  G#3 A3  A3  B3  B3  B3  A3  G3  F#3 A3  F#3 B3  C#4
->    [1459] B3  A3  G#3 G#3 A3  B3  B3  A3  G#3 D4  A3  G#3 C#4 F#4 E4  E4  E4  D4 
->    [1477] C#4 F#4 E4  D4  C#4 E4  F#4 E4  D4  C#4 B3  E4  F#4 E4  E4  E4  F#4 G#4
->    [1495] E#4 F#4 G#4 A4  G#4 E4  E4  F#4 G#4 A4  B4  A4  G#4 F#4 E#4 C#4 F#4 E4 
->    [1513] E4  E4  D#4 B3  C#4 C#4 F#4 E4  F#4 G#4 A4  G4  F#4 A4  B4  B4  A4  G4 
->    [1531] A4  B4  E4  D#4 E4  E4  F#4 F#4 G4  G4  F#4 E4  D4  E4  F#4 E4  E4  D#4
->    [1549] B3  C#4 C#4 D#4 E4  D#4 E4  F#4 G#4 A4  E4  G#4 A4  B4  A4  G#4 A4  A4 
->    [1567] G#4 E4  A4  A4  G#4 F#4 E4  A4  B4  C#5 C#5 C#5 B4  C#5 C#5 B4  A4  B4 
->    [1585] A4  A4  A4  B4  C#5 B4  C#5 A4  G#4 F#4 B4  B4  A4  G#4 A4  F#4 E4  E4 
->    [1603] A4  A4  B4  B4  C#5 B4  C#5 A4  A4  D5  D5  C#5 B4  C#5 B4  B4  C#5 C#5
->    [1621] D5  D5  E5  A4  C#5 B4  A4  G#4 A4  F#4 E4  E4  A4  G#4 F#4 E4  B4  C#5
->    [1639] B4  C#5 D5  C#5 B4  A4  G#4 A4  B4  C#5 B4  A4  F3  Eb3 Db3 C3  Bb2 C3 
->    [1657] F2  F2  F3  Eb3 Db3 C3  Bb2 Ab2 Db3 Eb3 Ab2 Db3 C3  Bb2 C3  Db3 Bb2 C3 
->    [1675] F2  F3  G3  A3  F3  Bb2 C3  Db3 Bb2 Eb3 F3  G3  Eb3 Ab3 Ab3 Db3 Eb3 F3 
->    [1693] Db3 Bb2 C3  Db3 Bb2 Eb3 C3  F3  Bb2 Bb3 Ab3 G3  F3  Bb2 C3  F2  F2  G2 
->    [1711] Ab2 Bb2 C3  D3  Eb3 F3  G3  G2  C3  C3  F3  Eb3 Db3 C3  Bb2 C3  Db3 Eb3
->    [1729] Eb3 Ab2 Ab2 Db3 Eb3 Db3 C3  Bb2 C3  Db3 Bb2 Eb3 F3  Eb3 Db3 C3  Db3 Eb3
->    [1747] C3  F3  E3  F3  G3  Ab3 G3  Ab3 Bb3 C4  C3  F3  F3  Ab3 A3  Bb3 C4  Db4
->    [1765] C4  Bb3 Ab3 Ab3 C4  Bb3 Eb4 Eb4 F4  Eb4 Db4 C4  Db4 Db4 G3  F3  Ab3 Db4
->    [1783] C4  Bb3 Ab3 A3  Bb3 C4  A3  Bb3 Bb3 Bb3 Eb4 Eb4 Eb4 Db4 Db4 F4  F4  Gb4
->    [1801] F4  Eb4 Db4 C4  C4  Bb3 C4  Db4 C4  Bb3 Ab3 C4  C4  C4  C4  C4  B3  C4 
->    [1819] G3  A3  A3  Bb3 Eb3 Eb4 Db4 C4  C4  Db4 Db4 F4  F4  Eb4 Eb4 G4  G4  F4 
->    [1837] F4  C4  F3  C4  C4  C4  C4  F4  F4  F4  E4  F4  F4  G4  E4  F4  C4  F4 
->    [1855] G4  Ab4 Ab4 Ab4 F4  G4  Eb4 F4  G4  E4  F4  F4  E4  C4  F4  F4  F4  F4 
->    [1873] G4  Ab4 Bb4 G4  Ab4 Ab4 F4  F4  Bb4 Bb4 Bb4 A4  F4  E4  F4  F4  E4  F4 
->    [1891] F4  E4  C4  Ab4 Ab4 G4  G4  G4  Ab4 G4  F4  E4  E4  F4  F4  F4  G4  Ab4
->    [1909] Ab4 F4  G4  Eb4 Eb4 F4  F4  Bb4 Bb4 G4  G4  C5  C5  Ab4 G4  Ab4 Bb4 C5 
->    [1927] Bb4 Ab4 G4  G4  A4  A4  C5  C5  Bb4 Ab4 G4  F4  F4  F4  Ab4 Bb4 C5  C5 
->    [1945] Bb4 Ab4 Ab4 Ab4 Bb4 Bb4 Ab4 G4  F4  F4  C5  C5  Db5 Db5 Bb4 Bb4 C5  C5 
->    [1963] Ab4 Ab4 Db5 Db5 C5  C5  Bb4 G4  Ab4 Bb4 Ab4 G4  G4  F4  F5  F5  Eb5 Eb5
->    [1981] D5  D5  C5  C5  C5  C5  Db5 C5  Bb4 Ab4 Ab4 Ab4 Ab4 Ab4 Db5 Db5 Bb4 Bb4
->    [1999] Eb5 Eb5 C5  C5  F5  F5  E5  E5  F5  F5  G3  F#3 E3  D3  G3  F#3 G3  A3 
->    [2017] A2  D3  D#3 E3  F#3 G3  C3  C3  B2  A2  G2  D3  D2  G2  D3  D4  C4  B3 
->    [2035] A3  D#3 E3  E2  A2  E3  F#3 G3  G#3 A3  A#3 B3  B2  E3  D3  C3  B2  A2 
->    [2053] G2  F#2 E2  F#2 G2  E2  C#3 B2  C#3 A2  D3  B2  C3  D3  E3  F#3 G3  C3 
->    [2071] D3  G2  B3  B3  C4  C4  D4  B3  A3  A3  A3  A3  A3  B3  A3  G3  A3  B3 
->    [2089] C4  D4  D4  D4  C4  B3  D4  E4  F#4 E4  D4  E4  F#4 B3  E4  D4  C4  G3 
->    [2107] A3  B3  C4  D4  E4  C4  C#4 B3  B3  B3  D4  D4  G4  G3  A3  B3  E4  D4 
->    [2125] E4  C#4 D4  D4  D4  C4  C4  B3  B3  A3  G3  G3  F#3 E3  F#3 C4  B3  D4 
->    [2143] E4  F#4 D4  E4  F#4 E4  F#4 G4  F#4 F#4 E4  D4  E4  F#4 G4  G4  F#4 D4 
->    [2161] F#4 G4  A4  G#4 A4  G#4 A4  A4  G#4 E4  E4  D#4 E4  E4  E4  F#4 G4  F#4
->    [2179] F#4 G4  A4  G4  A4  G4  A4  B4  B4  A4  A4  G4  G4  F#4 G4  F#4 E4  F#4
->    [2197] G4  A4  D4  E4  D4  D4  G4  G4  A4  B4  C#5 D5  D5  C#5 D5  B4  C5  B4 
->    [2215] A4  B4  A4  G4  A4  A4  B4  C5  C5  B4  A4  B4  A4  B4  B4  B4  C5  D5 
->    [2233] E5  E5  D#5 E5  F#5 G5  B4  C5  B4  A4  A4  D5  E5  D5  C5  B4  C5  A4 
->    [2251] G4  D3  C3  B2  A2  B2  C3  B2  A2  E3  E3  A3  G3  F3  E3  F3  C3  D3 
->    [2269] E3  C4  B3  A3  G3  F3  E3  D3  E3  A2  A3  E3  D3  C3  B2  C3  D3  D3 
->    [2287] G2  C3  A2  E3  F3  C3  Bb2 A2  G#2 A2  E2  G#3 A3  D4  E4  D4  E4  D4 
->    [2305] C4  B3  E4  E4  F4  G4  C4  C4  B3  A3  G#3 A3  B3  C4  D4  D4  E4  F4 
->    [2323] B3  C4  E4  E4  E4  D4  C4  F#3 G3  F#3 G3  G3  A3  G#3 A3  G3  G3  A3 
->    [2341] B3  A3  G#3 E4  E4  G#4 A4  G4  F#4 E4  F#4 G#4 G#4 A4  B4  C5  F4  E4 
->    [2359] D4  C4  B3  E4  D4  E4  F#4 G4  A4  B4  A4  G#4 E4  A4  G4  G4  G4  F4 
->    [2377] E4  D4  C4  B3  E4  E4  E4  D4  C4  C4  D4  D4  C4  B3  B4  E4  B4  C5 
->    [2395] B4  A4  G4  A4  B4  B4  C5  D5  C5  B4  A4  G4  F4  E4  A4  G4  C5  B4 
->    [2413] A4  D5  C5  B4  A4  C5  B4  C5  D5  G4  B4  A4  G4  G4  C5  B4  A4  E4 
->    [2431] G4  F4  E4
-

we just get all the notes! Let’s try within instead:

-
within(chorales, pitch(Token))
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:         **pitch       **pitch       **pitch       **pitch
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:              G2            B3            D4            G4
->        21:              =1            =1            =1            =1
->        22:              G3            B3            D4            G4
->        23:              E3            C4            E4             .
->        24:               .            B3             .             .
->        25:             F#3            A3            D4            D5
->        26:              =2            =2            =2            =2
->        27:              G3            G3            D4            B4
->        28:              D3           F#3             .             .
->        29:               .             .             .            A4
->        30:              E3            G3            B3            G4
->        31:              =3            =3            =3            =3
->        32:              C3            C4            E4            G4
->        33:               .            B3            D4             .
->        34:              B2            C4            E4             .
->        35:              A2             .           F#4            A4
->        36:              G2            D4            G4            B4
->        37:              =4            =4            =4            =4
->        38:              D3            D4           F#4            A4
->        39:              G2            D4            G4            B4
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:              A2            C4            E4            A4
->        62:              A3            E4            A4            C5
->        63:              =9            =9            =9            =9
->        64:              E3            E4            G4            B4
->        65:              D3            E4            G4            C5
->        66:              C3             .             .             .
->        67:              B2            D4            G4            D5
->        68:               .             .            F4             .
->        69:              C3            C4            E4            G4
->        70:             =10           =10           =10           =10
->        71:              D3           F#3            D4            B4
->        72:               .            G3             .             .
->        73:              D3             .            C4            A4
->        74:               .           F#3             .             .
->        75:              G2            G3            B3            G4
->        76:             =11           =11           =11           =11
->        77:              C3            G3            E4            G4
->        78:              A2            A3            E4            C5
->        79:              E3           G#3            E4            B4
->        80:               .             .            D4             .
->        81:             =12           =12           =12           =12
->        82:              F3            A3            C4            A4
->        83:              C3            G3            C4            E4
->        84:             Bb2            G3            D4            G4
->        85:              A2            A3             .            F4
->        86:             =13           =13           =13           =13
->        87:             G#2            B3            D4            E4
->        88:              A2            A3            C4             .
->        89:              E2           G#3            B3             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->                Token   :: character
->               *Result1 :: character (**pitch tokens)
-

Now we get our humdrum\(_{\mathbb{R}}\) data back, but the -Token data has been transformed from **kern to -**pitch. Notice, that there are now two “Data fields” -listed at the bottom: Token (the original data) and -Result1—this is the default name for new fields produced by -within, and yes, they will get higher numbers if you keep -making new fields.

-

“Result1” is not very informative, so it’s actually a good idea to -give our new fields specific names. We can do this by assigning our -expressions in within:

-
within(chorales, Pitch <- pitch(Token)) -> chorales
-
-chorales
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:         **pitch       **pitch       **pitch       **pitch
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:              G2            B3            D4            G4
->        21:              =1            =1            =1            =1
->        22:              G3            B3            D4            G4
->        23:              E3            C4            E4             .
->        24:               .            B3             .             .
->        25:             F#3            A3            D4            D5
->        26:              =2            =2            =2            =2
->        27:              G3            G3            D4            B4
->        28:              D3           F#3             .             .
->        29:               .             .             .            A4
->        30:              E3            G3            B3            G4
->        31:              =3            =3            =3            =3
->        32:              C3            C4            E4            G4
->        33:               .            B3            D4             .
->        34:              B2            C4            E4             .
->        35:              A2             .           F#4            A4
->        36:              G2            D4            G4            B4
->        37:              =4            =4            =4            =4
->        38:              D3            D4           F#4            A4
->        39:              G2            D4            G4            B4
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:              A2            C4            E4            A4
->        62:              A3            E4            A4            C5
->        63:              =9            =9            =9            =9
->        64:              E3            E4            G4            B4
->        65:              D3            E4            G4            C5
->        66:              C3             .             .             .
->        67:              B2            D4            G4            D5
->        68:               .             .            F4             .
->        69:              C3            C4            E4            G4
->        70:             =10           =10           =10           =10
->        71:              D3           F#3            D4            B4
->        72:               .            G3             .             .
->        73:              D3             .            C4            A4
->        74:               .           F#3             .             .
->        75:              G2            G3            B3            G4
->        76:             =11           =11           =11           =11
->        77:              C3            G3            E4            G4
->        78:              A2            A3            E4            C5
->        79:              E3           G#3            E4            B4
->        80:               .             .            D4             .
->        81:             =12           =12           =12           =12
->        82:              F3            A3            C4            A4
->        83:              C3            G3            C4            E4
->        84:             Bb2            G3            D4            G4
->        85:              A2            A3             .            F4
->        86:             =13           =13           =13           =13
->        87:             G#2            B3            D4            E4
->        88:              A2            A3            C4             .
->        89:              E2           G#3            B3             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->                Token :: character
->               *Pitch :: character (**pitch tokens)
-
-
-
-

With/Within Subsets -

-

The real power of the with and within -functions, comes from additional “control” arguments you can pass. Two -prominent examples allow you to automatically work with subsets of your -data: the subset and by arguments. We can -indicate a subset, or multiple subsets, and our expressions will be -evaluated separately within each subset.

-
-

With Subset -

-

The subset argument indicates a subset of the data which -we should evaluate “within.” There subset argument must be -an expression which evaluates to a logical vector (TRUE of -FALSE). The main command is then evaluated wherever the -subset expression evaluates to TRUE.

-

Let’s try it with our tabling example. Maybe we want to table only -tokens in the first spine:

-
with(chorales, 
-     kern(Token) |> table() |> sort() |> tail(n = 10),
-     subset = Spine == 1)
->    
->    GG C#  A  G AA F# BB  C  D  E 
->    29 30 36 36 44 44 48 57 70 85
-

We only see the low notes, which is what we’d expect from the bass -voice.

-

What about this, let’s only tabulate the even-numbered bars: For -datasets which have measures indicated (with = tokens), the -Bar field is integers counting these bars within each -piece. If we want even numbers, we can ask where is Bar -modulo 2 zero?: Bar %% 2 == 0.

-
with(chorales, 
-     kern(Token) |> table() |> sort() |> tail(n = 10),
-     subset = Bar %% 2 == 0)
->    
->      G   c  f#   A   B   b   d   g   a   e 
->     41  53  57  59  62  63  63  72  82 111
-

If we use the subset argument with within, -parts of the data which don’t match the within expression -are returned as null:

-

-within(chorales,
-       Pitch <- pitch(Token, simple = TRUE),
-       subset = Spine == 1)
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:         **pitch       **pitch       **pitch       **pitch
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:               G             .             .             .
->        21:              =1            =1            =1            =1
->        22:               G             .             .             .
->        23:               E             .             .             .
->        24:               .             .             .             .
->        25:              F#             .             .             .
->        26:              =2            =2            =2            =2
->        27:               G             .             .             .
->        28:               D             .             .             .
->        29:               .             .             .             .
->        30:               E             .             .             .
->        31:              =3            =3            =3            =3
->        32:               C             .             .             .
->        33:               .             .             .             .
->        34:               B             .             .             .
->        35:               A             .             .             .
->        36:               G             .             .             .
->        37:              =4            =4            =4            =4
->        38:               D             .             .             .
->        39:               G             .             .             .
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:               A             .             .             .
->        62:               A             .             .             .
->        63:              =9            =9            =9            =9
->        64:               E             .             .             .
->        65:               D             .             .             .
->        66:               C             .             .             .
->        67:               B             .             .             .
->        68:               .             .             .             .
->        69:               C             .             .             .
->        70:             =10           =10           =10           =10
->        71:               D             .             .             .
->        72:               .             .             .             .
->        73:               D             .             .             .
->        74:               .             .             .             .
->        75:               G             .             .             .
->        76:             =11           =11           =11           =11
->        77:               C             .             .             .
->        78:               A             .             .             .
->        79:               E             .             .             .
->        80:               .             .             .             .
->        81:             =12           =12           =12           =12
->        82:               F             .             .             .
->        83:               C             .             .             .
->        84:              Bb             .             .             .
->        85:               A             .             .             .
->        86:             =13           =13           =13           =13
->        87:              G#             .             .             .
->        88:               A             .             .             .
->        89:               E             .             .             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->                Token :: character
->               *Pitch :: character (**pitch tokens)
-

Notice, our new Pitch field is NULL in all -spine except spine 1.

-
-

Or else… -

-

In many cases when using subset we’d like to do -something with, or at least keep, the “other” part of the data—the -complement of the subset. We can do this by expressing a “complement” -expression. The idea is that we say “evaluate X where Y is true, -otherwise evaluate this instead.” This is easiest to understand if we -use our within example from above. Maybe we want to -calculate the simple pitch of the first spine, but leave the other -spines unchanged:

-

-within(chorales,
-       Pitch <- pitch(Token, simple = TRUE),
-       subset = Spine == 1,
-       complement = Token)
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:         **pitch       **pitch       **pitch       **pitch
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:               G            4B            4d            4g
->        21:              =1            =1            =1            =1
->        22:               G            4B            4d            2g
->        23:               E           8cL            4e             .
->        24:               .           8BJ             .             .
->        25:              F#            4A            4d           4dd
->        26:              =2            =2            =2            =2
->        27:               G            4G            2d           4.b
->        28:               D           4F#             .             .
->        29:               .             .             .            8a
->        30:               E            4G            4B            4g
->        31:              =3            =3            =3            =3
->        32:               C           8cL           8eL           4.g
->        33:               .           8BJ            8d             .
->        34:               B            4c            8e             .
->        35:               A             .          8f#J            8a
->        36:               G            4d            4g            4b
->        37:              =4            =4            =4            =4
->        38:               D           2d;          2f#;           2a;
->        39:               G            4d            4g            4b
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:               A           2c;           2e;           2a;
->        62:               A            2e            2a           2cc
->        63:              =9            =9            =9            =9
->        64:               E            4e            4g            4b
->        65:               D            4e            4g           4cc
->        66:               C             .             .             .
->        67:               B            4d           8gL           4dd
->        68:               .             .           8fJ             .
->        69:               C            4c            4e            4g
->        70:             =10           =10           =10           =10
->        71:               D           8F#            4d            4b
->        72:               .            4G             .             .
->        73:               D             .            4c            4a
->        74:               .           8F#             .             .
->        75:               G           2G;           2B;           2g;
->        76:             =11           =11           =11           =11
->        77:               C            2G            2e            2g
->        78:               A            4A            4e           4cc
->        79:               E           4G#           8eL            4b
->        80:               .             .           8dJ             .
->        81:             =12           =12           =12           =12
->        82:               F            4A            4c            4a
->        83:               C            4G            4c            4e
->        84:              Bb            4G           [2d            4g
->        85:               A            4A             .            4f
->        86:             =13           =13           =13           =13
->        87:              G#            4B           4d]           1e;
->        88:               A            4A            4c             .
->        89:               E         2G#X;           2B;             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->                Token :: character
->               *Pitch :: character (**pitch tokens)
-

This pattern, with comp = Token is quite common.

-
-
-
-

With Subgroups -

-

The by keyword arguments is short for “group by.” We can -indicate a field in our data to group the data by—our main call will -then be applied separately to each group, and all the groups will be -returned.

-

Let’s try it with our tabling example. Let’s group the data by spine, -so we tabulate each spine of data (voice) separately!

-
with(chorales, 
-     kern(Token) |> table() |> sort() |> tail(n = 10),
-     by = Spine)
->    $`1`
->    
->    GG C#  A  G AA F# BB  C  D  E 
->    29 30 36 36 44 44 48 57 70 85 
->    
->    $`2`
->    
->    B- F# G# c#  G  e  A  c  B  d 
->    17 20 29 34 35 75 76 83 85 88 
->    
->    $`3`
->    
->      B  d#   b   d  g#   f   a  f#   g   e 
->     16  16  19  43  44  50  67  83  88 121 
->    
->    $`4`
->    
->     b-  g#   e  ee cc#   g  dd  cc   a   b 
->     15  15  17  25  36  42  48  68  93 115
-

We get four different tables, one of each spine. If we want -to make multiple plots, we can just add barplot like -before.

-
-with(chorales, 
-     kern(Token) |> table() |> sort() |> tail(n = 10) |> barplot(),
-     by = Spine)
-

-
-

Let’s try something slightly different: Since our four spines -represent bass, tenor, alto, and soprano voices (in that order) I’d -expect that average pitch of each spine to be significantly different. -Let’s convert our pitch data to semitones (using semits) -and add a call to the base-R function mean: Watch

-
with(chorales, 
-     semits(Token) |> mean(),
-     by = Spine)
->             1          2          3          4 
->    -9.6692308 -0.1143317  5.6065041 10.5672192
-

Oops, that didn’t work! It’s because some of our Token -data are rests, like 4r. The semits function -doesn’t know how to read 4r so it returns an -NA value. Don’t worry, this is an easy fix, and a good -lesson for data analysis in general and R in particular. We always need -to keep in mind what data is “missing” or Not Applicable -(NA). Most R math functions have an option to ignore -missing data by setting na.rm = TRUE (NA remove):

-
with(chorales, 
-     semits(Token) |> mean(na.rm = TRUE),
-     by = Spine)
->             1          2          3          4 
->    -9.6692308 -0.1143317  5.6065041 10.5672192
-

That’s what we expected! Of course, we might prefer a plot.

-
-with(chorales, 
-     semits(Token) |> mean(na.rm = TRUE),
-     by = Spine) |> barplot(names.arg = c('Bass', 'Tenor', 'Alto', 'Soprano'), 
-                            main = 'Mean Pitch by Voice',
-                            ylab = 'Semitones')
-

-

Notice that we did something differently here! We don’t want to make -a separate plot of each group-by calculation—that would just be -a single number for each spine. We want to make a plot of all four -numbers, so we put the barplot call after -(outside) the with call. Notice we can also control the -labels for our barplot using the names.arg argument.

-

Maybe we want to inspect a whole histogram of the pitches in each -voice. We can use the base-R hist function; Since we want a -histogram of each spine, we will want to put hist -“inside” the call to with again:

-
-with(chorales, 
-     semits(Token) |> hist(xlim = c(-24, 24), main = Instrument[1]),
-     by = Spine) 
-

-

Pro tips: by setting the xlim (x-limit) argument, we -make sure that all four barplots cover the same ranges of pitches, so -they are comparable. We also set the main argument (figure title) using -the Instrument field, which gives us the names of each -instrument. That’s right, we can refer to any/all fields in the humdrum -data! (Not all datasets have this tandem interpretation, so it wouldn’t -always work.)

-
-

Advanced Grouping -

-

We can group our data by any arbitrary grouping in our data. In fact -the by keyword argument can be a complex expression, as -long as its output is the same length as its input. For example, maybe -we’d like to reproduce our histograms, but lumping the male (bass/tenor) -and female (alto/soprano) voices together.

-
-with(chorales, 
-     semits(Token) |> hist(xlim = c(-24, 24), main = paste(unique(Instrument), sep = ' and ')),
-     by = Spine < 3) 
-

-

The expression Spine < 3 returns FALSE -for spines 1 and 2 (bass and tenor) and TRUE for spines 3 -and 4. These two categories (FALSE and TRUE) -are then used to group the data.

-
-
-
-

Recycling results -

-

In some cases, we’d like to perform a command within our -data which might output a smaller vector than in the input, including a -single value, but we still want to reconstruct the data fully. In R, -this is usually called “recycling”—i.e., repeating a value until it -matches a certain length. When using with or -within, we can cause our results to be recycled to the full -field length by using the recycle argument for our -expression. This is useful if you want to group by something, and fill -each group with the same value:

-

-within(chorales,
-       Semits <- semits(Token)) -> chorales
-
-within(chorales, 
-       recycle = BarBassNote <- min(Semits),
-       by = list(File, Bar)) -> chorales
-
-chorales
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:        **semits      **semits      **semits      **semits
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:             -17           -17           -17           -17
->        21:              =1            =1            =1            =1
->        22:              -8            -8            -8            -8
->        23:              -8            -8            -8             .
->        24:               .            -8             .             .
->        25:              -8            -8            -8            -8
->        26:              =2            =2            =2            =2
->        27:             -10           -10           -10           -10
->        28:             -10           -10             .             .
->        29:               .             .             .           -10
->        30:             -10           -10           -10           -10
->        31:              =3            =3            =3            =3
->        32:             -17           -17           -17           -17
->        33:               .           -17           -17             .
->        34:             -17           -17           -17             .
->        35:             -17             .           -17           -17
->        36:             -17           -17           -17           -17
->        37:              =4            =4            =4            =4
->        38:             -17           -17           -17           -17
->        39:             -17           -17           -17           -17
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:             -15           -15           -15           -15
->        62:             -15           -15           -15           -15
->        63:              =9            =9            =9            =9
->        64:             -13           -13           -13           -13
->        65:             -13           -13           -13           -13
->        66:             -13             .             .             .
->        67:             -13           -13           -13           -13
->        68:               .             .           -13             .
->        69:             -13           -13           -13           -13
->        70:             =10           =10           =10           =10
->        71:             -17           -17           -17           -17
->        72:               .           -17             .             .
->        73:             -17             .           -17           -17
->        74:               .           -17             .             .
->        75:             -17           -17           -17           -17
->        76:             =11           =11           =11           =11
->        77:             -15           -15           -15           -15
->        78:             -15           -15           -15           -15
->        79:             -15           -15           -15           -15
->        80:               .             .           -15             .
->        81:             =12           =12           =12           =12
->        82:             -15           -15           -15           -15
->        83:             -15           -15           -15           -15
->        84:             -15           -15           -15           -15
->        85:             -15           -15             .           -15
->        86:             =13           =13           =13           =13
->        87:             -20           -20           -20           -20
->        88:             -20           -20           -20             .
->        89:             -20           -20           -20             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->                Token       :: character
->                Pitch       :: character (**pitch tokens)
->                Semits      :: integer (**semits tokens)
->               *BarBassNote :: integer (**semits tokens)
-

What did this command do? It looks at every bar in each file and -finds the lowest note, then “fills” all the notes in that bar with that -same, single, note. We could then calculate the harmonic interval above -the bar’s bass note:

-

-within(chorales,
-       Semits - BarBassNote)
->    ############################# vvv chor001.krn vvv #############################
->         1:  !!!COM: Bach, Johann Sebastian
->         2:  !!!CDT: 1685/02/21/-1750/07/28/
->         3:  !!!OTL@@DE: Aus meines Herzens Grunde
->         4:  !!!OTL@EN:      From the Depths of My Heart
->         5:  !!!SCT: BWV 269
->         6:  !!!PC#: 1
->         7:  !!!AGN: chorale
->         8:        **semits      **semits      **semits      **semits
->         9:          *ICvox        *ICvox        *ICvox        *ICvox
->        10:          *Ibass       *Itenor        *Ialto       *Isoprn
->        11:         *I"Bass      *I"Tenor       *I"Alto    *I"Soprano
->        12:       *>[A,A,B]     *>[A,A,B]     *>[A,A,B]     *>[A,A,B]
->        13:    *>norep[A,B]  *>norep[A,B]  *>norep[A,B]  *>norep[A,B]
->        14:             *>A           *>A           *>A           *>A
->        15:         *clefF4      *clefGv2       *clefG2       *clefG2
->        16:          *k[f#]        *k[f#]        *k[f#]        *k[f#]
->        17:             *G:           *G:           *G:           *G:
->        18:           *M3/4         *M3/4         *M3/4         *M3/4
->        19:          *MM100        *MM100        *MM100        *MM100
->        20:               0            16            19            24
->        21:              =1            =1            =1            =1
->        22:               3             7            10            15
->        23:               0             8            12             .
->        24:               .             7             .             .
->        25:               2             5            10            22
->        26:              =2            =2            =2            =2
->        27:               5             5            12            21
->        28:               0             4             .             .
->        29:               .             .             .            19
->        30:               2             5             9            17
->        31:              =3            =3            =3            =3
->        32:               5            17            21            24
->        33:               .            16            19             .
->        34:               4            17            21             .
->        35:               2             .            23            26
->        36:               0            19            24            28
->        37:              =4            =4            =4            =4
->        38:               7            19            23            26
->        39:               0            19            24            28
->        40:              =5            =5            =5            =5
->    41-133:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->    ############################# ^^^ chor001.krn ^^^ #############################
->    
->           (8 more pieces...)
->    
->    ############################# vvv chor010.krn vvv #############################
->      1-60:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
->        61:               0            15            19            24
->        62:              12            19            24            27
->        63:              =9            =9            =9            =9
->        64:               5            17            20            24
->        65:               3            17            20            25
->        66:               1             .             .             .
->        67:               0            15            20            27
->        68:               .             .            18             .
->        69:               1            13            17            20
->        70:             =10           =10           =10           =10
->        71:               7            11            19            28
->        72:               .            12             .             .
->        73:               7             .            17            26
->        74:               .            11             .             .
->        75:               0            12            16            24
->        76:             =11           =11           =11           =11
->        77:               3            10            19            22
->        78:               0            12            19            27
->        79:               7            11            19            26
->        80:               .             .            17             .
->        81:             =12           =12           =12           =12
->        82:               8            12            15            24
->        83:               3            10            15            19
->        84:               1            10            17            22
->        85:               0            12             .            20
->        86:             =13           =13           =13           =13
->        87:               4            19            22            24
->        88:               5            17            20             .
->        89:               0            16            19             .
->        90:              ==            ==            ==            ==
->        91:              *-            *-            *-            *-
->        92:  !!!hum2abc: -Q ''
->        93:  !!!title: @{PC#}. @{OTL@@DE}
->        94:  !!!YOR1: 371 vierstimmige Choralges&auml;nge von Johann Sebastian B***
->        95:  !!!YOR2: 4th ed. by Alfred D&ouml;rffel (Leipzig: Breitkopf und H&a***
->        96:  !!!YOR2: c.1875). 178 pp. Plate "V.A.10".  reprint: J.S. Bach, 371 ***
->        97:  !!!YOR4: Chorales (New York: Associated Music Publishers, Inc., c.1***
->        98:  !!!SMS: B&H, 4th ed, Alfred D&ouml;rffel, c.1875, plate V.A.10
->        99:  !!!EED:  Craig Stuart Sapp
->       100:  !!!EEV:  2009/05/22
->    ############################# ^^^ chor010.krn ^^^ #############################
->                           (***four global comments truncated due to screen size***)
->    
->       humdrumR corpus of ten pieces.
->        Data fields: 
->                Token       :: character
->                Pitch       :: character (**pitch tokens)
->                Semits      :: integer (**semits tokens)
->                BarBassNote :: integer (**semits tokens)
->               *Result1     :: integer (**semits tokens)
-
-with(chorales, hist(Semits - BarBassNote))
-

-
-
-
-
- - - -
- - - -
-
- - - - - - - diff --git a/docs/articles/WorkingWithData_files/figure-html/unnamed-chunk-15-1.png b/docs/articles/WorkingWithData_files/figure-html/unnamed-chunk-15-1.png deleted file mode 100644 index ff198890181478e9dcb39ee1529ef8a12b1e760c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23275 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�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 Ijqk<(1{7GekpKVy diff --git a/docs/articles/WorkingWithData_files/figure-html/unnamed-chunk-18-1.png b/docs/articles/WorkingWithData_files/figure-html/unnamed-chunk-18-1.png deleted file mode 100644 index 4172db27f66737abe0def88ded602a0a4820d45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19116 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 E3pHm0G5`Po diff --git a/docs/articles/WorkingWithData_files/figure-html/unnamed-chunk-22-1.png b/docs/articles/WorkingWithData_files/figure-html/unnamed-chunk-22-1.png deleted file mode 100644 index 07c29b4ab1cc60b22cd3eef1daef2407d1bed919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24472 zcmeFZdsvd`-Y9J6X&Q27TGK&Or`43xlv$aY8ZzaS)0CPi;2}}7)I?A-L_x%<38yTb z#!^#}%<=#zp3kUd>EyZe5fuT=)Ot|y5TGFVJSE)BIbJI5vApN9SvuQ$HMYjm(%7M5W>ayoQw$s|TAt`DM@JRfj&= z`s4R!Z~p!I*Msfd=RaSaj{jTO+9%F>Q|E7NSULE~@yfs7>bKZ(*12%Ynv0(Y(!Ra^ z@b!w-xWC<4{ph!~hkkoMgy^%iw22$6%_+z73Kh|r0q}B}o>0mv=baU!B_z>GEolGu zzkdq_lHVt?+IU-qW$h1RAK+c!D-w&5D}h=(Myz7sRy{xF=W5I6)A`)0tqZwAB_SKtvH+j({5Ie!`&WhofxC;qM~QwG1a zsUBF{TD_bholwE6lg`UyDdORhRXVW_NBo;ZeI6Wp`X$AaAlVfxUjt+(7kOE;iVK(|Z$5mHrG$VPS@Y#~0TzYt64-oofWW zkrS3z6QpxA^x4XD)2L{_Cag*{FhgdD&a&pD_Rq=JX_BeiG`$A_hbL3gQ9Mo|+g3EA zQW2!%w6q5)x3^1vro}BAv8VZG)5RPn8rk4QiE6eMq2R??53afBeR-4Wp&I{2NWa>) znH*g(2HtJ8dc6lWG3$Y;zj*B}{eE$ins>%#qEN zSfFsqX6%posk74iG{4yuK%76DD5m*;G7gl99C)L5h7jWer)CN`t zPe|hVJ#j}Udh=se=6ycKTiA_%(TB3H40uAKVL`#t6 ztmID>y&Dg&AlBlNxtTT<>gvPrB@BTJOXl(uU);eYZi(vHK0jE0tAgZYdnABs2jh)L zMZ6&$9as68N^+Yv6ZY?84n>JxdNfsbemkKK?|UGZzb!j4v}KE`^3C5RaGmT|KdjOz z-7c8S{54?F36LD_J*VIFG#}T=G>?3HMgP6|;yc?wAdfGW;h%J{g(*+XqWu)xmSe11yarTAsp& zFaAUM=20QpCQPzo>m5j8{j9P{vXbllvDaaoZi>XBb%6(v^{f-q#;jqwFN|?T?LGRK zSsQ|WSi#r=&Ewj95bw51-uNEI`3_$`G|EB*j+Q%!`e%Zs$+bDVKai%~;aBIg3b45e zoJ)%-R`Z4)l)@d(VW`pG-)+0Q?=>Y=R;h2oCIHKjFcs2vb4$s0JedI87(PyU{Nm~_ zM{qX0QF*qo7s@v!5NpzRKi$yi78Bk4K@=ESu+&de zcD@2&`qpy`uly^kE58+qx@m(Ef+r*8o$fKk9lYmOrKBa)sf+?(VHgV60F?K+ZE0pFnHE6AHuTlNR=nh!pB1k3iyY=3GAC2r>&dr@EG$8+sC?s z6X6mH>+`c@Bm2^=T2jK`!cLW6HtI6M1U&CHZY85u$_Vq8dZy^2Tk;o|L}bV-*!5w} za44G#_8aG0Q_*`Toc!7I72DdDd-U33a_+#F=zZM@B0)l`+DrVr;jXU&+32D-=#ySP zX=HJj73$h_z2iMh*J{4CL3&#hAhhN%*u;gbc^S;yrBCTK{y<7`&^2Y^4@#BvbEpjh}yc?t-Gv);19zQCn%6QCc8~*@yo? zIw~_S-5iedK9OE++*P~r43(%~-8}tV8riOF!3dq=t+#BZBy=bp@vqMM5euRck3PyM zD0^DFN&cdkL$-;MtkCf>>JQG{>bb4?ry0Z4;>nhZ8FJSZ@HTFH(5Sgx%tgm-oM2f~ zuW7rxWD&a$VY)b9vyE?6lZAR!C&6Y)4Z9Pg&+7NEe7k@!T*1g;#_tGNv-jA=4&a!p|FadzW_B@Cid1IFVl`Y5w=1Qc_2ZFoR%w z#E+id={^yrzo4=JB@@8`?W5Si6bQAtf@MAZD@BUMZG2(-%q@S!@Uq}GVch%+XFG?Y z4nuUU%5CVUYsA}Fe-rg!{ddhZ#?&%J^P1-BKe4LQV6{)No&V!Cd9vBKQ)PPX{nZjt zmwUh$@)rjo`vUQ6>m7^864%9 za*!LwI@}#z`L!vfauw&8E!b{s(Yl!{qZ=7J}-W$`= zJI4yd!J}uTGT8GHccXzfq;)JC%eo7TtzZ|c%OX0&e)l>5>c!0!${Vztb$y3Sk6Eyq z99dB3W!q`-GMpVx! zK@`WOlR0n@hbd?*Scs#^94$wEq}O5V*}CSv*T}(5t6ClOF!T(^N88PF*_$k?r_!j~ zJILQQgf@SmFOUNuzaRh~(FRe8xF0{s=<61agd9fXyW4dDJF(m@K4YCHqS&&Ho#tN3 zexqSn3{C{=t1&hLx((mSEo&>@QS`09OAmO!8!doh7k8NI+UxR@*_>?bc+xK{_yyn=q-L! zZ~drW(;|wp&|+_F6z8`0p#Wi>-|}9w9L_V5jo)_f+80^0AD-&#S+lJ2cYJZMi|y~w z9Pws%iYT$=&0U$IobnmgU;`S>V8xW~IA+xrKHlyrlSY=x6Qyj0){~`o76-5oPW6Mv z_TQ3AWv?k=r5c&?e1SN$qMy4z=v~I!LYTRHKmV;lUNC(m;_RmR!3sKWcEC5cCAyhSoKNm;$Z!!LZC>OcjaWMXvys(U{fA9{y{qLyv*w64-DKqU0Cpj5>`1x*0FH7 zwk7t&!uNI^+)es}X0`UxU%(Xo!O4t?ryFj)zh*T*&HY&#AZ2Og%G}Nou|#LP1kqAEdp}v{asK9@OOit zcSCRCK$|`(ww_`~j$FnzTN8!PA}r>Z!b=@7f)AM;)Pngc@RixP*Q;_qzpi9JH&4{x zy$#qGz&4}4atsN~4K;CM#bjXzFJ=@D9Kq667d2svO?UUJb`^t1I?)_Z##T z72m*xmvpSFwxt>ubE8rgZMXqHM0MG8Vp!nT9M>U->M$OAI zd+?rjJH(4yoprM9PzM&V;2ChH0WZC^=6T7j2ykK0#L$z@JIj9`zzn&(K+o}}*yd+B zysUK9&2a9VU^*2XR3QsgpHtf}3Qq^Ch+wpDf>e zA!a56XE5N*`yesL(v29U1qJ>2qv9gdE;o6UpX#{%kpq5Y{WF%*poroA2YhyY1-N$Z8ke?)IM^QWHDKVW#OP?Q9T+V;_! zN*Bn?y$XD^B3AHbj>g-=Nh@vV9B!bL->ItEac~~Q-J9(M)AcdF8DsHKKE6wT-~2V2 z#R^2}ovP-Uo{s6iT{7VmW)`QOMZI=3@FqVMq2!m?ySB#jQL3v|gbGI+;7rFh)k8mfn(Bkr? zbwyc%A8w{&`H*^U+lZ`W$2?NRn%4D>TkFJxxA(%rcs8~92wjh7ZudxL-$ zxbfNx2H!!zRzJ$3sd%o-Rh=cuMN%D4*7KKQI&b-VX-iV7F7Apx1J}Pr9vtZ~_Y`Odilom? z!3+vjiTPI~N3t^tcK1}gc?9yAA#62{AfjCyLhGg7UC0I-h#hum)U6zxF=Qzh;=mJ0 zBadl*qxwvaBuym$06wQZZxdNA;f;bK9poIo#}qU1@MJ^!;WG26N}AsXS<;dH*dx0U zwgb%!^GQB+;8}(2_bH4S5ge@F;x!byM6DaqQ_Eg@#4d zhuP(|w^})XnlJa%Jd3?A73qIjW`uqB_-zGj>UTrOh0N}58h<|BD_nlouJ)Q{lFsDA zruD+9&$p{YHi+D}?jR_IiW=Yf5IrNz~X zh!ijxxD1>EE&&0|24*Kq=)vXGTwP!Mf2+V+>izHhS9E>jJ{uj>GdR;IZ)3vQJ_3`I zZ|F%0{$)tD)wVJA{>)>L066cwCxrtlR${{0&Dw`H?{2`% zBN-)=-)lbl0C!&He5ZYI`s=3~G;fL?eG{o=HtHT!9f4krw|*a9qj}@z{AHcyug>0| zu4x6#=LF>4H3RH#*K348C-y5SFwwmEU)cnF2bDZ^idt0P6QJVf)4~snpcSx;iTE1Y zZ$GqO?2BrQ^tI+m1V$=KF<7mm!#WKe>=OnhE+fBeA`SLrR!q9}pHRO`ROji&%v?vd znA$*CqS7^W*lPyVrCIpg-Nf?|TPOcMK_?1FH24I^JN9WH)cGfRuYXw8E;9kzm`TY7 zpVYoKaz#`_Wl{(m6%+*elidj8CD(m;iV-bcVs|AC-yj@S&n8N08d6&o#CAEaK*AQ|{G)9nd44rRA$7nj4${B?A4wLgoMN zO?ox5x6!o)ZH%%oWvz^-M z5%BfG7dBjyqIV+TaPJ$+F#?7V<}G;pEbHZmL|4P9Osg|{9ia(^N6giexMbLz%~e~2%s7mNa{kna<=ZW)|}>Z$$&el zBm23Hxz06&5nUfHeFY`~ds%YxtMw7ic5h_wKn38S|7A^LK0f@12fF$D-LDR77B)`r zep+iLbcQPI?l+nY3It5+fTXeWUho=HPvG5;fSuk1vzdSacUS?)l#nZez03(@E~)`> z<-B%-Tj#D511MRF0opf`DJI!90Ojo|sI#umIu+-HX5`tTxa7I;(o?>g$v%lm!(It{ zne)4~!qAuug-zP=f3-7DV8SsdO{pHd2{;2tU>A&DVBm4#5tH8xl8aHgwzeWu1+92f#sD@`vY$8J{80bZ>aI;(G6-mZq=QN*t}u zs!-Aze`8{UD+NCnZjy`S-GeyC4J=veI@3Y@ zi4gzd7p?VVf2v{Wv)+Z%%m5S`S8|)hnn0Omq{*J+nzit;kI>mB!d1D=3~onBCjTs1 z9$GySTv~Uh#z|^-XI}Sb4r8fq`V+0>G}c2bj0|wN<6YEIvOmLl`Vn-sG9@}FAidSP z4PrRoz81Sl zyD#hF<;=p%jwAa4GRw@uy?F|{O)E8KaPlw*f4ZunSYzw!ADZ5Hp&$+_-_Fxni6{me z%(xlPMn=~F(~akl$f7+NV<3nybp+6D_Qlq z))9v!N){2t*=l)4I~T}%S{vPhHceM7^_|$phM4iO7l2klY^Wq*q!d8P;yIYi{|;8s zKmA;@q@VsxWQwF7xS2HDh14zFZ+qdvX_md~@`1(ZbA&E~n_6Y+FV{@^!etcUPPx>4 z1&wl|E0$(%oPhi_C-veqoNC_Wjl-w-Q49CJ9H^FM# zuJayHn|l{(H*fnyGg_p~hqMLpx_Q%kZ;t@ADz{n0Ef3Ys=W2{U#^QpzQC{YOZOi;G z+O)cef~(to!b|2M~e|DT~_4GD`*qv4!6u)b~MHLtO?Z5kQw z=R>ib&vwLFC{8;DeJ*N%^5n)N(`N~-dvdSNy)=g6%7~kL3#%S=MUR`cZG`Mwf73US z1HVexF^|IrgKe>MF0xhqNtp}Jjb&9WaQuL8(dp>9B*tWxF6CWG6SSr5z*_ULhU&66U|shN^5yxHo=$0gJ7#i+o? zf7)ujYzL%ff==@H|A@gaYn)_6e=b7xzA4+Z5L5L0Y(G7QtI%!RxKhUrris~$n)X)> zUu(*4aafxw`vbx?7N&{mV|PUx~&(YkpYQrT6}cGTlelz{sBcHi%^e){%zO&T2Rey zdyUF=1Mw_szPhM}zp_HB=--d-@(%HYvuZ8|4K_jczYB@L2tps@v=6%@*9)n6F%>l! zf(R^dna8`Su1LE8BeZ;LSgm$bWncfzzP+qUq-db~d=oYB$4NukL(nVfvQq*6=$uTu zi|o#czQ^1mk}n~M5FrKgqjFulLIUeYoR}f31P`Bm+KtGaj)(7u5~OOd7YwKPmvl z$aCaBIG_a@)$;dEb;hoVh3Wt)5vsu$+B_hhlD32X0GwIrnu0dU&pa!5q!7O>v3E$; zS|Fd+{`JCD0G%lc%qvjZz{*2)Z7OT11TMG@$PKtRpATlaFpO-kWN7i-D|vUfwK~QQ zCkWRI8gr~=lVYS|0D*th?&NSs6zKU%3&rFyzg>|CUiZ&~Wpazd1v7o%Et7jufwjjz zKD`7z)vc||s+c}q8vz?Cczsyw@*6*c#zo%nTvE6vtH7qsD8Wq|)i!1xLS2(j@4WwU z)>?z}5n5Puf;-&IBNLf1P&nZ%lv;aJYHMX) zm~EliE!JV{-ls}}%jlMn3*6JW&5{G>J_>>I86?PJr#s%hprMwlclR%7~b%|9^ZxTN>eN;po{{>bCazF%$Nvzn(Q>NX6Fm73>BGfhhK2- zVosy!@WrJMFGFLbXaE3s=v<>>p|>jneqp;7W(XJaNLFFqv^#g{*Y~+dc}QTz$RBT~ zLy$y<#_2;obNB5B!v!^Uq~nA*@CEP!yDxn9qHu~OVbveHqUi&Ju4A92IvhTu43v&S z5nCZ;BM%^C0A)K4qp8aAd%PQ5rC;9MSWg639bTCn07mH zS~nYe6JiU(+FUIJF~Hc)`!Edvjd~DIgdsso%HM|sw^zXoUeVnQkX}fyb6&}5UD_Gj zA@K}3Xs({U+d9PhpJWJrgc8|<{8`q?@4`)?j5Hsl0A}fop@JGeX*j?@FT27^b{x|Z z>ww2KIV4lOZTaoox8F-WVaoUZX32}^>?W>yryX1_1I?lS8R5qSm0eW)9-r$ zSxpDl=AxY#ily5$k2=%5PS*ZumW_+e;RouwP(5;t>K~+bsfnm<(XO;TJkC->O(8q_ z9ay>+Wk#przCla7U^ofBg8t@TGK;Eg`|l=*#+T@a7ncYC)G`+M?(F0nSn~X@Q0JY) zf26jWM7j+gkUpkWhrPk<)siNbUtem>PlSfM6~)ZXG`$9&^h;hxvb8yxkC9&K&9!|I zi@giZ{C!x3vL^T+c`cr;SI0BR&)~kJ15LX}15niJJ0*C8xw;T{PirnFSNH+Ls@5Ny zFdu62XH(EE_~Hz|-C_<>>s^X;FF*2~#Q^3VdxoBnLI};f+p4?>c!KQh{8zx&?WGTC{$Fh*mPN3@42R@! zg7h8ekbOd1USP9}(*vt~?dE3dAX7|%LU&^a+GQfg)^?lW(JR|)U+FXT(Ot~_qPI0@ z*DjW0K@9b6m4;`rUzz*Egz2u-p6K$bH|4UNT#Z=J?Md~(;{%$FidybK&68(U&b)8JMXr<(LX6#oxm5GM z>XIF=7TaJQ<{5(S6$3G$C+tin=Ar7Bc1=xl(4!Ggy)Vm-VB-6|76KT z4tJK_2*6sNvL%0(eEY9P4zjvN))$0z5d>4ZUc>y4#hOiZCO7z%KP9*2&$d;#HP7yR zUVLlg;iYM)NMzm{Q~%f(F)ekR(9Da)X-xE3;i+yz0P;R3w?icl-JLH=_y&3P`K0fq zzk-h8$*NH4Ag$t-$lHrM^G>_!{z23x7}df&rfKJR$LXJ9rg|5up;hVd#|l?zJ@}x* zX&NOcR#Zd12UMovz;9n`8MM{psU|mBhrhrzcD&ON^VlsSdle9ZayU%Ff; z(Ha>yU%y?SQi(xJYXCxyZ5Q(?ISw?=NgilhFPv~qWGJGKNqa#yjY250uC^x3%@1Ex zJb)?RE#(u8kZ|hA7g~v~6++%-1B=19?cJd8At<-C8G2EOQl3kX+O8B^SXk4;%5|c| zKuMl(i|Yh(iyWZm8>F3C{!#kqU4+5!r$Lp-25NQ45aUyh}O-B)t#wJb;5s?87%y-Rf4y` zmoRgOh6cq5cyDKN^GRiC@#rOj@KGaBACTHK)z z!zYsfYT9QlmSt_^qAa?AJJ>h9F9mJv(3}_)ksGdm(CfOa1b4609pR>m;2mZa3rf@u z|Ex-A)bw&nxhjptn*56y$+0OU^DJ5i*zv5&+pc}8-H60VH%-8=)BpIOjk_O?ldeaN zB1~>>v+^%dd;Fzb$7N#ET&hk>g@x|}gR}8yx+mmxqfbb0IX}{}5Y^}AaCqp6^?~D7 zM%%M)3&u-m8(aUhEwHJ-HI$IN?KW-RV*U+25g%B(kONyUXmPEydek0w_$o^4!zTSS zu@b-gm&S-YcfS$d`Hv#of2C@n$66~H9ds*MSO6V?O-!+4j%ot5+xeoH|1YIC-{tct zN{!+NX)!2BVx&8Ks>O#q1c{_b@OI9Lg*mHolX3x5*X2X!_OXU7cqx z(oa-f2wJj9-u$A|x}xTobnInOa*tlnVNtm?Q_%*RBr&uzfw@g}Eobg9%F4ctXofLU zTocpMBJk3F&?qNIby3Plbdwh+F(j;Mv{%`~ty)9*{H2-xWU`b%m_;q-25(%*SYOBBg^^tBhtmwUM?Ht z{U8#!3AE)TM>!I@KwBU_H%IjL*N+i|tvO_85WU@~Nz%r{hmoNSQ0UTQ%E4Hl+gIB$ z#j1tW_AFFtJZq<4E6JZm!a3M9_5!WYD|^uZkf0?Q(J|4|GVs}&7uv{y9Sg-VrqhE{ z@A1t@fWqoZ{97A-z9@f|!4V#iE~=m`$~%3DopqB|p2mtq+rdN9a+3VZQMWQls^0SQVD0^Pds2d>3yNRAtrF`5Fw4x+oONfyL~(C)m2>S!5TY?wF_1*839fKUb_2 z#^?5S9=n?Eyr?i2A}YW|4??n+*>{Y}|CqBcCD83}jBWRM>0{AXU4?{>LB_?|k8cr=%0QP-(^KZeK&4bpL zTVZlja1THp42qNrluZd(I}JXOD*JK5B=(!<6sE98((;YH7=q zSh%Gn)&NZfK|DYE0jj@;4)Nv%w$5zRnVb=XY9#g^E4!a7-DL8nrYs~0= z{-0;<(vt~af%PsyVhZ50dkn&Sx8{@sxjA3W*w*{frc#j0VILIUXzF<{4+GA$EBujy z=}ez+1dFRvI%`%nE=N38B)Ai=QO1_siO|Z}7iI;q@;+Isj-2M4y)Nm=*1=MZKw3ha|kjKp!R$_cnVx62T`AQT0hrTvQJ7=?uca7m& z$jB3UOQ{fm8jyT;oPlUPlNa4&A*&5@Rp0vSxPhrOG#)oe9L$Suy{FKUv*>e(YW0_0 z)oHj%`TguUZ>N0i6{gMxUyl_MNkZ!~x29vWY%v4el|5lfKc}ss>TG^iwo;gaGGg58 zV(%~9A3SwwOMrj%*pAbU4yj%sY+-m6d zs;-7CjdlDCYTMLh7N-AoS3Uo?!U9DPxbzYm$23h3#xD9ue|`CJzu=~_Gh4lD^Ak=fHqc~Mf8hU0T-3y;AZIS7*D`fka-IF_6GEd@HJg2 zEFOjZJdGqT5wt^_JIhi6weN<%8DMRzlQRvyDVLhk>MR*`G0l0Mbe4rkc-?inFfv-gzRvqK*`gx{p`E!&?P#MLr{57li@Wn>ScVPto( z_JH755Ye8{wp9fi7X@l;f!G8VORuo9KX-p_v) z!_m8M^iPUH(z49UTe=7KZNHd#2P zA4hz|ycq(Ab#knU-!Jjco{P)v{g|xYH~=X_$jPx%6qneuRw=mT8q@PvVNt)xTly6e zmbcD}PXB4mrR=$Imf6WJUiwoq2aK~PtcL1n(2K9xa1+qw&>DbRJ}U^P*Vr>d@`MLT zQwUeI<6p!r1Tgb(x0mAqGBXjGn+Vob)D$YXD15UF4P|i`{sjBk;Z;I?R-9{>5jR4K zB-H2J_o)Qe08LCkmq~4y(0Dx6ztNLWrg#c&U@|!Sy|X*bVNa*wED2-sBO5IY2C^d% zuBx{eZ3=w7gmy6Tqz6`uz0aqRI%Hx@99q#FlB5RAc2Q`r19i?oYNfhLXnkB)=6phn zR*s(scBbZ(Hj{5WWdY&HIC;tJVJj z`KmoqEylx*>5$CygZIoai1PwsiT20?Cwk6*ybO#@3iL3G46%Chv4qtB2m+4hl>bpD zDgupHNG!`s%9`SH`?WOCsqlq{Hh5NN4U$%HKHsVV!6(rHdy@uKe7RCf!J-Xu796e6 zH^zMPv3j5CvJ#`28EaLJ#?D+RI`5`B+p~DR(aSh7z%k22^T;i5C8h!@=q z!?j~aG-I_)5p$zcR)Iu=KK4^>MYHkvrkRqjc*y1OpKxABqK?`=k!cqA_)b|2bFqXT zJ&uv^IK6ynbieW=Oa~(LXJSHsA|#tkmF?6_)rlYPX4`1rHFi#3Tr1%dtBkZCUCNRk z%0!ObkN5_s@A_De8Nc^LT<00wB?Z5AR;}FgJV&wUFJ4g%0yE zvQkc#k~^>%GmSYvI(6Ae?4*9{jWwoNfw1yN?i%HMiI#X)!-={$h}1M5o_*P%exlbJ57BWez69Qu4F z^ZXW+X`XFJywo%`*om{B6;njIlJ6!=sKKj#4dwar*v}{p91)c(Tw>Gv7zFX=a)m z&dN>5L}dGJmV~p2XtaFb^#1LPI&~%(m83u%BrV%BZ6ppv4F<7MJB9^h(ZTPQgQR9a zF|H!a1*-a`oaDfx{u-FUFSy3^?dOwZ)>B%jH~iRGE1!mcN4=VYqgiDNyy>RW0_a(AuhYs}&MqZJ?`q3hXtg2yeZ(Tt29M zu=zJlD2U(Nwr8l46i!HlfWk;~Ky}iDJ!^~8lRwF7eMr1t zx}oMYRHrJV?J`h5QTRZG4_H#m6z!RYAB`)Fhv|2+fm+B4Xg(&m{n=dMxc;M=AHSzj zYKU=;?$?R3WIcRg1c^{(jq>UVEiE54o76rm>RKP^RR08w0h(AXNcq6SX&V+I4};`B zskz)m)}qx8gU}-QO0R+Q6>iJdUdldzCEz+1+TULri~VLE>6H8gyaAjjFq+1=Q=;dp zlEay3SJRFzZH48>vymlB(NbLYgi%3ESq+hJvZ-qX1@*JE*d_70I5Abevgs0I*M_PI zxVDBPgG0=-sU(5#7R~hhXKgD#gDO*l`Tr)4cs>L96izYWP z$e!b%5H1FMe|<}2S7FTM4}(d>0WE+&oz*V~h2-aXOKh(S=_GBSwrxt?yPwZzwm8;L zA69=ovzXN4>GU67K*%LZoENiegTW5wAKUpl%bYo}$4M(H)vyMRfSfZgK_qDrs&J;77dbgWHca2v6AX33gIT zC`AZ!3DS~yb7newiW`4&OjPJ7@U_W3BlBi?X?eF|eWY9{sVK>KMqyc^<^BHp6UY$e zG$Jadj5O;?`p6)Y(}yRy|CHA+SdGm(I!0e>eiz`sCcDl9{}b75a%ig<4U}eplb}3z z=p&gOA3P;r@xrLC+WkSsNFRbr;C{e>)uWeubs+`34k($HXACR#Kb9xfK{=U40!otk zG5EB(a8t|sSgU{WA(vpn#rfEv%jeYT?h)F%yHt}ElBFohU!t91pHk@Cts3rRK+a6_ zrhU%}El`aaC2JvR3TT~LudQsy{?tf56kT;c{iCj&xij!kGhHXV^)q1-l(9L~29IKT z-f8Qm2bNdYktGyhP14*JG;g|ut6%a~d&+N+4$~U+?n{oa9JQ<0C2H(YlxzJ&J4tK2 zw;$2SWT*3DjG0(#ctVFif%u5H)2f?^G}f$%z24%`CldxRjnA}NI%aWua=Nt?2-W!{ z(kTIbrnn$Ir~hM$+p_PK_LKv;e}=5#KWTivCa3&AU;zB%V-OVlasn++Cm8pm6VMVi zK9yh}JMe{unT@uxpLL^ssu#?XV9jba=`Gu4MSFtQw8@HDocbE3&Ctk3dery>vuT*} zg_P$l+Ldzt93jPBz6KH%jTp55oO^U^k5}Z#jne70%I9&mAF>RkdG;MO`i-{3yRlm8 z{&y2Kp}l5RnJXPd#~2hQAbGAlWJ^H*M@3?6n#qhl4X7Xol*pPcJtiQcsAsuM(rH3Z zrd(U?Ox0friR&{cv6#RWtJfq=y@x8qx+qS2yEe-G8atD@?=-N174Lx<;+7~D-iDb> zxI*1nX$-Be`0e4$#l=OCf3geVp$a5Oz}qxNQvtKoI5BQFhvBUXZJHEZa>|Pd>mqB* zT9f4Dz<%-s%E!4HLS=MpGhNDH>rPZ+j2e`D+5y zM3e;L=n*T89@(56^Dc<-UxyoVh1b@2*;RQ;--5XjJacG;kD*u8*fM5hHUaSNEZRHi zE$0Xii5-jNnuT9v&y_+|pHk2Dkw$m5Y~TF)EA)A1paUOKs%eARCa0<1zKJ)T?qR5} z0`xCu_W$z4o#?aTJW_DsobAv7eWGQ8lVKt%ce0$y53tK*~L_Ca% zkoNLLYMEdK0>_;gM|u1E>HY6(#D(I?(yr->O70Z9 zw#hb3CFK!kUu+@1>&}{v>LPd6*i7!+;vF5v^QKZJGQu4zt2=Q10t4AiY+-c{)Hq^i zV0Gnjtw=RpI=xZ($2!}YpA!t>g9g)~ad?W@vkO|j35|)ml!75$&dnqR5o`GZ&GNgN ze&Z;byn%zU8l4XPQe#STnPb$Sop7J{6T!24v2x5ns9i6MX7(1bpUu)5(k8FE-*91CCJrj5^FL_i zIhH{0JJ1$ll}f=jvAd^^aD1I7$1L!9j*JUN+5ph%;!Rr8=nlZUkThinoMtw#Y&|G7 zz7*k3m{FTz2vh@>D56)ngooq^Yd;oS4#<9`ncE~vF4**iuKPhl1s%r{PjnZ%FogVc z8U~c=i^Pzjmi5u zYE~5`Qcg?vLU)wnfT1lu%e7I2TIk9WW;VT{Xqk?o0|)%K)5E-DRg%pBj@ic4*UqxZ z_8nT711ZofnX$wjpG5jnB!&Cg zYOGYO-5g%vJH8yw+|p5H+NhSB!Ki0qPDIXvt z!mu75jyj|7z1+g;;vdr-6lo|LAAKM663cv^dWuV=BiOX%M`z`709Cfd`0U0hoMbuEXSky1O+#Y*<>MH>1c`cak zov~@2OARXp@qn4ltR8i2?bJ5t^o(5%Q4Ox>`HFP*tm z+}71UUzZe2?He|)&_>)D^t}T}7TD`wsXwzHwLY?5<@s;Y_t#4BmA- zPxa4!U>?V$8Um`Y(d0Lp4ch8!HX*KXH~XzU5D~SPw_wm0DN0=tKT(G&9G&0I z!I?uF?9(}QG=3UiFeFgCrZxOhFp&cy5;GB3IM!?0;eH#6CXG&xnep=d+I5=o+wXHc zMk#)4_a!$0Mh>kA7m821Qr~QIY;4L2d86|pvGVM)>B+GchicQtr@p}}lIa%TH3ZPD zn?Lgzps@IktyDC{{|@xgZ68#m%ifWpsy3JmX?N3EiPfth5(6u5t^sCeri#ZM)fBg^jq;sr2Ey0gjR;|xC*fRvHHc;+Ev>>hak%*UEXU{ zuC4%G#J!M^U9fVc9~wX@0nis_Y2}d!0o;_tG|jhlSG9PR`TdDtq*q-*Oz%jV^Wqi>1;CryCS~5e`WlXRY7~%q7hJO*-mrU9NZSK@4skjzQkA>2Lvqd)H>=0_pys#!7QByZy#Lc7QvvI*QRhJ;k-OQjkK?a@xTD4nMI!bDXLH$Zjl!N;pz`D zV!z>iOTEui=+HHsIks=*W_t0O&0SewCCe!DDD+EV&uI_+%`{SB!(`~gsc-ZMko^dy z4;;W&(!|TmJ&-Pa6biEaSi#aRv19g}lD{yT-1z1Y1eMh}RZP>J-k^oV0ZWu6E{qDv zw~Xn$C@P$-Ke%dRp%R%3iP}(6-7^y3%U(&j_(4G|4C+ZO)>&P*ug3CDtElXTLf7Cv zmD);Kv2ml{hJ6X?NUAeDVs6Qj6@n9w;J2B@ZZg2+*0n?0G7{R9RxQSf0WZ1~8eb*3 z2P#l~$<-}u3A#ulNaN-{YTQK_2HJ_%!>TO1qOxu971T@}^4IZe=x;SwmzfJKAzLIZ zr&p<`94jOqKn_IBPZ0dpVX1Bb75&mkA5gmaH#R-$Kh@|7S-^LAB$snvEJsw9h7unf zT$QINar`W({vw^!{MqpD73$@`LDp+nkW*89|JbAn!1Y`_(mSQ6?y*px5bHa}SpK|i z;Bq52_~+|lwqu51uGA&42Vy^Olof!|W#dIf_2Y9!za;BTpIyEIa0qYA)$)SnxSf7$ zXCOXGI`EnP?a&2RHeb!G{ih8@8Vrbw41!0~6ya zhaP(Qt=)b`1Pt=T^u%QVm_X4@dmbJd}i)i4p|ev6w!qx+>L$ zzQtzG^yW+#-%xwQ7Y9SUr3#bX93um6#ByK#9$s7DWn~1+vOqZxdh6qbgeYkrNMwfK zQ%}JqcxFu0houb`dE}p@Ctwrp5~QS{FmS=Djx|yj73!(vMsvd_PP3L@7ZuKxC&`J5 zxI69!{1QQ?UC+^V%jCTy?{5H6J-+S)!KKK1d#Pk&lxj@&~`!+sL+z}_x&3E06s@q%v3zriLKe$aA ztJTIGmGp7F_8gBG`CImI^iLGbz(UWc)`cWw4rD&aT63bh``Z@|-gm8H7DOrCurG9P z?5~F}QAvy22tvP$LAV=*y-yr@REzlDNr91!(HG0AFhb+wE?K{FD~?I3ESrJ5^rgsr zR=L9tnY_ZauSBJprMhzB%~$NK_N6_zoQxzg4=_Au$7W~1?uwxBU-xn3#4YnyW!53v z2@xX8a1C4PYBI4~6(MG3TD%za#>~L?GU9^3T1@bT7-S%JyLmADHI%TwowF0H{znuU zL;btL?K~Fk#N#l$bGGJm#=Zu;|GwFc<=LpIcy2E-M0S%#@u%0iOCj?bK-fzN0p_eD zrgxMdum;R$LY9->_qEfdjMl`eE~9?{H2I!@ zxlQjSIaSO3Bl`6(b8$(p7#|p7--l zG`G2TOyR8F1mPofnXK6ouWku9mpf`x+?9C+7NQ{+*J(~4fGi@I(`x!uv)fj8Fr8+J zJ9h5ax`ni7ilk@?b z_vH?43X@B{KK0EZ+i|Z4u|0^U_?IEP^`|7iy1Z4XKlZ)=7y*cm@y=45pjD=4={ zxC{L03$%diT!HgY1|#DH#X$-IqS2u~fyx}TUZ!P~JF1xPp9n;6?`b$nD`d#813rWO zK<0ku(Zm8$Q-v>h6`5wk3Mnnm28jtNlDp2&8)>qu_5UQv;O47xCh?rPt#vJ0u$gz@ zUQut7lA*Lp^l^Sq#(j!&&P@kSp)9dlqZ<4L{rrW!gZ}`-S^h%|n~V$r7UxK|>!~)Z z)Z{i}qc}_apg%dV4YMjSG^V70*MW=k1j&sQc&zJlN4FMqiHG!pPERb<>r zg<{iptsx-uiBRln4s|U%25s%_+0_}h85c^acaZs^jVL6qv@fL>^Fl3nSIXM1tcm_ASy~Rh%a#u=M+VnRDt=|r{3L`i(IjE#48JG~YH?*Sgm?-ZR$fK!GNTv9J~EZGSI3BlL~-KsC~Ovlgf8 zzwyp0pS3LIkgezUgojN&z8t<=y-Y{2j~(lPR=>*UjMk9Kh6MT*m*fJnZ2Cij&v8(y z_OMf}*5BYcUEpk>y<^AZ)63{14I-0UR0)XMdvo8y1Yx(I@5`-p*j;|&RL{h(OITR& z)I>!ay3_YR`Tx?!0%5FT>5&MH1J?6kKAEFXo3ooD-7it(CW~*Av9=qg1_;zA;ZAUE z(K6|Z=?Z%%;neDj1a;v`y>sCj_y%V55CIG9xV@g6_!qpmcgPPjnt0#UkrF#8eWcFm z>lw>$ZHlDIlc5s&a7FICo&`hoJo<9vLE3@G1E4XGUa)<8{X9yg-Kv8Urh5pDX$O88 zfI!XkLm>@Woo|xzOV5eozqwoLjSZQS$eS$?%tmKMrgDQ1>15Q`qoc=m{8Yu08kB0D z0w}qsII9R41{vI9e|Qk%mMt30->Rg(W8YQSP(t0Tc$*kCsU5-(oS}?2TbSw=5m1tt zmDTy;jK3FdC^JSig9#wt17xVCQP;UPxyc-oG$VPNyivxw&XpNvqeY`n(4rCf>dEF^WD%cV&TBs(+;q1A2QjP zipw6?g_dcY(^+3=0GtwV%*>9OU_pZ7R{vB3;AWZjiCzvtK6M+QkJtSlqyL| zm3FwXmS4(V?v>6suf~p1XMN;ImD?3MMk}&$AzSA&1$gEsS^rx@HxiqW#z>Ao=r>GN zdim$g1);kc>#=@$!uXa-b$|A-FC=O=IfZaIF}FAsbPezHQ|-~uRnM)2T>@JLb+?gA zZOP2&VLZ25xHpm`bS_k6T#G`gqo_POms~KAqYVTi6%K)HxW0K4(BdN5;|jcNx?yhmBk&6Rtehjp054kt zFJ1|TK$POezY>w_UcV{17?);g4ZU6MI#0V4^W)Z={yHTI1`+`^+me+h4j*e?0Ab zZihqq^Qof3Zuump6X!w<<=&HTa387i^J!Z4ZR+EQW;uOJojD!W&BW*-T&|@kf5;VT54}8d zd!bfKJTLpLubW_yV#F>%CRG%V#HEkH2g|LDZN3~U$u4t-%#{d0;Hv$`c9PAGi_m5bhM{-C31{Q8$o6I+J#~Jr^xwD2S zXkZnU2Nte59i0UvQK!cYh#m$@4fmYN_mdwO7l5T)O;1SswYiKA(R!xrL_e`^|9PrQEBea`;ms-bkTz(c32;p`+=1s)UkDy-khBkrY;E8d)vWDXPCr zo{YG6Z_4flJohmRZF!a+jBCfq;L`2A?Txejrsghk$63!R z^vHv6PgI--C2xMZu|eDbiTh>_)Xugxa2) z4xr}B+G<#1R3#;oVW9(;J0*CQb9v+{`e^5NasS0juaD9k5qWiV7ZS0)+$f(M93G7X ztk1BgQ@e=X<;k7>!O;=cwDeFcPV87-Y}g8=gl-%xysL%}N0cZRDRYc#uNmkFSIw!G zJ%X6X2|<{Hwkzeec=hHZ8ynhreVKd@sx-b(uiqmEd5-%evy*Nz3EExrsA6SJ6d}8q zkX=RFZt1{Lo<_~&2ow9fEG5U!uikIgpkfJhJLs#}Xz_C8USf-Rn;FT=At^&G7+!*S zD#JCf6N{tQjOKwO@;8U4BM{u-+awY>RHoG@RB9&Aknh)fni}JCa;<@GC%ojq5v#p< z7!WPYn%mODzsIVb_yQWHB3h5t#Y&c8aY>ev^vAR3wuu)#6L+pJ?LTd(UI`DzhiqM3 z(V>yT1=btZCsrCu#!}V|RRRx0okjX^->Ti6En`i4FEvy~-WZ4jjigmyg5xvn;?m{m zd_PV)mGrVcG!DJ&h$x!9+V3frskz**tK2Beq0n9hw;V86E5OM)7CP2yg|GYTC5O4P zK7AbT^p=Ru;^X+^MXnCH_A`E!`7MX2>G*hDrzJyw|5k9T?3~yz=(4@sx>rM5-|Ybn z<1h0xYX(hU=Ll*pak5UAJLa1W+O3oEv2aIr1Ix`Z$w3;&C==aAvNlCVz2J{cffM@Q z0+zXGjnlS=T|x7fsuJ*QJi##rWw~zIfcclbFJobqJ_(elP51zcE@<$H7@a#SB0DbO zW|>NHbP@R|T^Eln5_K*SYwfUY>r)f&9k{dN+S4Qb0!<>DG_2LZiv$9yI<5-mmP=ps zuyk0A)B}~YbIZYHYtxJR=)3DD%#H%MCTfVuMCtaOzY&YBz75wER%QxWW` z689iFdto7upvnZ-D?-jnD|kk|gk62m<~`-a$gx*+V^i#!GwC_MxK15>hI&$fq)J7i zk$aKC>&Y#B;-w&dUEqt(Q3-AFKmQuA{>38x9w1hb&XND8^}zZGDfc}uVuZ`HCpOHWLCY|0AU|nQY>e{dRal}4X_$bfO z!CDg)2%H}>`c-Yzl~H7 zT@>oZ{lr>g)kt-MWNusARyvh`f!nBdkYh;oqDoQQ0i4dYtO*H!$q(XQ;?_+GE}XkA z-pW0B*IZd^BkS&Z{20yXe-29Sen}EkOzaO^!oh}3heyG+_okfdON0&Ks_=_AdAlTg zIeWLVWx^d0xLohY+;VCp;?|7NO612>Lg*LZ zkrVMTZbG~oK1#ertQKV}eO$n%CVJO-J8~(RY&2Dix>iCdrrYHj2xtANP^$VKV-S>e z_8$wUA-uWfy0o=?GMxy7h-*Smqz|(715^bs>cwr^C_Y`HwIrP@5V4rIg$Db>tO&*Jn|ckzvT8B|bv$$_#NUp;&Y|VMXTdVj-u~ z?RyZL`@1(buz9#l{($5V5r}iIzh0JQa~vFxznt`t5H!qXlMWFWaDdqp&y$)|hCf<~>lRsy6AF(136 zrx=lG95-XznA!gKpaJN~0KOpXmP848tkNESj8-|Q4ILnHa55pyf@5OG;-UYexx|9o zxnEiyRq6zyyd|6AGg zpi*PQb~g_8#IGBx<|FD;@ia(W<-M?KW!!S-z}V{fZQzL>iL){}dwEMXr?e63-9#E# z07d(b0O)x1HC)V%-)pCHXVgz6T$am@kyQFO`|Dj=8&@bKM>I4}I!SCH*s}>s?Qw z4PL?=NrXsxz4X9$c_pFqnP+s#gS&;R6F|v z1bA@3lTyTrthl^B=(|0^L0pgERnZF7QYP#Ei^caWhFy$-X%ax_UuE1eFl(ZzGNs%l z#0gVilu-qXN{B`>cxXoL#AUr&#!4<@s%9tvKZRXU47HmXuB!?ov0Z{Ye|s_#(qjn~ zeH}Z!7HnL>GL2@M8m+A^PUa=F5P5Wz_}5qDy{UN{C`_v>zdL<-18i;sTiL_bcQYOCfHN2AIuaAeYex1z9-3<&DXq^y|3U&8E3A})c$Ot#L8`A(KiixJWUaj>s(I9nPNz`1NJFr~jJ-J!`I ziWrIWJBY=FYCZ2tTKk$5Hh8;G>-p~Z`MDN3m2CicxK9DwHeYbL1VspzXB_Sw9}o!z zsMYyaylA1`8}MBK)LkK?8P_7G@`cl#qUrk9{@zdyeMEur^*u5P7@*jiSGA5u5CgqG zJ!;_jbz#kE!-uO(9~9S)`(t(Cigh~(HhL%i^Xa~OaD+4W(`rmNE~<*(#cCpe^{xbnIJEYE3#4v$ z&@m^6M_h#0kdE9`HPkGntZk&v)0!^t2y-G8!ke9uNbW^$nV0Ogav#{DF0AL6+e(|5 z@(35S*Me#p(SrI`F;?9b)0vxGdL|pllujF3%mm8XB{{lfHAX*!|Beza0rdiXdpDQ4 z5{PebH(VXrrcqdedSp5CZkP2n-ezD0&Hi9<1~a!_M=%b0jXEO0E8vnoL@h5HPJ+k^ zR+wlVy|j)2_Jfus(B8l@l8b>YC$Eb3B7U7y`27Izy&+>;1h$Gcy*Q}r4aN<3ae0gA zUC`)Gah>ewm4?q&s_ncG`1F}xZde&7~-@u<<;*V3~s4W14kk3+VTy{zxUH*yH%erqVIpRVc z==>7l#eG*PEiImxh>)aHUlZ$}lWVq0%Uwmmku#eF(**jZk?L}?ctGrRzw z_3gT?0i~tLX}t1!=?;?kP;0+<1ISQ8@N9(8H*x0H1>t{W6rL%W#e)f;?sKph!S zfRK)GM#7O1NPFb`&RJ4ZJ&A9@{mo~syAZ_32L}O(j^UFWw2j&X+F6ZsH*{%z0YAiH z`R$Wwoak+ReE->5yr`uHnWkCYU%ItB$AjB!dJ!*tjBpEcQXjhvu1jhVq} z-w_YL$lBo`b8C|oCTRDuS~G@hWp|nI^|Gpx;V?8sNZn2~y=j6H-pOn6avi-Cx&=RDwV)`X$c`Qh!%k#x1oX3hUrv02tHYC}gA&lF7` zrdBIVS2d9(yu!5nP69$f+?@dSo@uJ&vF$Gni3bKA` zn6yi`m$%c#Q*fbr1KppVu-d8TsFMX8h3)sj<5^lY6O{!x=>pKLV?A#CJB+V&F&*dM z!`JUK6hjiE+*Oi3KWsab(KnPBatLgx`=`{(OO8Hn?D0nU(}H;5_lHMa?h}@mp4}3^ zgUEQCJ|cc?23C4N^}07S(WzWv@vPI3kktQxujN4%h zv0w_{0lA{He82CSBR{0!BWx{I2}YTm!j3=)HZfI8&hV&mfKV($|56N-~I z^~MMwW(4tP0SEyE6I*n}VAIl+SfR1kHv{0&#(F_bNL&yl6cBihZuqidliXAgg1-j> zVX8m16>n@5^;%HMV)yXQ8NR5m=G)~dh^PPhG|;|`KtB^qA_95)b);GHdO>E5#FdprM^EhnBV#KRaKGFuq_7G821|!|x)byglpYpP7wFDkNylXu@Ya?- z@Hi!|4LNr}xVj7gJf~Eb+lrHOu=X!+6|o+$4(Vb^Xi6O@Jb0gm)a4?Bm+L?2pw|)n zB9J-CQ+kP$)7&rD{{g(0DZN9J)29Uu%OC!c?PL~fXH?N5bh)H|yt^~L$;!s>N~-8g zoZ`q)L7W9^S3Gha-RjeBDw z(YO8z(Ltw{9h<72y2iYEYO+3jOL)@1)Tq{)NXBxN<0b4(qTEcPdY#M`)%mQA8@60@ zdi2ftE&F$$ka_a?al1^h{Ak%xvsb9gbWi?X`J$>ulfVkLeI5Ih84HLSX zA!tOKdk&zjr~*ZyiEh;xj3*+=i+4C80>f6jx)T&Qz*66(c~hV*CMmQawc#{5zQ=gj z5@U;LfRTwdkt<;QSIALr7~{pk^$3-eMNC8GGCvzmPiM-&DV9NA7_D3{ZL=U>jPC_! zHSv-k^&;o=5YCt|nkxfya(Pw;vl@+&R~yJ>J{UCOT&zUeNP(-elVfWmU^$+q-XbfR|`E?$6Ff8Aal0Ymr z7V5>cA7zXD{YAtJZeYRWqnadr0$Q)P_Sn7;{Zw!5r>=Bx$5#)59i@F2O&zcBoV?B2 z41g>Xh752tv&ht($wyiHM|)!gj{VWW{vz`i zN5O4wsY`G?(V?m1NtO$8$21vL4?r&jZgJ0@D$(wA^;#M8T~tx=J_zo@FO=qdC20z! zr{qd2S3eJ~s&6_5CIJSno5NcW(-5lFB8af9>G=8p*b_Y#o5bpe6=-)kN?LzgHcGZ}jGho{M<0S))rgWyaFQF-oNrmTSFyEzw_GdDCDV9uNghsb_uvUNI)6(LML0_81qBWT5VVXEHS zf>#$G_W-#C5vRA7sM?gw{IZ{SN0Us2(;WmO3GpRh)_n^|-M_kA&5r5$RZt(9DO|_o zk9Iv$eh@iz!)Lm%XrIZWA)NDgViGlmLG~J=P4siF&T{qOWwRm@rG4Me0gIWtztoy z8C~7R%jY+!V%Z@n>R`e|38Cl5bWzF)U3<{Lc?VzQra{mA9)lp2LTjXPa;Y-BxOE7N2`RR;|32|r>{RZGuGd{3t`dw2Gpjae>iU_7Wk_R#sE znupzFQMPU5!pVKS!VuiPKC*^?>sKXhG-#7yFCUo-+}r#q*)|WP47A8$>JhG()=+=c9ZdFnN6?=j z$n=6o?9;G!A*aT-{0#15(VwS^xEN&MD-)WeT4ywV@JFy2zOCzHN{7Z6%Qb`9pqc~^ zy3iI*ipQ*?FhtC7CUaLV_C@$fO>pS{7k^4@3sqODRk3E3+TS*C3aR*&~_>HWKpK7+)KXVYE;$u#}=Q~S1oXn7I{0|HH-P`0`BF|0c`54 zRy&+tp3mz&z}5e8v=Mm~(xYVgtqi-@0wbtg6^t*Ro@OWH`bXEbRwjj{k^D1m?CU>& zWw0j6xAH*RUS`I!=}t|(+vd2M*U!WPdl&kQd7ru_11XmT?gsmRZ-kP`xhqZPmHLO5 za#Y0F1eDT7TF!9T~uy~)X8an=gqqDI{q)x%NVXs4MBy;SBqad2U*6Pq@8IXlMvXW^>T$g7y*aoq3eg`?TY zQKp!5^*X)rg9L$%i2^Kr;mV4zYd(NvWSBo=lCmJ2cE=do4$e$<1wbDC99ui0mml?M zX7Y!#gxf{$$Ea7P)(%>YNN})Tw>O`0bZ#9R^Nue6%M@qcWh3gCBO3ly zMA2W1!60rIT}T^DVREmKMof~Ky*JG^j)s3X>QB(pfJzIt?~`hHaoVC;KtJs_)VY*9 zwxZoVKUpm5BlzzdKy)e{9f8X5)~xr z%aNvguzLaYOHTH)-g3OaR{1?L+U)Dn^P6qMJIXAmves-5v;+c`^DB$9`b@cGeUw}L;73CkwPm}!8Zne-M@N9n{`z$m!;Q#Y?JmAiPFAvwe%KV+^&)YdS8%*aTb$i)A(&q&TK3XXWtj| zqyI=<%8n;woSgIGuzepCN>QOD_yT)*;Y$R+->TJ%jKt~bPG1V9|5`0oQwW%5&tA6V zsDb*Ze<8Yf@NKwdhl1WH>1hp`XD_PqZ9ik+QAvSwYu#=?8X158#cN@cVZn^~!UoH4 z%`y2BoQG(?V6?wb{So0*+GQ0~EmlTVrL>f@T45+N6MAZV&l+`Dai&jCz0jvhUjJJA zg;0ca|HiI?iM|TEjlS+5P8yh;G4Zl^8eNd2Z+FP+L&5zWbB!sxBnM|cQ#!R( z2N>0UpK8{G8rH|WgIsO0*A{p8p-}!J^;SC>Um80@FZY{^xv58AF*2EmeEoFA`*?e6n^}jA?b0MY95G5z7@FZjT9yn{-l{8XB!-*~!Dn z-we{?zpJmU5qYS&9Duhu^(C=BU~@ccbd{zp;(cvNGkYG?N3^LX+;<(`FV!0FVJZK; z8w+}7t)k-S-uz?6Fb2(I;BEOfj&)sSr>7r$;TOs(~t_mn>JysVtP;$PjBJ7@rNg7?|l0< zYg>1Kn=5*^nkS;|eyMutbp?+(Jr743ySk=j`SNbbxb8T4h(nlHnn`)!aq^f^JL99r zN)j@S^t!cD-V!&r{Yz$Xz;z+LWc4GtMdMQdCd&8BfftqmmdIy*VQpXUpDJX?bZ}*k z*p40fsc~t@)o917o960PBU!$kP2yjXenAXe=htPVKtyAZQmPS|>tVJayq z-z%|cY*E35KwMisR^8K?L^8TCH8Hr#JLMn+-{1TR_0$V;&RG@ifAEE=w$<|qA2l;J74x;_J~__q zc8+!iBso~e{&zuA!4vZ*Y^EZmyRl*MYsL7T1$G_K6{f3 z3!37QE)D#nj|T4A&4m8ISGaMRSSlwI=Bs2@ckT;6Wj@T?Hu4IMbE|(>mR>gV8D+Jn zhvBVSa!k@SmK+)8FS37Z|K_Soa=s&rFr`VXX|05P(G-LvdD+56o;LRpI|u6j*QhG0}&yhd!R41O)# zx2W;P-Dc3gI^N9WJD?usu14KJGek1K5ChL6 zCIRGI`MS{i3Ph^D@{tg;r0EqqIa@rjuTC#2~6F6xdYWq;$<)PW-uJj8keUTPK zodlRUR3y1JKwP}-**C5LY(J30f)~TZ1TYs%-ESVwIVx3QJ{9 zpXifnzGKxqDm3k_!CJ=1RbCGPa2tK%?Fe9J zbOj>ti0uw=?2YERJhp4Q z$Nz0?yrA9of%(q4GL;^9^g*GEU7ayG*k<-uNbKFs;Yo6ZYAe5~s#qD`hGhk{Gu1Jx zoRmEIyw64^aT^<)eTP=Rr&SiG1O}Q=TYlQxbYGdeSgaha|1;m82|IPK{)-!|^%WX! zk{NVo`u4mR?)HcT0tjnvn4o8Dyax0<=i&kp-k5)P{}p;)%G}gMiYr!5edQu1yt0c}dfS>QNdfxK} z{Y@YJ48?CDs$SD0Y|OPZ=2FUu^5m0yR?1T5F&wMiv&s)YfnVr>^xdDiGPEI88&O~Z z&Zy@q%u&=LZk{_0E?EAk2XifxNrIcCe>0(M8Dx#|O({ aE80iu>|gi#*n(H*@bgwbmYsFK_ul{%xeg)# diff --git a/docs/articles/gt-logo.svg b/docs/articles/gt-logo.svg deleted file mode 100644 index 0542d55a..00000000 --- a/docs/articles/gt-logo.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js b/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js deleted file mode 100644 index b65b161a..00000000 --- a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v5.1.0 (https://getbootstrap.com/) - * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i="#"+i.split("#")[1]),e=i&&"#"!==i?i.trim():null}return e},e=e=>{const i=t(e);return i&&document.querySelector(i)?i:null},i=e=>{const i=t(e);return i?document.querySelector(i):null},n=t=>{t.dispatchEvent(new Event("transitionend"))},s=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),o=t=>s(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,r=(t,e,i)=>{Object.keys(i).forEach(n=>{const o=i[n],r=e[n],a=r&&s(r)?"element":null==(l=r)?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(o).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${o}".`)})},a=t=>!(!s(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",()=>{f.forEach(t=>t())}),f.push(e)):e()},g=t=>{"function"==typeof t&&t()},_=(t,e,i=!0)=>{if(!i)return void g(t);const s=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let o=!1;const r=({target:i})=>{i===e&&(o=!0,e.removeEventListener("transitionend",r),g(t))};e.addEventListener("transitionend",r),setTimeout(()=>{o||n(e)},s)},b=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,E={};let A=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},O=/^(mouseenter|mouseleave)/i,C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function k(t,e){return e&&`${e}::${A++}`||t.uidEvent||A++}function L(t){const e=k(t);return t.uidEvent=e,E[e]=E[e]||{},E[e]}function x(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=D(e,i,n),l=L(t),c=l[a]||(l[a]={}),h=x(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=k(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function N(t,e,i,n,s){const o=x(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=D(e,i,n),a=r!==e,l=L(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void N(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach(i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach(o=>{if(o.includes(n)){const n=s[o];N(t,e,i,n.originalHandler,n.delegationSelector)}})}(t,l,i,e.slice(1))});const h=l[r]||{};Object.keys(h).forEach(i=>{const n=i.replace(w,"");if(!a||e.includes(n)){const e=h[i];N(t,l,r,e.originalHandler,e.delegationSelector)}})},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u(),s=I(e),o=e!==s,r=C.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach(t=>{Object.defineProperty(d,t,{get:()=>i[t]})}),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},j=new Map;var M={set(t,e,i){j.has(t)||j.set(t,new Map);const n=j.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>j.has(t)&&j.get(t).get(e)||null,remove(t,e){if(!j.has(t))return;const i=j.get(t);i.delete(e),0===i.size&&j.delete(t)}};class H{constructor(t){(t=o(t))&&(this._element=t,M.set(this._element,this.constructor.DATA_KEY,this))}dispose(){M.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach(t=>{this[t]=null})}_queueCallback(t,e,i=!0){_(t,e,i)}static getInstance(t){return M.get(o(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.0"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return"bs."+this.NAME}static get EVENT_KEY(){return"."+this.DATA_KEY}}const B=(t,e="hide")=>{const n="click.dismiss"+t.EVENT_KEY,s=t.NAME;P.on(document,n,`[data-bs-dismiss="${s}"]`,(function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),l(this))return;const o=i(this)||this.closest("."+s);t.getOrCreateInstance(o)[e]()}))};class R extends H{static get NAME(){return"alert"}close(){if(P.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),P.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=R.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}B(R,"close"),m(R);class W extends H{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function z(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function q(t){return t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}P.on(document,"click.bs.button.data-api",'[data-bs-toggle="button"]',t=>{t.preventDefault();const e=t.target.closest('[data-bs-toggle="button"]');W.getOrCreateInstance(e).toggle()}),m(W);const F={setDataAttribute(t,e,i){t.setAttribute("data-bs-"+q(e),i)},removeDataAttribute(t,e){t.removeAttribute("data-bs-"+q(e))},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter(t=>t.startsWith("bs")).forEach(i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=z(t.dataset[i])}),e},getDataAttribute:(t,e)=>z(t.getAttribute("data-bs-"+q(e))),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},U={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>t+':not([tabindex^="-"])').join(", ");return this.find(e,t).filter(t=>!l(t)&&a(t))}},$={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},V={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},K="next",X="prev",Y="left",Q="right",G={ArrowLeft:Q,ArrowRight:Y};class Z extends H{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=U.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return $}static get NAME(){return"carousel"}next(){this._slide(K)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(X)}pause(t){t||(this._isPaused=!0),U.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(n(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=U.findOne(".active.carousel-item",this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,"slid.bs.carousel",()=>this.to(t));if(e===t)return this.pause(),void this.cycle();const i=t>e?K:X;this._slide(i,this._items[t])}_getConfig(t){return t={...$,...F.getDataAttributes(this._element),..."object"==typeof t?t:{}},r("carousel",t,V),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?Q:Y)}_addEventListeners(){this._config.keyboard&&P.on(this._element,"keydown.bs.carousel",t=>this._keydown(t)),"hover"===this._config.pause&&(P.on(this._element,"mouseenter.bs.carousel",t=>this.pause(t)),P.on(this._element,"mouseleave.bs.carousel",t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType?this._pointerEvent||(this.touchStartX=t.touches[0].clientX):this.touchStartX=t.clientX},e=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},i=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType||(this.touchDeltaX=t.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(t=>this.cycle(t),500+this._config.interval))};U.find(".carousel-item img",this._element).forEach(t=>{P.on(t,"dragstart.bs.carousel",t=>t.preventDefault())}),this._pointerEvent?(P.on(this._element,"pointerdown.bs.carousel",e=>t(e)),P.on(this._element,"pointerup.bs.carousel",t=>i(t)),this._element.classList.add("pointer-event")):(P.on(this._element,"touchstart.bs.carousel",e=>t(e)),P.on(this._element,"touchmove.bs.carousel",t=>e(t)),P.on(this._element,"touchend.bs.carousel",t=>i(t)))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=G[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?U.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===K;return b(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(U.findOne(".active.carousel-item",this._element));return P.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=U.findOne(".active",this._indicatorsElement);e.classList.remove("active"),e.removeAttribute("aria-current");const i=U.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{P.trigger(this._element,"slid.bs.carousel",{relatedTarget:o,direction:u,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),d(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add("active"),n.classList.remove("active",h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove("active"),o.classList.add("active"),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[Q,Y].includes(t)?p()?t===Y?X:K:t===Y?K:X:t}_orderToDirection(t){return[K,X].includes(t)?p()?t===X?Y:Q:t===X?Q:Y:t}static carouselInterface(t,e){const i=Z.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){Z.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=i(this);if(!e||!e.classList.contains("carousel"))return;const n={...F.getDataAttributes(e),...F.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(n.interval=!1),Z.carouselInterface(e,n),s&&Z.getInstance(e).to(s),t.preventDefault()}}P.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",Z.dataApiClickHandler),P.on(window,"load.bs.carousel.data-api",()=>{const t=U.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element);null!==s&&o.length&&(this._selector=s,this._triggerArray.push(i))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return J}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=U.find(".collapse .collapse",this._config.parent);e=U.find(".show, .collapsing",this._config.parent).filter(e=>!t.includes(e))}const i=U.findOne(this._selector);if(e.length){const n=e.find(t=>i!==t);if(t=n?et.getInstance(n):null,t&&t._isTransitioning)return}if(P.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach(e=>{i!==e&&et.getOrCreateInstance(e,{toggle:!1}).hide(),t||M.set(e,"bs.collapse",null)});const n=this._getDimension();this._element.classList.remove("collapse"),this._element.classList.add("collapsing"),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s="scroll"+(n[0].toUpperCase()+n.slice(1));this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse","show"),this._element.style[n]="",P.trigger(this._element,"shown.bs.collapse")},this._element,!0),this._element.style[n]=this._element[s]+"px"}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=this._element.getBoundingClientRect()[t]+"px",d(this._element),this._element.classList.add("collapsing"),this._element.classList.remove("collapse","show");const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse"),P.trigger(this._element,"hidden.bs.collapse")},this._element,!0)}_isShown(t=this._element){return t.classList.contains("show")}_getConfig(t){return(t={...J,...F.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=o(t.parent),r("collapse",t,tt),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=U.find(".collapse .collapse",this._config.parent);U.find('[data-bs-toggle="collapse"]',this._config.parent).filter(e=>!t.includes(e)).forEach(t=>{const e=i(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))})}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach(t=>{e?t.classList.remove("collapsed"):t.classList.add("collapsed"),t.setAttribute("aria-expanded",e)})}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=et.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}P.on(document,"click.bs.collapse.data-api",'[data-bs-toggle="collapse"]',(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const i=e(this);U.find(i).forEach(t=>{et.getOrCreateInstance(t,{toggle:!1}).toggle()})})),m(et);var it="top",nt="bottom",st="right",ot="left",rt=[it,nt,st,ot],at=rt.reduce((function(t,e){return t.concat([e+"-start",e+"-end"])}),[]),lt=[].concat(rt,["auto"]).reduce((function(t,e){return t.concat([e,e+"-start",e+"-end"])}),[]),ct=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function ht(t){return t?(t.nodeName||"").toLowerCase():null}function dt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function ut(t){return t instanceof dt(t).Element||t instanceof Element}function ft(t){return t instanceof dt(t).HTMLElement||t instanceof HTMLElement}function pt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof dt(t).ShadowRoot||t instanceof ShadowRoot)}var mt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];ft(s)&&ht(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});ft(n)&&ht(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function gt(t){return t.split("-")[0]}var _t=Math.round;function bt(t,e){void 0===e&&(e=!1);var i=t.getBoundingClientRect(),n=1,s=1;return ft(t)&&e&&(n=i.width/t.offsetWidth||1,s=i.height/t.offsetHeight||1),{width:_t(i.width/n),height:_t(i.height/s),top:_t(i.top/s),right:_t(i.right/n),bottom:_t(i.bottom/s),left:_t(i.left/n),x:_t(i.left/n),y:_t(i.top/s)}}function vt(t){var e=bt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function yt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&pt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function wt(t){return dt(t).getComputedStyle(t)}function Et(t){return["table","td","th"].indexOf(ht(t))>=0}function At(t){return((ut(t)?t.ownerDocument:t.document)||window.document).documentElement}function Tt(t){return"html"===ht(t)?t:t.assignedSlot||t.parentNode||(pt(t)?t.host:null)||At(t)}function Ot(t){return ft(t)&&"fixed"!==wt(t).position?t.offsetParent:null}function Ct(t){for(var e=dt(t),i=Ot(t);i&&Et(i)&&"static"===wt(i).position;)i=Ot(i);return i&&("html"===ht(i)||"body"===ht(i)&&"static"===wt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&ft(t)&&"fixed"===wt(t).position)return null;for(var i=Tt(t);ft(i)&&["html","body"].indexOf(ht(i))<0;){var n=wt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function kt(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var Lt=Math.max,xt=Math.min,Dt=Math.round;function St(t,e,i){return Lt(t,xt(e,i))}function Nt(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function It(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}var Pt={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=gt(i.placement),l=kt(a),c=[ot,st].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Nt("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:It(t,rt))}(s.padding,i),d=vt(o),u="y"===l?it:ot,f="y"===l?nt:st,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=Ct(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=St(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&yt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},jt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Mt(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.offsets,r=t.position,a=t.gpuAcceleration,l=t.adaptive,c=t.roundOffsets,h=!0===c?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Dt(Dt(e*n)/n)||0,y:Dt(Dt(i*n)/n)||0}}(o):"function"==typeof c?c(o):o,d=h.x,u=void 0===d?0:d,f=h.y,p=void 0===f?0:f,m=o.hasOwnProperty("x"),g=o.hasOwnProperty("y"),_=ot,b=it,v=window;if(l){var y=Ct(i),w="clientHeight",E="clientWidth";y===dt(i)&&"static"!==wt(y=At(i)).position&&(w="scrollHeight",E="scrollWidth"),y=y,s===it&&(b=nt,p-=y[w]-n.height,p*=a?1:-1),s===ot&&(_=st,u-=y[E]-n.width,u*=a?1:-1)}var A,T=Object.assign({position:r},l&&jt);return a?Object.assign({},T,((A={})[b]=g?"0":"",A[_]=m?"0":"",A.transform=(v.devicePixelRatio||1)<2?"translate("+u+"px, "+p+"px)":"translate3d("+u+"px, "+p+"px, 0)",A)):Object.assign({},T,((e={})[b]=g?p+"px":"",e[_]=m?u+"px":"",e.transform="",e))}var Ht={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:gt(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,Mt(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,Mt(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}},Bt={passive:!0},Rt={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=dt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,Bt)})),a&&l.addEventListener("resize",i.update,Bt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,Bt)})),a&&l.removeEventListener("resize",i.update,Bt)}},data:{}},Wt={left:"right",right:"left",bottom:"top",top:"bottom"};function zt(t){return t.replace(/left|right|bottom|top/g,(function(t){return Wt[t]}))}var qt={start:"end",end:"start"};function Ft(t){return t.replace(/start|end/g,(function(t){return qt[t]}))}function Ut(t){var e=dt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function $t(t){return bt(At(t)).left+Ut(t).scrollLeft}function Vt(t){var e=wt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Kt(t,e){var i;void 0===e&&(e=[]);var n=function t(e){return["html","body","#document"].indexOf(ht(e))>=0?e.ownerDocument.body:ft(e)&&Vt(e)?e:t(Tt(e))}(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=dt(n),r=s?[o].concat(o.visualViewport||[],Vt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Kt(Tt(r)))}function Xt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Yt(t,e){return"viewport"===e?Xt(function(t){var e=dt(t),i=At(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+$t(t),y:a}}(t)):ft(e)?function(t){var e=bt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Xt(function(t){var e,i=At(t),n=Ut(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Lt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Lt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+$t(t),l=-n.scrollTop;return"rtl"===wt(s||i).direction&&(a+=Lt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(At(t)))}function Qt(t){return t.split("-")[1]}function Gt(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?gt(s):null,r=s?Qt(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case it:e={x:a,y:i.y-n.height};break;case nt:e={x:a,y:i.y+i.height};break;case st:e={x:i.x+i.width,y:l};break;case ot:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?kt(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case"start":e[c]=e[c]-(i[h]/2-n[h]/2);break;case"end":e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function Zt(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?"clippingParents":o,a=i.rootBoundary,l=void 0===a?"viewport":a,c=i.elementContext,h=void 0===c?"popper":c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=Nt("number"!=typeof p?p:It(p,rt)),g="popper"===h?"reference":"popper",_=t.elements.reference,b=t.rects.popper,v=t.elements[u?g:h],y=function(t,e,i){var n="clippingParents"===e?function(t){var e=Kt(Tt(t)),i=["absolute","fixed"].indexOf(wt(t).position)>=0&&ft(t)?Ct(t):t;return ut(i)?e.filter((function(t){return ut(t)&&yt(t,i)&&"body"!==ht(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Yt(t,i);return e.top=Lt(n.top,e.top),e.right=xt(n.right,e.right),e.bottom=xt(n.bottom,e.bottom),e.left=Lt(n.left,e.left),e}),Yt(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}(ut(v)?v:v.contextElement||At(t.elements.popper),r,l),w=bt(_),E=Gt({reference:w,element:b,strategy:"absolute",placement:s}),A=Xt(Object.assign({},b,E)),T="popper"===h?A:w,O={top:y.top-T.top+m.top,bottom:T.bottom-y.bottom+m.bottom,left:y.left-T.left+m.left,right:T.right-y.right+m.right},C=t.modifiersData.offset;if("popper"===h&&C){var k=C[s];Object.keys(O).forEach((function(t){var e=[st,nt].indexOf(t)>=0?1:-1,i=[it,nt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function Jt(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?lt:l,h=Qt(n),d=h?a?at:at.filter((function(t){return Qt(t)===h})):rt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=Zt(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[gt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}var te={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=gt(g),b=l||(_!==g&&p?function(t){if("auto"===gt(t))return[];var e=zt(t);return[Ft(t),e,Ft(e)]}(g):[zt(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat("auto"===gt(i)?Jt(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=Zt(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?st:ot:L?nt:it;y[D]>w[D]&&(N=zt(N));var I=zt(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ee(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ie(t){return[it,st,nt,ot].some((function(e){return t[e]>=0}))}var ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=Zt(e,{elementContext:"reference"}),a=Zt(e,{altBoundary:!0}),l=ee(r,n),c=ee(a,s,o),h=ie(l),d=ie(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},se={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=gt(t),s=[ot,it].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[ot,st].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},oe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},re={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=Zt(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=gt(e.placement),b=Qt(e.placement),v=!b,y=kt(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?it:ot,L="y"===y?nt:st,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P="start"===b?A[x]:T[x],j="start"===b?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?vt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],z=St(0,A[x],H[x]),q=v?A[x]/2-I-z-R-O:P-z-R-O,F=v?-A[x]/2+I+z+W+O:j+z+W+O,U=e.elements.arrow&&Ct(e.elements.arrow),$=U?"y"===y?U.clientTop||0:U.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+q-V-$,X=E[y]+F-V;if(o){var Y=St(f?xt(S,K):S,D,f?Lt(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?it:ot,G="x"===y?nt:st,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=St(f?xt(J,K):J,Z,f?Lt(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function ae(t,e,i){void 0===i&&(i=!1);var n,s,o=ft(e),r=ft(e)&&function(t){var e=t.getBoundingClientRect(),i=e.width/t.offsetWidth||1,n=e.height/t.offsetHeight||1;return 1!==i||1!==n}(e),a=At(e),l=bt(t,r),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ht(e)||Vt(a))&&(c=(n=e)!==dt(n)&&ft(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Ut(n)),ft(e)?((h=bt(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=$t(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}var le={placement:"bottom",modifiers:[],strategy:"absolute"};function ce(){for(var t=arguments.length,e=new Array(t),i=0;iP.on(t,"mouseover",h)),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add("show"),this._element.classList.add("show"),P.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(l(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){P.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>P.off(t,"mouseover",h)),this._popper&&this._popper.destroy(),this._menu.classList.remove("show"),this._element.classList.remove("show"),this._element.setAttribute("aria-expanded","false"),F.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...F.getDataAttributes(this._element),...t},r("dropdown",t,this.constructor.DefaultType),"object"==typeof t.reference&&!s(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError("dropdown".toUpperCase()+': Option "reference" provided type "object" without a required "getBoundingClientRect" method.');return t}_createPopper(t){if(void 0===pe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:s(this._config.reference)?e=o(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find(t=>"applyStyles"===t.name&&!1===t.enabled);this._popper=fe(e,this._menu,i),n&&F.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains("show")}_getMenuElement(){return U.next(this._element,".dropdown-menu")[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ye;if(t.classList.contains("dropstart"))return we;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?_e:ge:e?ve:be}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=U.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(a);i.length&&b(i,e,"ArrowDown"===t,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Te.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=U.find('[data-bs-toggle="dropdown"]');for(let i=0,n=e.length;ie+t),this._setElementAttributes(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight",e=>e+t),this._setElementAttributes(".sticky-top","marginRight",e=>e-t)}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=i(Number.parseFloat(s))+"px"})}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight"),this._resetElementAttributes(".sticky-top","marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const i=F.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(F.removeDataAttribute(t,e),t.style[e]=i)})}_applyManipulationCallback(t,e){s(t)?e(t):U.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const Ce={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},ke={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"};class Le{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&d(this._getElement()),this._getElement().classList.add("show"),this._emulateAnimation(()=>{g(t)})):g(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove("show"),this._emulateAnimation(()=>{this.dispose(),g(t)})):g(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...Ce,..."object"==typeof t?t:{}}).rootElement=o(t.rootElement),r("backdrop",t,ke),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),P.on(this._getElement(),"mousedown.bs.backdrop",()=>{g(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(P.off(this._element,"mousedown.bs.backdrop"),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const xe={trapElement:null,autofocus:!0},De={trapElement:"element",autofocus:"boolean"};class Se{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),P.off(document,".bs.focustrap"),P.on(document,"focusin.bs.focustrap",t=>this._handleFocusin(t)),P.on(document,"keydown.tab.bs.focustrap",t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,".bs.focustrap"))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=U.focusableChildren(i);0===n.length?i.focus():"backward"===this._lastTabNavDirection?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?"backward":"forward")}_getConfig(t){return t={...xe,..."object"==typeof t?t:{}},r("focustrap",t,De),t}}const Ne={backdrop:!0,keyboard:!0,focus:!0},Ie={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"};class Pe extends H{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=U.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new Oe}static get Default(){return Ne}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||P.trigger(this._element,"show.bs.modal",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add("modal-open"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),P.on(this._dialog,"mousedown.dismiss.bs.modal",()=>{P.one(this._element,"mouseup.dismiss.bs.modal",t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showBackdrop(()=>this._showElement(t)))}hide(){if(!this._isShown||this._isTransitioning)return;if(P.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove("show"),P.off(this._element,"click.dismiss.bs.modal"),P.off(this._dialog,"mousedown.dismiss.bs.modal"),this._queueCallback(()=>this._hideModal(),this._element,t)}dispose(){[window,this._dialog].forEach(t=>P.off(t,".bs.modal")),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Le({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Se({trapElement:this._element})}_getConfig(t){return t={...Ne,...F.getDataAttributes(this._element),..."object"==typeof t?t:{}},r("modal",t,Ie),t}_showElement(t){const e=this._isAnimated(),i=U.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&d(this._element),this._element.classList.add("show"),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,"shown.bs.modal",{relatedTarget:t})},this._dialog,e)}_setEscapeEvent(){this._isShown?P.on(this._element,"keydown.dismiss.bs.modal",t=>{this._config.keyboard&&"Escape"===t.key?(t.preventDefault(),this.hide()):this._config.keyboard||"Escape"!==t.key||this._triggerBackdropTransition()}):P.off(this._element,"keydown.dismiss.bs.modal")}_setResizeEvent(){this._isShown?P.on(window,"resize.bs.modal",()=>this._adjustDialog()):P.off(window,"resize.bs.modal")}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove("modal-open"),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,"hidden.bs.modal")})}_showBackdrop(t){P.on(this._element,"click.dismiss.bs.modal",t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains("modal-static")||(n||(i.overflowY="hidden"),t.add("modal-static"),this._queueCallback(()=>{t.remove("modal-static"),n||this._queueCallback(()=>{i.overflowY=""},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!p()||i&&!t&&p())&&(this._element.style.paddingLeft=e+"px"),(i&&!t&&!p()||!i&&t&&p())&&(this._element.style.paddingRight=e+"px")}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Pe.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}P.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=i(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,"show.bs.modal",t=>{t.defaultPrevented||P.one(e,"hidden.bs.modal",()=>{a(this)&&this.focus()})}),Pe.getOrCreateInstance(e).toggle(this)})),B(Pe),m(Pe);const je={backdrop:!0,keyboard:!0,scroll:!1},Me={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"};class He extends H{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return"offcanvas"}static get Default(){return je}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new Oe).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("show"),this._queueCallback(()=>{this._config.scroll||this._focustrap.activate(),P.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})},this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove("show"),this._backdrop.hide(),this._queueCallback(()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new Oe).reset(),P.trigger(this._element,"hidden.bs.offcanvas")},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...je,...F.getDataAttributes(this._element),..."object"==typeof t?t:{}},r("offcanvas",t,Me),t}_initializeBackDrop(){return new Le({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Se({trapElement:this._element})}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.offcanvas",t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()})}static jQueryInterface(t){return this.each((function(){const e=He.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}P.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=i(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;P.one(e,"hidden.bs.offcanvas",()=>{a(this)&&this.focus()});const n=U.findOne(".offcanvas.show");n&&n!==e&&He.getInstance(n).hide(),He.getOrCreateInstance(e).toggle(this)})),P.on(window,"load.bs.offcanvas.data-api",()=>U.find(".offcanvas.show").forEach(t=>He.getOrCreateInstance(t).show())),B(He),m(He);const Be=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Re=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i,We=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,ze=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Be.has(i)||Boolean(Re.test(t.nodeValue)||We.test(t.nodeValue));const n=e.filter(t=>t instanceof RegExp);for(let t=0,e=n.length;t{ze(t,a)||i.removeAttribute(t.nodeName)})}return n.body.innerHTML}const Fe=new Set(["sanitize","allowList","sanitizeFn"]),Ue={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},$e={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},Ve={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Ke={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"};class Xe extends H{constructor(t,e){if(void 0===pe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return Ve}static get NAME(){return"tooltip"}static get Event(){return Ke}static get DefaultType(){return Ue}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains("show"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.tip&&this.tip.remove(),this._popper&&this._popper.destroy(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=P.trigger(this._element,this.constructor.Event.SHOW),e=c(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add("fade");const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;M.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),P.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=fe(this._element,n,this._getPopperConfig(r)),n.classList.add("show");const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>{P.on(t,"mouseover",h)});const d=this.tip.classList.contains("fade");this._queueCallback(()=>{const t=this._hoverState;this._hoverState=null,P.trigger(this._element,this.constructor.Event.SHOWN),"out"===t&&this._leave(null,this)},this.tip,d)}hide(){if(!this._popper)return;const t=this.getTipElement();if(P.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove("show"),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>P.off(t,"mouseover",h)),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains("fade");this._queueCallback(()=>{this._isWithActiveTrigger()||("show"!==this._hoverState&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.Event.HIDDEN),this._popper&&(this._popper.destroy(),this._popper=null))},this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove("fade","show"),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".tooltip-inner")}_sanitizeAndSetContent(t,e,i){const n=U.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return s(e)?(e=o(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=qe(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return $e[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach(t=>{if("click"===t)P.on(this._element,this.constructor.Event.CLICK,this._config.selector,t=>this.toggle(t));else if("manual"!==t){const e="hover"===t?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i="hover"===t?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;P.on(this._element,e,this._config.selector,t=>this._enter(t)),P.on(this._element,i,this._config.selector,t=>this._leave(t))}}),this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e.getTipElement().classList.contains("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e._config.delay&&e._config.delay.show?e._timeout=setTimeout(()=>{"show"===e._hoverState&&e.show()},e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e._config.delay&&e._config.delay.hide?e._timeout=setTimeout(()=>{"out"===e._hoverState&&e.hide()},e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=F.getDataAttributes(this._element);return Object.keys(e).forEach(t=>{Fe.has(t)&&delete e[t]}),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:o(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),r("tooltip",t,this.constructor.DefaultType),t.sanitize&&(t.template=qe(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}static jQueryInterface(t){return this.each((function(){const e=Xe.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(Xe);const Ye={...Xe.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},Qe={...Xe.DefaultType,content:"(string|element|function)"},Ge={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class Ze extends Xe{static get Default(){return Ye}static get NAME(){return"popover"}static get Event(){return Ge}static get DefaultType(){return Qe}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=Ze.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(Ze);const Je={offset:10,method:"auto",target:""},ti={offset:"number",method:"string",target:"(string|element)"},ei=".nav-link, .list-group-item, .dropdown-item";class ii extends H{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,P.on(this._scrollElement,"scroll.bs.scrollspy",()=>this._process()),this.refresh(),this._process()}static get Default(){return Je}static get NAME(){return"scrollspy"}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?t:this._config.method,n="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),U.find(ei,this._config.target).map(t=>{const s=e(t),o=s?U.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[F[i](o).top+n,s]}return null}).filter(t=>t).sort((t,e)=>t[0]-e[0]).forEach(t=>{this._offsets.push(t[0]),this._targets.push(t[1])})}dispose(){P.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...Je,...F.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=o(t.target)||document.documentElement,r("scrollspy",t,ti),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`),i=U.findOne(e.join(","),this._config.target);i.classList.add("active"),i.classList.contains("dropdown-item")?U.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add("active"):U.parents(i,".nav, .list-group").forEach(t=>{U.prev(t,".nav-link, .list-group-item").forEach(t=>t.classList.add("active")),U.prev(t,".nav-item").forEach(t=>{U.children(t,".nav-link").forEach(t=>t.classList.add("active"))})}),P.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){U.find(ei,this._config.target).filter(t=>t.classList.contains("active")).forEach(t=>t.classList.remove("active"))}static jQueryInterface(t){return this.each((function(){const e=ii.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(window,"load.bs.scrollspy.data-api",()=>{U.find('[data-bs-spy="scroll"]').forEach(t=>new ii(t))}),m(ii);class ni extends H{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains("active"))return;let t;const e=i(this._element),n=this._element.closest(".nav, .list-group");if(n){const e="UL"===n.nodeName||"OL"===n.nodeName?":scope > li > .active":".active";t=U.find(e,n),t=t[t.length-1]}const s=t?P.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(P.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,n);const o=()=>{P.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),P.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?U.children(e,".active"):U.find(":scope > li > .active",e))[0],s=i&&n&&n.classList.contains("fade"),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove("show"),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove("active");const t=U.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d(t),t.classList.contains("fade")&&t.classList.add("show");let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&U.find(".dropdown-toggle",e).forEach(t=>t.classList.add("active")),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=ni.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||ni.getOrCreateInstance(this).show()})),m(ni);const si={animation:"boolean",autohide:"boolean",delay:"number"},oi={animation:!0,autohide:!0,delay:5e3};class ri extends H{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return si}static get Default(){return oi}static get NAME(){return"toast"}show(){P.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove("hide"),d(this._element),this._element.classList.add("show"),this._element.classList.add("showing"),this._queueCallback(()=>{this._element.classList.remove("showing"),P.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this._element.classList.contains("show")&&(P.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add("showing"),this._queueCallback(()=>{this._element.classList.add("hide"),this._element.classList.remove("showing"),this._element.classList.remove("show"),P.trigger(this._element,"hidden.bs.toast")},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),super.dispose()}_getConfig(t){return t={...oi,...F.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},r("toast",t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){P.on(this._element,"mouseover.bs.toast",t=>this._onInteraction(t,!0)),P.on(this._element,"mouseout.bs.toast",t=>this._onInteraction(t,!1)),P.on(this._element,"focusin.bs.toast",t=>this._onInteraction(t,!0)),P.on(this._element,"focusout.bs.toast",t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return B(ri),m(ri),{Alert:R,Button:W,Carousel:Z,Collapse:et,Dropdown:Te,Modal:Pe,Offcanvas:He,Popover:Ze,ScrollSpy:ii,Tab:ni,Toast:ri,Tooltip:Xe}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js.map b/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js.map deleted file mode 100644 index a59a60b8..00000000 --- a/docs/deps/bootstrap-5.1.0/bootstrap.bundle.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/manipulator.js","../../js/src/dom/selector-engine.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"names":["getSelector","element","selector","getAttribute","hrefAttr","includes","startsWith","split","trim","getSelectorFromElement","document","querySelector","getElementFromSelector","triggerTransitionEnd","dispatchEvent","Event","isElement","obj","jquery","nodeType","getElement","length","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","toString","call","match","toLowerCase","RegExp","test","TypeError","toUpperCase","isVisible","getClientRects","getComputedStyle","getPropertyValue","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","noop","reflow","offsetHeight","getjQuery","jQuery","window","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","index","indexOf","listLength","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","customEventsRegex","nativeEvents","Set","getUidEvent","uid","getEvent","findHandler","events","delegationSelector","uidEventList","i","len","event","originalHandler","normalizeParams","originalTypeEvent","delegationFn","delegation","typeEvent","getTypeEvent","has","addHandler","oneOff","wrapFn","relatedTarget","delegateTarget","this","handlers","previousFn","replace","domElements","querySelectorAll","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","on","one","inNamespace","isNamespace","elementEvent","namespace","storeElementEvent","handlerKey","removeNamespacedHandlers","slice","keyHandlers","trigger","args","isNative","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","evt","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","createEvent","initEvent","CustomEvent","cancelable","key","defineProperty","get","preventDefault","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","BaseComponent","constructor","_element","DATA_KEY","dispose","EVENT_KEY","getOwnPropertyNames","propertyName","_queueCallback","isAnimated","[object Object]","getInstance","VERSION","Error","enableDismissTrigger","component","method","clickEvent","tagName","closest","getOrCreateInstance","Alert","close","_destroyElement","each","data","undefined","Button","toggle","setAttribute","normalizeData","val","normalizeDataKey","chr","button","Manipulator","setDataAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","dataset","filter","pureKey","charAt","getDataAttribute","offset","rect","getBoundingClientRect","top","pageYOffset","left","pageXOffset","position","offsetTop","offsetLeft","SelectorEngine","find","concat","Element","prototype","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","Carousel","super","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","_addEventListeners","_slide","nextWhenVisible","hidden","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","activeIndex","_getItemIndex","order","_handleSwipe","absDeltax","abs","direction","_keydown","_addTouchEventListeners","start","pointerType","touches","clientX","move","end","clearTimeout","itemImg","e","add","_getItemByOrder","isNext","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","_setActiveIndicatorElement","activeIndicator","indicators","parseInt","elementInterval","defaultInterval","directionOrOrder","_directionToOrder","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","_orderToDirection","triggerSlidEvent","completeCallBack","action","ride","carouselInterface","slideIndex","dataApiClickHandler","carousels","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElem","_selector","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activesData","actives","container","tempActiveData","elemActive","dimension","_getDimension","style","scrollSize","triggerArrayLength","selected","triggerArray","isOpen","bottom","right","basePlacements","variationPlacements","reduce","acc","placement","placements","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","styles","assign","effect","_ref2","initialStyles","popper","options","strategy","margin","arrow","reference","hasOwnProperty","attribute","requires","getBasePlacement","round","includeScale","scaleX","scaleY","width","offsetWidth","height","x","y","getLayoutRect","clientRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","userAgent","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","axisProp","centerOffset","_options$element","requiresIfExists","unsetSides","mapToStyles","_Object$assign2","popperRect","offsets","gpuAcceleration","adaptive","roundOffsets","_ref3","dpr","devicePixelRatio","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","computeStyles$1","_ref4","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","data-popper-placement","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","listScrollParents","_element$ownerDocumen","getScrollParent","isBody","visualViewport","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","html","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","getVariation","computeOffsets","variation","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","referenceElement","clippingClientRect","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","data-popper-reference-hidden","data-popper-escaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_offset","_min","_max","_preventedOffset","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","DEFAULT_OPTIONS","modifiers","areValidElements","_len","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","cleanupModifierEffects","merged","visited","result","modifier","dep","depModifier","orderModifiers","current","existing","m","_ref3$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","REGEXP_KEYDOWN","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","display","popperConfig","autoClose","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","getParentFromElement","_createPopper","focus","_completeHide","Popper","_getPopperConfig","isDisplayStatic","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","items","toggles","context","composedPath","isMenuTarget","isActive","stopPropagation","getToggleButton","clearMenus","dataApiKeydownHandler","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_saveInitialAttribute","styleProp","scrollbarWidth","_applyManipulationCallback","_resetElementAttributes","actualValue","removeProperty","callBack","isOverflowing","className","rootElement","clickCallback","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","trapElement","autofocus","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_ignoreBackdropClick","_scrollBar","_isAnimated","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","_resetAdjustments","currentTarget","isModalOverflowing","isBodyOverflowing","paddingLeft","paddingRight","showEvent","Offcanvas","visibility","blur","allReadyOpen","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","sanitizeHtml","unsafeHtml","allowList","sanitizeFn","createdDocument","DOMParser","parseFromString","allowlistKeys","elName","attributeList","allowedAttributes","innerHTML","DISALLOWED_ATTRIBUTES","animation","template","title","delay","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","*","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","_initializeOnDelegatedTarget","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","prefix","floor","random","getElementById","getUID","attachment","_getAttachment","_addAttachmentClass","_resolvePossibleFunction","prevHoverState","_cleanTipClass","getTitle","setContent","_sanitizeAndSetContent","content","templateElement","setElementContent","textContent","updateAttachment","_getDelegateConfig","_handlePopperPlacementChange","_getBasicClassPrefix","eventIn","eventOut","_fixTitle","originalTitleType","dataAttributes","dataAttr","basicClassPrefixRegex","tabClass","token","tClass","Popover","_getContent","SELECTOR_LINK_ITEMS","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","item","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","link","listGroup","navItem","spy","Tab","listElement","itemSelector","hideEvent","complete","active","isTransitioning","_transitionComplete","dropdownChild","dropdownElement","dropdown","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","_onInteraction","isInteracting"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = `#${hrefAttr.split('#')[1]}`\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => {\n if (!obj || typeof obj !== 'object') {\n return false\n }\n\n if (typeof obj.jquery !== 'undefined') {\n obj = obj[0]\n }\n\n return typeof obj.nodeType !== 'undefined'\n}\n\nconst getElement = obj => {\n if (isElement(obj)) { // it's a jQuery object or a node element\n return obj.jquery ? obj[0] : obj\n }\n\n if (typeof obj === 'string' && obj.length > 0) {\n return document.querySelector(obj)\n }\n\n return null\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n return getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight\n}\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n DOMContentLoadedCallbacks.forEach(callback => callback())\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n if (index === -1) {\n return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]\n }\n\n const listLength = list.length\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n getElement,\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n typeCheckConfig,\n isVisible,\n isDisabled,\n findShadowRoot,\n noop,\n getNextActiveElement,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin,\n execute,\n executeAfterTransition\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\nconst customEventsRegex = /^(mouseenter|mouseleave)/i\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getEvent(element) {\n const uid = getUidEvent(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n event.delegateTarget = element\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (let i = domElements.length; i--;) {\n if (domElements[i] === target) {\n event.delegateTarget = target\n\n if (handler.oneOff) {\n // eslint-disable-next-line unicorn/consistent-destructuring\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n\n // To please ESLint\n return null\n }\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n const uidEventList = Object.keys(events)\n\n for (let i = 0, len = uidEventList.length; i < len; i++) {\n const event = events[uidEventList[i]]\n\n if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n return event\n }\n }\n\n return null\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n const delegation = typeof handler === 'string'\n const originalHandler = delegation ? delegationFn : handler\n\n let typeEvent = getTypeEvent(originalTypeEvent)\n const isNative = nativeEvents.has(typeEvent)\n\n if (!isNative) {\n typeEvent = originalTypeEvent\n }\n\n return [delegation, originalHandler, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n if (!handler) {\n handler = delegationFn\n delegationFn = null\n }\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (customEventsRegex.test(originalTypeEvent)) {\n const wrapFn = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n if (delegationFn) {\n delegationFn = wrapFn(delegationFn)\n } else {\n handler = wrapFn(handler)\n }\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const events = getEvent(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null)\n\n if (previousFn) {\n previousFn.oneOff = previousFn.oneOff && oneOff\n\n return\n }\n\n const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = delegation ?\n bootstrapDelegationHandler(element, handler, delegationFn) :\n bootstrapHandler(element, handler)\n\n fn.delegationSelector = delegation ? handler : null\n fn.originalHandler = originalHandler\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, delegation)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n Object.keys(storeElementEvent).forEach(handlerKey => {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n }\n })\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, false)\n },\n\n one(element, event, handler, delegationFn) {\n addHandler(element, event, handler, delegationFn, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFn) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getEvent(element)\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof originalHandler !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!events || !events[typeEvent]) {\n return\n }\n\n removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null)\n return\n }\n\n if (isNamespace) {\n Object.keys(events).forEach(elementEvent => {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n })\n }\n\n const storeElementEvent = events[typeEvent] || {}\n Object.keys(storeElementEvent).forEach(keyHandlers => {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n\n removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector)\n }\n })\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n const isNative = nativeEvents.has(typeEvent)\n\n let jQueryEvent\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n let evt = null\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n if (isNative) {\n evt = document.createEvent('HTMLEvents')\n evt.initEvent(typeEvent, bubbles, true)\n } else {\n evt = new CustomEvent(event, {\n bubbles,\n cancelable: true\n })\n }\n\n // merge custom information in our event\n if (typeof args !== 'undefined') {\n Object.keys(args).forEach(key => {\n Object.defineProperty(evt, key, {\n get() {\n return args[key]\n }\n })\n })\n }\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport {\n executeAfterTransition,\n getElement\n} from './util/index'\nimport EventHandler from './dom/event-handler'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.1.0'\n\nclass BaseComponent {\n constructor(element) {\n element = getElement(element)\n\n if (!element) {\n return\n }\n\n this._element = element\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n Object.getOwnPropertyNames(this).forEach(propertyName => {\n this[propertyName] = null\n })\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n /** Static */\n\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nenableDismissTrigger(Alert, 'close')\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(val) {\n if (val === 'true') {\n return true\n }\n\n if (val === 'false') {\n return false\n }\n\n if (val === Number(val).toString()) {\n return Number(val)\n }\n\n if (val === '' || val === 'null') {\n return null\n }\n\n return val\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n\n Object.keys(element.dataset)\n .filter(key => key.startsWith('bs'))\n .forEach(key => {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n })\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n },\n\n offset(element) {\n const rect = element.getBoundingClientRect()\n\n return {\n top: rect.top + window.pageYOffset,\n left: rect.left + window.pageXOffset\n }\n },\n\n position(element) {\n return {\n top: element.offsetTop,\n left: element.offsetLeft\n }\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\nconst NODE_TEXT = 3\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children)\n .filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n\n let ancestor = element.parentNode\n\n while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n if (ancestor.matches(selector)) {\n parents.push(ancestor)\n }\n\n ancestor = ancestor.parentNode\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(', ')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isRTL,\n isVisible,\n getNextActiveElement,\n reflow,\n triggerTransitionEnd,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_INDICATOR = '[data-bs-target]'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config && this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const order = index > activeIndex ?\n ORDER_NEXT :\n ORDER_PREV\n\n this._slide(order, this._items[index])\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n if (!direction) {\n return\n }\n\n this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT)\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))\n EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch && this._touchSupported) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n const start = event => {\n if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n this.touchStartX = event.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n this.touchDeltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this.touchStartX\n }\n\n const end = event => {\n if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n this.touchDeltaX = event.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault())\n })\n\n if (this._pointerEvent) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(direction)\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n SelectorEngine.find(SELECTOR_ITEM, element.parentNode) :\n []\n\n return this._items.indexOf(element)\n }\n\n _getItemByOrder(order, activeElement) {\n const isNext = order === ORDER_NEXT\n return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap)\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element))\n\n return EventHandler.trigger(this._element, EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement)\n\n for (let i = 0; i < indicators.length; i++) {\n if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n indicators[i].classList.add(CLASS_NAME_ACTIVE)\n indicators[i].setAttribute('aria-current', 'true')\n break\n }\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(directionOrOrder, element) {\n const order = this._directionToOrder(directionOrOrder)\n const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || this._getItemByOrder(order, activeElement)\n\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n const isNext = order === ORDER_NEXT\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n const eventDirectionName = this._orderToDirection(order)\n\n if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n if (this._isSliding) {\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const triggerSlidEvent = () => {\n EventHandler.trigger(this._element, EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n }\n\n if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n setTimeout(triggerSlidEvent, 0)\n }\n\n this._queueCallback(completeCallBack, activeElement, true)\n } else {\n activeElement.classList.remove(CLASS_NAME_ACTIVE)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n triggerSlidEvent()\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _directionToOrder(direction) {\n if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n return direction\n }\n\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n return order\n }\n\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n\n static carouselInterface(element, config) {\n const data = Carousel.getOrCreateInstance(element, config)\n\n let { _config } = data\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n Carousel.carouselInterface(this, config)\n })\n }\n\n static dataApiClickHandler(event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...Manipulator.getDataAttributes(target),\n ...Manipulator.getDataAttributes(this)\n }\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel.carouselInterface(target, config)\n\n if (slideIndex) {\n Carousel.getInstance(target).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler)\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (let i = 0, len = carousels.length; i < len; i++) {\n Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]))\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n getElementFromSelector,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n toggle: true,\n parent: null\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(null|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._isTransitioning = false\n this._config = this._getConfig(config)\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElem => foundElem === this._element)\n\n if (selector !== null && filterElement.length) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let actives = []\n let activesData\n\n if (this._config.parent) {\n const children = SelectorEngine.find(`.${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`, this._config.parent)\n actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)) // remove children if greater depth\n }\n\n const container = SelectorEngine.findOne(this._selector)\n if (actives.length) {\n const tempActiveData = actives.find(elem => container !== elem)\n activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null\n\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n actives.forEach(elemActive => {\n if (container !== elemActive) {\n Collapse.getOrCreateInstance(elemActive, { toggle: false }).hide()\n }\n\n if (!activesData) {\n Data.set(elemActive, DATA_KEY, null)\n }\n })\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const elem = getElementFromSelector(trigger)\n\n if (elem && !this._isShown(elem)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = SelectorEngine.find(`.${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`, this._config.parent)\n SelectorEngine.find(SELECTOR_DATA_TOGGLE, this._config.parent).filter(elem => !children.includes(elem))\n .forEach(element => {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n })\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n triggerArray.forEach(elem => {\n if (isOpen) {\n elem.classList.remove(CLASS_NAME_COLLAPSED)\n } else {\n elem.classList.add(CLASS_NAME_COLLAPSED)\n }\n\n elem.setAttribute('aria-expanded', isOpen)\n })\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n selectorElements.forEach(element => {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","import { isHTMLElement } from \"./instanceOf.js\";\nvar round = Math.round;\nexport default function getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n // Fallback to 1 in case both values are `0`\n scaleX = rect.width / element.offsetWidth || 1;\n scaleY = rect.height / element.offsetHeight || 1;\n }\n\n return {\n width: round(rect.width / scaleX),\n height: round(rect.height / scaleY),\n top: round(rect.top / scaleY),\n right: round(rect.right / scaleX),\n bottom: round(rect.bottom / scaleY),\n left: round(rect.left / scaleX),\n x: round(rect.left / scaleX),\n y: round(rect.top / scaleY)\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport default function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","import { top, left, right, bottom } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(round(x * dpr) / dpr) || 0,\n y: round(round(y * dpr) / dpr) || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets;\n\n var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n _ref3$x = _ref3.x,\n x = _ref3$x === void 0 ? 0 : _ref3$x,\n _ref3$y = _ref3.y,\n y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top) {\n sideY = bottom; // $FlowFixMe[prop-missing]\n\n y -= offsetParent[heightProp] - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right; // $FlowFixMe[prop-missing]\n\n x -= offsetParent[widthProp] - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n var state = _ref4.state,\n options = _ref4.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(referenceElement);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { max as mathMax, min as mathMin } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis || checkAltAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n if (checkMainAxis) {\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = rect.width / element.offsetWidth || 1;\n var scaleY = rect.height / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(options) {\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst SPACE_KEY = 'Space'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_NAVBAR = 'navbar'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\n\nconst Default = {\n offset: [0, 2],\n boundary: 'clippingParents',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null,\n autoClose: true\n}\n\nconst DefaultType = {\n offset: '(array|string|function)',\n boundary: '(string|element)',\n reference: '(string|element|object)',\n display: 'string',\n popperConfig: '(null|object|function)',\n autoClose: '(boolean|string)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown(this._menu)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n const parent = Dropdown.getParentFromElement(this._element)\n // Totally disable Popper for Dropdowns in Navbar\n if (this._inNavbar) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'none')\n } else {\n this._createPopper(parent)\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n !parent.closest(SELECTOR_NAVBAR_NAV)) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.on(elem, 'mouseover', noop))\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown(this._menu)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children)\n .forEach(elem => EventHandler.off(elem, 'mouseover', noop))\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...Manipulator.getDataAttributes(this._element),\n ...config\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper(parent) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false)\n\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n\n if (isDisplayStatic) {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static')\n }\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getMenuElement() {\n return SelectorEngine.next(this._element, SELECTOR_MENU)[0]\n }\n\n _getPlacement() {\n const parentDropdown = this._element.parentNode\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible)\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event && (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY))) {\n return\n }\n\n const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const context = Dropdown.getInstance(toggles[i])\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n if (!context._isShown()) {\n continue\n }\n\n const relatedTarget = {\n relatedTarget: context._element\n }\n\n if (event) {\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static getParentFromElement(element) {\n return getElementFromSelector(element) || element.parentNode\n }\n\n static dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.key === SPACE_KEY || (event.key !== ESCAPE_KEY &&\n ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) ||\n event.target.closest(SELECTOR_MENU))) :\n !REGEXP_KEYDOWN.test(event.key)) {\n return\n }\n\n const isActive = this.classList.contains(CLASS_NAME_SHOW)\n\n if (!isActive && event.key === ESCAPE_KEY) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (isDisabled(this)) {\n return\n }\n\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0]\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (event.key === ESCAPE_KEY) {\n instance.hide()\n return\n }\n\n if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n if (!isActive) {\n instance.show()\n }\n\n instance._selectMenuItem(event)\n return\n }\n\n if (!isActive || event.key === SPACE_KEY) {\n Dropdown.clearMenus()\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width)\n }\n\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProp, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProp)\n const calculatedValue = window.getComputedStyle(element)[styleProp]\n element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, 'paddingRight')\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight')\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight')\n }\n\n _saveInitialAttribute(element, styleProp) {\n const actualValue = element.style[styleProp]\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProp, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProp) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProp)\n if (typeof value === 'undefined') {\n element.style.removeProperty(styleProp)\n } else {\n Manipulator.removeDataAttribute(element, styleProp)\n element.style[styleProp] = value\n }\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n } else {\n SelectorEngine.find(selector, this._element).forEach(callBack)\n }\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow, typeCheckConfig } from './index'\n\nconst Default = {\n className: 'modal-backdrop',\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n isAnimated: false,\n rootElement: 'body', // give the choice to place backdrop under different elements\n clickCallback: null\n}\n\nconst DefaultType = {\n className: 'string',\n isVisible: 'boolean',\n isAnimated: 'boolean',\n rootElement: '(element|string)',\n clickCallback: '(function|null)'\n}\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nclass Backdrop {\n constructor(config) {\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n if (this._config.isAnimated) {\n reflow(this._getElement())\n }\n\n this._getElement().classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n // Private\n\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' ? config : {})\n }\n\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n this._config.rootElement.append(this._getElement())\n\n EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport { typeCheckConfig } from './index'\n\nconst Default = {\n trapElement: null, // The element to trap focus inside of\n autofocus: true\n}\n\nconst DefaultType = {\n trapElement: 'element',\n autofocus: 'boolean'\n}\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nclass FocusTrap {\n constructor(config) {\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n activate() {\n const { trapElement, autofocus } = this._config\n\n if (this._isActive) {\n return\n }\n\n if (autofocus) {\n trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n\n _handleFocusin(event) {\n const { target } = event\n const { trapElement } = this._config\n\n if (\n target === document ||\n target === trapElement ||\n trapElement.contains(target)\n ) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isRTL,\n isVisible,\n reflow,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n\n if (this._isAnimated()) {\n this._isTransitioning = true\n }\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n if (event.target === this._element) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n const isAnimated = this._isAnimated()\n\n if (isAnimated) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n EventHandler.off(this._element, EVENT_CLICK_DISMISS)\n EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS)\n\n this._queueCallback(() => this._hideModal(), this._element, isAnimated)\n }\n\n dispose() {\n [window, this._dialog]\n .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY))\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const isAnimated = this._isAnimated()\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n if (isAnimated) {\n reflow(this._element)\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, isAnimated)\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.key === ESCAPE_KEY) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.key === ESCAPE_KEY) {\n this._triggerBackdropTransition()\n }\n })\n } else {\n EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())\n } else {\n EventHandler.off(window, EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _showBackdrop(callback) {\n EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === true) {\n this.hide()\n } else if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n }\n })\n\n this._backdrop.show(callback)\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const { classList, scrollHeight, style } = this._element\n const isModalOverflowing = scrollHeight > document.documentElement.clientHeight\n\n // return if the following background transition hasn't yet completed\n if ((!isModalOverflowing && style.overflowY === 'hidden') || classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n style.overflowY = 'hidden'\n }\n\n classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n this._queueCallback(() => {\n style.overflowY = ''\n }, this._dialog)\n }\n }, this._dialog)\n\n this._element.focus()\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if ((!isBodyOverflowing && isModalOverflowing && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) {\n this._element.style.paddingLeft = `${scrollbarWidth}px`\n }\n\n if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) {\n this._element.style.paddingRight = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible,\n typeCheckConfig\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Manipulator from './dom/manipulator'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: 'boolean',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element)\n\n this._config = this._getConfig(config)\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n\n static get NAME() {\n return NAME\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._element.style.visibility = 'visible'\n\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const completeCallBack = () => {\n if (!this._config.scroll) {\n this._focustrap.activate()\n }\n\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._element.style.visibility = 'hidden'\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' ? config : {})\n }\n typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _initializeBackDrop() {\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible: this._config.backdrop,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: () => this.hide()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.key === ESCAPE_KEY) {\n this.hide()\n }\n })\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (allReadyOpen && allReadyOpen !== target) {\n Offcanvas.getInstance(allReadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () =>\n SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())\n)\n\nenableDismissTrigger(Offcanvas)\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attrName)) {\n if (uriAttrs.has(attrName)) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const allowlistKeys = Object.keys(allowList)\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (!allowlistKeys.includes(elName)) {\n el.remove()\n\n continue\n }\n\n const attributeList = [].concat(...el.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, allowedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\n\nimport {\n defineJQueryPlugin,\n findShadowRoot,\n getElement,\n getUID,\n isElement,\n isRTL,\n noop,\n typeCheckConfig\n} from './util/index'\nimport { DefaultAllowlist, sanitizeHtml } from './util/sanitizer'\nimport Data from './dom/data'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(array|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacements: 'array',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n allowList: 'object',\n popperConfig: '(null|object|function)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n animation: true,\n template: '
' +\n '
' +\n '
' +\n '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: [0, 0],\n container: false,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n boundary: 'clippingParents',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n allowList: DefaultAllowlist,\n popperConfig: null\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element)\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this._config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get Event() {\n return Event\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const context = this._initializeOnDelegatedTarget(event)\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if (this.getTipElement().classList.contains(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this.isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW)\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = shadowRoot === null ?\n this._element.ownerDocument.documentElement.contains(this._element) :\n shadowRoot.contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this._element.setAttribute('aria-describedby', tipId)\n\n if (this._config.animation) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n\n const attachment = this._getAttachment(placement)\n this._addAttachmentClass(attachment)\n\n const { container } = this._config\n Data.set(tip, this.constructor.DATA_KEY, this)\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.Event.INSERTED)\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n const customClass = this._resolvePossibleFunction(this._config.customClass)\n if (customClass) {\n tip.classList.add(...customClass.split(' '))\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children).forEach(element => {\n EventHandler.on(element, 'mouseover', noop)\n })\n }\n\n const complete = () => {\n const prevHoverState = this._hoverState\n\n this._hoverState = null\n EventHandler.trigger(this._element, this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(complete, this.tip, isAnimated)\n }\n\n hide() {\n if (!this._popper) {\n return\n }\n\n const tip = this.getTipElement()\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (this._hoverState !== HOVER_STATE_SHOW) {\n tip.remove()\n }\n\n this._cleanTipClass()\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.Event.HIDDEN)\n\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n [].concat(...document.body.children)\n .forEach(element => EventHandler.off(element, 'mouseover', noop))\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(complete, this.tip, isAnimated)\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.update()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n getTipElement() {\n if (this.tip) {\n return this.tip\n }\n\n const element = document.createElement('div')\n element.innerHTML = this._config.template\n\n const tip = element.children[0]\n this.setContent(tip)\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n\n this.tip = tip\n return this.tip\n }\n\n setContent(tip) {\n this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER)\n }\n\n _sanitizeAndSetContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!content && templateElement) {\n templateElement.remove()\n return\n }\n\n // we use append for html objects to maintain js events\n this.setElementContent(templateElement, content)\n }\n\n setElementContent(element, content) {\n if (element === null) {\n return\n }\n\n if (isElement(content)) {\n content = getElement(content)\n\n // content is a DOM node or a jQuery\n if (this._config.html) {\n if (content.parentNode !== element) {\n element.innerHTML = ''\n element.append(content)\n }\n } else {\n element.textContent = content.textContent\n }\n\n return\n }\n\n if (this._config.html) {\n if (this._config.sanitize) {\n content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn)\n }\n\n element.innerHTML = content\n } else {\n element.textContent = content\n }\n }\n\n getTitle() {\n const title = this._element.getAttribute('data-bs-original-title') || this._config.title\n\n return this._resolvePossibleFunction(title)\n }\n\n updateAttachment(attachment) {\n if (attachment === 'right') {\n return 'end'\n }\n\n if (attachment === 'left') {\n return 'start'\n }\n\n return attachment\n }\n\n // Private\n\n _initializeOnDelegatedTarget(event, context) {\n return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(val => Number.parseInt(val, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(content) {\n return typeof content === 'function' ? content.call(this._element) : content\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'onChange',\n enabled: true,\n phase: 'afterWrite',\n fn: data => this._handlePopperPlacementChange(data)\n }\n ],\n onFirstUpdate: data => {\n if (data.options.placement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n }\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _addAttachmentClass(attachment) {\n this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event))\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event))\n EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._config.selector) {\n this._config = {\n ...this._config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n const originalTitleType = typeof this._element.getAttribute('data-bs-original-title')\n\n if (title || originalTitleType !== 'string') {\n this._element.setAttribute('data-bs-original-title', title || '')\n if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n context = this._initializeOnDelegatedTarget(event, context)\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if (context.getTipElement().classList.contains(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context._config.delay || !context._config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context._config.delay.show)\n }\n\n _leave(event, context) {\n context = this._initializeOnDelegatedTarget(event, context)\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = context._element.contains(event.relatedTarget)\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context._config.delay || !context._config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context._config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n Object.keys(dataAttributes).forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n typeCheckConfig(NAME, config, this.constructor.DefaultType)\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _cleanTipClass() {\n const tip = this.getTipElement()\n const basicClassPrefixRegex = new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`, 'g')\n const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex)\n if (tabClass !== null && tabClass.length > 0) {\n tabClass.map(token => token.trim())\n .forEach(tClass => tip.classList.remove(tClass))\n }\n }\n\n _getBasicClassPrefix() {\n return CLASS_PREFIX\n }\n\n _handlePopperPlacementChange(popperData) {\n const { state } = popperData\n\n if (!state) {\n return\n }\n\n this.tip = state.elements.popper\n this._cleanTipClass()\n this._addAttachmentClass(this._getAttachment(state.placement))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst CLASS_PREFIX = 'bs-popover'\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n offset: [0, 8],\n trigger: 'click',\n content: '',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get Event() {\n return Event\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n setContent(tip) {\n this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE)\n this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT)\n }\n\n // Private\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n _getBasicClassPrefix() {\n return CLASS_PREFIX\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getSelectorFromElement,\n typeCheckConfig\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._scrollElement = this._element.tagName === 'BODY' ? window : this._element\n this._config = this._getConfig(config)\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET :\n METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod :\n this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() :\n 0\n\n this._offsets = []\n this._targets = []\n this._scrollHeight = this._getScrollHeight()\n\n const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target)\n\n targets.map(element => {\n const targetSelector = getSelectorFromElement(element)\n const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n return [\n Manipulator[offsetMethod](target).top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n EventHandler.off(this._scrollElement, EVENT_KEY)\n super.dispose()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...Manipulator.getDataAttributes(this._element),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n config.target = getElement(config.target) || document.documentElement\n\n typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset :\n this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight :\n this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = SELECTOR_LINK_ITEMS.split(',')\n .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const link = SelectorEngine.findOne(queries.join(','), this._config.target)\n\n link.classList.add(CLASS_NAME_ACTIVE)\n if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n } else {\n SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n .forEach(listGroup => {\n // Set triggered links parents as active\n // With both