shinycssloaders/0000755000176200001440000000000013710050063013462 5ustar liggesusersshinycssloaders/NAMESPACE0000644000176200001440000000010513710044442014701 0ustar liggesusers# Generated by roxygen2: do not edit by hand export(withSpinner) shinycssloaders/LICENSE0000644000176200001440000000005213706431701014473 0ustar liggesusersYEAR: 2020 COPYRIGHT HOLDER: Dean Attalishinycssloaders/README.md0000644000176200001440000001017013706453716014761 0ustar liggesusers# {shinycssloaders} - Add loading animations to a Shiny output while it's recalculating [![CRAN](http://www.r-pkg.org/badges/version/shinycssloaders)](https://cran.r-project.org/package=shinycssloaders) [![Travis build status](https://travis-ci.org/daattali/shinycssloaders.svg?branch=master)](https://travis-ci.org/daattali/shinycssloaders) When a Shiny output (such as a plot, table, map, etc.) is recalculating, it remains visible but gets greyed out. Using {shinycssloaders}, you can add a loading animation ("spinner") to outputs instead of greying them out. By wrapping a Shiny output in `withSpinner()`, a spinner will automatically appear while the output is recalculating. You can choose from one of 8 built-in animation types, and customize the colour/size. You can also use your own image instead of the built-in animations. See the [demo Shiny app](https://daattali.com/shiny/shinycssloaders-demo) online for examples. # Table of contents - [Example](#example) - [How to use](#usage) - [Installation](#install) - [Features](#features)

Example

For interactive examples and to see some of the features, [check out the demo app](https://daattali.com/shiny/shinycssloaders-demo/). Below is a simple example of what {shinycssloaders} looks like: ![demo GIF](inst/img/demo.gif)

How to use

Simply wrap a Shiny output in a call to `withSpinner()`. If you have `%>%` loaded, you can use it, for example `plotOutput("myplot") %>% withSpinner()`. Basic usage: ``` library(shiny) ui <- fluidPage( actionButton("go", "Go"), shinycssloaders::withSpinner( plotOutput("plot") ) ) server <- function(input, output) { output$plot <- renderPlot({ input$go Sys.sleep(1.5) plot(runif(10)) }) } shinyApp(ui, server) ```

Installation

To install the stable CRAN version: ``` install.packages("shinycssloaders") ``` To install the latest development version from GitHub: ``` install.packages("remotes") remotes::install_github("daattali/shinycssloaders") ```

Features

### 8 customizable built-in spinners You can use the `type` parameter to choose one of the 8 built-in animations, the `color` parameter to change the spinner's colour, and `size` to make the spinner smaller or larger (2 will make the spinner twice as large). For example, `withSpinner(plotOutput("myplot"), type = 5, color = "#0dc5c1", size = 2)`. ### Setting spinner parameters globally If you want all the spinners in your app to have a certain type/size/colour, instead of specifying them in each call to `withSpinner()`, you can set them globally using the `spinner.type`, `spinner.color`, `spinner.size` R options. For example, setting `options(spinner.color="#0dc5c1")` will cause all your spinners to use that colour. ### Using a custom image If you don't want to use any of the built-in spinners, you can also provide your own image (either a still image or a GIF) to use instead, using the `image` parameter. ### Specifying the spinner height The spinner attempts to automatically figure out the height of the output it replaces, and to vertically center itself. For some outputs (such as tables), the height is unknown, so the spinner will assume the output is 400px tall. If your output is expected to be significantly smaller or larger, you can use the `proxy.height` parameter to adjust this. ### Showing a spinner on top of the output By default, the out-dated output gets hidden while the spinner is showing. You can change this behaviour to have the spinner appear on top of the old output using the `hide.ui = FALSE` parameter. ### Background colour Spinner types 2 and 3 require you to specify a background colour. It's recommended to use a colour that matches the background colour of the output's container, so that the spinner will "blend in". ## Credits The 8 built-in animations are taken from [https://projects.lukehaas.me/css-loaders/](https://projects.lukehaas.me/css-loaders/). The package was originally created by [Andrew Sali](https://github.com/andrewsali). shinycssloaders/man/0000755000176200001440000000000013706357654014262 5ustar liggesusersshinycssloaders/man/shinycssloaders.Rd0000644000176200001440000000133513706430317017754 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/shinycssloaders-package.r \docType{package} \name{shinycssloaders} \alias{shinycssloaders} \title{shinycssloaders} \description{ Add automatic loading animations to your Shiny outputs (e.g. plots, tables) by adding a single function call around the Shiny output function. Animations automatically show/hide when the output is recalculating/recalculated. You can use your own custom image, or choose from 8 different types of built-in animations, as well customize the color and size of the built-in animations. } \details{ For further reference on how to use the package, please refer to \url{https://github.com/daattali/shinycssloaders} } shinycssloaders/man/withSpinner.Rd0000644000176200001440000000574513706430317017062 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/withSpinner.R \name{withSpinner} \alias{withSpinner} \title{Add a spinner that shows when an output is recalculating} \usage{ withSpinner( ui_element, type = getOption("spinner.type", default = 1), color = getOption("spinner.color", default = "#0275D8"), size = getOption("spinner.size", default = 1), color.background = getOption("spinner.color.background"), custom.css = FALSE, proxy.height = NULL, id = NULL, image = NULL, image.width = NULL, image.height = NULL, hide.ui = TRUE ) } \arguments{ \item{ui_element}{A UI element that should be wrapped with a spinner when the corresponding output is being calculated.} \item{type}{The type of spinner to use, valid values are integers between 0-8 (0 means no spinner). Check out \url{https://daattali.com/shiny/shinycssloaders-demo} to see the different types of spinners. You can also use your own custom image using the \code{image} parameter.} \item{color}{The color of the spinner in hex format. Ignored if \code{image} is used.} \item{size}{The size of the spinner, relative to its default size (default is 1, a size of 2 means twice as large). Ignored if \code{image} is used.} \item{color.background}{For certain spinners (type 2-3), you will need to specify the background color of the spinner. Ignored if \code{image} is used.} \item{custom.css}{Set to \code{TRUE} if you have your own custom CSS that you defined and you don't want the automatic CSS applied to the spinner. Ignored if \code{image} is used.} \item{proxy.height}{If the output UI doesn't specify the output height, you can set a proxy height. It defaults to "400px" for outputs with undefined height. Ignored if \code{hide.ui} is set to \code{FALSE}.} \item{id}{The HTML ID to use for the spinner. If you don't provide one, it will be generated automatically.} \item{image}{The path or URL of the image to use if you want to use a custom image instead of a built-in spinner.} \item{image.width}{The width for the custom image spinner, in pixels. If not provided, then the original size of the image is used. Ignored if not using \code{image}.} \item{image.height}{The height for the custom image spinner, in pixels. If not provided, then the original size of the image is used. Ignored if not using \code{image}.} \item{hide.ui}{By default, while an output is recalculating, the output UI is hidden and the spinner is visible instead. Setting \code{hide.ui = FALSE} will result in the spinner showing up on top of the previous output UI.} } \description{ Add a spinner that shows when an output is recalculating } \examples{ if (interactive()) { library(shiny) shinyApp( ui = fluidPage( actionButton("go", "Go"), withSpinner(plotOutput("plot")) ), server = function(input, output) { output$plot <- renderPlot({ input$go Sys.sleep(1.5) plot(runif(10)) }) } ) } } shinycssloaders/DESCRIPTION0000644000176200001440000000304413710050063015171 0ustar liggesusersPackage: shinycssloaders Type: Package Title: Add Loading Animations to a 'shiny' Output While It's Recalculating Version: 1.0.0 Authors@R: c( person("Andras","Sali",email="andras.sali@alphacruncher.hu",role=c("aut"),comment="Original creator of shinycssloaders package"), person("Luke","Hass",role=c("ctb","cph"),comment="Author of included CSS loader code"), person("Dean","Attali",email="daattali@gmail.com",role=c("aut","cre"),comment="Maintainer of shinycssloaders since 2019") ) Description: When a 'Shiny' output (such as a plot, table, map, etc.) is recalculating, it remains visible but gets greyed out. Using 'shinycssloaders', you can add a loading animation ("spinner") to outputs instead. By wrapping a 'Shiny' output in 'withSpinner()', a spinner will automatically appear while the output is recalculating. See the demo online at . License: MIT + file LICENSE URL: https://github.com/daattali/shinycssloaders BugReports: https://github.com/daattali/shinycssloaders/issues Depends: R (>= 3.1) Imports: digest, glue, grDevices, shiny Suggests: shinydisconnect, shinyjs RoxygenNote: 7.1.0 Encoding: UTF-8 NeedsCompilation: no Packaged: 2020-07-28 15:50:54 UTC; D Author: Andras Sali [aut] (Original creator of shinycssloaders package), Luke Hass [ctb, cph] (Author of included CSS loader code), Dean Attali [aut, cre] (Maintainer of shinycssloaders since 2019) Maintainer: Dean Attali Repository: CRAN Date/Publication: 2020-07-28 16:20:03 UTC shinycssloaders/R/0000755000176200001440000000000013706465411013677 5ustar liggesusersshinycssloaders/R/withSpinner.R0000644000176200001440000001442613706465411016343 0ustar liggesusers#' Add a spinner that shows when an output is recalculating #' @export #' @param ui_element A UI element that should be wrapped with a spinner when the corresponding output is being calculated. #' @param type The type of spinner to use, valid values are integers between 0-8 (0 means no spinner). Check out #' \url{https://daattali.com/shiny/shinycssloaders-demo} to see the different types of spinners. You can also use #' your own custom image using the `image` parameter. #' @param color The color of the spinner in hex format. Ignored if `image` is used. #' @param size The size of the spinner, relative to its default size (default is 1, a size of 2 means twice as large). Ignored if `image` is used. #' @param color.background For certain spinners (type 2-3), you will need to specify the background color of the spinner. Ignored if `image` is used. #' @param custom.css Set to `TRUE` if you have your own custom CSS that you defined and you don't want the automatic CSS applied to the spinner. Ignored if `image` is used. #' @param proxy.height If the output UI doesn't specify the output height, you can set a proxy height. It defaults to "400px" #' for outputs with undefined height. Ignored if `hide.ui` is set to `FALSE`. #' @param id The HTML ID to use for the spinner. If you don't provide one, it will be generated automatically. #' @param image The path or URL of the image to use if you want to use a custom image instead of a built-in spinner. #' @param image.height The height for the custom image spinner, in pixels. If not provided, then the original #' size of the image is used. Ignored if not using `image`. #' @param image.width The width for the custom image spinner, in pixels. If not provided, then the original #' size of the image is used. Ignored if not using `image`. #' @param hide.ui By default, while an output is recalculating, the output UI is hidden and the spinner is visible instead. #' Setting `hide.ui = FALSE` will result in the spinner showing up on top of the previous output UI. #' @examples #' if (interactive()) { #' library(shiny) #' #' shinyApp( #' ui = fluidPage( #' actionButton("go", "Go"), #' withSpinner(plotOutput("plot")) #' ), #' server = function(input, output) { #' output$plot <- renderPlot({ #' input$go #' Sys.sleep(1.5) #' plot(runif(10)) #' }) #' } #' ) #' } withSpinner <- function( ui_element, type = getOption("spinner.type", default = 1), color = getOption("spinner.color", default = "#0275D8"), size = getOption("spinner.size", default = 1), color.background = getOption("spinner.color.background"), custom.css = FALSE, proxy.height = NULL, id = NULL, image = NULL, image.width = NULL, image.height = NULL, hide.ui = TRUE ) { stopifnot(type %in% 0:8) if (grepl("rgb", color, fixed = TRUE)) { stop("Color should be given in hex format") } if (is.character(custom.css)) { stop("It looks like you provided a string to 'custom.css', but it needs to be either `TRUE` or `FALSE`. ", "The actual CSS needs to added to the app's UI.") } # each spinner will have a unique id to allow separate sizing if (is.null(id)) { id <- paste0("spinner-", digest::digest(ui_element)) } if (is.null(image)) { css_size_color <- shiny::tagList() if (!custom.css && type != 0) { if (type %in% c(2, 3) && is.null(color.background)) { stop("For spinner types 2 & 3 you need to specify manually a background color.") } color.rgb <- paste(grDevices::col2rgb(color), collapse = ",") color.alpha0 <- sprintf("rgba(%s, 0)", color.rgb) color.alpha2 <- sprintf("rgba(%s, 0.2)", color.rgb) css_file <- system.file(glue::glue("loaders-templates/load{type}.css"), package="shinycssloaders") base_css <- "" if (file.exists(css_file)) { base_css <- paste(readLines(css_file), collapse = " ") base_css <- glue::glue(base_css, .open = "{{", .close = "}}") } # get default font-size from css, and cut it by 25%, as for outputs we usually need something smaller size <- round(c(11, 11, 10, 20, 25, 90, 10, 10)[type] * size * 0.75) base_css <- paste(base_css, glue::glue("#{id} {{ font-size: {size}px; }}")) css_size_color <- add_style(base_css) } } proxy_element <- get_proxy_element(ui_element, proxy.height, hide.ui) shiny::tagList( shiny::singleton( shiny::tags$head( shiny::tags$link(rel="stylesheet", href="shinycssloaders-assets/spinner.css"), shiny::tags$script(src="shinycssloaders-assets/spinner.js") ) ), if (is.null(image)) shiny::singleton( shiny::tags$head( shiny::tags$link(rel="stylesheet", href="shinycssloaders-assets/css-loaders.css") ) ), if (is.null(image)) css_size_color, shiny::div( class = paste( "shiny-spinner-output-container", if (hide.ui) "shiny-spinner-hideui" else "", if (is.null(image)) "" else "shiny-spinner-custom" ), shiny::div( class = paste( "load-container", "shiny-spinner-hidden", if (is.null(image)) paste0("load",type) ), if (is.null(image)) shiny::div(id = id, class = "loader", (if (type == 0) "" else "Loading...")) else shiny::tags$img(id = id, src = image, alt = "Loading...", width = image.width, height = image.height) ), proxy_element, ui_element ) ) } get_proxy_element <- function(ui_element, proxy.height, hide.ui) { if (!hide.ui) { return(shiny::tagList()) } if (is.null(proxy.height)) { if (!grepl("height:\\s*\\d", ui_element)) { proxy.height <- "400px" } } else { if (is.numeric(proxy.height)) { proxy.height <- paste0(proxy.height, "px") } } if (is.null(proxy.height)) { proxy_element <- shiny::tagList() } else { proxy_element <- shiny::div(style=glue::glue("height:{proxy.height}"), class="shiny-spinner-placeholder") } } add_style <- function(x) { shiny::tags$head( shiny::tags$style( shiny::HTML( x ) ) ) }shinycssloaders/R/globals.R0000644000176200001440000000025513650661616015452 0ustar liggesusers.onLoad <- function(libname, pkgname) { shiny::addResourcePath(prefix = "shinycssloaders-assets", directoryPath = system.file("assets", package = "shinycssloaders")) } shinycssloaders/R/shinycssloaders-package.r0000644000176200001440000000113713706405324020667 0ustar liggesusers#' shinycssloaders #' #' Add automatic loading animations to your Shiny outputs (e.g. plots, tables) by adding a single function call #' around the Shiny output function. Animations automatically show/hide when the output #' is recalculating/recalculated. You can use your own custom image, or choose from 8 different types of #' built-in animations, as well customize the color and size of the built-in animations. #' #' For further reference on how to use the package, please refer to \url{https://github.com/daattali/shinycssloaders} #' #' @name shinycssloaders #' @docType package NULL shinycssloaders/NEWS.md0000644000176200001440000000462413710044400014564 0ustar liggesusers# shinycssloaders 1.0.0 (2020-07-28) - Add support for custom images with `image` parameter (#46) - Add support for making the spinner show up on top of the output instead of replacing it, with a `hide.ui` parameter (#22) - Add `id` parameter to `withSpinner()` to allow you to target a specific spinner with CSS (#19) - Allow spinner type 0, which means no loading icon is shown (#18) - Changed the license from GPL-3 to MIT - Fix bug where loaders weren't working in uiOutput (#39) - Fix bug where `withSpinner()` was causing `shiny::appendTab()` to break (#45) - Add support for `proxy.height` to be specified as a number instead of a string (`300` vs `"300px"`) - Fixed bug where spinner wasn't showing up for certain output IDs such as "map" (#49) - Clarify the `custom.css` parameter which was causing confusion (#21) - Don't expose 'assets' as a resourch path because it blocks shiny apps from having a www/assets/ folder (#48) - Internal refactoring: Use one CSS file for all styles, and use CSS files to load custom CSS of each style (#37) - Added a sample Shiny app "demo" that lets you experiment with all loader types and parameters - File cleanup: Remove all files and dirs from inst/css-loaders and only keep the CSS (#38) - Removed the default value of `proxy.height` parameter to simplify the function documentation # shinycssloaders 0.3 (2020-01-14) - Remove debug message from JS console (#26) - Ensure spinner doesn't show forever when used on dynamic outputs - Fix bug that caused errors with outputs with special ID characters and caused errors when using shiny bookmarks (#16) - Fix type 1 and type 7 spinners on IE11 (#1) - Dean Attali took over as maintainer of the package # shinycssloaders 0.2.0 ## New features * Better support for outputs with non-fixed height (e.g. tables with heights depending on the data received from the server), by embedding a 'proxy' container which contains the spinner. An attempt is made to automatically deduce if the output has fixed / variable height and in the latter case the proxy container will have a default height of '400px'. Otherwise the `proxy.height` option can be used to explicitly control the size of the proxy container. ## Bug-fixes * Fix vertical scroll-bar appearing for Type 3 spinners * Fix error message still showing when recalculating for htmlwidgets # shinycssloaders 0.1.0 The first working version of the package. shinycssloaders/MD50000644000176200001440000000315013710050063013771 0ustar liggesuserscac0ebe75eef4409afb8f698931e6607 *DESCRIPTION 9ddd06bb65ce3e8cdcc8792902b9102a *LICENSE 22bfb875c6f72c48e7bdd5b5db6052ce *NAMESPACE 1931a3bef379d3b5509e3b135f8dff65 *NEWS.md cbe45d328c0fda5cbbfccaa90e69699d *R/globals.R ca396795881fdf8e07217bebdad578a0 *R/shinycssloaders-package.r 5edf36e3f444bb7d9333559d0ce658cb *R/withSpinner.R c11651d4e367be5b489069585a5cfb9c *README.md 2859f7fe0cf073c30e519acc01f665e6 *inst/assets/css-loaders.css 6ee55e64b2be087ffd29b89232601d3c *inst/assets/spinner.css 595a93e655b754972e363e0dcf04160f *inst/assets/spinner.js fb1ead66ada60fec8b3b0436d2db1185 *inst/examples/demo/server.R 0e88520ca4b2d3cdc15ef75010b695f8 *inst/examples/demo/ui.R 22d9e69c0ebaff22a24e241a0244532e *inst/examples/demo/www/github-green-right.png 2d8584e19c4f34c793273a72a305a89f *inst/examples/demo/www/header.png 5d9e4a3d6c0ee9e378f0e4872b34564d *inst/examples/demo/www/style.css 0d0345f662a757ef17eef497fa8e83fc *inst/img/custom.gif 5581db33923abc722340bc1cd0fd4004 *inst/img/demo.gif d781a86c8b24ae0e1f8e354cfcabe36e *inst/loaders-templates/load1.css a4f24870f10aa98318e496dbe75e288d *inst/loaders-templates/load2.css 49907999d672f5fc14c1c68a7c091466 *inst/loaders-templates/load3.css bfa76d038c4f18a5806e1f50ca703c52 *inst/loaders-templates/load4.css 2222ebe035e664a506cca840261beefb *inst/loaders-templates/load5.css bfa76d038c4f18a5806e1f50ca703c52 *inst/loaders-templates/load6.css bfa76d038c4f18a5806e1f50ca703c52 *inst/loaders-templates/load7.css 553234aa4cfc93b4d9791234d7d0fdba *inst/loaders-templates/load8.css f29eb650b791871b4fa8e132b07e426e *man/shinycssloaders.Rd f4e9261bc1930dab39656ce7cc97bd09 *man/withSpinner.Rd shinycssloaders/inst/0000755000176200001440000000000013706414347014455 5ustar liggesusersshinycssloaders/inst/loaders-templates/0000755000176200001440000000000013645366666020116 5ustar liggesusersshinycssloaders/inst/loaders-templates/load6.css0000644000176200001440000000004313645366666021632 0ustar liggesusers#{{id}} { color: {{color}}; } shinycssloaders/inst/loaders-templates/load4.css0000644000176200001440000000004313645366666021630 0ustar liggesusers#{{id}} { color: {{color}}; } shinycssloaders/inst/loaders-templates/load2.css0000644000176200001440000000015413645366666021631 0ustar liggesusers#{{id}} { color: {{color}}; } #{{id}}:before, #{{id}}:after { background: {{color.background}}; } shinycssloaders/inst/loaders-templates/load3.css0000644000176200001440000000101113645366666021623 0ustar liggesusers#{{id}} { background: -moz-linear-gradient(left, {{color}} 10%, {{color.alpha0}} 42%); background: -webkit-linear-gradient(left, {{color}} 10%, {{color.alpha0}} 42%); background: -o-linear-gradient(left, {{color}} 10%, {{color.alpha0}} 42%); background: -ms-linear-gradient(left, {{color}} 10%, {{color.alpha0}} 42%); background: linear-gradient(to right, {{color}} 10%, {{color.alpha0}} 42%); } #{{id}}:before { background: {{color}}; } #{{id}}:after { background: {{color.background}}; } shinycssloaders/inst/loaders-templates/load1.css0000644000176200001440000000015213645366666021626 0ustar liggesusers#{{id}}, #{{id}}:before, #{{id}}:after { background: {{color}}; } #{{id}} { color: {{color}}; } shinycssloaders/inst/loaders-templates/load7.css0000644000176200001440000000004313645366666021633 0ustar liggesusers#{{id}} { color: {{color}}; } shinycssloaders/inst/loaders-templates/load5.css0000644000176200001440000001377213645366666021646 0ustar liggesusers#{{id}} { -webkit-animation: load5-{{id}} 1.1s infinite ease; animation: load5-{{id}} 1.1s infinite ease; } @-webkit-keyframes load5-{{id}} { 0%, 100% { box-shadow: 0em -2.6em 0em 0em {{color}}, 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.5), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.7); } 12.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.7), 1.8em -1.8em 0 0em {{color}}, 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.5); } 25% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.5), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.7), 2.5em 0em 0 0em {{color}}, 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 37.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.5), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.7), 1.75em 1.75em 0 0em {{color}}, 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 50% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.5), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.7), 0em 2.5em 0 0em {{color}}, -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 62.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.5), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.7), -1.8em 1.8em 0 0em {{color}}, -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 75% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.5), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.7), -2.6em 0em 0 0em {{color}}, -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 87.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.5), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.7), -1.8em -1.8em 0 0em {{color}}; } } @keyframes load5-{{id}} { 0%, 100% { box-shadow: 0em -2.6em 0em 0em {{color}}, 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.5), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.7); } 12.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.7), 1.8em -1.8em 0 0em {{color}}, 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.5); } 25% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.5), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.7), 2.5em 0em 0 0em {{color}}, 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 37.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.5), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.7), 1.75em 1.75em 0 0em {{color}}, 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 50% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.5), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.7), 0em 2.5em 0 0em {{color}}, -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.2), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 62.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.5), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.7), -1.8em 1.8em 0 0em {{color}}, -2.6em 0em 0 0em rgba({{color.rgb}}, 0.2), -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 75% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.5), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.7), -2.6em 0em 0 0em {{color}}, -1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2); } 87.5% { box-shadow: 0em -2.6em 0em 0em rgba({{color.rgb}}, 0.2), 1.8em -1.8em 0 0em rgba({{color.rgb}}, 0.2), 2.5em 0em 0 0em rgba({{color.rgb}}, 0.2), 1.75em 1.75em 0 0em rgba({{color.rgb}}, 0.2), 0em 2.5em 0 0em rgba({{color.rgb}}, 0.2), -1.8em 1.8em 0 0em rgba({{color.rgb}}, 0.5), -2.6em 0em 0 0em rgba({{color.rgb}}, 0.7), -1.8em -1.8em 0 0em {{color}}; } } shinycssloaders/inst/loaders-templates/load8.css0000644000176200001440000000030113645366666021631 0ustar liggesusers#{{id}} { border-top: 1.1em solid {{color.alpha2}}; border-right: 1.1em solid {{color.alpha2}}; border-bottom: 1.1em solid {{color.alpha2}}; border-left: 1.1em solid {{color}}; } shinycssloaders/inst/examples/0000755000176200001440000000000013706364321016267 5ustar liggesusersshinycssloaders/inst/examples/demo/0000755000176200001440000000000013706465743017225 5ustar liggesusersshinycssloaders/inst/examples/demo/server.R0000644000176200001440000000215113706465752020655 0ustar liggesusersserver <- function(input, output, session) { plotnum <- reactiveVal(0) output$show_example <- renderUI({ if (input$type == "custom") { params <- list( ui_element = plotOutput(paste0("example", plotnum())), image = input$image, image.width = if (input$image_size_default) NULL else input$image.width, image.height = if (input$image_size_default) NULL else input$image.height ) } else { params <- list( ui_element = plotOutput(paste0("example", plotnum())), type = as.numeric(input$type), color = input$col, size = input$size, color.background = "#fafafa" ) } do.call(shinycssloaders::withSpinner, params) }) observeEvent(input$update, ignoreNULL = FALSE, { plotnum(plotnum() + 1) output[[paste0("example", plotnum())]] <- renderPlot({ bg <- par(bg = "#fafafa") shinyjs::disable("params") on.exit(shinyjs::enable("params")) Sys.sleep(isolate(input$time)) plot(runif(10), main = "Random Plot") bg <- par(bg = bg) }) }) } shinycssloaders/inst/examples/demo/www/0000755000176200001440000000000013706465411020041 5ustar liggesusersshinycssloaders/inst/examples/demo/www/github-green-right.png0000644000176200001440000001675413652322301024245 0ustar liggesusersPNG  IHDRQOtEXtSoftwareAdobe ImageReadyqe<IDATx] X>"*بU4MH4m%m ]o O$m{ 7m&1I4hi\QQ`PD\aea<̰0|gyLYʷ~!!UqPM} mFb3&̠D}5~XyݛR%]||V]m,_EAœRgN|GUѥK>F EwFɏk=ItXj `y ܦMurEG22yr-7Zb͝<& I iK,W|CV@: PzF +铚O>$#"(qr"½U.=E5tuK%jw9n뫗|9-// OWoq"nELpzp>M 6/ n$e>qFv\ Gh)4/j( aXuZ a}k~tez{tOj(Cs:Y78z"͟2O쯢w,G X}RPTje=U~rXv&NC}_rJNpt1_jpʻPl7e/|w_rJO)u攙zZc9 `yi孔Kgu k@zxdއF5P--"x#ƪ>^mRt~vM0)X`KTn3VPxAI7lƷ^v'@6TE.ǁDEr6=N))ԫo.^kDG9ashM⚘EerF0XH7 @ )t #۠ۼ3 xú9k_9XUaiE jhm2ScAAݟ-z >lܴw2\$fVf [nбHz~"M3Vش0?z^+S#2dPRde%j( lEXUm[ۄ+Syjў2~x3NL}99 dH3o5]2~6@evT0u6PP1X֔[L ƺzC8j1M#{V6.OT˙d*=QJK3(kUV6M Fw'-jf*O0UWѩSô{'=[wPI*>\L9׃FQy[5hp;PG!Ѵ bm:K+ 6ִiy4;q;8zTvy-.o}dqyltSCjW_{㚨+p<c' JdB"Rft8IC_jJKVFxhz;{9{5fm2XAAA\,UL m@Nӥ|b *FO+njAy*Sz^zSi:m!x-Z4O+?uP q3 H5 _ơ7v*|UѳE239`UALc]e9ŐXɃAX~}G +V/fnasݓgm.%b`) _ r[ ͫTYWI8v~A Sy&DN`ƪob5ITfWs(b+눩MIz**l{O/wШ *,R焵d0fdQA T֧NO=f4wP%[boYt2}E<,RU".@o|=eY1h7 xky|asàr}*w ~$<`lu{KF - TS-gmJB 瓢NjNMci^<>TJc֜9<%ƒjc+"@X1+iP-z%u^Qlq"f5h}5Lcq'x/+/3}Ǚn(I.H*XT&tY]S0JL4s>T`μ_nDA.4_pj@5>v"XlJR3=1H;r+ ӠrXMg0 OqpYMEUYID9r,!>1,]3z՚rX+¯ltc:v,.w9<[$eťHNk”71XH >Sy2 ! RݐXAfoKws97Lڰs}KVVwD1DASyG{ktARy99(Vgq_;g, Q~T`ᓆ;#KT]"u7l҇$}Ț EL{F6cur*Ӊ} T+!>n:Xr}Y+8w;UYkNT`{PuX0EZ8yߊ+)WX~ܘ' Т@v23([_*L*Uh-\'A3ufF?A{r>Y[~ *wU[UkCK~N,e'Q7 r%}>ŭ5v尐nk_Qcciuph􋏏Z!;< ڔsRSܘ19 'Kjwex=j88_*wc, ! E?Wn\q^-?*exX2 V@0' ް1aVQ}5Mޯݟ\!`$>s}|x3<:7e]bBc(Ȁa*O0VhDa IdiA UNvnA҂`ϓ-]lQDA1tiyl3րa*O0V]mqt״h4~x\-S2E[Tgrו"w~U.^ TƸ|+ Z] *$=r\OS&K{3Z (kvlZ>sO 8)W8.|b#hv'4)8!L9CdWkOBuA˗kT ɉn8Pp@n^* HHκXa}LyBG-5`A*~s~y҃v`ymuzЎEe P'K=y.͗LΜrg)&,<܍AZva\$ qz@a8e$NZF3Ryݵw@|ip4.ħTR Yt`ٜ E! RNB"EVڼ5j㗎sr*QA*we:n2b0~R<}9R,0/xٔ&2Kqz^h8HV9K )|]bWM}(픎y䱴bٯesU #iq0-dj0؝EErی/ JPnX, R F1ERm@CϧRb h-@i܇(ӗ -" RPK A[4X}J8y}U ^TQe>T1'c,_m7YE琎H&v+  j9s6{lz q|s#IaP3'+2&#+;^d3iNC+IQ hJk-1ؾBך) Wxԡo\(2qqquﮅm9PYQ)i[NT- "@!EFG`JN)q{ȽyCbQU4sL^ p@ z X*h>~:!:2P2`Ƀ0O(lX -Rk6,Z!TpP+5uVtoB^DA0 9X{`-徟P,fB醳2ë{?AEqf3v]F0 v1b,eAʢ $1j͹?;6pWZrN*1pwɹ..R%l`Q״cT^`sEGcofS7%l4TirȩeQ:#'IH*夣uKhu q+bc Py X_ I`*Ș}qWtDiwu]QIG!OPP@PB!ȅ# Q=nˮ0\Ί~A ]h# \ Λُ7R|xRGMNjoqPBj1̢ hg%_Vro6/3VfX :!0hVB(D<ĶWlqK {臹Bךd&+{9,A@qPuw1qzL}1X:gSQS:ghaBz`hkcqg))C=P I5DGbU#zc 2``LnٱWFOf .$*E`l; էPA<]Q*VhnC,֎ս=КJjMVrVEBBG"_!SFC9i+ [t)x\!DA~ߐ}D.fAZ|[9(=J0f 1 wȁC!Y(rQEASc]9{%t w`O kyP|s;N_XDNB;VsgY iӲLL|wL xǾg\aAwj}*V_*6X6dS yHI] G6a8& T`X?=)Eee`$j1" Z!-L5@ ս^ 6cM6ـ5X6qT<S, rQ?a'+1c@0012*ۿ0z%Jۙw(Ư6TN!#B;S cA9YkX&J Y000VhDaՌUtt*aK?]S:ȸ['Wxdۇ&!,r&Jk씱B;V߹}gQBX[ͫOS s zfĤOk}"xo3 cm[Ϸn" = "custom", "0 (no spinner)" = "0", 1:8), 1), conditionalPanel( "input.type == 'custom'", textInput( "image", div("Image URL", helpText("Only publicly available URLs are supported in this demo, but you can also use local images in your own apps.") ), "https://github.com/daattali/shinycssloaders/blob/master/inst/img/custom.gif?raw=true" ), checkboxInput("image_size_default", "Use original image width/height", TRUE), conditionalPanel( "input.image_size_default == false", fluidRow( column(6, numericInput("image.width", "Image width", 100)), column(6, numericInput("image.height", "Image height", 100)) ) ) ), conditionalPanel( "input.type != 'custom'", colourpicker::colourInput("col", "Color", "#0275D8", showColour = "background"), sliderInput("size", "Size", min = 0.5, max = 5, step = 0.5, value = 1) ), numericInput("time", "Seconds to show spinner", 1.5), actionButton("update", "Update", class = "btn-primary btn-lg"), ), column( 6, uiOutput("show_example") ) ) ) shinycssloaders/inst/img/0000755000176200001440000000000013706465435015235 5ustar liggesusersshinycssloaders/inst/img/custom.gif0000644000176200001440000022634513706465435017252 0ustar liggesusersGIF89aafJ˝˜ʚɘǔďw\d[d[d[d[d[d[d[d[d[d[d[d[d[d[d\e]f_gudyb|`}`}`}`}`}`}`}`}`~`~`~`~`~`~`~`~`~`~`~`bdefhi{lwqussuuxv{y~|胉醋ꊎ뎑쑒}{{zwrokjjjjjjjjjjkmoqstwz}ŠÍĎŒŕęŸ﫯ļǺ˸жԴմ׶ںܾؿھ! NETSCAPE2.0! , H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M.KY01%K$X"q޴ty/۔$gF1kum3wOn%%ݭg9~wQ²ߝR~W] u#ˁ384J++(`s"ԍ&b M4"Kg"$'D݄! ff %昣ј$!pP#2!.LJI?iBuSXj$e$BsREADfe-&)MeB"j63Rt94DHY@x.&=D(3jf d|&)#ae<֊o @, Aܪc &%%ibl* IیEVkm(…uк⎫JBɼdBŮ+c=٪`<;tCXO fO2̩c@e 䪋.1^LoZ޻ Ï.Wk;{^*;=+ZȾ/~3ηK wí{;7A/K^큅 EWe.v#2t7BAFx̣> IB'hPMq N$\(C2&)h LIa  + J'ec kM$00k\ ,D֪$H0 H`YG>.1&cG0 25^1lgQ'DЋ0AP!,52 B8 23MR,H- ڝ,S WCYЁ $JA2Mʓ؎f RIgI MTdiV:3{qT,U)ͨW]j=NuJJlp^Q4%<& DU֭.˦ dKZ(x51v ~aG  H]YGCY_T.d:H;E{ذGD $LEEm/B<]+p{Q AMc?EnGlV7rqg$#Tg5 .O2W#\{@V\ oW6sIp[*(|c<72Vi0]~׎' ]$V"W\=VrWԇ@kՅ{r5=O݋W8A7xez#|sp^qa ye,("Ѿqz0~a_^F &xEbti,U 5EseD|jseB3qeA &tjcv賚t!c鄂`]d6'|\d1›QmbLElr|"ȚdqjT$WI|[ .̨UNbٌxEǡ22t['m2P!m{<Ôa ed5bD0)CMq(p4=0u.MMUd҅43#)AFT %>lw0>RNeR7 (~*z?< !ΊƳ@E(H(DJ#*ʀ>:b ĖTn@L0D'LKpOE , >!UѝZ4@ E?;XU ~*!9s @Cru] V*y Wu k^꿘i \5@1mᆮ4UC@j&pJc*TfpJjKs:jYɀdth /- 2t[4"_[+b.@V?spCj ֆ n_=u{+hnf@|Kͯ~LN;'L [ΰ7{ GL(NW0g! ,KQ[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d]f`hqfzb}`~`~`~`~`~`~`~`}`~`~`~`a~c}e|izmxrxwyz|~~耄ꃄ뇅슇~}xrmjjjjiijjjjjkmpqrsuvxz}ŠĎƑǔǓǓɖ͟ѧӬԮԮӫЧ΢̟˛ȗǔƒŐΊƮ֧࢛ͫ矝Ꞟ읞힞ƾǽͻһԼؽڿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MlpJmN|x\~֦su~)LL٬ڷfw\-e^5i_RV jv3q5g`~-pIƴpw ~P衅-ydMz(KkhH3"צּ߉$2Bڍ8^'}1ŗӍBLY\x3T+R(!s!MB͙0!PvLt* ԢrTNF։fJ' ٤A)Y⦜&dDŽo$'1JdWꝲMI*⫫ a+I~P6@b'}銏AKmXFh<ҕVڬO‘o_oJ^!)Nc 3\B-@)Y0Qƀ23@Bne,drJ (l1<;} jtJ '5PtСFas,uJ=5`ƒ( v+^~銘g]3 䭷9̵Jzp)Bz6#p8 N<`.S:9\NF.N9&kd쌣P{F[$o|E4wWyTO&}A}O}ߗ/5h}XƬ2 & 4{%a9_?+( kns(XX:/hP ueû_QpEһ1P} pG=Bx͓ 2Cp i^Ăp{yEoiEHyT"Aj H voduGƂyOl@<xPDGр}459/ z|! . 4/b3 4VQ  <,"陫 +\dAe}aL4.r ԹCv B/2␹t/ *\p g$x i5o SB5 g8TziMwrĒ`#NgS#vjZ3$WMM!@C0%6AB8Ղ!Ssd A[# , H60:ȋ ;2ֵ^ҁ q c矨FCƅ#T6-LBSٔ J]3sq ҩaT5tS m}kLI0{dVSZ@*VL2nBd: HZ(DpĄp slr1AJU+f i]˱Qyq$5MQ-'ae0("zm=U% +! ,7k\IIIa4dP.j<' d6 7\7E]rv߂,C7h F ;'L [ΰ7{ GL(NW0gL8αw@L" ! ,ED-|őȗɚʛɘǕďҷujosttojjjjjjjjjjjjlmpy~}ytqmhc~`~`~`~`~`}`}`}`}`}`ma[c[c[c[c[d[d[d[d[d\e^gclhpmupxt{z炈脊臍鋐ꏔ딘욝ÎŒțͪвҵι˾ܾٷֲֳֳ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Mva_5H@A~lŏoЏ7ܦ؏;^]PyyY~w]A _~=p!`oBw?E4#D(mx: C{|0q>5u1fgr(o R>%fZ8>ba 1#qcؙG@FcwXH8|LWUH)fP6X@v)Ix)cLcGAsn3Ra9f'"⏛qi dz"b@v2*9Т]: RJب~@"Y꜄:F2P9|Hu*' ǎTcv %_Ib+e- .t 3^Ic+c~+ >&k>f6d@&SX&d A<]/RfdCFqZ$AY1Z3AC=pQo!k*UGKֈ1g6 uх]ttmx|߀ M&a?48iGAI87_$MCF8aa9_y1㑃ӮY<|Ї.|^W߸ZIν]yT>h%駁;~=]t_ s)^pqA8p~ &ظp뛋8x N~pA @U. V6ؿՅ2g YD g; 1} WDWEK"4dt=^HD*P;X/#_"½q/SKW8/|Ԉg=2#i\c`Cv3#'IJZ̤&7NVf0᎞4 5&120[ЫGUژmRu$4W-e e٧ ]T>˭V\=:Y5&9gZP8dAdqDe (U|Rh*"aYc!}(C02<՜>Q[MiG R\9#@m [D H%"Ĥju*͐qS.qJdeRYo}GMTJ%$E }P) VX$`}I+Z'Q!}y~"&G|5s"}訨'-Z@(^6&b y,DZHb1 Md;B)tT$ɕ ""[&%A`!X&ug 2oFN}Ig{b t\Z4y)D+@nYIȓA >\&HuBP3&J)NJꬳqKeҩ@cA밡zp eHw]tV[BNF!$d܃ xV-eCڬ#9OjP#W"cCݐ/9l++Oe(kaBQp!X6K"¬P>l&""L*Qh\|vtf2G/L3oQ<ϊ3_b4)tРʜ,\T_O_tu?T-6=z۵b=Xs3Mx7A*]urwx_QVm]ZN^ uat5xC{*;7W]xѓ:ᘀ)鳎Zj^g̞7=dA*i_>_Tb#|E3O_dcWoQ%؇]=Շ/Q;o~DE?Wt kQ~2xE3OF!#fL47z ܋V‰x lVBb  [xفno4L| Q <ro|3!Wo|M ۇ&r]̡ '((:.(Їy 2WrUiWEu+ccƈ(ޤu0Ӏ"sD`F -{Xf{Ofn2OnI2_K]2d DilL7(L[MDfBmN3,7KMi3 Z2cS G$s*NK&a*EBKi26Q!N&VNQp1\_BFɴsFWbBAIB3NFRS!eqDG@爗A 2IʆbtA2 ȴ $}bäJt Q~J> Wt:slɧ #)gUI&b޴'qCޔ"*Zfu#O\:btK@Zvh`Bdw(4NzA >  CeW4O/_FfAcIh9Y&qs9 w>I~Jf#M>q)~곌;%ө@N>B]=S%ZR3[lP jA{YjmDaB7Yv| e@& [Cm)Cθ榫$^J4xjyB cmF KM5RM5}Q%'˅pBr^Ϝo6^< wil3s#=' uY2tp%N!JW)v94lu`=[۵V v!EvFU6j ]BíEXIRmUbzU:\&.V$6'xU;K^u$t#R\U'H]}pV^]>V#w~3^|^oU<{;c+)wE.3M3)Њ )b6cQ:ծ9o~FD9!ϟj;"FˬF$_& S!I8 H Z̠7z b@B$ř!:aDHlhl0q!A: Q9tݺxh 䱍3SdVpF~92h,1Aw7(1Q~ԃ'm[I7E5nyI]Hlr PH`Bo HdpM WG\{[1)JL%Z1sJ'ՐD4O2dQFV hT㜘fdi÷=-!G7m͑ch  $Hz! A6ِs0,  \s8d86R̍ T< hF-1SH{.A$r)nEh( 8w!>I\ӓ|:8J:D2I2JO*O&%U7yUHky:+7b r-8&@yݫZH)XҚz<*Bc/% N%V.iҊIKrѩJO \bꗰzi^QQ.>Q!PZù:jtqsי, u俧˼v9cn]zx|{W~~8\~wg.O(/7Q9y BRUu  8:ޅa-1!2TQІ*(N #t2TL5RrԠ!őRQB#h 5 S[<^̠[F<Ydq# @N3)pfΘ]3hbl_hߘ٭g3awc'7 l0(5 #gVk贩)I;9PrZ.hA^(髱vZ<2AA`+Q,T jA*` Gvm1I^,Tqqndʪ)G,0HVʐ +e (ꍳJeC{Zr3@bl<,IǨy0#+8r*)'LtPG)3^5KERq$hD;l6^H3c)Ms|ͷeM;LmxHL#8Hp|xGCnk[.y޹zEӌ>S$ꖛ:D>;_Ccn9;P|CZ  {5 Lpe͗]V ѹM~c;{Î;^泯Y\Jx8qnzJ'H#|ÇpJ>4wJURg ewӂrA) }xA!} :" \_WȾB!.h$*`L$( dk R$p@ }Fe4G4CBcAh;$Q)0G@d S4hHC tIJZ $0Q9æqX9Ʃ, u俧v;,cN]zxb{W~>#fͰ9޻11QPzu~D 5_ L MC `AQx}2 C:'u\<1hŋ։!B7xa#t>xP.B @.i\ J(d+C70PRGA@Țl ;a,Ns9gŜ72efG,jh t [@ܕ ^A}xGM0.ylFALy_~ONP:E@Ct롫C:/ԃ{Cy3d/e7#EU3}^鴮ykC?U/xuWUcWßV0V>C_ .I y! :/ygS_^2Bt"gφ^Ex < J Xw2bAǿqSBUk`¸Fl#ka rGqqG5 !6C.[DGZrTdh94q|Y eARq7^$FIX l*5>=ɞV\aC1 BHB6R6ѐ*ɑ!œZel|n~k,{fkevkJkP"g ZxWDH>0]#AP7 ѧ  `AD!->D QP)JHa B" dM*B>Bcܘ1:2`:h)B"$J "+JWJ%|aQAZn% fuLIPfƗlf1!Pt1w D`v@j٦4]t 灊 ] Av*P2WUOYACT" $V8}JbE*&"v4묳\s[7E@ -ySP4<+QC˶ZB  SK8X3lG##>,!ʑ&E3NbG@,3s3Y1lrK1% Y1NL 0cIA,p<<'@ml3W='WvTABŎy6D!M|"QKVSfکơDJXPd:R)ԧXP9mR+:HQN@ Z)tjȌ:d8e6*|%Pe*uӈiXg&X1uRB@J'UL fbX:FUVo}P @A55cE ^mxO)iRnSX, hkZ@c9pCh1UPO;.-j[)4 2vͯ~LN;'L [ΰ7{ GL(NW0gL! ,[d[d[d[d[d[d[d[d[d[c[c[c[c[c[c[d[d[d[d[d[d[d\e_gajdlfoirltowrzu|xy{||}v~n~c~`}`}`~`~`~`~`~`bjtz|}umjjjjjjjjjkjjjjjjjjjjjjkmnopsuxz|~Ž컆ᾆſ‹ďƔȖɘʛ˞͡ϦЧЩΨ̧Ĥغ⮢꣠잞횜횛÷Ǻʼ̽κͽйӵմִ״״طڻܾ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M˽2٘ zFY>Џgj^3%=V(1Ha,/Ե"G$9%G5'5B W]W`vLCN^A,al( A s)b7@(2*$aA2P:2cq6MdKB$;@y!SdD eAU~B&[IP.j"ǜoP' 3 4fɧ@ :8DCVea{҆" ꨍ\BT)äa)#Zl&"+4(;*#2Z9"9^lk#$P/\B%l^k0 lBBkz4t ( (<䦼GVɽn0HD"|-#%m3p Ɖ D.b!kmrl.fD1ˬksF8P#1prϵS9PA1,JPwu E[lS9xvXN=SS9NmwXv0 4݀SMYH+S+G9Ksss݄XV-Gc#eދ+P˔ }joj0ߝGgO/cdP'1{E}װS_}E OT׷R~E3OaOѶo7_E=O!5?s2Z̠7hF+=b tH4g@. 9&w:"« o BPxۡ7{iIxrO{!-nuXfz;pj5Ed'\d.7c'T!FpÉrʀc0@ mp2"vQFHO5Q2 %|p2V|I2uY-~RJΝr2 e"q{@dF6 T[ 7] EXT^͆ļ&aMԥ"vK$B6_ƚ4I.)&WH-L66 e"8 D2H/d"` Q*Jl  (UoBGR!`cICD9kuG\cY)@h)ݸpH7Mې1R46*N-됚r=2j2SĎ՝|J՟% r^{WK@ڲuHיXdiS`*@Q0jY8+xɞhJ:("u|x_t)!!1 7Y\dG3J̤&7Nz Ka)HGs+ĝDjMLR+$QaثඒG(A5J[(;0U>6P-Irjg)&ˏXcC1]3Y*$Pql՚ !>c#mƙr׼]rl!`ſq%Dj ʱ$qˁLB4YJ k*0NfP&UAp.ph 30ZS6M 8Ղ SraY<&rEZShNlQPj1s86kKU=I -׵^ (ĥOca57 4e5d kx*Su2:&dV%AG6 0S-߈pPʅvU)N8* yր4g?=/D5l )i=҂J\vAT@ (6EZ:o, oKSq7| oYL [ΰ7{ GL(NW0gL8αw@L"HN&;PK@! ,I!T\[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d\eajgoksltmuqvsvuswpxmzj}a}`}`}`}`~`~`~`~`~`~`adhikmopssqlkjjjjjjjjmoqtx{}~~~}}ۻ|ѻ}û}ŒÎŐƒȖʚ̟͡Σ΢͡ʟĝʸө۝㓐錎ꍏ됑핔ěǙǕȗȗɘʛ˝̞Ϥѩӭԯձֲ״ٶڸۻܽݿۼڻٻ׺׺׺ӻϽν H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Mo0]i7@XA8l6ܸs8)9u4MYwa6N1ľh'b!?g a2|3 ~|zW`AD8y24 $r@xH&!2d!$@]&-*t 0¨A5h#9&H='PB:Gd]ds@iP%S8#W:Ǣ!%])P4ɜ@m$&v K>jC$)lfyP4jiI2{ 4XP.l; 9+4ϒB0_y+$}W}wP- q/8#TMǏq8X +}x+nJ5 8:b}idnEq9 7:;Tf`=w& L5W"]i| ݯ{-:w㳠TH?# d+o48+΢Vt"+F/}1t"W+ڃ+FQύ`t7Gw@Ⱥ@ r У@xȂC^bN/zͪhdA ouNFلl42W`9w8dN_V^=ۥ Cm1 CjD2Lj A`y yyĜL%lt&Ck'{~=KgkŨ*}|:)%%Dx#F\DfϤɚ  %sjTv, #%#)p fHjQ-D kP0:̘h Qz4%0u+FLU4b9gO$6mK W-ccU\]K MJWRce@Ĕgl+O+B*y9i 1Ҡjf֌ت1Z?mbprUg`j Niho gG%V#$KXjmkOIcF%3 f jR3\}ԪJhC=U|} 2]UC#\N;'L [ΰ7{ GL(NW0gL8αw@! ,>#}`}`}`~`aa~`~`~`~`~`~`~`~`~`~abehikhea~`~`}`}`}`}`}`}`{`[c[c[c[c[c[d[d[d[d[d[d]faibkdlfniqltqyx瀇膍鋒듘뗜휡ykjjjjlrqomjjkjjjjjjjjklllkkkjjjjjjjjjmܵrηvz‹ÎőȖ˜͡ЦҪԭհ״ڹܽݿڻ׷ҮϦʣƣ૱Ļ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸&S[Ua)P@8)bAQ8H%{j8؋ OQ؎(PGqǸ*FsLGl׃X 6g}~8d^Cɸ?D V̄ pD P#.@ˠ 1 tB#B*#hBb(uGw5$5PFy^Tdb}\v9Зĉb@L ^yoRI *vb7LԜ§s9TAX@(5,@0zʣԈ(g %¸(b rI*lV0((he奬 t72Vc:"4(jD3a2{GyuE+4ķJ4 +ͬ'L6C(rvz 6+ho"p,}6fXG,&E5c/7eH?P`lr W ,lIP|r(iK12̊8rOlrp8F#c04#)J'w"/V3MN1s1͑avАT $k}N%}0ґt.:ywܒ9=r;-֋Iᐳ xNT}g98ߑ-zY$^Kfs̓p+<14OqeO@m4I/ 9>Ѳ`KL3;~=1II # +Ȃg$1#ȟJr\bL:'H Z̠7n+2Hh!LH.4KN,͐E,: YP/j #8fbz^6F,⽚<n; z扼rX v94c}^VȵevˢV(7Ʌ;"Vh4Ņw=&z;^V. 5D.+XnG.+[́&8+(Չ*<[{«1jvW'>QoUeJϭ-UBH5n.䨕 l~+2Ip ] iB0z$yi (d"ﱁe"^C'Od6|P,D(>ctByMCk ~J2!mEDIFdJԤ:Ҕ09 )(a]E M/%J  T%Q4i u(@Q*C5HkV>Ur-*'TJt-+ h׼o`DCM Ui%Z(C5_{jLNX;yF5Re<ʹSkPUQE1HEd*7C %v+ D=B 0 7EEA Y;3f1TpsH*׷ .E7p!գn<7`t]IE1Heiؾ":{AƠ5]@D a,ϠB8-ŒX̝Y%cDnIA܄4Dm(H!}[rV|SJ]y". w-- L~Vh+ 9p| (<8]/tTpІTL$"X #\++bx|H8auBG@li'Ax7)k&c*DHښ>z%=C} nFn"&k'ɻ6*'טjN<ᒰ&cҦ뚠-Cۚ.b".b+R1}&ɒ9RL.s*sI4Hq % HxNJlrJprpr6 S1 lp-tmxރC)(>-!LD.|)2$22l.z4.>y" 䪋N[LoZ޻ !ÏNW5󣏢Oy]g;T=wM?[Ll?W!S~/K^K]/U/H]h't ,G 8 b!p. o~_]:xUe}s\Ǿa+]X=eٓ!7B*k^hH=n|:W bExϋ^@ҁqK "rc'D p#ox̣> IB2o h |"P#4 hzRlQ$EbĔMfF'64(4*$]iL("JP2( ԆY I2,#hO61P*&c)yIpM1$-w1ØTROYف cl@ - 4c1;X f)[s5(IlD :ъJ@S$聤3rs) ꦴpΫR!ϙ",sZ31%6?B3iM #3,=,Q`iCyk "UL5\kK`UYeʖ$qkptuf/ĆWB']RT* ׺ ef֐4 i-˙e hL- CV#]B!-+$VM*~;Il@LC^?M.BĺH4x.vl0\*^> t zMz|Kͯ~LN;'L [ΰ7{ GLb! ,f-,_d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d]e[d[d}`}`}`}`}`}`}`~`~`~`aeimqvz~|}|ukjjjjjjjjjjjpvyxtqnlmÌĎŐƒǔȖəʚ˜˝̞̟͠͠͡͡ΣϤϥϥϥϤϤΤ̢̤ˡ˟ʛˣʫƱ¶拉裡쭮豮⸮ıҳִطںܽݾݿܿڽؼ׺׺غؼپ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MLWr:f;*D%nϳ;!ΜGqм:g] 5ʔIML5tE;w1ĥR{WQ&& DaA1"B rLAi؝:4 ,@˙؝*).T 8RB 2v] ## ԣ@"4ː9t$w?&YЊL@=9\R$d ^ Z2G~Xp9P5j(@)\ rLj"Po1~B BLoNȦ6 )xvi V_M:f\ i q&!qj&rP)i& Mb{=~r*lՌJJ̆kЪFBT] "M2ldD*BAp B쳯U.Ln믯CrqgH,8$bDB,E&/Ⱦb/!jL2I+ }zΞ3G?i!CsTўF2iOcԜV!R#Y4Ds1Lfl1[ƌm 5^_Jzv n(G6*C" JѮ(fly}*ܺg롵Fn+ctE>/WČ'OQGλA}S睽 ޽by`>Di>nC CB@y+ D<*0":@}yC*XÌWq!ESB !u2L3$h0)GA $<8 2yLD'FFVo~a ?2p~eT>1nim19|exACRBB 1zq 4, /k4U([*8[^<+Q[ 0v>j]IP ʼ"zO,}AAT+%ŒSbe geVjXsXbq,&2pAfYjdBZ"Cz r6L2'$_e\`J!K+P51T%~@ iB /Z%8sJmX&Fg?&@)9 2ԕjz/ @ AۥMȔT7MM$jjcD*K$:|nY17*Dr =a!PiF&\]Hz$>-`T("Փv5$Гp *$a-XSVb $fSC:$pX3+Zɳ#}ߒ_UH}mj}n$O͖jLDUHU EYn;)US)A$Z*K[Sއ HYIQT5ՐE&(v)5Qr^2!PlsaN ^QEL [ΰ7{ GL(NW0gL8αw@L"HN&;PNL@! ,OP[c[d[d\e\e[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d\e_hbkdmfogpolzc}`}`}`}`}`}`}`}`}`}`~`~`~`~`~`~`~`bcefhijjlnpru|ꃂꇈ늋폍{vsrpmjjjjjjjjjjj|ŠÍďőƓȖɘʛʝʠáۺꯪﭫ¡ğȠʢ˥ͦͤϥѩӬհֳٸۼݾ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Mۨq] ͝@iǩQe'~Pz) `Pĉ(ZA WD-% 5($1HkX .S%!.nLqNlKDžZ0 ѶR013q—)0ï!,r"`/<>"0Oƒ1ƍT1<Tf)0<3%OCJ+e(CodQLOߒ26#;MK DK9ٟa[4RudJGqP _8ӚI BqP}Ic+b Gu/w4sIaԉ ȟK)p'H Z̠7z GэA!V!^ q dohZ`aV @ {Dr-/(WBu>x`\A+8g|ZjitQkS`Td:Sf`tsUA!5ӟFY%5ROETլslIT&E2O(C\MgY^!c kj@{KKֆLN;'L [ΰ7{ GL(NW0gL8αw.! ,OS[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d]fajengpksnvowpxt{x{~灈肉腊釋뇈퇂|vrpmkigeca~`~`~`~`~`~`~`~`~`~`~`~`~`ajkmnppppomllkjjjjjjjjjjjjjjjjjjjjjjĹyŒĎďŐƓǕɘʛ̞ΡϥѩӫӬӭҪЦ΢̝˛ʚʙȕƑŏÌúƽڿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MEhƌ9lqC8E~46ܸs|+uM?ҷt佼WB+XCp^ɏ-}AkOK  GQ36 c`D% Pgw (n! X^ri""HbB23rcBx]2$ yΒ@P:c,T9TɘBBdY匹&Xit2j7orl`rwbA'⠰}C'b7&"I*(l$I,j!PQ@? ɩj*ALA&`,뱿 cA 8z,2j~y%"'a zy.Z,"#-$Z:RZ7G(1pzT #1H $.g(@-+#zR. 85cQ!4 5g4HFٺTtNg oH%u4ybIKc)Ђ(2$# n8*,7޸.{t*W^8*sDc9Fs.:WpNm:筰.9.{DԎ:/?һCo/T񎋒ωب"("(*1UE&U!0ԝE!q(#BqG@ )ks($#rY2ʔseC A&7H2>@2 YgoA:ݐTN;'L [ΰ7{ GL(NW0gL8αw@k! ,:@[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d]f_g^g`hmjrfyb|`}`}`}`~`~`~`~`~`~`~`bekrw{~肇胉脊鈍ꌐ됒쓕햕}zyxwwvvvvvvvvvutpkjjjjjjjjjjjjjjjjk{ÌŐƓȗ˜˟ˠˤɩǭű·ãÞƚƕđό•ĘŝɤͫЮӰձձֲ״ضۺܽݿٿռҸӵննԹ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MvEZAP)Xl| .ȣ'&ҳU}<=&tP/ߒzس^<-*_Eo\r B^I VD(P䒐58LᄘsݧBLNq A㐨+ 5H"8,!T"@H;2fA$L6 ئ@"AEJgbAdM mTi/aqp2A3cS3P)kA8)t˝g4Kh堂fkT""&W8I3fD˚dçFٚ7V@|syʪ6k,zS$恫@:褫 Yk}}pZ :̫ϮA^)Bq*Z&N)JHk!% a +KB©nk.-YN!G>!/1c/۔^ҹswR1k@:eًI*m"%ߖd,:B%(=m'dNѐfm-q0vK "Ȁo|߀.Su2#^xICG#,R0+D?@c9Gl.|9=:䥛^Q諯~X#s` ||39 ;ԇxeh}]|zYa~ug< c5?\]a{]Q@] ^el\A \ #쒺*+Z*)L]΁@*12 `Sɡ sX!`5h}V`_x%Z!vcpubVX@e z1n"`q 7zx&2>qgG@>NT DCJ$ Htd%7Nz (GIJ6f0D 4 ]bnin8taK2J25͜rd¬PO*ſe,ID zZ$(;{XI<6cMAH$9+(M_*uT Tj) x$J҉ZAyNR5jj욎HihK!YژoXdF3fx^HuB41v pVKR lv*F$PkfdЀaHIPD0'#X5խJqE,p%g {'J448Zb:K4 S G]D.;BuF), "NI)"]UЭxZ brEx;WP_;'L [ΰ7{ GL(NW0gL8αw@L"HNrl! ,KO[c[c[c[c[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d^g`iclfnjrowszu}xyyxw}tyrtrqwj|c}`}`}`}`~`~`~`~`~`~`~`~`cgijouy{}~}xpnmoqrstspmjjjjjjjjjkŠÌÍďŐƒǔȗəʜ˞˟ʟǟӸެ磞뜝왜옜왝흠“ÐŒǖʜ͡ЦҩԬԮկֱֲֲ״صضضٶڹܽݿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MHQŋ;MȽ>9ɣVGf:u]_e]JOҫWIaŋgU"3MהjRDL߁MAFT *X29(^u:d VRP*>aC,Q"'.Č*Ă 1$K*2cA C|y* ̓IY.T4XJg\v .&rhIPfꇦ4yn災Ċ@_v-azQ6t+y~>IAub9C"&LO|(o01 R%~zP%aAd벩Ҫl8k,2 ]*ѧB˜frihBz+6.~)2歧+o!& $TfKm{,tL {[mh2k)Id0a#+F1<7g$e7Qc-EW4_/}Eƒ!SzoQ,ۀ9 ްϭE+Z mo81Gk<`\b̠7z|Y-ŠY Kd,rpX+`9PҰ|āpx(4W={q ?xD鰋Г" <1 gFP!8Qw "0-g%Uhg -T"r8f,l vyADw" .xh -w*M7@.j$ ǃEZjC"1W@_8bI#|ezm}.8WzM֌L0 xK2̘E%&%|L 7kƶXdNJSN&b@P<)qRSJVCXѯSB@,$?)R х58zZJY3$efsdyQ)Vv.u@JA@HP R4bJ37'aQJ}Sd',KHYt<VKȵUAS |Vt ~KAE٫`U1eHY͢S`5*F`{ũb l2IXAjռZ\5HY#^dvbJ۽Y7=K[ZizE'4qN§ PW%J{}u+E0V޼W|LN;'L [ΰ7{ GL(NW0gLy ! ,ZcZcZcZcZc[d[d[d[d\e`ibkdmfngojrltpuwr{h}`}`}`}`}`}`}`}`}`}`}`}`}`}`~`~`~`~`adijkkknprv{~{njjjjjjjjjjlmopqqqqppopsvxyy|‰ŎǓǔɘ̝΢ѩԮԮԮԭҪЦ̞͠ʛɘȗǕƓƒŐĎÌűѩݢ嚘阛뙜힠¼ͽ̴ͭͪΦϨϩѬүӲ׵طٸڻܽܿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞Mm֤-TYA+֩*ģ뾰-؍I5l+Νm{nZ粐rѻ|!4F~F;Mt JsЀx`u3Ya,v!dL("C]_bt B.@'7&4M)>G I$xd^dAN> ]P١1WbwQeI6cB'6g]Z '`)wgmZ'Aj@4zsZFh>(1h!i &7z$hЂ9FQA'I #k7@Ӑ52Ea#i f{$ cr IKmmʹMC҅Vtq˧ mtj-ILK6Φ+ J2ƽwq,vC~RjG`o stzR3d 3n.34`8KI˖u 3 8]t\ĉFG}T \O]dWcmOtm6Փ--v<}\C2k O 7ϐ\2p;2uքw߽S#Dt\'-7~3Nwd`/Ow^Y3c|ú=:ΧOv8g'0{=9|h&Ȋ'S箽Ec$—6n=Ӿٍϑ6.}S8odrE#8A<| 'H Z̠7`E8 J i*\aAG8ɰ  v; m Xrԋ'`%=Łl3IW=W 2.ψv"4HdfqxG8kcU<3idZ he}r0erFЂ x㛋 <{{$7II0s 6|Åa]fp}S.79_r喹"]x)ZfzAIEeeu+XMde}Rpj+RHRl6dia (Xm=dH"ez̠ )`-AE&dO])AA J! WjE~ Q`TL5ZeuL!jJbC ꈆj)퉡ј&%6*F%@Pz)L21GZңN5cUi͔LZVRzk_ddQ>G)UKyڪG핬f͇$LኬJiVJ'6؆0U*Ď) D-*&ISZ" 2=f=ilϹ# ;Fh9,A[M m%CLa4ZLN;'L [ΰ7{ GL(NW0gL8α! ,EK[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d^fdlgoksovpvqwswsutqwk{d~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~acgkpsw|팈sljjjjjjjjjkvËčĎďđ絛舘뢥碡फ़Ы‹ÌĎĎďŐƓȖə˝΢ЦҪԭկֳصٹٺٻ׽տϻҵӰҭӭӯԱԳԶֻ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MSQrNu6PaL>0;E!Μxvo[Ҽp&Ϝnqckҽ|]*Tس_~a;]HJ>T 2!wX` в_E]YRx. FĎdK h$>D e7-"X $%6t"C-.(I Hcs6 d 9hKttÒ

EOHŊYk܆)R˛I2Tg @I-a̚,g-;e!ΜxioҼ*ϜnccJҽ]*TlW{Sпة$(}}DNR B! F$ BIc!{>C(IAX^v%*a)(P.ZK B#(wc:2$H$s%d* be!\&J86">\B "ƙh*% TMdqP3gD [1o@ҩ`Ag%lJ@P'f~*(¶)T(TȦk\!A=aAj+"}*!Z:b 䇭>ZBh0swJ,hjrn@yN)m q"re#B|RnAڋkHbˤG)j% 6#6z4v+ik(2R$Al !Ir d<Ұ-L[."$J6O$:2]R w*ITk' rm0f2-5C %p-ܬ%J%xW 1t4K.x4`H00" I^`Q2o[KL͂:ꏰ>o%S;'U6ߐS. =|/',: 9`7_c[u"菌W-޹V^{xOKGMpx]/dwb Ozoo~x^hn j^EB Vq]]b` ly%ta)qiŁ1U<c,Mty 6H2όl, '1q0 xGqw2c $H%81 !'V.B̤&e#RTJXE6I+- aˤ04u+Rbd(!)ƀe$eXhSLA@FҋᖳQPL,$Nk0_ScԘ3K"I(YG9NhA'H2%K[)8N>_{26>qГdŹN|"8ՙ(%v:ӝq,)``ϚJZ=C0K@)QM|ML)I'n6kc=Fc^myO1v`_W_El5vGA П9b d-'H Z̠7B\1ѷUaCv]!z*,.CI-n8.r<qCGm1aA={B(p+Pu跓RL^We'"@q%;AހEȔfp̉/ʆܱy 04A MWEσM8>JƈσOJ78G>eN,6J|sM(IJKFnt2 R62[]x" [22|zK_ZT.{RKcZ&JfxPb JҔ)"ny2rkꔍ+bH6C\qv6:ёI8%D"GaB$=t="BҘ2pFRcA"Q#J` ^ XjC"6 P ^j)jz(O]DQ 9UN)?)I]ϨД)>DD@x(V٤&jQH+qD&a\' X*'HS UDa-^"l4 6OMS$DRV&NRcX/y`Bʹf%6Uy)jދlT-EO:Wg^Eی'E1=M7 dhc'H ZP/Ac' ɍ`Ca@z"D.w BPu-@ǻRH 0%< -=iO^.XDVf֡TPN(U^f Pa\fksVaqFNƞ$Qx *8q'ad^#G!'@"3>Id(L xǬ,CYOG-2ZڶLE#f +)YR@/xfƘBP!4rL!6ybʒezYXʒ$9G+jq8cXlN)KUF&O&.!irThDHn5 Wk!rF y,EhP,C*$B(%CT6 L-9'xScFӁP"5aIV~R{LLRMɉuTIB 5p#*IdQ%T@͊LaZIORf<4E 7sS[TX2C-RX-=VX*+%c!LR S4*TMTϺ+a /9in2@!'eLR@w{Ug}U_rQ3tV6>pluΪ!p.rA ]§-zJC,y8+mI'b- ~LN;'L [ΰ7{ GL(NW0gLx! ,hgGĐǕȘȗǖƓŐΈ‰‰~{wtrpmkjjjjjjjjjjjjjjklmorwwusrpnmjiiggfdcbaa~`~`~`~`~`~`}`}`}`}`}`}`}`}`}`}`}`}`}`}`}`}`}`y`eb[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d\e^fclgojsmuowqyu}y|炈脋鈎덐퓑̾иҳѬϨΥͣͣΥϧЪϫЮѯү԰հֲ״ٷڹܼݿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M;;S09b'hHL m1[~ƍHN:Hs)wFtr,oD<滿ҝ,$M*%BEw - VX! ,|~w9(X((ģ^8|I%|BuA0r8"Ǐ@'T#LX4)%rPH&9P<2d=sȔdAd\囨LtAOiܝ.4cY&)qgq/ʟptC8bBPkPZg% @tk>Z)A(I;u"zijRبjJ'%h_klk([$h{OrҊ((kZ;! AuORdA'撹;͈"'PRȊk $10̸A"Qa! T k2#-J Bd:i/-QaUa*PeN6`$Y$OqFIw|ArV+,h $ICOTXB,)MPh'hd#ඵ$bR 7i ZJbKuɷĔ0NIFFm%q^Zûi.Xxkh-t4QQ>t,&41N;'L [ΰ7{ GL(NW0gL8αw@! ,jjjjjjjjlnotzčŐƒǔǔŐ펊틇퉃톀~}yo~c~`~`~`~`~`~`~`~`~`~`~`~`cgik|qvztzqyownvmujriqgoendlckaj_g^g]f\e[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d_èoÍďŒƕǗǙǛ›ʼױਝ磞롡便һԵձհկկֲصڹۼݾۿڼ۾ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M[rR4UvPb^.ǥlwf NyPq:ἺJk:a{2Qx:MZ/ZJ;Q(Iay@E<߁ BH^oBV_ yE2IX("9!y,x5!(")s"y*2t.&@] # ԣ}C#0H&A4#2FIS䉕.>2a4L"o) 1Gf) 1Ӏ|g&1dAD~FlZ!A y3{B<۠AhI20k>27A8볼FD-h1¢쯲J- eIαLB~k/]D,t[%  \,B +}Y q#U*';z¿ MBhlXiBq1Ƕ̍"A'{&mLr¼FcI h" RCkG!}rPč[5HM/qp` B lc()M@`7/n1$r$24r,L!!8/Ί7wtK7NMm`EL>z笜nQ"~.췯~y{2ï~ ْ34GsnBg !=㉀b>B8$*?1 , Bxo~*8V+^]+ 7x@/$^ >dqA.,޸,`/˞gD1ܧ!&Q5_(#2ch?i K"5x>\8 &k|^5R ̘%~qKqbx/;G>gJcbf'bh(&f/kCG!?I8A'EgfSDdhDj>+l!#ȦoIL!g6/XGӧ<[SOB#&:WcR dF(<E4Mhn5*B⌎zg&3]C jEaĆslMN,gFf2L)fM4V(H)dgZ8$<dPh"XT֌uvRR o1 1J 2 '!%jI&Qkgʺݭ M2U2ijа))`FØYϾ[V z[HYvhkj)ze-[ ʯښ0R&]ʜ'%j9hc=iYKĞto|xJ:C_YV/R :gݯ84K\B";'L [ΰ7{ GL(NW0gL8αw@LW! ,lO훞훛}}zwusrqponmljjjjjjjjjjjjjjiid~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~`~abcefilnqsuw|~ꁁ~zu|rzowltjrgodmclbkaj^g[d[d[d[d[d[d[d[d[d[d[d[d[d’t‹ĎŐǔə̞΢Ѩӭհֲضٷ״հӫЦϣ΢̞əǗƘøǷ̸кһҼѾ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞MVo5b9QIQZCÔNh{XNRس#&){ac7R;qw.EBQc/b=qK'R܂~%XD{Ig.% F$.a] i!J! mxR"cB3rH@#;&DJ P-BZDUIb ByS@aإ|`9&qyfxäU).tGsJ DA@ zŏ=u-j5Dͤ,:jR}"@N'AA$ߔRLg5bIdHk*䮼:@N{P9Z&HCܨ4027-wxKH7* } j(A 8s+G<+}Ckd03K^ء'W rk:l|!/r:,t5 /#LC7V"-1"u tvR]|ЀhM!%WhG4\y41o-\ݴyMn!vd5#Շ B0۬"߬ȔS,3V2\~2ZB9t˞q[!"'vazZs9ڟ\|5TexyU,Kzy+'ˀ|yow9,x,6+3u7 2an J@:'H Z̠7z d0N$P!Pbސ2Y]f^3X"HeyAA$U&9 {$J`aV瓖 }xtxge5';7':f8#,WHC"&ܸ8!Ca6$1F5$KGC&#!s?a'\d,)$cedxv$ddQ̱Q'\c'C'S;l$eɶkqe>9ff|P8iva {eDvc+dS{|6 @T&% QP#Zo$>qJ>NhCD!,Z E"E"E8t-,:+&3=s(L4 T ILA)tZBb*B.*M*5LjRbGԟ+MJ;ՠ*HL:𔣞Wm!JQs t*e_ (RU 4.Yբ41XQIjYt 5V\=SAY1mPR,A6' xkQK풞 W:XlPR[6V=QM=W DHԅ'L!ٲ.Zq@& `쵡~LN;'L [ΰ7{ GL(NW0gL8I@! ,QM[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d[d^gajdmgojrmuowrytwzn|f}`}`}`}`}`}`}`~`~`~`cghilnqsx|}yurrtxywrnjjjjjjjjjjjjjjjjjjjjjjjjjlpֶszŒŒȖʚ̞ΣЧШЪ̪īݻ沭﫮𤋮Ĝɢ̣̣ɩȯƶżǾɿϿ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M.0SMŪ-  P,_8gN=iP{ReJzc0Ej Ӫ'BU8L߯ţcY|1`HQ g}ÂE8xB$6CxH^ 30FrbC =㎪̸P6V@#>*$_ 0A@2%2NIL,[rJ0irk "&p(gA9@x!fɡҀkn2P)Z/a饖I2)U$),PLj)ԧ!"|f "G>0X,Bjx@,хS^kF3 ; F/0Ea =& xی+z"k0}@,:D%@dx@bm_8LP*p=QӁ,lRM(\@u aT6㪥ρV(:^ P41ʤ6 DZdVP™橧{A gDgE_4րkfhlpꌐELBHRAei,iaZ8VhD9/!v9e F\RZ\G`5 h1&w41z13*6:E}'Mv.Qu=]9a1`(_(_(_'`bcgm(u9FSfimryޅĚ}]Hn8p3v4Ɔ=Б=ٛLY`iu￀ƅʉЎ֒ٔ! NETSCAPE2.0!(, H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟY JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]*pʝKݻx˷߿ LÈ+^̸ǐL˘3k̹g?MӨSvzװc˞Mֶsͻ߿qNȓУK|سkn:Oӫ_~˟O(@PRH$HG5 RjUAL QuRzl0ezؖk! p 2 FIH0*$aT P"SU\) e[YZUB@pQ} AHEE ԐÉofH'Ue&Sp"$xZ}##aZ`Ihfu(w M虦S6Q8%[Y^?睏3aԩ ii^hUO J!RiZTku1EEg *kT#F@R1ԩB&%\Z#MPyn<ń @GQ>Dmi ?,V{V50 L O0YK2kQFmK/&=Zl<j# BEtGA-i*LLǬ*4 AԤtZ8r\R+eP}VwQ{P_ɐeN̤jܧy_ۀP`r}B P0'&v3Fq:C ;+OMބZ 2+Y0PI@PBCu*h_#OB1 OP; `>Lѻ6'mIdİ9E++b ,h;3l(@PFBNmh_4(x A!f['Kjh!O ٴ>aBp B*/TIr/[TWS-bQ PmU&TP[3I(JZ WQR_-) Al/]ٚ /}u{_VDxMPň#uB#m9So$6#^0 3qXbs:yWEm&VsU[بȢ\Aɽ4ҟ{ +l(䮉.,-ϴ*JWyQ{π jqtRyP3\nʿ\U?s枑02 hJ„g ayiGyk/ќBT0fB,pVcvzS(vV lsԝhr$ TP Rҟʿpɦ௮l񅋌,6[)[Q[-OI$fӶz:I>h*U&Npr(Ah+`4 rJ]%i8EU[}/2 Aeu~6,auaͻ=SCѨJ)r~&`R|4C"uGIiRK؉TD7 ~C1\a}"E-}I~p<7ks b48blgJRyaflgK`mHY Z6"C85wzPg"RdD'W}x3{gd|t3oA(ybe 84ds2T0g?+@G|Lr/Yg/Æ@>3!"X3&^e&feXx_UO kDT4e4'UƕB`de!!I#ybrGoeQ'ՏoI1x))[c#L?ǚEI!gJexM'Ô<\Tb|Y<戕8>Itjh]I8fE$Xm,oZYW]~I<wVI> 3jR=aDfg2p'8CyW(w\Y 6R)E8 @/Ue`9tg>2&`~m*'y#3xZeV0*,og /Ҹ:Ԙ@=XDf~¡xB{V")$Df.A:8FƠP6DsH5, 1$KCtੜ5Ka6G_qrD]ci}#gt$KjH Y0s0J,si:9Si((W)<7pJt}c9#gJuyJ{ xLsSJim.:l*p v7(g0P0D8J6sfy0qo8k7> EH*5#80&(V7#0њZxj\j$׆~0@sm;LJjU8z3xXb$.DF1h;,;?вrd:ljVyGg/"E<8v>GY?IYbe4gzik19Ju$.-f4\S(} $W1x8gJER1B;,{ m…P-觃oiR)WckuI 4+#k#Vv3Jgi23'+@j'vf$ӻ3{CmK D$Auez1I8[hiuL:!{z2C=^;Ԉi6ZkJ bPXP\5N} J5ZcYU%VyX[c AZ.[{1Rh;~[|'&_ l2*RmU-Acvs-Z|20`b*젡sRčeatyyem " [n`#{SOIДD, LjTZTQH!E˺ Lʹa66J9xC*KS\(0z[5u&h ԜKDIL|Po*8M: ]\\M?wV^kO!Eg%'wVM0%a ;oH蓎T=AҰxFj#mEC8P[2c<ȣ~>d">$^(*'.0-4^6~:<3@B?>F~Hn9LNER>;T~XV\^b`>f~]hljpr^vNK~zs|瀎!^A熞n~܁>键^阞,n>>~꨾ꁱ~>~긾뼎X^~ʾD>.~nؾ>.~n>{.~rnkb?Y.RnI B?Uu..% ?.$n(,0?-4m8<@?$D"@LNR?T_%JC1ԡBdaRl`Oic_go^ kOxYG&swGpҎC_CzH3YaX@ah/nua^n!qA1?QO?~ο_ q_ga2qJN|an}J@ DPB >QD-^h@#FPƐ%4RJ-]lL5g fN=}RΠ!y%IG`QiQU^9ǩ[C2uTe͞EPkډ]M&GÍnśZ"vKעݿ V;`ĕ-_>I3ƛF\gҥ4}s/jƩ]utlm㾳s]Rv?y|ywǛǍ2}O9>Ͽ,@+,dp< *0*D4lC: E?zBW4K#:?Q61GVs1Euѱ KF┤nȭd HvTIij!-%,D˓rKlJ238l1)ՄN9Ct0D<O9H;I eH#DBmT'*! oNJ3U-+oIQSR]U/Y}UA^uhEP?eMW-PEYtXnP}[-1ShS'eŕNEGsFm\@oVUkmelo֭ yf~⺃bD{ppWK><28_O|b G[dmY*B}i;/u_?C<%[W7kl=xxIk]ދy֕ '/~O?B7Gyn㧗|0寲MD?;IyS`#8D MKmB1 G֧\`?߅8.4OW L3J@ Hh! ~\JA0S,6l"+*pXa"I4#g~xƩuf_HoQOxdX׵Ɣ4X?:$o HE.]vl$HHX3&I=6 LYM&G$ԝۼҕފbF!_Ə%R<%.2 !id҆#[)nwT2lQ,g}pqb I^>'<<YOaĄI39P* S(P63f]i K0PN4E3HsI4ɸPbD Lٗt=eJΓ )A0kt%RwGd$5 ʃ2l @YҨfeS,iT;h5S齷rud?XWUWR lzZ k{< ,YdVgR=+2p-Uv(qhemZ6>%lm[-uc{u> doMzM ̴f(cLr vui7MK-zW+q;h6^w ^ͼ]^7gl4iֿwjLGe0}k Ž鰇';׳aQܲe1wQӶغloW|X#hRB1++lc<0'#81VXe%Y2"`&Kٲ^rXɥ3_n^xŌS/sf' g%mf39ξvng,׀)2eլ2= g{B x~MV4yL$xҙ=HP]-u‹Њt>C-#{~YN?CV -D Z{^6^:^}5}m3W@ͻj{륢}msCOɶے^uqrAE##uw K5p;"!%EG %NJ/p߫K6ڴ- `pGʋ+oDK|9sv 7r`J7S 'Oԥc}{9y(vsQ %^R)ɥi̵=/KxGnJ(=Ļ wl/cK 26(n l5.NHOyz"gVZtYK[㳶`TpէF4t^W^ 5@'obmqm~ZH3C7>WN>|*ga}!5ݻە0e:৥BFr?>,[F`K>3F8<<3L4?U̽7 K ջٿS(A8úCl$,ڣZ!6L7B"6R.a­Bl-&;BBA+ 2ג>$B_5>63ˆAћ!ī/BC<,Ð^/?$T:0@ED#C;A3$hH<*IL[>@2>" ER@@,C<8D#|C43:$sC \]DB8Tbj1e>ecuU WF`&6h"heGNL]e[ Ή;SJdb>Mv W1RfAGIMRe޶< c m>nVPod4O3vfX]gfaFPkfDg\i kW녢U[udhE,!&LPȇ_ͳ_|vT[T4[gvh]CGVgޤzV2s0h.ZBhs?WizLuœWwJ.`faK^}WmiB&>.ܦ\f١ɴF3]ak}0Fk(@QiaqѮq1 Kg;l6hrQvV'>eݜ^r/yCOimGkw]l,vlK%nz_.&Zxi߶cn:vn2Unn&&mdVo1L߉o-i~=/\d/cnlѕnyfpp~lV M]o QWBqќgмgpg/qq!YY4r.GCMomM< l)_'שP,? 󳡝2r9a0Us,4+Wh-OIJi3.,Ip*F+H?/zm5D3B+?^ DVcWWƓul=vurmHtr$HvEvMWIROPVZOu^rSq'kwrbkq g%`o Lv=jkr_x*WgBpGáksd>Tdoq/n z\ozg ]+h@hyz#!z"^h?l'{!ohw{X/ ?|xwWa yDO[|jOŏ||L/ *l%}_qx볆]į}ӿ{c>\Q'7GWgw///u7GW"t}o}/%_} V,h „ X!ĈJh"ƌRcǏ"-iaɓ*'l0ˈfŒis`͛'sɳ'H. H(Ҥ*ȴ)J>~|Jե4j+F`q%Yٴ]B[X`΍E^f{/UZa رݙNf\yenf;#%]ԴPԩ#5زgӮm6ws7‡/fkʗ3o9轑Kn:ڷsO;Ǔ/o^6׳o=|ӯo>? x *_ : J\a&1@faaxh"+"jH3"+ա!3ڈ*Hzb%jh)ƘdZ4dlI1eEr6g&x aRpyx&[cxGƙ5x~Ɋhʦ5'+u!iZyj#efX|p7ġsV`2YdkV᫼ l$ 䩷Zl3Z+Îk>{xg{ɖT ,neIjonʯQ pepZ "Q0d{j1 OM{7T"iqC-\V3Ź>9VHӧd12^7Lsc1ju7"i^Fra1&V6XVj#^p坩g}ջlS%t0o/>d[mYm"weaqrc!zzKzG^Ζ4qm)gUήؕ9'4x}v!F%2I()R5U"E%g^"0fϨ5il#(G qv#S<~4(A2:,$"p|$$isHRK#/Mr1$(C)ʝ|JHFJ!$ʃrAjX"2UhE~/7L SD4 yYH_iŬW5또Zv@Ha&(MBra6e6͛ly"y6\ jC=I7w:QR"slV<)-/P 'E#)^3Y yt ei8]JpɔL7o *rXSv 5{2<tV*Uխr5*XÊүfcUϪֵ1l}+\oָҵ)]Wu~+ >-,b H*ua+>',fcr٬gC+ZЀv=-aJղ+; P Ҷ-ns򶷾nWw,  \0}.t+Rֽ.v;]`n'Yj=/zӛ^$ ҷ PR2/^;~XySu03G[.5,bo>1N1Q،/1-<71?n P? -[&K7T6e)IvBse'CR2td,oF.u0H@4 t3 Fi@gVPwP͊.:+Xa@A crs0h;u!Bifͮn++I^u2Ь3aPkC:u5ssiBPZ-C͌lC뚹fAbo]V>sg}7DY̭A 7N@iekz@pCwv63\3SVMma%3.XSWҞ~vAxϨ.ȾlpA o.Y(| "v ;2˫M]k0Dwl{턗Ynzs_g&3X/xWh.ħKtaKwAan<W}.3p ^G\_ssݵB-wl7 ^6>3_k12mnW|iWC̯=>>G=N-^+~bQ}۹0D^ʥ9 ]jV _Ǹ ?+Ly_@OI+1 1 lQX.Q`DL \`e{ޟ A u X _ 2 Yޟ@!_!r`2`< VjG|y D |!!dx}^ `B4zWr! 4" wy!VxVl&n"'a*Dtn %bxVYB<"**R!8ɢ."cCA("1- B03V/F8&3fc^aqA06#{cZ % "@T#9#y9: 7#?%TFTN%UVU^O! ,\L22pxӫLL}MgLx}PL{x/e}3hP}ukc%Ct~QbiRpgoa}W6kAs"V2]t{|rt2Ԯ=i[n+)^zB_`BEie\:m{_{=t炲Gc{LrFk`{۹Hd} B@MJo5:bfDgGkSt ˟OHHZz`& 6`!H&XăB_Y'"(}C!0@j(ߊ "36)<(ߏVVx9bU$ -b@{٢fcAy- 3~ExG9g -*Dfx$n'+zZM0&j&Y%*cJ'd{JI.$"!0:phA\[{v{`+Y@œJަ .n _s&) zD (B60$׭z(b¹[nn,.ోr򛦥i &ӁwJ0NܣǬ~e `;r.'/:^j23a;P@)tFގZj:_Vl5ڽ"c/ /_V{g?{m^ 㯴JfW .W|2 [Ѣ;=?@-Z%*.. L^ۢV)5.:I`1A(V"v^Y !,\ Mt22& Ms LsŜtMt M MtBe"3":+>@O%= Mҳ2N@CQ:Z)CcBdCe58G&/flt<] *XÇ@ŋ$bxQ!ǏIRH B+[^P 4ѣH*]ʴSEy:,8eԧXjʵךWuV8VeدhӪ]˶٠e6|y֭ݻxYP{ LXp߯ KcʼnF~ ,˘N;nMYQV(zFU? jڸsˤݔc{iȓ{lxˊK.yiϏcvGGN<ۤ6Ͼjp˟k'߀(k' !^)Q(xmXvW_ (b'()"T1L0~ء5&86^onRHY^J.CF5%d="V ecJٖe5#r^֦VhJrUv%xxRYx (em Z$q*)2Z*)QfjiԣũUt*B**ͩ*C!-*kYjdڡ*k %ꫳ|I[# iiz{ Ӻ;]Ibjx֗ox;oyg*۰ Թ|4c:\m߫,ʵ#jܮ&z@e)#M(q0V2Ψ\ A q3Gjo0DwOsnuU#um!s:_;6,Ftsp6+_rxۡwwzmZlwf0_6wxt]O>Zs^vZX将yn)NǤǬ=n{r߻ά;~#82/Տo۟/Mk, j߮߸ ~[(b.b w*ګⷿ!,{0慐!CXfBOkR5X4O! 8h"NK!x#N.&T5=2y qU"}Io͹"E!QrבXbI\cZ&£7':,:bm18TVej&7IIfA"ؼ;;?CwRڴ.}2[ۤ {˞eeK~}p>I dO)nҁ~7=0*5ha.8X:u>JgzDI84 „M)P2Th&5W<[.,wWE4VH7_lknj"r`tGF.vcasUU"(K-hL{<_cq~Fqs9}҇6Ac+x{V&A1x3~p4x7BSqwXyAvqvbuo(#/xuwGh8 ~'4$hzݷW64kH9WrHbh~HG&W`xx5fH8GȋWy Y.4VJDhDŽ$ÑEI YXX6',ْ.0294y!;y@lē'$GCHyFɔiE Iٔ҃F(TS(b9dYfyhjlٖnp)*~${52Rx  *˲J { <Z pS; 0e(˱^۲ AG?S!iEJcPmMpQ FvIhWHЀE^c}uH≟@⋋ɨ|4JhcY*s*fj+ج'"Rkվ*f n;,%nܝ[] o ޵NdoE+dll 3|оsZ[m/kFr>(\o9'r0y2#2":C7?sk?]G#ճEU4Mo.}f?(OIOgvm`kwW@A iQﵶQmFM%P PdZ/6„s\ŕ=8ӝog8qyH=ē8O:Sw׺nW*<?rR*m8<۟UDOy/,gfO\엯QT\r[> 7Hw@ρy`-vg "4KMAq\KE)\uK1 Pd",ʹ>{8M+T u~#L$NWƔ ʀbX5oqmH~ f77rR@*ZU`cAew;B,_%bZFD1h`=r+lkWd--YpȐ@!lʑhXپz.h]i5T[u ck\L+/sNZ*$HEn LuϹ 8jm35W΢` 1(EGzr!uMHH_X-2 ++B< G$I3 ]\3WA1le({A2b5]zLN1wq5$"=Z$Kٳ{ .zDIay%m֘t`@` bڙ)HOӖ?1k)5xGY,lv _9X3ѵlh9ˉ,{af4TGz\52ipշp53Hm[u%6} ā&ٰ* mUӅ)ke P76k2K*4ml!>kEK_Ud"Y@ ~)܀ww?*w>O FKכ!HG:_Mzl#o!06j˃^Nz] ~\f>hG nd?NJ/pۉ&z Z'Ħ +JP։o~ȯS|}PK\ }T1O--?: n{׮3~~T~UAG?S!iEJcPmMpQ FvIhWHЀE^c}uH≟@⋋ɨ|4JhcY*s*fj+ج'"Rkվ*f n;,%nܝ[] o ޵NdoE+dll 3|оsZ[m/kFr>(\o9'r0y2#2":C7?sk?]G#ճEU4Mo.}f?(OIOgvm`kwW@A iQﵶQmFM%P dZ/6„s\ŕ=8ӝog8qyH=ē8O:Sw׺nW*<?rR*m8<۟UDOy/,gfO\엯QT\r[> 7Hw@ρy`-vg "4KMAq\KE)\uK1 {8E0q5$\SN& ,`J׼!ft5݌ ^ɿ 6L@JU`cAw;+F.YxzlL)zWukgJZu Ѐ nW]$Ѝ.tjܺT op.w;|睬,u^Aw!uպӎVS#~^ׂ%o(GɲCX;Xv:Uck[ TrVVh+<6Z*D(N1Z]6edw81 ҁa̫ Ƃ#1hlA#wJGd;kPN1]-/ !j*c 2h ػӔ mHp.oF>@ Vٴp*A@rGHsһh0 Fm2鞂ĮGXUPpԤgzy]EVsء9pB(}M=ZKfً.6LCMzִ-Qc s&7½kV[|֑_g/u޽d8w̕}W|62B@Vegp[ 8gbivꆘF@ 8q@Zn0 Pk_ `SroSx.9"m9yʷ+1/ܕ|m{zx9^]6|lǏd}Ɖ6c&mȇ=vדjH^"؉G9{KxGGȨOe_ыmw*3${_xШ_ ֘%G_7%{/NyUCZ7KuH6;ɘwhkSh)=yEPpqHd%BCmB",.)|峒7bv$ (}"492󷓁w;铲xPD)l@IoC-ĔGFf,(byRLǧN&0DѲFfA[I2a9^k*T=v.،Ǘ !StH6ٖi;)$94sHo9kX@6Qi`AD*Gڤ}P!NJR:HjXz[ZuXdZ`fڥjizZ8r:nZvzxz|ڧ~:ZzI Jcy`QAau7ʨة8vag 0?Ex0JRŠr1bTJˑrkASQ:!ŊK@ʨ9a9JexagZda8+ \zgb8&z8rc*DXjn:?aQ8{zs9:?  :SZ_A"{ۚ{R[`AVsag2{(r:+nFk:"dScgAKrPkRiA;_!a qZh!i9j{zA\t[v{xz|۷~;[{۸;[{{.궹ѹm)ᨧAvnxkd{XToẤi ppQz9dsK*f fk:1Rěp;Uz ̛s`ˮ*\+ .!,rC22̫ھھ̫ھ̫羾ھ̫u@ھ̫̫̫̾̾̾H*\ȰÇ#JHŋ3R Ǐ CIɓ(S\ɲ˗0cʜI&J8sɳϟ@ ѣH*]ʴ"ѦPJJ' !ׯ`Ê;+ٳhӪU@hvݻx󆭫߿< JP0a|+^̸qĎ#KV-sB̹窛?]u^ͺuЮc;aڸGͻݲM\ȓF829Σ=.Ρ_:Ľ |TӻF=TٻY>AG?S!iEJcPmMpQ FvIhWHЀE^c}uH≟@⋋ɨ|4JhcY*s*fj+ج'"Rkվ*f n;,%nܝ[] o ޵NdoE+dll 3|оsZ[m/kFr>(\o9'r0y2#2":C7?sk?]G#ճEU4Mo.}f?(OIOgvm`kwW@A iQﵶQmFM%P dZ/6„s\ŕ=8ӝog8qyH=ē8O:Sw׺nW*<?rR*m8<۟UDOy/,gfO\엯QT\r[> 7Hw@ρy`-vg "4KMAq\KE)\uK1 {8E0q5$\SN^]t[ZR`F_̀ꥯ+ +FdR$Xg*ױ0ecJѻR{e^;'UZe/ ºV 8yT["bM.r 6H4ki7[*wjtXX7Xb^Ng`kױA]Jqk]rmk SuhiMmR5_P0. [u z>VNW}̜ncLW-cqo T..:T G:ʐ\ 1%:W  _A2b<# T$݅0<$3Ulzvf.8Ђ7hsY0Xh=$v0+hIx5DfYwiAJkoFX3p+] e]S h LcI:rl_KgnԎ Q,Vٽʶd!{p+_@s^ Ԙ|2}loI[!6PJ?|zϖ2h'#{۫nX|V!~\˓ 6'qփڪ`]e5|/sW sH96yw4XhS&WG8}aOz.ݏQ3x$Ӿrc6ǝ_M3L>ʇ7O<{vʘ|g$fy< ojOiJ#%R#>J~gۚg{=uh$y|WykC{3?~2_]_O=n,)>><Ɇ?,~#~~Ew|e}ȢK'ft TtkFXa;"HG$c+X' ׂxgT''T~/6H~8h^DYӃ@fF9hSF'IWDN8c%Q8WoROH*d]mfxm#~uj6xc؆}fzd|tX-si8hT+pr1HO6-qmvňnExxH3f"wԂOw=ViXd'MD{&pW{P„f{kqE:h}Lx}7TOۥ}Sw`(7EMUY f*܈Pu첌\Q@|3XE8%~猿h(vHviyI49 IR wY4#EuAԑ##(j*)-1n5&6iD; lmH؂=.8>dgޢR/ɔo(.P -S9z*Yy8oH2@ VX-i-=f*[:s45icɖnW1OY xxH_iBAVDiCSIQ|yOɗ&nYE&˜Ǚ/;֑1I kTM ֚W}D}h@YfgDyfxux١śsH{x>X#R#!yV~,i)ԝG2TRIi͂|i1w|ՙ ZϧXL'2i":$Z&z(*6a ,a붗.:{29Z0ɧhxǔMJ:FS;KJL[ʥX`b:dZfzhjlڦnp_ PXAwh!QxXeP`Q7zdqzAʣ8vf ?Ex0JRrbTZˡjASQ*K@9aqp'wZ%xfda8%aͪfb8 :8rc5zXj`F:?JaQ8z~:zrjګ88#;ZSZazr᪰Czi'*``AV! Z^ƊR`k:dSCgA ;q೉zr>K{O9J`ѧOrS{N;PK*b;d[f{hjl۶npr;t[v{xz|۷~;[{(-{uϖa+ng1r9[dkrXSx ic+!غTo g(5v)[^īToZ$p8͛ [!Qk캴!,rC22ѳijijѳѳijѳug賳ijijѳ޳ѳH*\ȰÇ#JHŋ3R Ǐ CIɓ(S\ɲ˗0cʜI&J8sɳϟ@ ѣH*]ʴ"ѦPJJ' ׯ`Ê;+ٳhӪU hvݻx󆭫߿<JP0a|+^̸qĎ#KV-sB̹窛?]u^ͺuЮc;aڸGͻݲM\ȓF829Σ=.Ρ_:Ľ |TӻF=TٻY>AG?S!iEJcPmIpQ FvIhW@E^c}uH≟@⋋ɨ|4JhcY*s*fj+ج'"Rkվ*f n;,%nܝ[] o ޵NdoE+dll 3|оsZ[m/kFr>(\o9'r0y2#2":C7?sk?]G#ճEU4Mo.}f?(OIOgvm`kwW0A iQﵶQmFM!L dZ/6„s\ŕ=8ӝog8qyH-ē8O:Sw׺nW*<?rR*m8<۟UDOy/,gfO\엯QT\r[> 7Hw@ρy`-vg "4KMAq\KE)\uK1 {8E0q5$\SN^]t[ZR`F_̀ꥯ+ +FdR$Xg*ױ0ecJѻR{e^;'UZe/ ºV 8yT["vlSDý7]X]VWuuq݄vU+v.ZM%gwv'ylj/j Nd}WI g{zFI=W [A0 .w]eNz 7 &HV4 q_ޖMx#.gc2ʎy<:F?-ŏqu5׿?φj?Ȣ|P|g_|XfBGy~SxŁTgxfXpto#hxHWr^"hT=.h{0ZmN38_!7҃#"UtG ^k5}sOYPℴt@.\^csW7f0ge؀?Ws׆f|s ZXUX-'r$HO}6-m]G}:3xwihwc1 slEU ƉOB8mt8޷:Ȇ(b%lurGdwvOd^x*qvc5Uy"1G`YdҸqnj.LV;uq=ȊWWi)h@h舩h^Ǐ=HCǏR>09uxI* > )0Yd24xz(~x ",./*B6CP8+y.ٓ&䘓AY%TD }J\qJ=MY-c1b45U -W)Օ \i#`1S(!#-7]Rzt-ِY_fc5hi3MYU{- u;y{1򂖓)rGia,G}kwwdXFY}8YDiX'"׈WҚY)PԙKQs*ɁCw= eJ)[Y XG޸|IכX'zלH8R6 ڠ:j;(wX !ڡ`6f$"z-0嘢1J2 1g<ǔ=Z>C@zHJLڤNPR:TZVzX; yc\j`QAa t]u7eJpAo8ve p?Ex~0JRrqbT2ZjASQ*pj:K@ 91aq!Zxeda8*w fb8 h8r!cjyXjWƬ:?ʫaQ8zerꭰZͪ88: 1J!zR[AbA;! d_Qq(Eyex+c K0u:pppr'˲b*jA8˭;K{*oZZJL۴NPR;T[V{XZ\۵^`b;d[f{hjl۶ aZn+ipkr;&qjr*:lx{]zkrXTo!xzhXѥzoQzz9];F[j^k:Rh{Ǖqи[@#7 }wU.!, '22uvS(*<Æ #J|Pń^q』 ?vIɓ(S\ɲ˗0cʜI͛8sɳϟ@ z2#ĕ!, 122uQI~ (*<8Æ #J @"EZ#=fyQD&OLɲ%0ct͛6i"$!@JѣH*]ʴӧPJJիXjʵWŠ qج<%jVlр!, 722u[_*(* zϖ-}ʴӧPJJիXjʵׯ`ÊQٳf}Xv-Y@wEVܴ;!, 922uؚ=oxل(A*LxC#BlhŊ3jǎCjQɃ$=<J-r͛8sL'O *(ʚFLѥI2JիXjʵׯ`ÊKٳhӪ]vTʍ۶÷mWf*X0Ӏ!, 922uwv yHP`\@Ç Hq"Â!JH"=Rȓ\@0ct)Ҁ͛6izQ'C}.@PF M'ӧPJJիXjʵׯ`ÊKٳhӪ]˶mإP>%:ݺ:-i*ߦ{2 !, 922uخܾ4܁HP`\pa<@"ņ hܨ ?bYPɓ&Ie„+<aL3MTx=} ʰѣF.4)SPJJիXjʵׯ`ÊKٳhӪ]˶۷p@.]?Sվs%(x0ɼ$!, 922uxC'|v{HP`4!Â$LHŋ#PLj~)ɓ&IL%K0cʜI3f57I&ρ>J)ѣF )SPJJիXjʵׯ`ÊKٳhӪ*۶J [ͫt^v!, :22~uH*LxÅ J,(Ŋ3jlQF~r$Ɏ& ʖ Ȝ)&8sɳ'Ȓ=_IӧN>*]ʴӧPJJիXjʵׯ`Ê5yذe-ʓYʍ3mŀ!U,oF22ېfffې:::fffff:ې::f:::f:::::f:ff:ff:ffffff::f::ېH X!#JHŋ3jȱǏ CIɓ(.laʗ0cʜI͛89&Ppr JѣH*'AJJի2 HP+W`ÊKQњ]˶۷ݻx˷߿ LÈ+^̸0\rҽظ˘3k̹& <ӨS.`uEѤZlVi/Ս6y@x+_cϛKN5Ϯν;%뽼ymk(uN?_@'Dx&`Lf܃-(N ԐwoeԆ}Ƞ(⤛am c#i75]mG4*bƣl=H\2ӌ DH e]X^%\ Uw'IӚidur&)'XgpNV9Fw.uzpM Y5:(B*z>jԙ[E*)TJBHZ뢹j2 SKv:gsT5a3{3%9[J+JW-EjnNY^{Rj0j5ń˰ 3KaII<11'LG,2Joɸi\ [g0r[;+n s3BoLYD2&3ڼRyzX/cx2gg֑%sę6H_Ul;\jX#Gwe\B<[_޷dW8U|oTxGccx]U!NՅOzFWtHg7r8H:źFnQqꮽ j'~<ᛣIz{.E/3;kǹo>9݅ճǹ.O|;l3; ~`#j) -h"b?5/Av`GAjr %C8 ˟ m=1PU^|/khn1K CC5PAWbՂSī|P^چ0-fh>Tb.ylt ȿ8̍A"3GQX{[D1* c8< ^OQ$JRO$4iIOP(;> MvERrc W2 "Y:p.VMAL-7̤$q2K[҆4RM^jЏ5CVLtS݋)q /)^s$N؉=lWfI H!H:w$[} ~~եvJ'J69#  lW'#EXQqe27̕%1V3<'d7Q%qH@P$}UMCF7sH/Sls7M^ΪޞBJZUxk{Z־͟$k-Mdsu˺Of#;]6ϲgd3ktw8ݩ^ ]_[|u-]_;΀'I m< 畵3᥵3Kkgp%)MkGxo՚l@}yPrmSېO,7V6, ȝo攢9Еmp\$tDJ{N+7)C{d }FYcoOcXZ5S/Eb鵳Crl.ﰏ`Os_Coy߶ȏS-{fvz~[zOn@|}/~t|o,n|ўwQMjWm}68C}Zlmc@ >tDw@$ҀyFne!3f7ga0[W%*#8+27V68oh-q,h87 -u㲃u 춁J8]H@Ef)(r3GUX]d8sbtƅJ6' q;TVe3~\w&(uuk؆ӶBA 'rqNV5sage8LuYT/bhW!/6#82Xv=gTGև' F_}(]-3O;7iӂeIT !%:DԢS)Gbf裢gZ σvC5㢡d-ey9j:KVT;rfTjv$j\mL56&Xt%#cjeX}ԥ^_Y3|Z%fmb^%9+o|7r*ygڟ) ?5'gqBDZErJqdaaj;ՠfԈ0̖*aѪsXaCīڨ()t:kCSZ)pj<*ꂾLX{DʩMYW:5zP׭ƚhg|f$glĭ"'zBAڎncIz8dzHmENtNseH)4 F?tkJz))<:`:b4 RS9.[ +Zj}}!b 6o$ q IE򦮯xL'FkG+A-z;\Kr@$6aJ>_&ahz^b [H$گHy;J~ 7!Az5j=]!w wIH3+kn|Z?Դ:`;A2}{۰{;HKKdū~H[`λ E{~nkk1[*=۶tiǮګv8w \l[)L罏grrEVK{Z;㈡;;j|pKa8$A^߬ :Bxf FXy(wΙ+zeϵ+=p̳" φ)K,qt|,g) dҩ A`hһ\;ud1 ivNں;,܁+lL`ak,^>,wc˟'ě?F1gdO-"<Ȩ8ӯa?V L0 >IB{ICqzzR׀IݕƿD̛GɌ ;>eIw2\؅xzq%xMxR]am~3֨]`rih\ձ ˒$tºe^ڌ8}y$}7[/lC״@\X$[ ӝ!=,ĮܽknoQb(,p݋v P=+Hg64^3b8ޔ{́8JB'ь ^Y  Q "wߘI9٫4X)e[_j-{t|t5b'+3n5.®GEl]uX4N^H޽_>78g塼Kw\N։ۇtC|)Ui>+gH+̍s>ږ$y{uw"k\m>Of,wjNz^ANLHͪR.xN]"-7}ϳ@Jk=E,rއϘ؏nfU"m} j87/ȞD|х~/AݹWWv=Ν+c3xNB8nt>e A!ޮ+*lrxEO˽-Eg ᅡ'FMř1qFSt>CcrcYon]T7CVu1 v"飮`܎|~Ķ./tz$>D%׮ퟮ2\Nꌏn?n\rO_Ҹ說i)tՒ~Sw5J{3, )+_s 6(*iiZ/Kt)ԿrO@!(_p^¯(,ߩ'm:@ DPB D-^ĘQF=~|RH,` .J$9"̘5gęSN=E@B'`"PK 2mfTU^Ūj֦B0KuJZmj rӾ=x/\ Xǿ[QtVD\VoOYBh#_zP‰J!S9"`UNn;njf_vluv;p{g<6|q#RU qg̼6slOGrۦWc@sRmu߇Xu&vӏgTyo~iܣGrMG{z+n^_4{=}Wrg Yyoto ~ۋ:nHL@fe#¤=p淐plZX(n$2֦ 'XÄA9C%zW:D ӥHqb(X⌘@hFcbĵ(1QT ) Fj3hF1lE@X1n*5:ˏ;93}cH2rx\$*.x-48%6:ő~R~tAWBuHSkyLadiPXԬk19c?r 8*փq@]][ך5DMU:3&ʯj~ںز5jme%k#Kv5gl(f[Z=WQIaw`.^3@w.{㮴2evɽH+<u,$ %Е;W9RH`O;n^y]3i> ' }i>n|U<0@hs$޺vfd_ڧYוۻn@xyTh>3'!|y^ a|e^[Hy]\_Q?~oK)?4|tOMn!x~ll]B|^5^Lw/7Hh]u7K礿f;u?3dF?k?ܳ0?SL=97HGD>i3ĵ(:?3컴 AX<] A > 3ܻ>3$ !$"4#D$T%d&t'()*+,-./01$243D4T5d6t789:;0$ا<=LaC/A3DBD&4;T307? 8kīyD;A DLM?@\[\\\]^`{|}~])/g, "\\$1"); } function show_spinner(id) { var selector = "#" + escapeSelector(id); var parent = $(selector).closest(".shiny-spinner-output-container"); $(selector).siblings(".load-container, .shiny-spinner-placeholder").removeClass('shiny-spinner-hidden'); if (parent.hasClass("shiny-spinner-hideui")) { $(selector).siblings(".load-container").siblings('.shiny-bound-output, .shiny-output-error').css('visibility', 'hidden'); // if there is a proxy div, hide the previous output $(selector).siblings(".shiny-spinner-placeholder").siblings('.shiny-bound-output, .shiny-output-error').addClass('shiny-spinner-hidden'); } } function hide_spinner(id) { var selector = "#" + escapeSelector(id); var parent = $(selector).closest(".shiny-spinner-output-container"); $(selector).siblings(".load-container, .shiny-spinner-placeholder").addClass('shiny-spinner-hidden'); if (parent.hasClass("shiny-spinner-hideui")) { $(selector).siblings(".load-container").siblings('.shiny-bound-output').css('visibility', 'visible'); // if there is a proxy div, show the previous output in case it was hidden $(selector).siblings(".shiny-spinner-placeholder").siblings('.shiny-bound-output').removeClass('shiny-spinner-hidden'); } } function update_spinner(id) { if (!(id in output_states)) { show_spinner(id); } if (output_states[id] <= 0) { show_spinner(id); } else { hide_spinner(id); } } $(document).on('shiny:bound', function(event) { var id = event.target.id; if (id === undefined || id == "") { return; } /* if not bound before, then set the value to 0 */ if (!(id in output_states)) { output_states[id] = 0; } update_spinner(id); }); /* When recalculating starts, show the spinner container & hide the output */ $(document).on('shiny:outputinvalidated', function(event) { var id = event.target.id; if (id === undefined) { return; } output_states[id] = 0; update_spinner(id); }); /* When new value or error comes in, hide spinner container (if any) & show the output */ $(document).on('shiny:value shiny:error', function(event) { var id = event.target.id; if (id === undefined) { return; } output_states[id] = 1; update_spinner(id); }); }()); shinycssloaders/inst/assets/css-loaders.css0000644000176200001440000004456313645366666020740 0ustar liggesusers/* This file is a concatenation of all the CSS files in the css-loaders project */ /* Import this if you are using modernizr (recommended) It means that loaders will fallback to a text state of simply saying "Loading..." in older browsers */ .no-cssanimations .load-container .loader { text-indent: 0; text-align: center; color: #FFF; font-size: 17px; background: none; border: 0 none; width: auto; height: auto; margin: 1em auto; overflow: visible; box-shadow: none; -webkit-animation: none; animation: none; } .no-cssanimations .load-container .loader:before, .no-cssanimations .load-container .loader:after { display: none; } .load1 .loader, .load1 .loader:before, .load1 .loader:after { background: #ffffff; -webkit-animation: load1 1s infinite ease-in-out; animation: load1 1s infinite ease-in-out; width: 1em; height: 4em; } .load1 .loader { color: #ffffff; text-indent: -9999em; margin: 88px auto; position: relative; font-size: 11px; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation-delay: -0.16s; animation-delay: -0.16s; } .load1 .loader:before, .load1 .loader:after { position: absolute; top: 0; content: ''; } .load1 .loader:before { left: -1.5em; -webkit-animation-delay: -0.32s; animation-delay: -0.32s; } .load1 .loader:after { left: 1.5em; } @-webkit-keyframes load1 { 0%, 80%, 100% { box-shadow: 0 0; height: 4em; } 40% { box-shadow: 0 -2em; height: 5em; } } @keyframes load1 { 0%, 80%, 100% { box-shadow: 0 0; height: 4em; } 40% { box-shadow: 0 -2em; height: 5em; } } .load2 .loader, .load2 .loader:before, .load2 .loader:after { border-radius: 50%; } .load2 .loader { color: #ffffff; font-size: 11px; text-indent: -99999em; margin: 55px auto; position: relative; width: 10em; height: 10em; box-shadow: inset 0 0 0 1em; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); } .load2 .loader:before, .load2 .loader:after { position: absolute; content: ''; } .load2 .loader:before { width: 5.2em; height: 10.2em; background: #0dc5c1; border-radius: 10.2em 0 0 10.2em; top: -0.1em; left: -0.1em; -webkit-transform-origin: 5.1em 5.1em; transform-origin: 5.1em 5.1em; -webkit-animation: load2 2s infinite ease 1.5s; animation: load2 2s infinite ease 1.5s; } .load2 .loader:after { width: 5.2em; height: 10.2em; background: #0dc5c1; border-radius: 0 10.2em 10.2em 0; top: -0.1em; left: 4.9em; -webkit-transform-origin: 0.1em 5.1em; transform-origin: 0.1em 5.1em; -webkit-animation: load2 2s infinite ease; animation: load2 2s infinite ease; } @-webkit-keyframes load2 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes load2 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } .load3 .loader { font-size: 10px; margin: 50px auto; text-indent: -9999em; width: 11em; height: 11em; border-radius: 50%; background: #ffffff; background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%); position: relative; -webkit-animation: load3 1.4s infinite linear; animation: load3 1.4s infinite linear; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); } .load3 .loader:before { width: 50%; height: 50%; background: #ffffff; border-radius: 100% 0 0 0; position: absolute; top: 0; left: 0; content: ''; } .load3 .loader:after { background: #0dc5c1; width: 75%; height: 75%; border-radius: 50%; content: ''; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } @-webkit-keyframes load3 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes load3 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } .load4 .loader { color: #ffffff; font-size: 20px; margin: 100px auto; width: 1em; height: 1em; border-radius: 50%; position: relative; text-indent: -9999em; -webkit-animation: load4 1.3s infinite linear; animation: load4 1.3s infinite linear; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); } @-webkit-keyframes load4 { 0%, 100% { box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; } 12.5% { box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; } 25% { box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; } 37.5% { box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; } 50% { box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; } 62.5% { box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; } 75% { box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; } 87.5% { box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; } } @keyframes load4 { 0%, 100% { box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; } 12.5% { box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; } 25% { box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; } 37.5% { box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; } 50% { box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; } 62.5% { box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; } 75% { box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; } 87.5% { box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; } } .load5 .loader { margin: 100px auto; font-size: 25px; width: 1em; height: 1em; border-radius: 50%; position: relative; text-indent: -9999em; -webkit-animation: load5 1.1s infinite ease; animation: load5 1.1s infinite ease; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); } @-webkit-keyframes load5 { 0%, 100% { box-shadow: 0em -2.6em 0em 0em #ffffff, 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.5), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7); } 12.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.7), 1.8em -1.8em 0 0em #ffffff, 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5); } 25% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.5), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7), 2.5em 0em 0 0em #ffffff, 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 37.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5), 2.5em 0em 0 0em rgba(255, 255, 255, 0.7), 1.75em 1.75em 0 0em #ffffff, 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 50% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.5), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.7), 0em 2.5em 0 0em #ffffff, -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 62.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.5), 0em 2.5em 0 0em rgba(255, 255, 255, 0.7), -1.8em 1.8em 0 0em #ffffff, -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 75% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.5), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.7), -2.6em 0em 0 0em #ffffff, -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 87.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.5), -2.6em 0em 0 0em rgba(255, 255, 255, 0.7), -1.8em -1.8em 0 0em #ffffff; } } @keyframes load5 { 0%, 100% { box-shadow: 0em -2.6em 0em 0em #ffffff, 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.5), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7); } 12.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.7), 1.8em -1.8em 0 0em #ffffff, 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5); } 25% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.5), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7), 2.5em 0em 0 0em #ffffff, 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 37.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5), 2.5em 0em 0 0em rgba(255, 255, 255, 0.7), 1.75em 1.75em 0 0em #ffffff, 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 50% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.5), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.7), 0em 2.5em 0 0em #ffffff, -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 62.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.5), 0em 2.5em 0 0em rgba(255, 255, 255, 0.7), -1.8em 1.8em 0 0em #ffffff, -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 75% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.5), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.7), -2.6em 0em 0 0em #ffffff, -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2); } 87.5% { box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.5), -2.6em 0em 0 0em rgba(255, 255, 255, 0.7), -1.8em -1.8em 0 0em #ffffff; } } .load6 .loader { color: #ffffff; font-size: 90px; text-indent: -9999em; overflow: hidden; width: 1em; height: 1em; border-radius: 50%; margin: 72px auto; position: relative; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation: load6 1.7s infinite ease; animation: load6 1.7s infinite ease; } @-webkit-keyframes load6 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em; } 5%, 95% { box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em; } 10%, 59% { box-shadow: 0 -0.83em 0 -0.4em, -0.087em -0.825em 0 -0.42em, -0.173em -0.812em 0 -0.44em, -0.256em -0.789em 0 -0.46em, -0.297em -0.775em 0 -0.477em; } 20% { box-shadow: 0 -0.83em 0 -0.4em, -0.338em -0.758em 0 -0.42em, -0.555em -0.617em 0 -0.44em, -0.671em -0.488em 0 -0.46em, -0.749em -0.34em 0 -0.477em; } 38% { box-shadow: 0 -0.83em 0 -0.4em, -0.377em -0.74em 0 -0.42em, -0.645em -0.522em 0 -0.44em, -0.775em -0.297em 0 -0.46em, -0.82em -0.09em 0 -0.477em; } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em; } } @keyframes load6 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em; } 5%, 95% { box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em; } 10%, 59% { box-shadow: 0 -0.83em 0 -0.4em, -0.087em -0.825em 0 -0.42em, -0.173em -0.812em 0 -0.44em, -0.256em -0.789em 0 -0.46em, -0.297em -0.775em 0 -0.477em; } 20% { box-shadow: 0 -0.83em 0 -0.4em, -0.338em -0.758em 0 -0.42em, -0.555em -0.617em 0 -0.44em, -0.671em -0.488em 0 -0.46em, -0.749em -0.34em 0 -0.477em; } 38% { box-shadow: 0 -0.83em 0 -0.4em, -0.377em -0.74em 0 -0.42em, -0.645em -0.522em 0 -0.44em, -0.775em -0.297em 0 -0.46em, -0.82em -0.09em 0 -0.477em; } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); box-shadow: 0 -0.83em 0 -0.4em, 0 -0.83em 0 -0.42em, 0 -0.83em 0 -0.44em, 0 -0.83em 0 -0.46em, 0 -0.83em 0 -0.477em; } } .load7 .loader, .load7 .loader:before, .load7 .loader:after { border-radius: 50%; width: 2.5em; height: 2.5em; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation: load7 1.8s infinite ease-in-out; animation: load7 1.8s infinite ease-in-out; } .load7 .loader { color: #ffffff; font-size: 10px; margin: 80px auto; position: relative; text-indent: -9999em; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation-delay: -0.16s; animation-delay: -0.16s; } .load7 .loader:before, .load7 .loader:after { content: ''; position: absolute; top: 0; } .load7 .loader:before { left: -3.5em; -webkit-animation-delay: -0.32s; animation-delay: -0.32s; } .load7 .loader:after { left: 3.5em; } @-webkit-keyframes load7 { 0%, 80%, 100% { box-shadow: 0 2.5em 0 -1.3em; } 40% { box-shadow: 0 2.5em 0 0; } } @keyframes load7 { 0%, 80%, 100% { box-shadow: 0 2.5em 0 -1.3em; } 40% { box-shadow: 0 2.5em 0 0; } } .load8 .loader, .load8 .loader:after { border-radius: 50%; width: 10em; height: 10em; } .load8 .loader { margin: 60px auto; font-size: 10px; position: relative; text-indent: -9999em; border-top: 1.1em solid rgba(255, 255, 255, 0.2); border-right: 1.1em solid rgba(255, 255, 255, 0.2); border-bottom: 1.1em solid rgba(255, 255, 255, 0.2); border-left: 1.1em solid #ffffff; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation: load8 1.1s infinite linear; animation: load8 1.1s infinite linear; } @-webkit-keyframes load8 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes load8 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } }