diff --git a/analyse-R.html b/analyse-R.html index 788b7787..cdc124fa 100644 --- a/analyse-R.html +++ b/analyse-R.html @@ -200,7 +200,7 @@

Introduction
à l’analyse d’enquêtes
avec R et RStudio

-Dernière mise à jour : 17 juin 2020 +Dernière mise à jour : 5 octobre 2020

DOI

@@ -2480,23 +2480,84 @@

Afficher les données

$ cinema <fct> Non, Oui, Non, Oui, Non, Oui, Non... $ sport <fct> Non, Oui, Oui, Oui, Non, Oui, Non... $ heures.tv <dbl> 0.0, 1.0, 0.0, 2.0, 3.0, 2.0, 2.9... -

L’extension questionr propose une fonction lookfor qui permet de lister les différentes variables d’un fichier de données :

-
lookfor(d)
-
- -
-

Lorsqu’on a un gros tableau de données avec de nombreuses variables, il peut être difficile de retrouver la ou les variables d’intérêt. Il est possible d’indiquer à lookfor un mot-clé pour limiter la recherche. Par exemple :

-
lookfor(d, "trav")
-
- -
+

L’extension labelled propose une fonction look_for qui permet de lister les différentes variables d’un fichier de données :

+
library(labelled)
+look_for(d)
+
pos   variable      label col_type values                                                         
+<chr> <chr>         <chr> <chr>    <chr>                                                          
+1     id            —     int      range: 1 - 2000                                                
+2     age           —     int      range: 18 - 97                                                 
+3     sexe          —     fct      Homme                                                          
+                                   Femme                                                          
+4     nivetud       —     fct      N'a jamais fait d'etudes                                       
+                                   A arrete ses etudes, avant la derniere annee d'etudes primaires
+                                   Derniere annee d'etudes primaires                              
+                                   1er cycle                                                      
+                                   2eme cycle                                                     
+                                   Enseignement technique ou professionnel court                  
+                                   Enseignement technique ou professionnel long                   
+                                   Enseignement superieur y compris technique superieur           
+5     poids         —     dbl      range: 78.0783403 - 31092.14132                                
+6     occup         —     fct      Exerce une profession                                          
+                                   Chomeur                                                        
+                                   Etudiant, eleve                                                
+                                   Retraite                                                       
+                                   Retire des affaires                                            
+                                   Au foyer                                                       
+                                   Autre inactif                                                  
+7     qualif        —     fct      Ouvrier specialise                                             
+                                   Ouvrier qualifie                                               
+                                   Technicien                                                     
+                                   Profession intermediaire                                       
+                                   Cadre                                                          
+                                   Employe                                                        
+                                   Autre                                                          
+8     freres.soeurs —     int      range: 0 - 22                                                  
+9     clso          —     fct      Oui                                                            
+                                   Non                                                            
+                                   Ne sait pas                                                    
+10    relig         —     fct      Pratiquant regulier                                            
+                                   Pratiquant occasionnel                                         
+                                   Appartenance sans pratique                                     
+                                   Ni croyance ni appartenance                                    
+                                   Rejet                                                          
+                                   NSP ou NVPR                                                    
+11    trav.imp      —     fct      Le plus important                                              
+                                   Aussi important que le reste                                   
+                                   Moins important que le reste                                   
+                                   Peu important                                                  
+12    trav.satisf   —     fct      Satisfaction                                                   
+                                   Insatisfaction                                                 
+                                   Equilibre                                                      
+13    hard.rock     —     fct      Non                                                            
+                                   Oui                                                            
+14    lecture.bd    —     fct      Non                                                            
+                                   Oui                                                            
+15    peche.chasse  —     fct      Non                                                            
+                                   Oui                                                            
+16    cuisine       —     fct      Non                                                            
+                                   Oui                                                            
+17    bricol        —     fct      Non                                                            
+                                   Oui                                                            
+18    cinema        —     fct      Non                                                            
+                                   Oui                                                            
+19    sport         —     fct      Non                                                            
+                                   Oui                                                            
+20    heures.tv     —     dbl      range: 0 - 12
+

Lorsqu’on a un gros tableau de données avec de nombreuses variables, il peut être difficile de retrouver la ou les variables d’intérêt. Il est possible d’indiquer à look_for un mot-clé pour limiter la recherche. Par exemple :

+
look_for(d, "trav")
+
pos   variable    label col_type values                      
+<chr> <chr>       <chr> <chr>    <chr>                       
+11    trav.imp    —     fct      Le plus important           
+                                 Aussi important que le reste
+                                 Moins important que le reste
+                                 Peu important               
+12    trav.satisf —     fct      Satisfaction                
+                                 Insatisfaction              
+                                 Equilibre  

Il est à noter que si la recherche n’est pas sensible à la casse (i.e. aux majuscules et aux minuscules), elle est sensible aux accents.

La méthode summary qui fonctionne sur tout type d’objet permet d’avoir quelques statistiques de base sur les différentes variables de notre tableau, les statistiques affichées dépendant du type de variable.

-
summary(d)
+
summary(d)
       id              age           sexe     
  Min.   :   1.0   Min.   :18.00   Homme: 899  
  1st Qu.: 500.8   1st Qu.:35.00   Femme:1101  
@@ -2562,14 +2623,14 @@ 

Afficher les données

Max. :12.000 NA's :5

On peut également appliquer summary à une variable particulière.

-
summary(d$sexe)
+
summary(d$sexe)
Homme Femme 
   899  1101 
-
summary(d$age)
+
summary(d$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   18.00   35.00   48.00   48.16   60.00   97.00 

L’extension questionr fournit également une fonction bien pratique pour décrire les différentes variables d’un tableau de données. Il s’agit de describe. Faisons de suite un essai :

-
describe(d)
+
describe(d)
d 
 
  20  Variables      2000  Observations
@@ -2765,7 +2826,7 @@ 

Afficher les données

------------------------------------------------------------

Comme on le voit sur cet exemple, describe nous affiche le type des variables, les premières valeurs de chacune, le nombre de valeurs manquantes, le nombre de valeurs différentes (uniques) ainsi que quelques autres informations suivant le type de variables.

Il est possible de restreindre l’affichage à seulement quelques variables en indiquant le nom de ces dernières.

-
describe(d, c("age", "trav.satisf"))
+
describe(d, c("age", "trav.satisf"))
age trav.satisf 
 
  20  Variables      2000  Observations
@@ -2960,7 +3021,7 @@ 

Afficher les données

lowest : 0.0 0.1 0.2 0.3 0.4, highest: 8.0 9.0 10.0 11.0 12.0 ------------------------------------------------------------

On peut également transmettre juste une variable :

-
describe(d$sexe)
+
describe(d$sexe)
d$sexe 
        n  missing distinct 
     2000        0        2 
@@ -3160,43 +3221,51 @@ 

Vecteurs labellisés

data(fecondite)

Pour ailleurs, nous allons avoir besoin de l’extension labelled qui permet de manipuler ces données labellisées.

library(labelled)
+

+Attaching package: 'labelled'
+
The following objects are masked from 'package:questionr':
+
+    look_for, lookfor

Les étiquettes de variable

Les étiquettes de variable permettent de donner un nom long, plus explicite, aux différentes colonnes d’un tableau de données (ou encore directement à un vecteur autonome).

La visonneuse de données de RStudio sait reconnaître et afficher ces étiquettes de variable lorsqu’elles existent. Essayez par exemple la commande suivante :

-
View(femmes)
-

Les fonctions lookfor et describe de l’extension questionr affichent également les étiquettes de variables lorsqu’elles existent.

-
lookfor(femmes, "rés")
-
- -
-
describe(femmes$id_femme)
+
View(femmes)
+

Les fonctions look_for de l’extension laballed et describe de l’extension questionr affichent également les étiquettes de variables lorsqu’elles existent.

+
look_for(femmes, "rés")
+
pos   variable label               col_type values    
+<chr> <chr>    <chr>               <chr>    <chr>     
+7     milieu   Milieu de résidence dbl+lbl  [1] urbain
+                                            [2] rural 
+8     region   Région de résidence dbl+lbl  [1] Nord  
+                                            [2] Est   
+                                            [3] Sud   
+                                            [4] Ouest
+
describe(femmes$id_femme)
[2000 obs.] Identifiant de l'enquêtée
 numeric: 391 1643 85 881 1981 1072 1978 1607 738 1656 ...
 min: 1 - max: 2000 - NAs: 0 (0%) - 2000 unique values

Pour manipuler les étiquettes de variable, il suffit d’utiliser la fonction var_label de l’extension labelled.

-
var_label(femmes$id_menage)
+
var_label(femmes$id_menage)
[1] "Identifiant du ménage"
-
var_label(femmes$id_menage) <- "ID du ménage auquel elle appartient"
-var_label(femmes$id_menage)
+
var_label(femmes$id_menage) <- "ID du ménage auquel elle appartient"
+var_label(femmes$id_menage)
[1] "ID du ménage auquel elle appartient"

On utilisera la valeur NULL pour supprimer une étiquette :

-
v <- c(1, 5, 2, 4, 1)
-var_label(v)
+
v <- c(1, 5, 2, 4, 1)
+var_label(v)
NULL
-
var_label(v) <- "Ma variable"
-var_label(v)
+
var_label(v) <- "Ma variable"
+var_label(v)
[1] "Ma variable"
-
var_label(v) <- NULL
-var_label(v)
+
var_label(v) <- NULL
+var_label(v)
NULL
-
var_label(v) <- "Une autre étiquette"
-var_label(v)
+
var_label(v) <- "Une autre étiquette"
+var_label(v)
[1] "Une autre étiquette"

Le fait d’ajouter une étiquette à un vecteur ne modifie en rien son type. Regardons la structure de notre objet v :

-
str(v)
+
str(v)
 num [1:5] 1 5 2 4 1
  - attr(*, "label")= chr "Une autre étiquette"

Que voit-on ? Notre vecteur possède maintenant ce qu’on appelle un attribut, c’est-à-dire une information supplémentaire qui lui est attachée. Un objet peut avoir plusieurs attributs. Ici, notre étiquette de variable est strocké dans un attribut nommé "label". Cela ne modifie en rien sa nature. Il ne s’agit que d’information en plus. Toutes les fonctions ne tiennent pas compte des étiquettes de variable. Peu importe ! La présence d’un attribut ne les empêchera de fonctionner. De même, même si l’extension labelled n’est pas installée sur votre machine, vous pourrez toujours manipuler vos données comme si de rien n’était.

@@ -3206,8 +3275,8 @@

Les étiquettes de variable

Les étiquettes de valeur

Les étiquettes de valeur consistent à attribuer une étiquette textuelle à certaines valeurs d’un vecteur. Elles ne peuvent s’appliquer qu’aux vecteurs numériques ou textuels.

Lorsqu’un vecteur possède des étiquettes de valeur, sa classe change et devient labelled. Regardons déjà quelques exemples. Tout d’abord, jetons un apercu au contenu de l’objet femmes grace à la fonction glimpse de l’extension dplyr.

-
library(dplyr)
-glimpse(femmes)
+
library(dplyr)
+glimpse(femmes)
Rows: 2,000
 Columns: 17
 $ id_femme       <dbl> 391, 1643, 85, 881, 1981, 1072, ...
@@ -3225,14 +3294,14 @@ 

Les étiquettes de valeur

$ journal <dbl+lbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0... $ radio <dbl+lbl> 0, 1, 1, 0, 0, 1, 1, 0, 0, 0... $ tv <dbl+lbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0... -$ nb_enf_ideal <dbl+lbl> 4, 4, 4, 4, 4, 5, 10, 5, 4, ... +$ nb_enf_ideal <dbl+lbl> 4, 4, 4, 4, 4, 5, 10, ... $ test <dbl+lbl> 0, 9, 0, 0, 1, 0, 0, 0, 0, 1...

Il apparaît que la variable region est de type haven_labelled. On peut le confirmer avec class.

-
class(femmes$region)
-
[1] "haven_labelled"
+
class(femmes$region)
+
[1] "haven_labelled" "vctrs_vctr"     "double"        

Regardons les premières valeurs prises par cette variable.

-
head(femmes$region)
-
<Labelled double>: Région de résidence
+
head(femmes$region)
+
<labelled<double>[6]>: Région de résidence
 [1] 4 4 4 4 4 3
 
 Labels:
@@ -3243,7 +3312,7 @@ 

Les étiquettes de valeur

4 Ouest

Nous voyons que quatre étiquettes de valeurs ont été associées à notre variable. Le code 1 correspond ainsi à la région Nord, le code 2 à la région Est, etc. Laissons de côté pour le moment la colonne is_na que nous aborderons dans une prochaine section.

La liste des étiquettes est également renvoyée par la fonction describe de questionr.

-
describe(femmes$region)
+
describe(femmes$region)
[2000 obs.] Région de résidence
 labelled double: 4 4 4 4 4 3 3 3 3 3 ...
 min: 1 - max: 4 - NAs: 0 (0%) - 4 unique values
@@ -3256,18 +3325,18 @@ 

Les étiquettes de valeur

[4] Ouest 562 28.1 Total 2000 100.0

L’extension labelled fournit la fonction val_labels qui renvoie la liste des étiquettes de valeurs d’une variable sous la forme d’un vecteur nommé et la fonction val_label (notez l’absence de ‘s’) qui renvoie l’étiquette associée à une valeur particulière. S’il n’y a pas d’étiquette de valeur, ces fonctions renvoient NULL.

-
val_labels(femmes$region)
+
val_labels(femmes$region)
 Nord   Est   Sud Ouest 
     1     2     3     4 
-
val_label(femmes$region, 2)
+
val_label(femmes$region, 2)
[1] "Est"
-
val_label(femmes$region, 6)
+
val_label(femmes$region, 6)
NULL
-
val_labels(femmes$age)
+
val_labels(femmes$age)
NULL

Re-regardons d’un peu plus près les premières valeurs de notre variable region.

-
head(femmes$region)
-
<Labelled double>: Région de résidence
+
head(femmes$region)
+
<labelled<double>[6]>: Région de résidence
 [1] 4 4 4 4 4 3
 
 Labels:
@@ -3277,40 +3346,40 @@ 

Les étiquettes de valeur

3 Sud 4 Ouest

On s’aperçoit qu’il s’agit de valeurs numériques. Et l’affichage indique que notre variable est plus précisément du type labelled double. Pour rappel, double est synonyme de numeric. Autrement dit, la classe haven_labelled ne modifie pas le type sous-jacent d’un vecteur, que l’on peut toujours obtenir avec la fonction typeof. Nous pouvons également tester si notre variable est numérique avec la fonction is.numeric.

-
typeof(femmes$region)
+
typeof(femmes$region)
[1] "double"
-
is.numeric(femmes$region)
+
is.numeric(femmes$region)
[1] TRUE

À la différence des facteurs, le type original d’une variable labellisée n’est pas modifié par la présence d’étiquettes de valeur. Ainsi, il reste possible de calculer une moyenne à partir de notre variable region (même si cela n’est pas pertinent ici d’un point de vue sémantique).

-
mean(femmes$region)
+
mean(femmes$region)
[1] 2.412

Avec un facteur, nous aurions eu un bon message d’erreur.

-
mean(d$nivetud)
+
mean(d$nivetud)
Warning in mean.default(d$nivetud): argument is not numeric
 or logical: returning NA
[1] NA

Nous allons voir qu’il est aussi possible d’associer des étiquettes de valeurs à des vecteurs textuels. Créons tout d’abord un vecteur textuel qui nous servira d’exemple.

-
v <- c("f", "f", "h", "f", "h")
-v
+
v <- c("f", "f", "h", "f", "h")
+v
[1] "f" "f" "h" "f" "h"

Le plus facile pour lui associer des étiquettes de valeur est d’utiliser val_label.

-
val_label(v, "f") <- "femmes"
-val_label(v, "h") <- "hommes"
-v
-
<Labelled character>
+
val_label(v, "f") <- "femmes"
+val_label(v, "h") <- "hommes"
+v
+
<labelled<character>[5]>
 [1] f f h f h
 
 Labels:
  value  label
      f femmes
      h hommes
-
typeof(v)
+
typeof(v)
[1] "character"

Notre vecteur v a automatiquement été transformé en un vecteur de la classe labelled. Mais son type sous-jacent est resté "character". Par ailleurs, les données elle-même n’ont pas été modifiées et ont conservé leurs valeurs originales.

Il est également possible de définir/modifier/supprimer l’ensemble des étiquettes de valeur d’une variable avec val_labels en lui assignant un vecteur nommé.

-
val_labels(v) <- c(Homme = "h", Femme = "f", `Valeur indéterminée` = "i")
-v
-
<Labelled character>
+
val_labels(v) <- c(Homme = "h", Femme = "f", `Valeur indéterminée` = "i")
+v
+
<labelled<character>[5]>
 [1] f f h f h
 
 Labels:
@@ -3319,44 +3388,44 @@ 

Les étiquettes de valeur

f Femme i Valeur indéterminée

Comme précédemment, on utilisera NULL pour supprimer une ou toutes les étiquettes.

-
val_label(v, "i") <- NULL
-v
-
<Labelled character>
+
val_label(v, "i") <- NULL
+v
+
<labelled<character>[5]>
 [1] f f h f h
 
 Labels:
  value label
      h Homme
      f Femme
-
val_labels(v) <- NULL
-v
+
val_labels(v) <- NULL
+v
[1] "f" "f" "h" "f" "h"
-
class(v)
+
class(v)
[1] "character"

Si l’on supprime toutes les étiquettes de valeur, alors notre vecteur retrouve sa classe initiale.

Assignation et condition

Les étiquettes de valeur sont plus souples que les facteurs, en ce sens qu’il n’est pas obligatoire d’indiquer une étiquette pour chaque valeur prise par une variable. Alors qu’il n’est pas possible avec un facteur d’assigner une valeur qui n’a pas été préalablement définie comme une des modalités possibles du facteur, nous n’avons pas cette limite avec les vecteurs labellisés.

-
femmes$region[3] <- 5
+
femmes$region[3] <- 5

Important : quand on assigne une valeur à un facteur, on doit transmettre le texte correspondant à la modalité, alors que pour un vecteur labellisé on transmettra le code sous-jacent (pour rappel, les étiquettes de valeur ne sont qu’une information additionnelle).

De plus, nous avons vu que les données initiales n’étaient pas modifiées par l’ajout ou la suppression d’étiquettes de valeur, alors que pour les facteurs ce n’est pas vrai. Pour mieux comprendre, essayons la commande suivante :

-
unclass(factor(v))
+
unclass(factor(v))
[1] 1 1 2 1 2
 attr(,"levels")
 [1] "f" "h"

Un facteur stocke de manière interne les valeurs sous la forme d’une suite d’entiers, démarrant toujours par 1, forcément consécutifs, et dont les valeurs dépendent de l’ordre des facteurs. Pour s’en rendre compte :

-
unclass(factor(v, levels = c("h", "f")))
+
unclass(factor(v, levels = c("h", "f")))
[1] 2 2 1 2 1
 attr(,"levels")
 [1] "h" "f"
-
unclass(factor(v, levels = c("f", "h")))
+
unclass(factor(v, levels = c("f", "h")))
[1] 1 1 2 1 2
 attr(,"levels")
 [1] "f" "h"

Ce qui importe pour un facteur ce sont les modalités de ce dernier tandis que pour un vecteur labellisé ce sont les valeurs du vecteur elles-mêmes. Cela reste vrai pour l’écriture de conditions.

Prenons un premier exemple avec un facteur :

-
describe(d$sexe)
+
describe(d$sexe)
[2000 obs.] 
 nominal factor: "Homme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme" "Femme" "Homme" ...
 2 levels: Homme | Femme
@@ -3366,17 +3435,17 @@ 

Assignation et condition

Homme 900 45 Femme 1100 55 Total 2000 100
-
table(d$sexe == "Homme")
+
table(d$sexe == "Homme")

 FALSE  TRUE 
  1100   900 
-
table(d$sexe == 1)
+
table(d$sexe == 1)

 FALSE 
  2000 

La condition valide est celle utilisant "Homme" qui est la valeur de la modalité du facteur.

Et avec un vecteur labellisé ?

-
describe(femmes$milieu)
+
describe(femmes$milieu)
[2000 obs.] Milieu de résidence
 labelled double: 2 2 2 2 2 2 2 2 2 2 ...
 min: 1 - max: 2 - NAs: 0 (0%) - 2 unique values
@@ -3386,11 +3455,9 @@ 

Assignation et condition

[1] urbain 912 45.6 [2] rural 1088 54.4 Total 2000 100.0
-
table(femmes$milieu == "urbain")
-

-FALSE 
- 2000 
-
table(femmes$milieu == 1)
+
table(femmes$milieu == "urbain")
+
Erreur : Can't combine `..1` <character> and `..2` <double>.
+
table(femmes$milieu == 1)

 FALSE  TRUE 
  1088   912 
@@ -4199,7 +4266,7 @@

Visualiser ses données

  • summary
  • str
  • glimpse (dplyr)
  • -
  • lookfor (questionr)
  • +
  • look_for (labelled)
  • describe (questionr)
  • Addins de codebook
  • skim (skimr)
  • @@ -4365,49 +4432,111 @@

    glimpse (dplyr)

    $ sport <fct> Non, Oui, Oui, Oui, Non, Oui, Non... $ heures.tv <dbl> 0.0, 1.0, 0.0, 2.0, 3.0, 2.0, 2.9...
    -
    -

    lookfor (questionr)

    -

    L’extension questionr propose une fonction lookfor, inspirée de Stata, qui permet de lister les différentes variables d’un fichier de données :

    -
    lookfor(hdv2003)
    -
    - -
    -

    Lorsque l’on a un gros tableau de données avec de nombreuses variables, il peut être difficile de retrouver la ou les variables d’intérêt. Il est possible d’indiquer à lookfor un mot-clé pour limiter la recherche. Par exemple :

    -
    lookfor(hdv2003, "trav")
    -
    - -
    +
    +

    look_for (labelled)

    +

    L’extension labelled propose une fonction look_for, inspirée de Stata, qui permet de lister les différentes variables d’un fichier de données, ainsi que leurs principales caractéristiques :

    +
    library(labelled)
    +look_for(hdv2003)
    +
    pos   variable      label col_type values                                                         
    +<chr> <chr>         <chr> <chr>    <chr>                                                          
    +1     id            —     int      range: 1 - 2000                                                
    +2     age           —     int      range: 18 - 97                                                 
    +3     sexe          —     fct      Homme                                                          
    +                                   Femme                                                          
    +4     nivetud       —     fct      N'a jamais fait d'etudes                                       
    +                                   A arrete ses etudes, avant la derniere annee d'etudes primaires
    +                                   Derniere annee d'etudes primaires                              
    +                                   1er cycle                                                      
    +                                   2eme cycle                                                     
    +                                   Enseignement technique ou professionnel court                  
    +                                   Enseignement technique ou professionnel long                   
    +                                   Enseignement superieur y compris technique superieur           
    +5     poids         —     dbl      range: 78.0783403 - 31092.14132                                
    +6     occup         —     fct      Exerce une profession                                          
    +                                   Chomeur                                                        
    +                                   Etudiant, eleve                                                
    +                                   Retraite                                                       
    +                                   Retire des affaires                                            
    +                                   Au foyer                                                       
    +                                   Autre inactif                                                  
    +7     qualif        —     fct      Ouvrier specialise                                             
    +                                   Ouvrier qualifie                                               
    +                                   Technicien                                                     
    +                                   Profession intermediaire                                       
    +                                   Cadre                                                          
    +                                   Employe                                                        
    +                                   Autre                                                          
    +8     freres.soeurs —     int      range: 0 - 22                                                  
    +9     clso          —     fct      Oui                                                            
    +                                   Non                                                            
    +                                   Ne sait pas                                                    
    +10    relig         —     fct      Pratiquant regulier                                            
    +                                   Pratiquant occasionnel                                         
    +                                   Appartenance sans pratique                                     
    +                                   Ni croyance ni appartenance                                    
    +                                   Rejet                                                          
    +                                   NSP ou NVPR                                                    
    +11    trav.imp      —     fct      Le plus important                                              
    +                                   Aussi important que le reste                                   
    +                                   Moins important que le reste                                   
    +                                   Peu important                                                  
    +12    trav.satisf   —     fct      Satisfaction                                                   
    +                                   Insatisfaction                                                 
    +                                   Equilibre                                                      
    +13    hard.rock     —     fct      Non                                                            
    +                                   Oui                                                            
    +14    lecture.bd    —     fct      Non                                                            
    +                                   Oui                                                            
    +15    peche.chasse  —     fct      Non                                                            
    +                                   Oui                                                            
    +16    cuisine       —     fct      Non                                                            
    +                                   Oui                                                            
    +17    bricol        —     fct      Non                                                            
    +                                   Oui                                                            
    +18    cinema        —     fct      Non                                                            
    +                                   Oui                                                            
    +19    sport         —     fct      Non                                                            
    +                                   Oui                                                            
    +20    heures.tv     —     dbl      range: 0 - 12   
    +

    Lorsque l’on a un gros tableau de données avec de nombreuses variables, il peut être difficile de retrouver la ou les variables d’intérêt. Il est possible d’indiquer à look_for un mot-clé pour limiter la recherche. Par exemple :

    +
    look_for(hdv2003, "trav")
    +
    pos   variable    label col_type values                      
    +<chr> <chr>       <chr> <chr>    <chr>                       
    +11    trav.imp    —     fct      Le plus important           
    +                                 Aussi important que le reste
    +                                 Moins important que le reste
    +                                 Peu important               
    +12    trav.satisf —     fct      Satisfaction                
    +                                 Insatisfaction              
    +                                 Equilibre 

    Il est à noter que si la recherche n’est pas sensible à la casse (i.e. aux majuscules et aux minuscules), elle est sensible aux accents. Il est aussi possible de fournir plusieurs expressions de recherche.

    -

    La fonction lookfor est par ailleurs compatible avec les étiquettes de variable de l’extension labelled, les étiquettes étant prise en compte dans la recherche d’une variable.

    -
    lookfor(femmes, "rés")
    -
    - -
    -
    lookfor(femmes, "rés", "nb")
    -
    - -
    -

    Enfin, il est possible d’afficher plus de détails avec l’option detailed = TRUE.

    -
    lookfor(femmes, "rés", details = TRUE)
    -
    - -
    -

    À noter, le résultats renvoyé par lookfor est un tableau de données qui peut ensuite être aisément manipulé.

    +

    La fonction look_for est par ailleurs compatible avec les étiquettes de variable de l’extension labelled, les étiquettes étant prise en compte dans la recherche d’une variable.

    +
    look_for(femmes, "rés")
    +
    pos   variable label               col_type values    
    +<chr> <chr>    <chr>               <chr>    <chr>     
    +7     milieu   Milieu de résidence dbl+lbl  [1] urbain
    +                                            [2] rural 
    +8     region   Région de résidence dbl+lbl  [1] Nord  
    +                                            [2] Est   
    +                                            [3] Sud   
    +                                            [4] Ouest
    +
    look_for(femmes, "rés", "nb")
    +
    pos   variable     label                  col_type values          
    +<chr> <chr>        <chr>                  <chr>    <chr>           
    +7     milieu       Milieu de résidence    dbl+lbl  [1] urbain      
    +                                                   [2] rural       
    +8     region       Région de résidence    dbl+lbl  [1] Nord        
    +                                                   [2] Est         
    +                                                   [3] Sud         
    +                                                   [4] Ouest       
    +16    nb_enf_ideal Nombre idéal d'enfants dbl+lbl  [96] Ne sait pas
    +                                                   [99] manquant   
    +

    À noter, le résultat renvoyé par look_for est un tableau de données qui peut ensuite être aisément manipulé (voir l’aide de la fonction).

    describe (questionr)

    L’extension questionr fournit également une fonction bien pratique pour décrire les différentes variables d’un tableau de données. Il s’agit de describe. Faisons de suite un essai :

    -
    describe(hdv2003)
    +
    describe(hdv2003)
    [2000 obs. x 20 variables] tbl_df tbl data.frame
     
     $id: 
    @@ -4506,7 +4635,7 @@ 

    describe (questionr)

    min: 0 - max: 12 - NAs: 5 (0.2%) - 30 unique values

    Comme on le voit sur cet exemple, describe nous affiche le type des variables, les premières valeurs de chacune, le nombre de valeurs manquantes, le nombre de valeurs différentes (uniques) ainsi que quelques autres informations suivant le type de variables.

    Il est possible de restreindre l’affichage à seulement quelques variables en indiquant le nom de ces dernières ou une expression de recherche (comme avec lookfor).

    -
    describe(hdv2003, "age", "trav")
    +
    describe(hdv2003, "age", "trav")
    [2000 obs. x 20 variables] tbl_df tbl data.frame
     
     $age: 
    @@ -4523,7 +4652,7 @@ 

    describe (questionr)

    3 levels: Satisfaction | Insatisfaction | Equilibre NAs: 952 (47.6%)

    On peut également transmettre juste une variable :

    -
    describe(hdv2003$sexe)
    +
    describe(hdv2003$sexe)
    [2000 obs.] 
     nominal factor: "Femme" "Femme" "Homme" "Homme" "Femme" "Femme" "Femme" "Homme" "Femme" "Homme" ...
     2 levels: Homme | Femme
    @@ -4534,7 +4663,7 @@ 

    describe (questionr)

    Femme 1101 55 Total 2000 100

    Enfin, describe est également compatible avec les vecteurs labellisés.

    -
    describe(femmes, "milieu")
    +
    describe(femmes, "milieu")
    [2000 obs. x 17 variables] tbl_df tbl data.frame
     
     $milieu: Milieu de résidence
    @@ -4542,7 +4671,7 @@ 

    describe (questionr)

    min: 1 - max: 2 - NAs: 0 (0%) - 2 unique values 2 value labels: [1] urbain [2] rural

    À noter, l’argument freq.n.max permets d’indiquer le nombre de modalités en-dessous duquel describe renverra également un tri à plat de la variable.

    -
    describe(menages, freq.n.max = 6)
    +
    describe(menages, freq.n.max = 6)
    [1814 obs. x 5 variables] tbl_df tbl data.frame
     
     $id_menage: Identifiant du ménage
    @@ -4594,13 +4723,13 @@ 

    describe (questionr)

    Addins de codebook

    L’extension codebook fournit plusieurs addins permettant d’explorer les étiquettes des différentes variables d’un tableau de données. Ils sont accessibles par le menu Addins de RStudio.

    On peut aussi lancer les addins manuellement, par exemple avec la commande suivante :

    -
    codebook::label_browser_static(femmes)
    +
    codebook::label_browser_static(femmes)

    skim (skimr)

    L’extension skimr a pour objectif de fournir une fonction skim comme alternative à summary{base} pour les vecteurs et les tableaux de données afin de fournir plus de statistiques dans un format plus compact. Elle peut être appliquée à un vecteur donné ou directement à un tableau de données.

    -
    library(skimr)
    -skim(hdv2003$cuisine)
    +
    library(skimr)
    +skim(hdv2003$cuisine)
    @@ -4657,7 +4786,7 @@

    skim (skimr)

    Data summary
    Non: 1119, Oui: 881
    -
    skim(hdv2003)
    +
    skim(hdv2003)
    @@ -4917,7 +5046,7 @@

    skim (skimr)

    Data summary

    On peut noter que les variables sont regroupées par type.

    Il est possible de sélectionner des variables à la manière de dplyr. Voir l’aide de contains.

    -
    skim(hdv2003, contains("re"))
    +
    skim(hdv2003, contains("re"))
    @@ -5033,15 +5162,18 @@

    skim (skimr)

    Data summary

    Le support des vecteurs labellisés est encore en cours d’intégration.

    -
    skim(menages)
    -
    Warning: Couldn't find skimmers for class: haven_labelled;
    -No user-defined `sfl` provided. Falling back to `character`.
    -
    -Warning: Couldn't find skimmers for class: haven_labelled;
    -No user-defined `sfl` provided. Falling back to `character`.
    -
    -Warning: Couldn't find skimmers for class: haven_labelled;
    -No user-defined `sfl` provided. Falling back to `character`.
    +
    skim(menages)
    +
    Warning: Couldn't find skimmers for class: haven_labelled,
    +vctrs_vctr, double, numeric; No user-defined `sfl` provided.
    +Falling back to `character`.
    +
    +Warning: Couldn't find skimmers for class: haven_labelled,
    +vctrs_vctr, double, numeric; No user-defined `sfl` provided.
    +Falling back to `character`.
    +
    +Warning: Couldn't find skimmers for class: haven_labelled,
    +vctrs_vctr, double, numeric; No user-defined `sfl` provided.
    +Falling back to `character`.
    @@ -5191,16 +5323,16 @@

    skim (skimr)

    create_report (DataExplorer)

    L’extension DataExplorer fournit des outils d’exploration graphique d’un fichier de données. En premier lieu, sa fonction create_report génère un rapport automatique à partir d’un tableau de données.

    -
    library(DataExplorer)
    -create_report(hdv2003)
    +
    library(DataExplorer)
    +create_report(hdv2003)

    Le résultat de ce rapport est visible sur http://larmarange.github.io/analyse-R/data/hdv2003_DataExplorer_report.html.

    L’extension fournit également différentes fonctions graphiques, présentées en détail dans la vignette inclue dans l’extension et visible sur https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html.

    makeCodebook (dataMaid)

    L’extension dataMaid propose une fonction makeCodebook permettant de générer une présentation de l’ensemble des variables d’un tableau de données, au format PDF, Word ou HTML.

    -
    library(dataMaid)
    -makeCodebook(hdv2003)
    +
    library(dataMaid)
    +makeCodebook(hdv2003)

    Vous pouvez cliquez sur ce lien pour voir le PDF produit par dataMaid.

    @@ -5724,95 +5856,25 @@

    Regrouper les modalités d’une variable

    library(dplyr)
     library(labelled)
     freq(femmes$educ)
    -
    Data summary
    ---- - - - - - - - - - - - - - - - - - - - - - - - - -
    n%val%
    1.14e+0356.956.9
    460       23  23  
    348       17.417.4
    54       2.72.7
    +
    + +
    femmes <- femmes %>% mutate(educ3 = recode(educ, `3` = 2))
     freq(femmes$educ3)
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - -
    n%val%
    1.14e+0356.956.9
    460       23  23  
    402       20.120.1
    0       0  0  
    +
    + +
    femmes <- femmes %>% mutate(educ4 = recode(educ, `3` = 2, .combine_value_labels = TRUE))
     freq(femmes$educ4)
    - ---- - - - - - - - - - - - - - - - - - - - -
    n%val%
    1.14e+0356.956.9
    460       23  23  
    402       20.120.1
    +
    + +
    @@ -6539,7 +6601,7 @@

    Manipuler les données avec dplyr

    Les verbes de dplyr @@ -6653,8 +6715,8 @@

    filter

    -
    -

    select et rename

    +
    +

    select, rename et relocate

    select permet de sélectionner des colonnes d’un tableau de données. Ainsi, si on veut extraire les colonnes lat et lon du tableau airports :

    select(airports, lat, lon)
    @@ -6683,25 +6745,55 @@

    select et rename

    {"columns":[{"label":["year"],"name":[1],"type":["int"],"align":["right"]},{"label":["month"],"name":[2],"type":["int"],"align":["right"]},{"label":["day"],"name":[3],"type":["int"],"align":["right"]}],"data":[{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"1"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"2"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"3"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"4"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"5"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"6"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"7"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"8"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"9"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"10"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"11"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"},{"1":"2013","2":"1","3":"12"}],"options":{"columns":{"min":{},"max":[10]},"rows":{"min":[10],"max":[10]},"pages":{}}}
    +

    all_of et any_of permettent de fournir une liste de variables à extraire sous forme de vecteur textuel. Alors que all_of renverra une erreur si une variable n’est pas trouvée dans le tableau de départ, any_of sera moins stricte.

    +
    select(flights, all_of(c("year", "month", "day")))
    +
    + +
    +
    select(flights, all_of(c("century", "year", "month", "day")))
    +
    Erreur : Can't subset columns that don't exist. 
    +x Column `century` doesn't exist.
    +
    select(flights, any_of(c("century", "year", "month", "day")))
    +
    + +
    +

    where permets de sélectionner des variables à partir d’une fonction qui renvoie une valeur logique. Par exemple, pour sélectionner seulement les variables textuelles.

    +
    select(flights, where(is.character))
    +
    + +

    select peut être utilisée pour réordonner les colonnes d’une table en utilisant la fonction everything(), qui sélectionne l’ensemble des colonnes non encore sélectionnées. Ainsi, si on souhaite faire passer la colonne name en première position de la table airports, on peut faire :

    -
    select(airports, name, everything())
    +
    select(airports, name, everything())
    +

    Pour réordonner des colonnes, on pourra aussi avoir recours à relocate en indiquant les premières variables. IL n’est pas nécessaire d’ajouter everything() car avec relocate toutes les variables sont conservées.

    +
    relocate(airports, lon, lat, name)
    +
    + +

    Une variante de select est rename3, qui permet de renommer facilement des colonnes. On l’utilise en lui passant des paramètres de la forme nouveau_nom = ancien_nom. Ainsi, si on veut renommer les colonnes lon et lat de airports en longitude et latitude :

    -
    rename(airports, longitude = lon, latitude = lat)
    +
    rename(airports, longitude = lon, latitude = lat)

    Si les noms de colonnes comportent des espaces ou des caractères spéciaux, on peut les entourer de guillemets (") ou de quotes inverses (`) :

    -
    tmp <- rename(flights, 
    -              "retard départ" = dep_delay,
    -              "retard arrivée" = arr_delay)
    -select(tmp, `retard départ`, `retard arrivée`)
    +
    tmp <- rename(flights, 
    +              "retard départ" = dep_delay,
    +              "retard arrivée" = arr_delay)
    +select(tmp, `retard départ`, `retard arrivée`)

    On peut trier selon plusieurs colonnes. Par exemple selon le mois, puis selon le retard au départ :

    -
    arrange(flights, month, dep_delay)
    +
    arrange(flights, month, dep_delay)

    Si on veut trier selon une colonne par ordre décroissant, on lui applique la fonction desc() :

    -
    arrange(flights, desc(dep_delay))
    +
    arrange(flights, desc(dep_delay))

    Combiné avec slice, arrange permet par exemple de sélectionner les trois vols ayant eu le plus de retard :

    -
    tmp <- arrange(flights, desc(dep_delay)) 
    -slice(tmp, 1:3)
    +
    tmp <- arrange(flights, desc(dep_delay)) 
    +slice(tmp, 1:3)

    On peut créer plusieurs nouvelles colonnes en une seule fois, et les expressions successives peuvent prendre en compte les résultats des calculs précédents. L’exemple suivant convertit d’abord la distance en kilomètres dans une variable distance_km, puis utilise cette nouvelle colonne pour calculer la vitesse en km/h.

    -
    flights <- mutate(flights, 
    -                  distance_km = distance / 0.62137,
    -                  vitesse = distance_km / air_time * 60)
    -select(flights, distance, distance_km, vitesse)
    +
    flights <- mutate(flights, 
    +                  distance_km = distance / 0.62137,
    +                  vitesse = distance_km / air_time * 60)
    +select(flights, distance, distance_km, vitesse)

    Idem pour mutate : les opérations appliquées lors du calcul des valeurs des nouvelles colonnes sont aplliquée groupe de lignes par groupe de lignes. Dans l’exemple suivant, on ajoute une nouvelle colonne qui contient le retard moyen du mois correspondant :

    -
    flights %>% 
    -  group_by(month) %>% 
    -  mutate(mean_delay_month = mean(dep_delay, na.rm = TRUE)) %>% 
    -  select(dep_delay, month, mean_delay_month)
    +
    flights %>% 
    +  group_by(month) %>% 
    +  mutate(mean_delay_month = mean(dep_delay, na.rm = TRUE)) %>% 
    +  select(dep_delay, month, mean_delay_month)
    -
    flights %>% 
    -  group_by(month) %>% 
    -  arrange(desc(dep_delay), .by_group = TRUE)
    +
    flights %>% 
    +  group_by(month) %>% 
    +  arrange(desc(dep_delay), .by_group = TRUE)

    Cette fonction est en général utilisée avec group_by, puisqu’elle permet du coup d’agréger et résumer les lignes du tableau groupe par groupe. Si on souhaite calculer le délai maximum, le délai minimum et le délai moyen au départ pour chaque mois, on pourra faire :

    -
    flights %>%
    -  group_by(month) %>%
    -  summarise(max_delay = max(dep_delay, na.rm=TRUE),
    -            min_delay = min(dep_delay, na.rm=TRUE),
    -            mean_delay = mean(dep_delay, na.rm=TRUE))
    +
    flights %>%
    +  group_by(month) %>%
    +  summarise(max_delay = max(dep_delay, na.rm=TRUE),
    +            min_delay = min(dep_delay, na.rm=TRUE),
    +            mean_delay = mean(dep_delay, na.rm=TRUE))
    +
    `summarise()` ungrouping output (override with `.groups` argument)

    summarise dispose d’un opérateur spécial, n(), qui retourne le nombre de lignes du groupe. Ainsi si on veut le nombre de vols par destination, on peut utiliser :

    -
    flights %>%
    -  group_by(dest) %>%
    -  summarise(nb = n())
    +
    flights %>%
    +  group_by(dest) %>%
    +  summarise(nb = n())
    +
    `summarise()` ungrouping output (override with `.groups` argument)

    On peut également compter selon plusieurs variables :

    -
    flights %>% 
    -  count(origin, dest) %>% 
    -  arrange(desc(n))
    +
    flights %>% 
    +  count(origin, dest) %>% 
    +  arrange(desc(n))

    Lorsqu’on effectue un group_by suivi d’un summarise, le tableau résultat est automatiquement dégroupé de la dernière variable de regroupement. Ainsi le tableau généré par le code suivant est groupé par month et origin :

    -
    flights %>%
    -  group_by(month, origin, dest) %>%
    -  summarise(nb = n())
    +
    flights %>%
    +  group_by(month, origin, dest) %>%
    +  summarise(nb = n())
    +
    `summarise()` regrouping output by 'month', 'origin' (override with `.groups` argument)

    Cela peut permettre “d’enchaîner” les opérations groupées. Dans l’exemple suivant on calcule le pourcentage des trajets pour chaque destination par rapport à tous les trajets du mois :

    -
    flights %>%
    -  group_by(month, dest) %>%
    -  summarise(nb = n()) %>% 
    -  mutate(pourcentage = nb / sum(nb) * 100)
    +
    flights %>%
    +  group_by(month, dest) %>%
    +  summarise(nb = n()) %>% 
    +  mutate(pourcentage = nb / sum(nb) * 100)
    +
    `summarise()` regrouping output by 'month' (override with `.groups` argument)

    On peut à tout moment “dégrouper” un tableau à l’aide de ungroup. Ce serait par exemple nécessaire, dans l’exemple précédent, si on voulait calculer le pourcentage sur le nombre total de vols plutôt que sur le nombre de vols par mois :

    -
    flights %>%
    -  group_by(month, dest) %>%
    -  summarise(nb = n()) %>% 
    -  ungroup() %>% 
    -  mutate(pourcentage = nb / sum(nb) * 100)
    +
    flights %>%
    +  group_by(month, dest) %>%
    +  summarise(nb = n()) %>% 
    +  ungroup() %>% 
    +  mutate(pourcentage = nb / sum(nb) * 100)
    +
    `summarise()` regrouping output by 'month' (override with `.groups` argument)

    À noter que count, par contre, renvoit un tableau non groupé :

    -
    flights %>% 
    -  count(month, dest)
    +
    flights %>% 
    +  count(month, dest)

    Si on veut tirer au hasard 10% des lignes de flights :

    -
    flights %>% sample_frac(0.1)
    +
    flights %>% sample_frac(0.1)

    Ces fonctions sont utiles notamment pour faire de “l’échantillonnage” en tirant au hasard un certain nombre d’observations du tableau.

    @@ -7042,15 +7141,15 @@

    sample_n et sample_frac

    lead et lag

    lead et lag permettent de décaler les observations d’une variable d’un cran vers l’arrière (pour lead) ou vers l’avant (pour lag).

    -
    lead(1:5)
    +
    lead(1:5)
    [1]  2  3  4  5 NA
    -
    lag(1:5)
    +
    lag(1:5)
    [1] NA  1  2  3  4

    Ceci peut être utile pour des données de type “séries temporelles”. Par exemple, on peut facilement calculer l’écart entre le retard au départ de chaque vol et celui du vol précédent :

    -
    flights %>%
    -  mutate(dep_delay_prev = lead(dep_delay),
    -         dep_delay_diff = dep_delay - dep_delay_prev) %>%
    -  select(dep_delay_prev, dep_delay, dep_delay_diff)
    +
    flights %>%
    +  mutate(dep_delay_prev = lead(dep_delay),
    +         dep_delay_diff = dep_delay - dep_delay_prev) %>%
    +  select(dep_delay_prev, dep_delay, dep_delay_diff)

    Lors de son premier appel, elle sera équivalente à un summarise(n = n()) ou à un count(). Là où la fonction est intelligente, c’est que si on l’appelle plusieurs fois successivement, elle prendra en compte l’existence d’un n déjà calculé et effectuera automatiquement un summarise(n = sum(n)) :

    -
    flights %>% 
    -  group_by(month, origin, dest) %>% 
    -  tally %>%
    -  tally
    +
    flights %>% 
    +  group_by(month, origin, dest) %>% 
    +  tally %>%
    +  tally

    On peut lui spécifier une liste de variables : dans ce cas, pour toutes les observations ayant des valeurs identiques pour les variables en question, distinct ne conservera que la première d’entre elles.

    -
    flights %>%
    -  distinct(month, day)
    +
    flights %>%
    +  distinct(month, day)

    L’option .keep_all permet, dans l’opération précédente, de conserver l’ensemble des colonnes du tableau :

    -
    flights %>%
    -  distinct(month, day, .keep_all = TRUE) 
    +
    flights %>%
    +  distinct(month, day, .keep_all = TRUE) 
    -
    -
    -
    -
    -

    Visualisation des données

    -

    Chargeons à présent l’extension graphique ggplot2 :

    -
    library(ggplot2)
    -

    Procédons désormais à quelques visualisations très simples de ces données. On dispose de trois variables continues : l’année, le taux de croissance du PIB, et le ratio Dette publique / PIB. Si l’on souhaite visualiser la croissance du PIB au cours du temps, la solution basique dans R s’écrit de la manière suivante :

    -
    with(debt, plot(Year, growth))
    -

    Le code de la visualisation est très simple et se lit : avec l’objet debt, construire le graphique montrant l’année d’observation Year en abcisse et le taux de croissance du PIB growth en ordonnée. Le code est compris de cette manière par R car la fonction plot comprend le premier argument comme étant la variable à représenter sur l’axe horizontal x, et le second comme la variable à représenter sur l’axe vertical y.

    -

    Le même graphique s’écrit de la manière suivante avec l’extension ggplot2 :

    -
    with(debt, qplot(Year, growth))
    -

    Comme on peut le voir, le code est très proche du code utilisé dans R base, la syntaxe signifiant toujours : avec le jeu de données debt, visualiser les variables Year sur l’axe x et growth sur l’axe y. Le résultat est similaire, bien que plusieurs paramètres graphiques aient changé : le fond gris clair, en particulier, est caractéristique du thème graphique par défaut de ggplot2, que l’on apprendra à modifier plus loin.

    -

    Par ailleurs, dans les deux exemples précédents, on a écrit with(debt, ...) pour indiquer que l’on travaillait avec l’objet debt. Lorsque l’on travaille avec l’extension ggplot2, il est toutefois plus commun d’utiliser l’argument data dans l’appel de qplot pour indiquer ce choix :

    -
    qplot(Year, growth, data = debt)
    -
    -

    Visualisation par petits multiples -

    -

    Cherchons désormais à mieux comprendre les variations du taux de croissance du PIB au fil des années.

    -

    Dans les graphiques précédents, on voit clairement que ce taux est très variable dans l’immédiat après-guerre, puis qu’il oscille entre environ -5 % et +15 %, puis qu’il semble chuter dramatiquement à la fin des années 2000, marquées par la crise financière globale. Mais comment visualiser ces variations pour chacun des vingt pays de l’échantillon ?

    -

    On va ici utiliser le principe de la visualisation par petits multiples, c’est-à-dire que l’on va reproduire le même graphique pour chacun des pays, et visualiser l’ensemble de ces graphiques dans une même fenêtre. Concrètement, il va donc s’agir de montrer la croissance annuelle du PIB en faisant apparaître chaque pays dans une facette différente du graphique.

    -

    ggplot2 permet d’effectuer cette opération en rajoutant au graphique précédent, au moyen de l’opérateur +, l’élément facet_wrap(~ Country) au graphique et qui signifie construire le graphique pour chaque valeur différente de la variable Country. On notera que la fonction facet_wrap utilise la syntaxe équation de R. Par défaut, ces facettes sont classées par ordre alphabétique :

    -
    qplot(Year, growth, data = debt) +
    -  facet_wrap(~ Country)
    -

    Voilà qui est beaucoup plus clair ! On aperçoit bien, dans ce graphique, les variations très importantes de croissance du PIB dans un pays comme l’Autriche, ruinée après la Seconde guerre mondiale, ou l’Irlande, très durement frappée par la crise financière globale en 2008 et 2009. On aperçoit aussi où se trouvent les données manquantes : voir le graphique de l’Espagne, par exemple.

    -

    Il faut noter ici un élément essentiel de la grammaire graphique de ggplot2, qui utilise une syntaxe additive, où différents éléments et paramètres graphiques peuvent être combinés en les additionnant, ce qui permet de construire et de modifier des graphiques de manière cumulative, pas à pas. Cette caractéristique permet de tâtonner, et de construire progressivement des graphiques très complets.

    -
    -
    -

    Visualisation en séries temporelles

    -

    Enfin, pour produire le même graphique que ci-dessus en utilisant des lignes plutôt que des points, il suffit d’utiliser l’argument geom = "line", ce qui peut être considéré comme une meilleure manière de visualiser des séries temporelles, mais qui tend aussi à rendre plus difficile la détection des périodes pour lesquelles il manque des données (voir, à nouveau, le graphique pour l’Espagne) :

    -
    qplot(data = debt, y = growth, x = Year, geom = "line") + 
    -  facet_wrap(~ Country)
    -

    Dans ce dernier exemple, on a défini l’axe y avant de définir l’axe x, en écrivant ces arguments de manière explicite ; de même, on a commencé par spécifier l’argument data, et l’on a terminé par l’argument geom. Cet ordre d’écriture permet de conserver une forme de cohérence dans l’écriture des fonctions graphiques.

    -
    -
    -

    Combinaisons d’éléments graphiques

    -

    On n’a pas encore visualisé le ratio Dette publique / PIB, l’autre variable du raisonnement de Reinhart et Rogoff. C’est l’occasion de voir comment rajouter des titres aux axes des graphiques, et d’utiliser les lignes en même temps que des points, toujours grâce à l’argument geom, qui peut prendre plusieurs valeurs (ici, "point" produit les points et "line" produit les lignes) :

    -
    qplot(data = debt, y = ratio, x = Year, geom = c("line", "point")) + 
    -  facet_wrap(~ Country) +
    -  labs(x = NULL,
    -       y = "Ratio dette publique / produit intérieur brut (%)\n")
    -

    Dans ce graphique, on a combiné deux objets géométriques (geom) pour afficher à la fois des points et des lignes. On a ensuite défini les titres des axes, en supprimant celui de l’axe x, et en rajoutant un peu d’espace entre le titre de l’axe y et l’axe lui-même grâce à la chaîne de caractères finale \n, qui rajoute une ligne vide entre ces deux éléments4.

    -

    Les différents exemples vus dans cette section montrent qu’il va falloir apprendre un minimum de syntaxe graphique pour parvenir à produire des graphiques avec ggplot2. Ce petit investissement permet de savoir très vite produire de très nombreux types de graphiques, assez élégants de surcroît, et très facilement modifiables à l’aide de toutes sortes de paramètres optionnels.

    -
    -

    Aussi élégants que soient vos graphiques, il ne vous dispense évidemment pas de réfléchir à ce que vous êtes en train de visualiser, un graphique très élégant pouvant naturellement être complètement erroné, en particulier si les données de base du graphique ont été mal mesurées… ou endommagées.

    -
    -
    -
    -
    -

    Composition graphique avec ggplot2

    -

    La section précédente a montré comment utiliser la fonction qplot (quick plot). La syntaxe complète de l’extension ggplot2 passe par une autre fonction, ggplot, qui permet de mieux comprendre les différents éléments de sa grammaire graphique. Dans cette section, on va détailler cette syntaxe pour en tirer un graphique plus complexe que les précédents.

    -

    Commençons par créer un treillis de base au graphique :

    -
    p <- ggplot(data = debt, aes(y = growth, x = ratio))
    -

    Aucun graphique ne s’affiche ici : en effet, ce que l’on a stocké, dans l’objet p, n’est pas un graphique complet, mais une base de travail. Cette base définit les coordonnées x et y du graphique dans l’argument aes (aesthetics). Ici, on a choisi de mettre la variable dépendante de Reinhart et Rogoff, growth (le taux de croissance du PIB), sur l’axe y, et la variable indépendante ratio (le ratio Dette publique / PIB) sur l’axe x.

    -

    Rajoutons désormais un objet géométrique, geom_point, qui va projeter, sur le graphique, des points aux coordonnées précédemment définies, et divisons le graphique par un petit multiple, en projetant les points de chaque décennie dans une facette différente du graphique. Ce graphique propose une décomposition temporelle de la relation étudiée par Reinhart et Rogoff :

    -
    p + geom_point() +
    -  facet_grid(. ~ Decade)
    -
    -

    Le paramètre facet_grid, qui utilise aussi la syntaxe équation, permet de créer des facettes plus compliquées que celles créées par le paramètre facet_wrap, même si, dans nos exemples, on aurait pu utiliser aussi bien l’un que l’autre.

    -
    -

    Le graphique ci-dessus présente un problème fréquent : l’axe horizontal du graphique, très important puisque Reinhart et Rogoff évoquent un seuil fatidique, pour la croissance, de 90% du PIB, est illisible. Grâce à l’argument scale_x_continuous, on va pouvoir clarifier cet axe en n’y faisant figurer que certaines valeurs :

    -
    p + geom_point() +
    -  facet_grid(. ~ Decade) +
    -  scale_x_continuous(breaks = seq(0, 200, by = 100))
    -

    Ces réglages nous conviennent : on va donc les sauvegarder dans l’objet p, de manière à continuer de construire notre graphique en incluant ces différents éléments.

    -
    p <- p + geom_point() +
    -  facet_grid(. ~ Decade) +
    -  scale_x_continuous(breaks = seq(0, 200, by = 100))
    -
    -

    Couleurs et échelles

    -

    Abordons désormais un élément-clé de ggplot2 : la manipulation des paramètres esthétiques. Précédemment, on n’a montré que deux de ces paramètres : x et y, les coordonnées du graphique. Mais ces paramètres peuvent aussi influencer la couleur des points de notre graphique comme le montre l’exemple suivant :

    -
    p + aes(color = ratio < 90)
    -

    Qu’a-t-on fait ici ? On a rajouté, au graphique stocké dans p, un paramètre esthétique qui détermine la couleur de ses points en fonction d’une inégalité, ratio < 90, qui est vraie quand le ratio Dette publique / PIB est inférieur au seuil fatidique de Reinhart et Rogoff, et fausse quand ce ratio dépasse ce seuil. Les couleurs des points correspondent aux couleurs par défaut de ggplot2, que l’on peut très facilement modifier avec scale_colour_brewer :

    -
    p + aes(color = ratio < 90) + scale_colour_brewer(palette = "Set1")
    -

    Ici, on a fait appel à la palette de couleur Set1 de l’éventail de couleurs ColorBrewer, qui est automatiquement disponible dans ggplot2, et qui est contenu dans l’extension RColorBrewer. La palette de couleurs que l’on a choisie affiche les points situés au-dessus du seuil fatidique de Reinhart et Rogoff en rouge, les autres en bleu.

    -

    Que peut-on dire, à ce stade, du seuil fatidique de Reinhart et Rogoff ? On peut observer qu’après la Seconde guerre mondiale, de nombreux pays sont déjà endettés au-delà de ce seuil, et dégagent déjà moins de croissance que les autres. Sur la base de cette trajectoire, de nombreux critiques de Reinhart et Rogoff ont fait remarquer que le raisonnement de Reinhart et Rogoff pose en réalité un sérieux problème d’inversion du rapport causal entre endettement et croissance au cours du temps.

    -

    Envisageons une nouvelle modification des paramètres graphiques. La légende du graphique, qui affiche FALSE et TRUE en fonction de l’inégalité ratio < 90, peut être déroutante. Clarifions un peu cette légende en supprimant son titre et en remplaçant les libellés (labels) FALSE et TRUE par leur signification :

    -
    p <- p + aes(color = ratio < 90) +
    -  scale_color_brewer("", palette = "Set1",
    -                     labels = c("ratio > 90", "ratio < 90"))
    -

    Dans le bloc de code ci-dessus, on a stocké l’ensemble de nos modifications dans l’objet p, sans l’afficher ; en effet, on souhaite encore procéder à une dernière modification, en rajoutant une régression locale à travers les points de chaque facette5. Après consultation de la documentation de ggplot2 ici et , on en arrive au code ci-dessous, où p produit le graphique précédent et geom_smooth produit la régression locale :

    -
    p + geom_smooth(method = "loess", se = FALSE,
    -                size = 1, color = "black")
    -
    `geom_smooth()` using formula 'y ~ x'
    -

    Le graphique permet d’évaluer de manière encore un peu plus précise l’argument de Reinhart et Rogoff, et en particulier la nature pas si fatidique du seuil de 90% du ratio “Dette publique / PIB”, qui sans être une bonne nouvelle pour l’économie, ne détermine pas fatidiquement la direction du taux de croissance : si c’était le cas, toutes les courbes du graphique ressembleraient à celles des années 2000. Autrement dit, l’argumentaire de Reinhart et Rogoff laisse clairement à désirer.

    -
    -
    -

    Utilisation des thèmes

    -

    Reprenons notre graphique de départ. On va, pour terminer cette démonstration, en construire une version imprimable en noir et blanc, ce qui signifie qu’au lieu d’utiliser des couleurs pour distinguer les points en-deçà et au-delà du seuil fatidique de Reinhart et Rogoff, on va utiliser une ligne verticale, produite par geom_vline et affichée en pointillés par le paramètre lty (linetype) :

    -
    ggplot(data = debt, aes(y = growth, x = ratio)) + 
    -  geom_point(color = "grey50") +
    -  geom_vline(xintercept = 90, lty = "dotted") +
    -  geom_smooth(method = "loess", size = 1, color = "black", se = FALSE) +
    -  scale_x_continuous(breaks = seq(0, 200, by = 100)) +
    -  facet_grid(. ~ Decade) +
    -  labs(y = "Taux de croissance du produit intérieur brut\n",
    -       x = "\nRatio dette publique / produit intérieur brut (%)",
    -       title = "Données Reinhart et Rogoff corrigées, 1946-2009\n") +
    -  theme_bw() +
    -  theme(strip.background = element_rect(fill = "grey90", color = "grey50"),
    -        strip.text = element_text(size = rel(1)),
    -        panel.grid = element_blank())
    -
    `geom_smooth()` using formula 'y ~ x'
    -

    Ce graphique utilise tous les éléments présentés dans ce chapitre, ainsi qu’une dernière nouveauté : l’utilisation d’un thème graphique différent du thème par défaut de ggplot2. Le thème par défaut, qui s’appelle theme_grey, est ici remplacé par un thème moins chargé, theme_bw (“black and white”), que l’on a modifié en y rajoutant quelques paramètres supplémentaires :

    -
      -
    • le paramètre strip.background détermine la couleur du rectangle contenant les titres des facettes, c’est-à-dire les décennies observées ;
    • -
    • le paramètre strip.text détermine la taille des titres des facettes, qui sont ici affichés dans la même taille de texte que le reste du texte ;
    • -
    • et le paramètre panel.grid supprime ici les guides du graphique grâce à l’élément vide element_blank, de manière à en alléger la lecture.
    • -
    -

    Ces différents réglages peuvent être sauvegardés de manière à créer des thèmes réutilisables, comme ceux de l’extension ggthemes, ce qui permet par exemple de créer un thème entièrement blanc dans lequel on peut ensuite projeter une carte, ou de produire une série de graphiques homogènes d’un point de vue esthétique.

    -
    -
    -

    Export des graphiques

    -

    Les graphiques produits par ggplot2 peuvent être sauvegardés manuellement, comme expliqué dans le chapitre Export des graphiques, ou programmatiquement. Pour sauvegarder le dernier graphique affiché par ggplot2 au format PNG, il suffit d’utiliser la fonction ggsave, qui permet d’en régler la taille (en pouces) et la résolution (en pixels par pouce ; 72 par défaut) :

    -
    ggsave("reinhart-rogoff.png", width = 11, height = 8)
    -

    De la même manière, pour sauvegarder n’importe quel graphique construit avec ggplot2 et stocké dans un objet, il suffit de préciser le nom de cet objet, comme ci-dessous, où l’on sauvegarde le graphique contenu dans l’objet p au format vectoriel PDF, qui préserve la netteté du texte et des autres éléments du graphique à n’importe quelle résolution d’affichage :

    -
    ggsave("reinhart-rogoff.pdf", plot = p,
    -       width = 11, height = 8)
    -
    -
    -
    -

    Pour aller plus loin

    -

    Ce chapitre n’a pu faire la démonstration que d’une infime partie des manières d’utiliser ggplot2. En voici une dernière illustration, qui donne une idée des différents types de graphiques que l’extension permet de produire dès que l’on connaît les principaux éléments de sa syntaxe :

    -
    ggplot(data = debt, aes(x = ratio > 90, y = growth)) +
    -  geom_boxplot() +
    -  scale_x_discrete(labels = c("< 90", "90+")) +
    -  facet_grid(. ~ Decade) +
    -  labs(y = "Taux de croissance du produit intérieur brut\n",
    -       x = "\nRatio dette publique / produit intérieur brut (%)",
    -       title = "Données Reinhart et Rogoff corrigées, 1946-2009\n") +
    -  theme_linedraw() +
    -  theme(strip.text = element_text(size = rel(1)),
    -        panel.grid = element_blank())
    -

    Le code ci-dessus est somme toute très proche du code présenté dans le reste du texte, et en même temps, on a basculé de la visualisation sous forme de série temporelles à une visualisation par boxplots. Ces basculements sont très faciles à envisager dès que l’on maîtrise les principaux éléments de ggplot2, geom, scale et facet, et les paramètres labs et theme pour effectuer les finitions.

    -
    -

    Ressources essentielles

    -

    Pour tout ce qui concerne l’utilisation de ggplot2, l’ouvrage de Wickham, en cours d’actualisation, est la ressource essentielle à consulter. L’ouvrage de Winston Chang, qui contient des dizaines d’exemples, le complète utilement, de même que la documentation en ligne de l’extension. Enfin, le site StackOverflow contient de très nombreuses questions/réponses sur les subtilités de sa syntaxe.

    -

    On trouve aussi très facilement, ailleurs sur Internet, des dizaines de tutorials et autres cheatsheets pour ggplot2, ici ou par exemple.

    -

    A noter également une gallerie de graphiques sous R avec de très nombreux exemples de graphique ggplot2 : http://www.r-graph-gallery.com/portfolio/ggplot2-package/

    -
    -
    -

    Extensions de ggplot2

    -

    Il faut signaler, pour terminer, quelques-unes des différentes extensions inspirées de ggplot2, dont la plupart sont encore en cours de développement, mais qui permettent d’ores et déjà de produire des centaines de types de graphiques différents, à partir d’une syntaxe graphique proche de celle présentée dans ce chapitre :

    - -
    -
    -
    -
    -
      -
    1. Voir l’excellente documentation de l’extension et les autres ressources citées en fin de chapitre.

    2. -
    3. Bien que l’on ait fait le choix de présenter l’extension ggplot2 plutôt que l’extension lattice, celle-ci reste un excellent choix pour la visualisation, notamment, de panels et de séries temporelles. On trouve de très beaux exemples d’utilisation de lattice en ligne, mais un peu moins de documentation, et beaucoup moins d’extensions, que pour ggplot2.

    4. -
    5. Ce produit est mesuré en termes réels, de manière à ce que le calcul de sa croissance ne soit pas affecté par l’inflation.

    6. -
    7. Plus précisément, cela introduit un retour à la ligne dans le titre de l’axe.

    8. -
    9. La régression locale est une variante du calcul de la moyenne glissante (ou moyenne mobile) d’une courbe.

    10. -
    -
    +#llutkisiue .gt_table_body { + border-top-style: solid; + border-top-width: 2px; + border-top-color: #D3D3D3; + border-bottom-style: solid; + border-bottom-width: 2px; + border-bottom-color: #D3D3D3; +} - -
    +#llutkisiue .gt_footnotes { + color: #333333; + background-color: #FFFFFF; + border-bottom-style: none; + border-bottom-width: 2px; + border-bottom-color: #D3D3D3; + border-left-style: none; + border-left-width: 2px; + border-left-color: #D3D3D3; + border-right-style: none; + border-right-width: 2px; + border-right-color: #D3D3D3; +} +#llutkisiue .gt_footnote { + margin: 0px; + font-size: 90%; + padding: 4px; +} +#llutkisiue .gt_sourcenotes { + color: #333333; + background-color: #FFFFFF; + border-bottom-style: none; + border-bottom-width: 2px; + border-bottom-color: #D3D3D3; + border-left-style: none; + border-left-width: 2px; + border-left-color: #D3D3D3; + border-right-style: none; + border-right-width: 2px; + border-right-color: #D3D3D3; +} -

    Graphiques univariés et bivariés avec ggplot2

    +#llutkisiue .gt_sourcenote { + font-size: 90%; + padding: 4px; +} -
    +#llutkisiue .gt_left { + text-align: left; +} -
    -
      -
    • Retour sur les bases de ggplot2
    • -
    • Histogramme
    • -
    • Densité et répartition cumulée
    • -
    • Boîtes à moustaches (et représentations associées)
    • -
    • Diagramme en bâtons
    • -
    • Nuage de points
    • -
    • Matrice de nuages de points et matrice de corrélation
    • -
    • Estimation locale de densité (et représentations associées)
    • -
    • Diagramme de Cleveland
    • -
    • Diagrammes en barres
    • -
    • Comparer plusieurs variables discrètes et/ou continues
    • -
    • Graphe en mosaïque
    • -
    • Données labellisées et ggplot2
    • -
    • Exporter les graphiques obtenus
    • +#llutkisiue .gt_center { + text-align: center; +} + +#llutkisiue .gt_right { + text-align: right; + font-variant-numeric: tabular-nums; +} + +#llutkisiue .gt_font_normal { + font-weight: normal; +} + +#llutkisiue .gt_font_bold { + font-weight: bold; +} + +#llutkisiue .gt_font_italic { + font-style: italic; +} + +#llutkisiue .gt_super { + font-size: 65%; +} + +#llutkisiue .gt_footnote_marks { + font-style: italic; + font-size: 65%; +} + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Characteristic +N = 2,0001 +
      heures.tv2.00 (1.00, 3.00)
      Unknown5
      occup
      Exerce une profession1,049 (52%)
      Chomeur134 (6.7%)
      Etudiant, eleve94 (4.7%)
      Retraite392 (20%)
      Retire des affaires77 (3.9%)
      Au foyer171 (8.6%)
      Autre inactif83 (4.2%)
      qualif
      Ouvrier specialise203 (12%)
      Ouvrier qualifie292 (18%)
      Technicien86 (5.2%)
      Profession intermediaire160 (9.7%)
      Cadre260 (16%)
      Employe594 (36%)
      Autre58 (3.5%)
      Unknown347
      +

      + 1 + + + Statistics presented: median (IQR); n (%) +

      +
      +

      Il est possible de personnaliser les statisques présentées (par exemple moyenne et écart-type à la place de la médiane et l’intervale inter-quartile). De plus, tbl_summary prend en compte les étiquettes de variables si elles ont été définies (voir le chapitre dédié). Il est aussi possible de franciser la présentation des résultats.

      +
      library(labelled)
      +var_label(d$heures.tv) <- "Heures quotidiennes devant la télévision"
      +var_label(d$occup) <- "Activité"
      +theme_gtsummary_language("fr", decimal.mark = ",", big.mark = " ")
      +
      Setting `language: fr` theme
      +
      d %>% tbl_summary(include = c("heures.tv", "occup"), statistic = list(all_continuous() ~ 
      +  "{mean} ({sd})"))
      + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Caractéristique +N = 2 0001 +
      Heures quotidiennes devant la télévision2,25 (1,78)
      Manquant5
      Activité
      Exerce une profession1 049 (52%)
      Chomeur134 (6,7%)
      Etudiant, eleve94 (4,7%)
      Retraite392 (20%)
      Retire des affaires77 (3,9%)
      Au foyer171 (8,6%)
      Autre inactif83 (4,2%)
      +

      + 1 + + + Statistique présentée: moyenne (ET); n (%) +

      +
      +

      Pour une présentation de toutes les possibilités offertes, voir la vignette dédiée sur http://www.danieldsjoberg.com/gtsummary/articles/tbl_summary.html.

      +
    +
    +

    Exporter les graphiques obtenus

    +

    L’export de graphiques est très facile avec RStudio. Lorsque l’on créé un graphique, ce dernier est affiché sous l’onglet Plots dans le quadrant inférieur droit. Il suffit de cliquer sur Export pour avoir accès à trois options différentes :

    +
      +
    • +Save as image pour sauvegarder le graphique en tant que fichier image ;
    • +
    • +Save as PDF pour sauvegarder le graphique dans un fichier PDF ;
    • +
    • +Copy to Clipboard pour copier le graphique dans le presse-papier (et pouvoir ainsi le coller ensuite dans un document Word par exemple).
    +

    Pour une présentation détaillée de l’export de graphiques avec RStudio, ainsi que pour connaître les commandes R permettant d’exporter des graphiques via un script, on pourra se référer au chapitre dédié.

    +
    +
    +
    +
      +
    1. Il existe un grand nombre de couleurs prédéfinies dans R. On peut récupérer leur liste en utilisant la fonction colors en tapant simplement colors() dans la console, ou en consultant le document suivant : http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf.

    2. +
    3. Voir https://fr.wikipedia.org/wiki/Estimation_par_noyau

    4. +
    5. Le code ayant servi à générer cette figure est une copie quasi conforme de celui présenté dans l’excellent document de Jean Lobry sur les graphiques de base avec R, téléchargeable sur le site du Pôle bioinformatique lyonnais : http://pbil.univ-lyon1.fr/R/pdf/lang04.pdf.

    6. +
    7. En l’absence de l’extension questionr, on pourra se rabattre sur la fonction prop.table avec la commande suivante : prop.table(table(d$qualif)).

    8. +
    9. Voir en particulier https://www.data-to-viz.com/caveat/pie.html pour un exemple concret.

    10. +
    11. Pour des raisons liées au fonctionnement interne de la fonction dotchart, on doit transformer le tri à plat en matrice, d’où l’appel à la fonction as.matrix.

    12. +
    -

    Après avoir introduit l’extension ggplot2 au travers d’une étude de cas, nous reprenons ici les graphiques produits dans les chapitres statistique univariée et statistique bivariée et montrons comment les réaliser avec ggplot2.

    -
    -

    Retour sur les bases de ggplot2

    -

    L’extension ggplot2 nécessite que les données du graphique soient sous la forme d’un tableau de données (data.frame) avec une ligne par observation et les différentes valeurs à représenter sous forme de variables du tableau.

    -

    Tous les graphiques avec ggplot2 suivent une même logique. En premier lieu, on appelera la fonction ggplot en lui passant en paramètre le fichier de données.

    -

    ggplot2 nomme esthétiques les différentes propriétés visuelles d’un graphique, à savoir l’axe des x (x), celui des y (y), la couleur des lignes (colour), celle de remplissage des polygones (fill), le type de lignes (linetype), etc. Une représentation graphique consiste donc à représenter chacune de nos variables d’intérêt selon une esthétique donnée. En second lieu, on appelera donc la fonction aes pour indiquer la correspondance entre les variables de notre fichier de données et les esthétiques du graphique.

    -

    A minima, il est nécessaire d’indiquer en troisième lieu une géométrie, autrement dit la manière dont les éléments seront représentés visuellement. À chaque géométrie corresponds une fonction commençant par geom_, par exemple geom_point pour dessiner des points, geom_line pour des lignes, geom_bar pour des barres ou encore geom_area pour des aires. Il existe de nombreuses géométries différentes, chacune prenant en compte certaines esthétiques, certaines étant requises pour cette géométrie et d’autres optionnelles. La liste des esthétiques prises en compte par chaque géométrie en indiquée dans l’aide en ligne de cette dernière.

    -

    Pour un document récapitulant les principales géométries et options de ggplot2, on pourra se référer à la Cheat Sheet officielle disponible à https://www.rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf. Une version en français est disponible à l’adresse http://thinkr.fr/pdf/ggplot2-french-cheatsheet.pdf.

    -

    ggplot2 reposant sur une syntaxe additive, la syntaxe de base d’un graphique sera donc de la forme :

    -
    ggplot(data) + aes(x = Var1, fill = Var2) + geom_bar()
    -

    De manière alternative, on peut également indiquer la correspondance entre variables et esthétiques comme deuxième argument de la fonction ggplot. Les deux syntaxes sont équivalentes.

    -
    ggplot(data, aes(x = Var1, fill = Var2)) + geom_bar()
    -

    Il est ensuite possible de personnaliser de nombreux éléments d’un graphique et notamment :

    +
    +
    + + + +

    Statistique bivariée

    + +
    + +
    -

    Ces différents éléments seront abordés plus en détails dans le chapitre avancé sur ggplot2. Dans la suite de ce chapitre, nous nous focaliserons sur les graphiques et options de base.

    -
    -

    Grammaire des graphiques de ggplot2

    -
    -

    Préparons les données des exemples et chargeons ggplot2 :

    -
    library(questionr)
    -library(ggplot2)
    -data("hdv2003")
    -d <- hdv2003
    -
    -

    Histogramme

    -

    Pour un histogramme, on aura recours à la géométrie geom_histogram. Si l’on a une observation par ligne dans le fichier de données, l’histogramme s’obtient simplement en associant la variable d’intérêt à l’esthétique x. Notez la syntaxe de aes : le nom des variables est indiqué directement, sans guillemets.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  geom_histogram() +
    -  ggtitle("Nombres d'heures passées devant la télévision") +
    -  xlab("Heures") +
    -  ylab("Effectifs")
    -
    -Un histogramme -

    On peut personnaliser la couleur de remplissage des rectangles en indiduant une valeur fixe pour l’esthétique fill dans l’appel de geom_histogram (et non via la fonction aes puisqu’il ne s’agit pas d’une variable du tableau de données). L’esthétique colour permet de spécifier la couleur du trait des rectangles. Enfin, le paramètre binwidth permet de spécifier la largeur des barres.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  geom_histogram(fill ="orange", colour = "black", binwidth = 2) +
    -  ggtitle("Nombres d'heures passées devant la télévision") +
    -  xlab("Heures") +
    -  ylab("Effectifs")
    -
    -Un histogramme en couleur -

    Comme avec la fonction hist, on peut personnaliser les classes avec l’argument breaks.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  geom_histogram(fill ="orange", colour = "black", breaks = c(0, 1, 4, 9, 12)) +
    -  ggtitle("Nombres d'heures passées devant la télévision") +
    -  xlab("Heures") +
    -  ylab("Effectifs")
    -
    -Un histogramme avec classes personnalisées -

    On peut ajouter à l’axe des x des tirets représentant la position des observations à l’aide de geom_rug.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  geom_histogram(fill ="orange", colour = "black", binwidth = 2) +
    -  geom_rug() +
    -  ggtitle("Nombres d'heures passées devant la télévision") +
    -  xlab("Heures") +
    -  ylab("Effectifs")
    -
    -Un histogramme avec geom_rug() -
    + +

    On entend par statistique bivariée l’étude des relations entre deux variables, celles-ci pouvant être quantitatives ou qualitatives. La statistique bivariée fait partie de la statistique descriptive.

    +

    La statistique univariée a quant à elle déjà été abordée dans un chapitre dédié.

    +

    Comme dans la partie précédente, on travaillera sur les jeux de données fournis avec l’extension questionr et tiré de l’enquête Histoire de vie et du recensement 1999 :

    +
    library(questionr)
    +data(hdv2003)
    +d <- hdv2003
    +data(rp99)
    +
    +

    Deux variables quantitatives

    +

    La comparaison de deux variables quantitatives se fait en premier lieu graphiquement, en représentant l’ensemble des couples de valeurs. On peut ainsi représenter les valeurs du nombre d’heures passées devant la télévision selon l’âge.

    +
    plot(d$age, d$heures.tv)
    +
    +Nombre d’heures de télévision selon l’âge +

    Le fait que des points sont superposés ne facilite pas la lecture du graphique. On peut utiliser une représentation avec des points semi-transparents.

    +
    plot(d$age, d$heures.tv, pch = 19, col = rgb(1, 0, 0, 0.1))
    +
    +Nombre d’heures de télévision selon l’âge avec semi-transparence +

    Plus sophistiqué, on peut faire une estimation locale de densité et représenter le résultat sous forme de « carte ». Pour cela on commence par isoler les deux variables, supprimer les observations ayant au moins une valeur manquante à l’aide de la fonction complete.cases, estimer la densité locale à l’aide de la fonction kde2d de l’extension MASS1 et représenter le tout à l’aide d’une des fonctions image, contour ou filled.contour

    +
    library(MASS)
    +tmp <- d[, c("age", "heures.tv")]
    +tmp <- tmp[complete.cases(tmp), ]
    +filled.contour(kde2d(tmp$age, tmp$heures.tv), color = terrain.colors)
    +
    +Représentation de l’estimation de densité locale +

    Une représentation alternative de la densité locale peut être obtenue avec la fonction smoothScatter.

    +
    smoothScatter(d[, c("age", "heures.tv")])
    +
    +Représentation alternative de l’estimation de densité locale +

    Dans tous les cas, il n’y a pas de structure très nette qui semble se dégager. On peut tester ceci mathématiquement en calculant le coefficient de corrélation entre les deux variables à l’aide de la fonction cor :

    +
    cor(d$age, d$heures.tv, use = "complete.obs")
    +
    [1] 0.1776249
    +

    L’option use permet d’éliminer les observations pour lesquelles l’une des deux valeurs est manquante. Le coefficient de corrélation est très faible.

    +

    On va donc s’intéresser plutôt à deux variables présentes dans le jeu de données rp99, la part de diplômés du supérieur et la proportion de cadres dans les communes du Rhône en 1999.

    +

    À nouveau, commençons par représenter les deux variables.

    +
    plot(rp99$dipl.sup, rp99$cadres, ylab = "Part des cadres", xlab = "Part des diplomês du supérieur")
    +
    +Proportion de cadres et proportion de diplômés du supérieur +

    Ça ressemble déjà beaucoup plus à une relation de type linéaire.

    +

    Calculons le coefficient de corrélation :

    +
    cor(rp99$dipl.sup, rp99$cadres)
    +
    [1] 0.8975282
    +

    C’est beaucoup plus proche de 1. On peut alors effectuer une régression linéaire complète en utilisant la fonction lm :

    +
    reg <- lm(cadres ~ dipl.sup, data = rp99)
    +summary(reg)
    +
    
    +Call:
    +lm(formula = cadres ~ dipl.sup, data = rp99)
    +
    +Residuals:
    +    Min      1Q  Median      3Q     Max 
    +-9.6905 -1.9010 -0.1823  1.4913 17.0866 
    +
    +Coefficients:
    +            Estimate Std. Error t value Pr(>|t|)    
    +(Intercept)  1.24088    0.32988   3.762 0.000203 ***
    +dipl.sup     1.38352    0.03931  35.196  < 2e-16 ***
    +---
    +Signif. codes:  
    +0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    +
    +Residual standard error: 3.281 on 299 degrees of freedom
    +Multiple R-squared:  0.8056,    Adjusted R-squared:  0.8049 
    +F-statistic:  1239 on 1 and 299 DF,  p-value: < 2.2e-16
    +

    Le résultat montre que les coefficients sont significativement différents de 0. La part de cadres augmente donc avec celle de diplômés du supérieur (ô surprise). On peut très facilement représenter la droite de régression à l’aide de la fonction abline.

    +
    plot(rp99$dipl.sup, rp99$cadres, ylab = "Part des cadres", xlab = "Part des diplômés du supérieur")
    +abline(reg, col = "red")
    +
    +Régression de la proportion de cadres par celle de diplômés du supérieur +
    +

    On remarquera que le premier argument passé à la fonction lm a une syntaxe un peu particulière. Il s’agit d’une formule, utilisée de manière générale dans les modèles statistiques. On indique la variable d’intérêt à gauche et la variable explicative à droite, les deux étant séparées par un tilde ~ (obtenu sous Windows en appuyant simultanément sur les touches Alt Gr et 2). On remarquera que les noms des colonnes de notre tableau de données ont été écrites sans guillemets.

    +

    Dans le cas présent, nous avons calculé une régression linéaire simple entre deux variables, d’où l’écriture cadres ~ dipl.sup. Si nous avions voulu expliquer une variable z par deux variables x et y, nous aurions écrit z ~ x + y. Il est possible de spécifier des modèles encore plus complexes.

    +

    Pour un aperçu de la syntaxe des formules sous R, voir http://ww2.coastal.edu/kingw/statistics/R-tutorials/formulae.html.

    -
    -

    Densité et répartition cumulée

    -

    Une courbe de densité s’obtient aisément avec la géométrie geom_density.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  geom_density() +
    -  ggtitle("Nombres d'heures passées devant la télévision") +
    -  xlab("Heures") +
    -  ylab("Densité")
    -
    -Courbe de densité -

    On peut personnaliser la fenêtre d’ajustement avec l’argument adjust.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  geom_density(adjust = 1.5) +
    -  ggtitle("Nombres d'heures passées devant la télévision") +
    -  xlab("Heures") +
    -  ylab("Densité")
    -
    -Courbe de densité avec fenêtre d’ajustement personnalisée -

    Pour la fonction de répartition empirique ou empirical cumulative distribution function en anglais, on utilisera la statistique stat_ecdf. Au passage, on notera qu’il est possible d’ajouter une couche à un graphique en appelant soit une géométrie, soit une statistique.

    -
    ggplot(d) +
    -  aes(x = heures.tv) +
    -  stat_ecdf() +
    -  xlab("Heures") +
    -  ylab("Fonction de répartition cumulée")
    -
    -Fonction de répartition empirique cumulée +
    +

    Trois variables ou plus

    +

    Lorsque l’on souhaite représenter trois variables quantitatives simultanément, il est possible de réaliser un nuage de points représentant les deux premières variables sur l’axe horizontal et l’axe vertical et en faisant varier la taille des points selon la troisième variable, en utilisant l’argument cex de la fonction plot.

    +
    plot(rp99$dipl.aucun, rp99$tx.chom, cex = rp99$pop.tot/10^4)
    +
    +Nuage de points avec taille des points proportionnels à une troisième variable +

    Lorsque l’on étudie un plus grand nombres de variables quantitatives, il est peut être utile de réaliser une matrice de nuages de points, qui compare chaque variable deux à deux et qui s’obtient facilement avec la fonction pairs.

    +
    pairs(rp99[, c("proprio", "hlm", "locataire", "maison")])
    +
    +Matrice de nuages de points
    -
    -

    Boîtes à moustaches (et représentations associées)

    -

    La géométrie geom_boxplot nécessite a minima deux esthétiques : x et y. Pour représenter une variable quantitative selon une variable catégorielle, on fera donc :

    -
    ggplot(d) +
    -  aes(x = hard.rock, y = age) +
    -  geom_boxplot() +
    -  xlab("Ecoute du hard rock") +
    -  ylab("Âge") +
    -  ggtitle("Répartition par âge selon que l'on écoute du hard rock ou non")
    -
    -Boîtes à moustache -

    Lorsque l’on souhaite représenter une seule variable quantitative (statistique univariée), on passera alors une constante à l’esthétique x.

    -
    ggplot(d) +
    -  aes(x = "Nombre d'heures passées devant la télévision", y = heures.tv) +
    -  geom_boxplot() +
    -  xlab("") +
    -  ylab("Heures quotidiennes")
    -
    -Boîte à moustache (une seule variable) -

    Une représentation alternative aux boîtes à moustaches ou boxplots sont les graphiques en violon ou violin plots, qui représentent la densité de distribution. Ils s’obtiennent avec la géométrie geom_violin.

    -
    ggplot(d) +
    -  aes(x = hard.rock, y = age) +
    -  geom_violin() +
    -  xlab("Ecoute du hard rock") +
    -  ylab("Âge") +
    -  ggtitle("Répartition par âge selon que l'on écoute du hard rock ou non")
    -
    -Graphiques en violon ou violin plot -

    Les boîtes à moustache peuvent parfois être trompeuses car ne représentant qu’imparfaitement la distribution d’une variable quantitative. Voir par exemple The boxplot and its pitfalls sur https://www.data-to-viz.com.

    +
    +
    +

    Une variable quantitative et une variable qualitative

    +
    +

    Représentations graphiques

    +

    Quand on parle de comparaison entre une variable quantitative et une variable qualitative, on veut en général savoir si la distribution des valeurs de la variable quantitative est la même selon les modalités de la variable qualitative. En clair : est ce que l’âge de ceux qui écoutent du hard rock est différent de l’âge de ceux qui n’en écoutent pas ?

    +

    Là encore, l’idéal est de commencer par une représentation graphique. Les boîtes à moustaches (boxplot en anglais) sont parfaitement adaptées pour cela.

    +

    Si on a construit des sous-populations d’individus écoutant ou non du hard rock, on peut utiliser la fonction boxplot.

    +
    d.hard <- subset(d, hard.rock == "Oui")
    +d.non.hard <- subset(d, hard.rock == "Non")
    +boxplot(d.hard$age, d.non.hard$age)
    +
    +Boxplot de la répartition des âges (sous-populations) +

    Mais construire les sous-populations n’est pas nécessaire. On peut utiliser directement la version de boxplot prenant une formule en argument.

    +
    boxplot(age ~ hard.rock, data = d)
    +
    +Boxplot de la répartition des âges (formule) +

    À première vue, ô surprise, la population écoutant du hard rock a l’air sensiblement plus jeune. Peut-on le tester mathématiquement ?

    +
    +

    Les boîtes à moustache peuvent parfois être trompeuses car ne représentant qu’imparfaitement la distribution d’une variable quantitative2.

    Les graphique de pirates ou pirateplot sont une visualisation alternative qui combinent :

    • un nuage de points représentant les données brutes ;
    • une barre verticale représentant la moyenne ;
    • -
    • un rectangle traduisant l’intervalle de confiance de cette moyenne ;
    • -
    • un violon indiquant la distribution.
    • +
    • un rectangle traduisant une inférence sur cette moyenne ;
    • +
    • une forme en haricot ou violon indiquant la distribution.
    -

    L’extension ggpirate fournit une géométrie geom_pirate pour ggplot2. Cette extension n’étant disponible que sur GitHub, on l’installera avec la commande :

    -
    devtools::install_github("mikabr/ggpirate")
    -
    library(ggpirate)
    -ggplot(d) +
    -  aes(x = hard.rock, y = age, colour = hard.rock, fill = hard.rock)  +
    -  geom_pirate() +
    -  xlab("Ecoute du hard rock") +
    -  ylab("Âge") +
    -  ggtitle("Répartition par âge selon que l'on écoute du hard rock ou non") +
    -  theme_minimal() +
    -  theme(panel.grid.minor = element_blank())
    -
    No summary function supplied, defaulting to `mean_se()`
    -No summary function supplied, defaulting to `mean_se()`
    -
    -Graphiques de pirates ou pirateplot -
    -
    -
    -

    Diagramme en bâtons

    -

    Un diagramme en bâtons s’obtient avec la géométrie geom_bar.

    -
    ggplot(d) +
    -  aes(x = freres.soeurs) +
    -  geom_bar() +
    -  xlab("Nombre de frères et soeurs") +
    -  ylab("Effectifs")
    -
    -Diagramme en bâtons -

    La largeur des barres par défaut est de 0,9. Dès lors, le graphique ressemble plus à un histogramme qu’à un diagramme en bâtons. On peut personnaliser ce paramètre avec l’argument width.

    -
    ggplot(d) +
    -  aes(x = freres.soeurs) +
    -  geom_bar(width = .2) +
    -  xlab("Nombre de frères et soeurs") +
    -  ylab("Effectifs")
    -
    -Diagramme en bâtons avec ajustement de la largeur des barres -
    -
    -
    -

    Nuage de points

    -

    Un nuage de points se représente facilement avec la géométrie geom_point.

    -
    ggplot(d) +
    -  aes(x = age, y = heures.tv) +
    -  geom_point() +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision")
    -
    -Nuage de points -

    On pourra personnaliser la couleur des points avec colour et le niveau de transparence avec alpha.

    -
    ggplot(d) +
    -  aes(x = age, y = heures.tv) +
    -  geom_point(colour = "red", alpha = .2) +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision")
    -
    -Nuage de points semi-transparents -
    -

    Une variante à geom_point est geom_count qui compte le nombre d’observations situées sur le même point et dessine des points dont la taille est proportionnelle à ce nombre d’observations.

    -
    ggplot(d) +
    -  aes(x = age, y = heures.tv) +
    -  geom_count(colour = "red", alpha = .2) +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision") +
    -  labs(size = "effectifs")
    -
    -Nuage de points de taille proportionnelle au nombre d’observations -
    -
    -

    Pour représenter une troisième variable quantitative, on pourra faire varier la taille des points avec l’esthétique size. Pour une variable qualitative, on pourra faire varier la couleur avec colour. Pour faciliter la lecture, on positionnera la légende en bas du graphique, en modifiant l’argument legend.position via la fonction theme.

    -
    data("rp99")
    -rp99$prop.proprio <- 0
    -rp99[rp99$proprio >= mean(rp99$proprio), ]$prop.proprio <- 1
    -rp99$prop.proprio <- factor(rp99$prop.proprio, 0:1, c("non", "oui"))
    -ggplot(rp99) +
    -  aes(x = dipl.aucun, y = tx.chom, size = pop.tot, colour = prop.proprio) +
    -  geom_point(alpha = .5) +
    -  xlab("% sans diplôme") +
    -  ylab("Taux de chômage") +
    -  labs(size = "Population totale", colour = "Proportion de propriétaires supérieure à la moyenne") +
    -  theme(
    -    legend.position = "bottom",
    -    legend.box = "vertical"
    -  )
    -
    -Nuage de points proportionnels -

    geom_smooth permets d’ajouter au graphique une moyenne mobile du nuage de points avec son intervalle de confiance. Notez que l’on ajoute geom_smooth au graphique avant geom_point puisque l’ordre dans lequel sont affichées les différentes couches du graphique dépend de l’ordre dans lequel elles ont été ajoutées. Dans cet exemple, nous souhaitons afficher les points au-dessus de la moyenne mobile.

    -
    ggplot(rp99) +
    -  aes(x = dipl.sup, y = cadres) +
    -  geom_smooth() +
    -  geom_point() +
    -  xlab("% de diplômés du supérieur") +
    -  ylab("% de cadres")
    -
    `geom_smooth()` using method = 'loess' and formula 'y ~ x'
    -
    -Nuage de points avec moyenne mobile -

    Si l’on préfère afficher plutôt la droite de régression, on indiquera à geom_smooth l’agument method = "lm".

    -
    ggplot(rp99) +
    -  aes(x = dipl.sup, y = cadres) +
    -  geom_smooth(method = "lm") +
    -  geom_point() +
    -  xlab("% de diplômés du supérieur") +
    -  ylab("% de cadres")
    -
    `geom_smooth()` using formula 'y ~ x'
    -
    -Nuage de points avec droite de régression linéaire +

    De tels graphiques peuvent être réalisés avec la fonction pirateplot de l’extension yarr. Par défaut, les rectangles représentent un intervalle bayésien crédible ou Bayesian Highest Density Intervals ou HDI de la moyenne. On peut représenter à la place des intervalles de confiance avec inf.method = "ci".

    +
    library(yarrr)
    +pirateplot(age ~ hard.rock, data = d, theme = 1, inf.method = "ci", 
    +  bar.f.o = 0.1, bar.f.col = "grey10")
    +
    +Graphique de pirates
    -
    -

    Matrice de nuages de points et matrice de corrélation

    -

    ggplot2 ne fournit pas de fonction native pour la réalisation d’une matrice de nuages de points. Cependant, il existe plusieurs extensions permettant d’étendre ggplot2. Parmi celles-ci, l’extension GGally propose une fonction ggpairs correspondant exactement à notre besoin.

    -
    library(GGally)
    -ggpairs(rp99[, c("proprio", "hlm", "locataire", "maison")])
    -
    -Matrice de nuages de points -

    ggpairs accepte même des variables catégorielles ainsi que des esthétiques supplémentaires, offrant ainsi plus de possibilités que la fonction pairs1.

    -
    ggpairs(rp99[, c("hlm", "locataire", "maison", "prop.proprio")], aes(colour = prop.proprio))
    -
    -Matrice de nuages de points avec variables catégorielles -

    GGally propose également une fonction ggcorr permettant d’afficher une matrice de corrélation entre variables quantitatives2.

    -
    ggcorr(rp99)
    -
    -Matrice de corrélarion -
    -
    -

    Estimation locale de densité (et représentations associées)

    -

    On peut aisément représenter une estimation locale de densité avec la géométrie geom_density_2d.

    -
    ggplot(d) +
    -  aes(x = age, y = heures.tv) +
    -  geom_density_2d() +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision")
    -
    -Estimation locale de densité (contours) -

    Par défaut, le résultat est représenté sous forme de contours. Pour obtenir une représentation avec des polygones, on appelera la statistique stat_density_2d en forçant la géométrie.

    -
    ggplot(d) +
    -  aes(x = age, y = heures.tv, fill = after_stat(level)) +
    -  stat_density_2d(geom = "polygon") +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision") +
    -  labs(fill = "Densité")
    -
    -Estimation locale de densité (contours) -

    ggplot2 propose également deux géométries, geom_bin2d et geom_hex, permettant d’effectuer à un comptage des effectifs en deux dimensions.

    -
    ggplot(d) +
    -  aes(x = age, y = heures.tv) +
    -  geom_bin2d() +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision") +
    -  labs(fill = "Effectifs")
    -
    -Effectifs en deux dimensions -
    ggplot(d) +
    -  aes(x = age, y = heures.tv) +
    -  geom_hex() +
    -  xlab("Âge") +
    -  ylab("Heures quotidiennes de télévision") +
    -  labs(fill = "Effectifs")
    -
    -Effectifs en deux dimensions (hexagones) -
    -

    Pour reproduire à l’identique l’exemple donné dans le chapitre statistique bivariée, on aura besoin de la méthode tidy de l’extension broom afin de transformer le résultat de kde2d en un tableau de données exploitables par ggplot2. tidy est une méthode générique permettant de transformer un grand nombre d’objets (et en particulier les résultats d’un modèle) en un tableau de données exploitable by ggplot2.

    -
    library(MASS)
    -tmp <- d[, c("age", "heures.tv")]
    -tmp <- tmp[complete.cases(tmp), ]
    -library(broom)
    -tmp <- tidy(kde2d(tmp$age, tmp$heures.tv))
    -str(tmp)
    -
    tibble [625 x 3] (S3: tbl_df/tbl/data.frame)
    - $ x: num [1:625] 18 21.3 24.6 27.9 31.2 ...
    - $ y: num [1:625] 0 0 0 0 0 0 0 0 0 0 ...
    - $ z: num [1:625] 0.00147 0.00227 0.0027 0.00291 0.00308 ...
    -
    ggplot(tmp) + 
    -  aes(x = x, y = y, fill = z) +
    -  geom_raster(interpolate = TRUE) +
    -  scale_fill_gradientn(colors = terrain.colors(14)) +
    -  labs(x = "Âge", y = "Heures de TV", fill = "Densité")
    -

    +
    +

    Tests statistiques

    +

    On peut calculer la moyenne d’âge des deux groupes en utilisant la fonction tapply3 :

    +
    tapply(d$age, d$hard.rock, mean)
    +
         Non      Oui 
    +48.30211 27.57143 
    +

    Pour un test de comparaison de deux moyennes (test t de Student), on pourra se référer au chapitre dédié aux test statistiques de comparaison.

    -
    -

    Diagramme de Cleveland

    -

    Pour un diagramme de Cleveland, on aura recours à la géométrie geom_point. Cependant, il faudra lui préciser que l’on souhaite utiliser la statistique stat_count afin que les effectifs soient calculés pour chaque valeur de x.

    -
    ggplot(d) +
    -  aes(x = clso) +
    -  geom_point(stat = "count") +
    -  xlab("Sentiment d'appartenance à une classe sociale") +
    -  ylab("Effectifs")
    -
    -Diagramme de Cleveland -

    Une alternative, notamment si l’on souhaite un diagramme de Cleveland ordonné, consiste à calculer les effectifs de chaque modalité en amont. ggplot2 ayant besoin d’un tableau de données en entrée, nous calculerons notre tableau de fréquences avec xtabs et le transformerons en tableau de données avec as.data.frame. Pour que les niveaux de qualifaction soient représentés selon leur effectif, il est nécessaire d’ordonner les étiquettes du facteur de manière adéquate. Enfin, nous utiliserons coord_flip pour intervertir l’axe des x et celui des y.

    -
    tab <- as.data.frame(xtabs(~qualif, d))
    -tab$qualif <- factor(tab$qualif, levels = tab$qualif[order(tab$Freq)])
    -str(tab)
    -
    'data.frame':   7 obs. of  2 variables:
    - $ qualif: Factor w/ 7 levels "Autre","Technicien",..: 4 6 2 3 5 7 1
    - $ Freq  : int  203 292 86 160 260 594 58
    -
    ggplot(tab) +
    -  aes(x = qualif, y = Freq) +
    -  geom_point() +
    -  xlab("Niveau de qualification") +
    -  ylab("Effectifs") +
    -  coord_flip()
    -
    -Diagramme de Cleveland ordonné -
    -

    L’extension ggalt propose quelques géométries supplémentaires pour ggplot2. L’une d’elles dite en sucettes (geom_lollipop) propose une représentation graphique au croisement entre un diagramme en bâtons et un diagramme de Cleveland.

    -
    library(ggalt)
    -ggplot(tab) +
    -  aes(x = qualif, y = Freq) +
    -  geom_lollipop() +
    -  xlab("Niveau de qualification") +
    -  ylab("Effectifs") +
    -  coord_flip()
    -

    +
    +

    Deux variables qualitatives

    +

    La comparaison de deux variables qualitatives s’appelle en général un tableau croisé. C’est sans doute l’une des analyses les plus fréquentes lors du traitement d’enquêtes en sciences sociales.

    +
    +

    Tableau croisé

    +

    La manière la plus simple d’obtenir un tableau croisé est d’utiliser la fonction table en lui donnant en paramètres les deux variables à croiser. En l’occurrence nous allons croiser un recodage du niveau de qualification regroupé avec le fait de pratiquer un sport.

    +

    On commence par calculer la variable recodée et par afficher le tri à plat des deux variables :

    +
    d$qualif2 <- as.character(d$qualif)
    +d$qualif2[d$qualif %in% c("Ouvrier specialise", "Ouvrier qualifie")] <- "Ouvrier"
    +d$qualif2[d$qualif %in% c("Profession intermediaire", "Technicien")] <- "Intermediaire"
    +table(d$qualif2)
    +
    
    +        Autre         Cadre       Employe Intermediaire 
    +           58           260           594           246 
    +      Ouvrier 
    +          495 
    +

    Le tableau croisé des deux variables s’obtient de la manière suivante :

    +
    table(d$sport, d$qualif2)
    +
         
    +      Autre Cadre Employe Intermediaire Ouvrier
    +  Non    38   117     401           127     381
    +  Oui    20   143     193           119     114
    +
    +

    Il est tout à fait possible de croiser trois variables ou plus. Par exemple :

    +
    table(d$sport, d$cuisine, d$sexe)
    +
    , ,  = Homme
    +
    +     
    +      Non Oui
    +  Non 401 129
    +  Oui 228 141
    +
    +, ,  = Femme
    +
    +     
    +      Non Oui
    +  Non 358 389
    +  Oui 132 222
    +

    Une alternative à la fonction table est la fonction xtabs. On indiquera à cette dernière le croisement à effectuer à l’aide d’une formule puis l’objet contenant nos données. Comme il ne s’agit pas d’un modèle avec une variable à expliquer, toutes les variables seront indiquées à la droite du symbole ~ et séparées par +.

    +
    xtabs(~sport, d)
    +
    sport
    + Non  Oui 
    +1277  723 
    +
    xtabs(~sport + cuisine, d)
    +
         cuisine
    +sport Non Oui
    +  Non 759 518
    +  Oui 360 363
    +
    xtabs(~sport + cuisine + sexe, d)
    +
    , , sexe = Homme
    +
    +     cuisine
    +sport Non Oui
    +  Non 401 129
    +  Oui 228 141
    +
    +, , sexe = Femme
    +
    +     cuisine
    +sport Non Oui
    +  Non 358 389
    +  Oui 132 222
    +

    On remarquera que le rendu par défaut est en général plus lisible car le nom des variables est indiqué, permettant de savoir quelle variable est affichée en colonnes et laquelle en lignes.

    +

    Si l’on utilise des données labellisées, la fonction xtabs ne prendra pas en compte les étiquettes de valeur.

    +
    data(fecondite)
    +xtabs(~educ + region, femmes)
    +
        region
    +educ   1   2   3   4
    +   0 387 213 282 256
    +   1 179  53  86 142
    +   2 123  57  37 131
    +   3  18   1   2  33
    +

    On pourra alors utiliser la fonction ltabs de l’extension question, qui fonctionne exactement comme xtabs, à ceci près qu’elle prendra en compte les étiquettes de variable et de valeur quand elles existent.

    +
    ltabs(~educ + region, femmes)
    +
                            region: Région de résidence
    +educ: Niveau d'éducation [1] Nord [2] Est [3] Sud [4] Ouest
    +          [0] aucun           387     213     282       256
    +          [1] primaire        179      53      86       142
    +          [2] secondaire      123      57      37       131
    +          [3] supérieur        18       1       2        33
    -
    -

    Diagrammes en barres

    -

    Un diagramme en barres se construit avec la géométrie geom_bar.

    -
    d$qualreg <- as.character(d$qualif)
    -d$qualreg[d$qualif %in% c("Ouvrier specialise", "Ouvrier qualifie")] <- "Ouvrier"
    -d$qualreg[d$qualif %in% c("Profession intermediaire", 
    -  "Technicien")] <- "Intermediaire"
    -ggplot(d) +
    -  aes(x = qualreg, fill = sport) +
    -  geom_bar() +
    -  xlab("CSP") +
    -  ylab("Effectifs") +
    -  labs(fill = "Pratique du sport")
    -
    -Diagramme en barres -

    On peut modifier la position des barres avec le paramètre position.

    -
    ggplot(d) +
    -  aes(x = qualreg, fill = sport) +
    -  geom_bar(position = "dodge") +
    -  xlab("CSP") +
    -  ylab("Effectifs") +
    -  labs(fill = "Pratique du sport")
    -
    -Diagramme en barres côte à côte -

    Pour des barres cumulées, on aura recours à position = "fill". Pour que les étiquettes de l’axe des y soient représentées sous forme de pourcentages (i.e. 25% au lieu de 0.25), on aura recours à la fonction percent de l’extension scales, qui sera transmise à ggplot2 via scale_y_continuous.

    -
    library(scales)
    -ggplot(d) +
    -  aes(x = qualreg, fill = sport) +
    -  geom_bar(position = "fill") +
    -  xlab("CSP") +
    -  ylab("Proportion") +
    -  labs(fill = "Pratique du sport") +
    -  scale_y_continuous(labels = percent)
    -
    -Diagramme en barres cumulées -
    -

    Ajouter des étiquettes sur un diagramme en barre

    -

    Il est facile d’ajouter des étiquettes en ayant recours à geom_text, à condition de lui passer les bon paramètres.

    -

    Tout d’abord, il faudra préciser stat = "count" pour indiquer que l’on souhaite utiliser la statistique stat_count qui est celle utilisé par défaut par geom_bar. C’est elle qui permets de compter le nombre d’observation.

    -

    Il faut ensuite utiliser l’esthétique label pour indiquer ce que l’on souhaite afficher comme étiquettes. after_stat(count) permets d’accéder à la variable calculée par stat_count.

    -

    Enfin, il faut indiquer la position verticale avec position_stack. En précisant un ajustement de vertical de 0.5, on indique que l’on souhaite positionner l’étiquette au milieu.

    -
    ggplot(d) +
    -  aes(x = qualreg, fill = sport) +
    -  geom_bar() +
    -  geom_text(aes(label = after_stat(count)), stat = "count", position = position_stack(.5)) +
    -  xlab("CSP") +
    -  ylab("Effectifs") +
    -  labs(fill = "Pratique du sport")
    -

    -

    Pour un graphique en barre cumulées, on peut utiliser de manière similaire position_fill.

    -
    ggplot(d) +
    -  aes(x = qualreg, fill = sport) +
    -  geom_bar(position = "fill") +
    -  geom_text(aes(label = after_stat(count)), stat = "count", position = position_fill(.5)) +
    -  xlab("CSP") +
    -  ylab("Proportion") +
    -  labs(fill = "Pratique du sport") +
    -  scale_y_continuous(labels = percent)
    -

    -

    On ne peut afficher directement les proportions avec stat_count. Cependant, l’extension GGally fournit une statistique stat_prop dont le dénominateur peut être personnalisé via l’esthétique by (attention : l’esthétique attendue doit impérativement être un facteur).

    -
    library(GGally)
    -d$qualreg <- forcats::fct_explicit_na(factor(d$qualreg))
    -ggplot(d) +
    -  aes(x = qualreg, fill = sport) +
    -  geom_bar(position = "fill") +
    -  geom_text(aes(by = qualreg), stat = "prop", position = position_fill(.5)) +
    -  xlab("CSP") +
    -  ylab("Proportion") +
    -  labs(fill = "Pratique du sport") +
    -  scale_y_continuous(labels = scales::percent)
    -

    -

    On peut aussi comparer facilement deux distributions, ici la proportion de chaque niveau de qualification au sein chaque sexe.

    -
    p <- ggplot(d) +
    -  aes(
    -    x = qualreg, fill = sexe, by = sexe, y = after_stat(prop),
    -    label = scales::percent(after_stat(prop), accuracy = 1), 
    -  ) +
    -  geom_bar(stat = "prop", position = position_dodge(.9)) +
    -  geom_text(
    -    aes(y = after_stat(prop) - .005), stat = "prop", 
    -    position = position_dodge(.9), vjust = "top"
    -  ) +
    -  scale_y_continuous(labels = percent)
    -p
    -

    -

    Il est possible d’alléger le graphique en retirant des éléments superflus.

    -
    p + 
    -  theme_light() +
    -  xlab("") +
    -  ylab("") +
    -  labs(fill = "") +
    -  ggtitle("Distribution de la population selon le niveau de qualification, par sexe") +
    -  theme(
    -    panel.grid = element_blank(),
    -    panel.border = element_blank(),
    -    axis.text.y = element_blank(),
    -    axis.ticks = element_blank(),
    -    legend.position = "top"
    -  ) +
    -  scale_fill_brewer()
    -

    -
    +
    +

    Pourcentages en ligne et en colonne

    +

    On n’a cependant que les effectifs, ce qui rend difficile les comparaisons. L’extension questionr fournit des fonctions permettant de calculer facilement les pourcentages lignes, colonnes et totaux d’un tableau croisé.

    +

    Les pourcentages lignes s’obtiennent avec la fonction lprop4. Celle-ci s’applique au tableau croisé généré par table ou xtabs  :

    +
    tab <- table(d$sport, d$qualif2)
    +lprop(tab)
    +
              
    +           Autre Cadre Employe Intermediaire Ouvrier Total
    +  Non        3.6  11.0  37.7    11.9          35.8   100.0
    +  Oui        3.4  24.3  32.8    20.2          19.4   100.0
    +  Ensemble   3.5  15.7  35.9    14.9          29.9   100.0
    +
    tab <- xtabs(~sport + qualif2, d)
    +lprop(tab)
    +
              qualif2
    +sport      Autre Cadre Employe Intermediaire Ouvrier Total
    +  Non        3.6  11.0  37.7    11.9          35.8   100.0
    +  Oui        3.4  24.3  32.8    20.2          19.4   100.0
    +  Ensemble   3.5  15.7  35.9    14.9          29.9   100.0
    +

    Les pourcentages ligne ne nous intéressent guère ici. On ne cherche pas à voir quelle est la proportion de cadres parmi ceux qui pratiquent un sport, mais plutôt quelle est la proportion de sportifs chez les cadres. Il nous faut donc des pourcentages colonnes, que l’on obtient avec la fonction cprop :

    +
    cprop(tab)
    +
           qualif2
    +sport   Autre Cadre Employe Intermediaire Ouvrier Ensemble
    +  Non    65.5  45.0  67.5    51.6          77.0    64.4   
    +  Oui    34.5  55.0  32.5    48.4          23.0    35.6   
    +  Total 100.0 100.0 100.0   100.0         100.0   100.0   
    +

    Dans l’ensemble, le pourcentage de personnes ayant pratiqué un sport est de 35,6 %. Mais cette proportion varie fortement d’une catégorie professionnelle à l’autre : 55,0 % chez les cadres contre 23,0 % chez les ouvriers.

    +

    Enfin, les pourcentage totaux s’obtiennent avec la fonction prop :

    +
    prop(tab)
    +
           qualif2
    +sport   Autre Cadre Employe Intermediaire Ouvrier Total
    +  Non     2.3   7.1  24.3     7.7          23.0    64.4
    +  Oui     1.2   8.7  11.7     7.2           6.9    35.6
    +  Total   3.5  15.7  35.9    14.9          29.9   100.0
    +

    À noter qu’on peut personnaliser l’affichage de ces tableaux de pourcentages à l’aide de différentes options, dont digits qui règle le nombre de décimales à afficher et percent qui indique si on souhaite ou non rajouter un symbole % dans chaque case du tableau. Cette personnalisation peut se faire directement au moment de la génération du tableau et dans ce cas elle sera utilisée par défaut :

    +
    ctab <- cprop(tab, digits = 2, percent = TRUE)
    +ctab
    +
           qualif2
    +sport   Autre   Cadre   Employe Intermediaire Ouvrier
    +  Non    65.52%  45.00%  67.51%  51.63%        76.97%
    +  Oui    34.48%  55.00%  32.49%  48.37%        23.03%
    +  Total 100.00% 100.00% 100.00% 100.00%       100.00%
    +       qualif2
    +sport   Ensemble
    +  Non    64.37% 
    +  Oui    35.63% 
    +  Total 100.00% 
    +

    ou bien ponctuellement en passant les mêmes arguments à la fonction print :

    +
    ctab <- cprop(tab)
    +print(ctab, percent = TRUE)
    +
           qualif2
    +sport   Autre  Cadre  Employe Intermediaire Ouvrier
    +  Non    65.5%  45.0%  67.5%   51.6%         77.0% 
    +  Oui    34.5%  55.0%  32.5%   48.4%         23.0% 
    +  Total 100.0% 100.0% 100.0%  100.0%        100.0% 
    +       qualif2
    +sport   Ensemble
    +  Non    64.4%  
    +  Oui    35.6%  
    +  Total 100.0%  
    -
    -

    Comparer plusieurs variables discrètes et/ou continues

    -

    L’extension GGally, déjà évoquée, fournit également deux fonctions utiles pour comparer plusieurs variables discrètes (et/ou continues) : ggbivariate et ggtable.

    -

    ggbivariate produit des graphiques en barre pour deux variables discrètes et des boites à moustache lorsque l’on compare une variable discrète avec une variable continue.

    -
    library(GGally)
    -ggbivariate(data = d, outcome = "sport", explanatory = c("sexe", "cuisine", "nivetud", "age"))
    -
    Warning: Removed 112 rows containing non-finite values
    -(stat_prop).
    -

    -

    ggbivariate quant à elle affiche un tableau croisé avec le nombre d’observations pour deux variables discrètes et les médianes avec l’intervalle interquartile pour une variable discrète croisée avec une variable continue.

    -
    ggtable(data = d, columnsX = "sport", columnsY = c("sexe", "cuisine", "nivetud", "age"))
    -

    -

    Il est possible de remplacer les effectifs par les pourcentages en ligne et de colorier les cellules en fonction des résidus du Chi² qui permettent de visualiser les cellules du tableau sur- ou sous-représentées.

    -
    ggtable(
    -  data = d, 
    -  columnsX = "sport", 
    -  columnsY = c("sexe", "cuisine", "nivetud"),
    -  cells = "row.prop",
    -  fill = "stdres",
    -  legend = 1
    -) + labs(fill = "Résidus\ndu Chi²")
    -

    -

    Pour plus de possibilités de personnalisation, voir la fonction ggduo de GGally.

    +
    +

    Représentation graphique

    +

    On peut obtenir une représentation graphique synthétisant l’ensemble des résultats obtenus sous la forme d’un graphique en mosaïque grâce à la fonction mosaicplot.

    +
    mosaicplot(qualif2 ~ sport, data = d, shade = TRUE, main = "Graphe en mosaïque")
    +
    +Exemple de graphe en mosaïque +

    Comment interpréter ce graphique haut en couleurs5 ? Chaque rectangle représente une case de tableau. Sa largeur correspond aux pourcentages en colonnes (il y a beaucoup d’employés et d’ouvriers et très peu d’« Autre »). Sa hauteur correspond aux pourcentages en lignes : la proportion de sportifs chez les cadres est plus élevée que chez les employés. Enfin, la couleur de la case correspond au résidu du test du ² correspondant : les cases en rouge sont sous-représentées, les cases en bleu sur-représentées, et les cases blanches sont statistiquement proches de l’hypothèse d’indépendance.

    +
    +

    Les graphiques en mosaïque permettent notamment de représenter des tableaux croisés à 3 ou 4 dimensions, voire plus.

    +

    L’extension vcd fournie une fonction mosaic fournissant plus d’options pour la création d’un graphique en mosaïque, permettant par exemple d’indiquer quelles variables doivent être affichées horizontalement ou verticalement, ou encore de colorier le contenu des rectangles en fonction d’une variable donnée, …

    +
    library(vcd)
    +
    Loading required package: grid
    +
    mosaic(~sport + cuisine + sexe, d, highlighting = "sexe", main = "Exemple de graphique en mosaïque à 3 dimensions")
    +

    -
    -

    Graphe en mosaïque

    -

    Il n’y a pas, à ce jour, d’implémentation officielle des graphiques en mosaïque sous ggplot2. On pourra néanmoins se référer à l’extension ggmosaic et sa fonction geom_mosaic3.

    -
    library(ggmosaic)
    -levels(d$sport) <- c("Ne fait pas de sport", "Pratique un sport")
    -levels(d$cuisine) <- c("Ne cuisine pas", "Cuisine")
    -levels(d$sexe) <- c("H", "F")
    -
    -ggplot(data = d) +
    -  geom_mosaic(aes(x = product(sport, cuisine), fill = sexe, na.rm = TRUE)) +
    -  xlab("") + ylab("") +
    -  theme(legend.position = "bottom")  
    -
    -Graphique en mosaïque +

    Lorsque l’on s’intéresse principalement aux variations d’une variable selon une autre, par exemple ici à la pratique du sport selon le niveau de qualification, il peut être intéressant de présenter les pourcentages en colonne sous la forme de barres cumulées.

    +
    barplot(cprop(tab, total = FALSE), main = "Pratique du sport selon le niveau de qualification")
    +
    +Exemple de barres cumulées
    -
    -

    Données labellisées et ggplot2

    -

    ggplot2 tient compte du type des variables, attendant à ce que les variables catégorielles soient présentées sous forme de facteurs. Si l’on utilise des données labellisées (voir le chapitre dédié), nos variables catégorielles seront stockées sous la forme d’un vecteur numérique avec des étiquettes. Il sera donc nécessaire de convertir ces variables en facteurs, tout simplement avec la fonction to_factor de l’extension labelled qui pourra utiliser les étiquettes de valeurs comme modalités du facteur.

    -
    -
    -

    Exporter les graphiques obtenus

    -

    Les graphiques produits par ggplot2 peuvent être sauvegardés manuellement, comme expliqué dans le chapitre Export des graphiques, ou programmatiquement. Pour sauvegarder le dernier graphique affiché par ggplot2 au format PNG, il suffit d’utiliser la fonction ggsave, qui permet d’en régler la taille (en pouces) et la résolution (en pixels par pouce ; 72 par défaut) :

    -
    ggsave("mon_graphique.png", width = 11, height = 8)
    -

    De la même manière, pour sauvegarder n’importe quel graphique construit avec ggplot2 et stocké dans un objet, il suffit de préciser le nom de cet objet, comme ci-dessous, où l’on sauvegarde le graphique contenu dans l’objet p au format vectoriel PDF, qui préserve la netteté du texte et des autres éléments du graphique à n’importe quelle résolution d’affichage :

    -
    ggsave("mon_graphique.pdf", plot = p,
    -       width = 11, height = 8)
    +
    +

    Tests statistiques

    +

    Pour un test de comparaison de proportions, un test du Chi² ou encore un test exact de Fisher, on pourra se référer au chapitre dédié aux test statistiques de comparaison.

    -
    -
    -
      -
    1. Pour plus de détails, on pourra lire https://tgmstat.wordpress.com/2013/11/13/plot-matrix-with-the-r-package-ggally/.

    2. -
    3. Pour une présentation détaillée de cette fonction et de ses options, voir https://briatte.github.io/ggcorr/.

    4. -
    5. Pour information, une première implémentation expérimentale avait été proposée avec l’extension productplots, voir https://github.com/hadley/productplots et http://vita.had.co.nz/papers/prodplots.html

    6. -
    +
    +

    Tableaux faciles avec gtsummary +

    +

    La fonction tbl_summary de l’extension gtsummary accepte un argument by permettant de réaliser des croisements selon une variable catégorielle.

    +
    library(gtsummary)
    +
    #Uighur
    +
    
    +Attaching package: 'gtsummary'
    +
    The following object is masked from 'package:MASS':
    +
    +    select
    +
    theme_gtsummary_language("fr", decimal.mark = ",", big.mark = " ")
    +
    Setting `language: fr` theme
    +
    d %>% tbl_summary(include = c("hard.rock", "heures.tv", "sport", 
    +  "qualif2"), by = "hard.rock")
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Caractéristique +Non, N = 1 9861 + +Oui, N = 141 +
    heures.tv2,00 (1,00 – 3,00)2,00 (2,00 – 3,75)
    Manquant50
    sport
    Non1 268 (64%)9 (64%)
    Oui718 (36%)5 (36%)
    qualif2
    Autre57 (3,5%)1 (9,1%)
    Cadre260 (16%)0 (0%)
    Employe587 (36%)7 (64%)
    Intermediaire244 (15%)2 (18%)
    Ouvrier494 (30%)1 (9,1%)
    Manquant3443
    +

    + 1 + + + Statistique présentée: médiane (EI); n (%) +

    +
    +

    Il est possible d’ajouter une colonne total avec add_overall et des tests statistiques avec add_p.

    +
    d %>% tbl_summary(include = c("hard.rock", "heures.tv", "sport", 
    +  "qualif2"), by = "hard.rock") %>% add_overall(last = TRUE) %>% 
    +  add_p()
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Caractéristique +Non, N = 1 9861 + +Oui, N = 141 + +Total, N = 2 000 +p-valeur2 +
    heures.tv2,00 (1,00 – 3,00)2,00 (2,00 – 3,75)2,00 (1,00 – 3,00)0,4
    Manquant505
    sport>0,9
    Non1 268 (64%)9 (64%)1 277 (64%)
    Oui718 (36%)5 (36%)723 (36%)
    qualif20,088
    Autre57 (3,5%)1 (9,1%)58 (3,5%)
    Cadre260 (16%)0 (0%)260 (16%)
    Employe587 (36%)7 (64%)594 (36%)
    Intermediaire244 (15%)2 (18%)246 (15%)
    Ouvrier494 (30%)1 (9,1%)495 (30%)
    Manquant3443347
    +

    + 1 + + + Statistique présentée: médiane (EI); n (%) +

    +

    + 2 + + + Test statistique réalisé: test de Wilcoxon-Mann-Whitney; test du khi-deux d'indépendance; test exact de Fisher +

    +
    +

    Citons également la variante tbl_cross utilisable pour un tableau croisé de seulement deux variables (une en ligne et une en colonne).

    +
    d %>% tbl_cross(sport, hard.rock)
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Characteristic + hard.rock + Total
    NonOui
    sport
    Non1,26891,277
    Oui7185723
    Total1,986142,000
    +

    Pour une présentation de toutes les possibilités offertes, voir la vignette dédiée sur http://www.danieldsjoberg.com/gtsummary/articles/tbl_summary.html.

    +
    +
    +
    +
      +
    1. MASS est installée par défaut avec la version de base de R.

    2. +
    3. Voir par exemple The boxplot and its pitfalls sur https://www.data-to-viz.com.

    4. +
    5. La fonction tapply est présentée plus en détails dans le chapitre Manipulation de données.

    6. +
    7. Il s’agit en fait d’un alias pour les francophones de la fonction rprop.

    8. +
    9. Sauf s’il est imprimé en noir et blanc…

    10. +
    +
    + +
    +
    + + + +

    Introduction à ggplot2, la grammaire des graphiques

    + +
    + + + +
    +

    Ce chapitre est tiré d’une séance de cours de François Briatte et destinée à des étudiants de L2 sans aucune connaissance de R. Cette séance de cours est elle-même inspirée d’un exercice tiré d’un cours de Cosma Shalizi.

    +
    +

    R possède un puissant moteur graphique interne, qui permet de dessiner dans un graphique en y rajoutant des segments, des points, du texte, ou toutes sortes d’autres symboles. Toutefois, pour produire un graphique complet avec les fonctions basiques de R, il faut un peu bricoler : d’abord, ouvrir une fenêtre ; puis rajouter des points ; puis rajouter des lignes ; tout en configurant les couleurs au fur-et-à-mesure ; puis finir par fermer la fenêtre graphique.

    +

    L’extension ggplot21, développée par Hadley Wickham et mettant en œuvre la grammaire graphique théorisée par Leland Wilkinson, devient vite indispensable lorsque l’on souhaite réaliser des graphiques plus complexes2. On renvoit le lecteur intéressé à l’ouvrage de Winston Chang, R Graphics Cookbook, disponible gratuitement dans sa deuxième édition à l’adresse suivante : https://r-graphics.org.

    +

    Ce chapitre, articulé autour d’une étude de cas, présente ggplot2 à partir d’un exemple simple de visualisation de séries temporelles, puis rentre dans le détail de sa syntaxe. Pour une présentation plus formelle, on pourra se référer au chapitre dédié de la section Approfondir.

    +
    +

    Les données de l’exemple

    +

    Il y a quelques années, les chercheurs Carmen M. Reinhart et Kenneth S. Rogoff publiaient un article intitulé Growth in a Time of Debt, dans lequel ils faisaient la démonstration qu’un niveau élevé de dette publique nuisait à la croissance économique. Plus exactement, les deux chercheurs y défendaient l’idée que, lorsque la dette publique dépasse 90 % du produit intérieur brut, ce produit cesse de croître.

    +

    Cette conclusion, proche du discours porté par des institutions comme le Fonds Monétaire International, a alimenté plusieurs argumentaires politiques. Des parlementaires américains s’en ainsi sont servi pour exiger une diminution du budget fédéral, et surtout, la Commission européenne s’est appuyée sur cet argumentaire pour exiger que des pays comme la Grèce, durement frappés par la crise financière globale de 2008, adoptent des plans d’austérité drastiques.

    +

    Or, en tentant de reproduire les résultats de Reinhart et Rogoff, les chercheurs Thomas Herndon, Michael Ash et Robert Pollin y ont trouvé de nombreuses erreurs, ainsi qu’une bête erreur de calcul due à une utilisation peu attentive du logiciel Microsoft Excel. La révélation de ces erreurs donna lieu à un débat très vif entre adversaires et partisans des politiques économiques d’austérité, débat toujours autant d’actualité aujourd’hui.

    +

    Dans ce chapitre, on va se servir des données (corrigées) de Reinhart et Rogoff pour évaluer, de manière indépendante, la cohérence de leur argument sur le rapport entre endettement et croissance économique. Commençons par récupérer ces données au format CSV sur le site du chercheur américain Cosma Shalizi, qui utilise ces données dans l’un de ses exercices de cours :

    +
    # charger l'extension lisant le format CSV
    +library(readr)
    +
    +# emplacement souhaité pour le jeu de données
    +file <- "data/debt.csv"
    +
    +# télécharger le jeu de données s'il n'existe pas
    +if(!file.exists(file))
    +  download.file("http://www.stat.cmu.edu/~cshalizi/uADA/13/hw/11/debt.csv",
    +                file, mode = "wb")
    +
    +# charger les données dans l'objet 'debt'
    +debt <- read_csv(file)
    +
    Warning: Missing column names filled in: 'X1' [1]
    +
    Parsed with column specification:
    +cols(
    +  X1 = col_double(),
    +  Country = col_character(),
    +  Year = col_double(),
    +  growth = col_double(),
    +  ratio = col_double()
    +)
    +
    +

    Le code ci-dessus utilise la fonction read_csv de l’extension readr, dont on a recommandé l’utilisation dans un précédent chapitre. En l’absence de cette extension, on aurait pu utiliser la fonction de base read.csv.

    +
    +
    +

    Nettoyage des données

    +

    Les données de Reinhart et Rogoff contiennent, pour un échantillon de 20 pays occidentaux membres de la zone OCDE, la croissance de leur produit intérieur brut (PIB)3, et le ratio entre leur dette publique et ce produit, exprimé sous la forme d’un pourcentage Dette / PIB. Les données vont du milieu des années 1940 à la fin des années 2000. La première colonne du jeu de données ne contenant que les numéros des lignes, on va la supprimer d’entrée de jeu :

    +
    # inspection du jeu de données
    +str(debt)
    +
    tibble [1,171 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
    + $ X1     : num [1:1171] 147 148 149 150 151 152 153 154 155 156 ...
    + $ Country: chr [1:1171] "Australia" "Australia" "Australia" "Australia" ...
    + $ Year   : num [1:1171] 1946 1947 1948 1949 1950 ...
    + $ growth : num [1:1171] -3.56 2.46 6.44 6.61 6.92 ...
    + $ ratio  : num [1:1171] 190 177 149 126 110 ...
    + - attr(*, "spec")=
    +  .. cols(
    +  ..   X1 = col_double(),
    +  ..   Country = col_character(),
    +  ..   Year = col_double(),
    +  ..   growth = col_double(),
    +  ..   ratio = col_double()
    +  .. )
    +
    # suppression de la première colonne
    +debt <- debt[, -1]
    +

    Il faut aussi noter d’emblée que certaines mesures sont manquantes : pour certains pays, on ne dispose pas d’une mesure fiable du PIB et/ou de la dette publique. En conséquence, le nombre d’observations par pays est différent, et va de 40 observations pays-année pour la Grèce à 64 observations pays-année pour plusieurs pays comme l’Australie ou les États-Unis :

    +
    table(debt$Country)
    +
    
    +  Australia     Austria     Belgium      Canada     Denmark 
    +         64          59          63          64          56 
    +    Finland      France     Germany      Greece     Ireland 
    +         64          54          59          40          63 
    +      Italy       Japan Netherlands New Zealand      Norway 
    +         59          54          53          64          64 
    +   Portugal       Spain      Sweden          UK          US 
    +         58          42          64          63          64 
    +
    +
    +

    Recodage d’une variable

    +

    Dernière manipulation préalable avant l’analyse : on va calculer la décennie de chaque observation, en divisant l’année de mesure par 10, et en multipliant la partie entière de ce résultat par 10. Cette manipulation très simple donne 1940 pour les mesures des années 1940 à 1949, 1950 pour les années 1950-1959, et ainsi de suite.

    +
    debt$Decade <- factor(10 * debt$Year%/%10)
    +

    Voici, pour terminer, les premières lignes du jeu de données sur lequel on travaille :

    +
    head(debt)
    +
    + +
    +
    +
    +
    +

    Visualisation des données

    +

    Chargeons à présent l’extension graphique ggplot2 :

    +
    library(ggplot2)
    +

    Procédons désormais à quelques visualisations très simples de ces données. On dispose de trois variables continues : l’année, le taux de croissance du PIB, et le ratio Dette publique / PIB. Si l’on souhaite visualiser la croissance du PIB au cours du temps, la solution basique dans R s’écrit de la manière suivante :

    +
    with(debt, plot(Year, growth))
    +

    Le code de la visualisation est très simple et se lit : avec l’objet debt, construire le graphique montrant l’année d’observation Year en abcisse et le taux de croissance du PIB growth en ordonnée. Le code est compris de cette manière par R car la fonction plot comprend le premier argument comme étant la variable à représenter sur l’axe horizontal x, et le second comme la variable à représenter sur l’axe vertical y.

    +

    Le même graphique s’écrit de la manière suivante avec l’extension ggplot2 :

    +
    with(debt, qplot(Year, growth))
    +

    Comme on peut le voir, le code est très proche du code utilisé dans R base, la syntaxe signifiant toujours : avec le jeu de données debt, visualiser les variables Year sur l’axe x et growth sur l’axe y. Le résultat est similaire, bien que plusieurs paramètres graphiques aient changé : le fond gris clair, en particulier, est caractéristique du thème graphique par défaut de ggplot2, que l’on apprendra à modifier plus loin.

    +

    Par ailleurs, dans les deux exemples précédents, on a écrit with(debt, ...) pour indiquer que l’on travaillait avec l’objet debt. Lorsque l’on travaille avec l’extension ggplot2, il est toutefois plus commun d’utiliser l’argument data dans l’appel de qplot pour indiquer ce choix :

    +
    qplot(Year, growth, data = debt)
    +
    +

    Visualisation par petits multiples +

    +

    Cherchons désormais à mieux comprendre les variations du taux de croissance du PIB au fil des années.

    +

    Dans les graphiques précédents, on voit clairement que ce taux est très variable dans l’immédiat après-guerre, puis qu’il oscille entre environ -5 % et +15 %, puis qu’il semble chuter dramatiquement à la fin des années 2000, marquées par la crise financière globale. Mais comment visualiser ces variations pour chacun des vingt pays de l’échantillon ?

    +

    On va ici utiliser le principe de la visualisation par petits multiples, c’est-à-dire que l’on va reproduire le même graphique pour chacun des pays, et visualiser l’ensemble de ces graphiques dans une même fenêtre. Concrètement, il va donc s’agir de montrer la croissance annuelle du PIB en faisant apparaître chaque pays dans une facette différente du graphique.

    +

    ggplot2 permet d’effectuer cette opération en rajoutant au graphique précédent, au moyen de l’opérateur +, l’élément facet_wrap(~ Country) au graphique et qui signifie construire le graphique pour chaque valeur différente de la variable Country. On notera que la fonction facet_wrap utilise la syntaxe équation de R. Par défaut, ces facettes sont classées par ordre alphabétique :

    +
    qplot(Year, growth, data = debt) +
    +  facet_wrap(~ Country)
    +

    Voilà qui est beaucoup plus clair ! On aperçoit bien, dans ce graphique, les variations très importantes de croissance du PIB dans un pays comme l’Autriche, ruinée après la Seconde guerre mondiale, ou l’Irlande, très durement frappée par la crise financière globale en 2008 et 2009. On aperçoit aussi où se trouvent les données manquantes : voir le graphique de l’Espagne, par exemple.

    +

    Il faut noter ici un élément essentiel de la grammaire graphique de ggplot2, qui utilise une syntaxe additive, où différents éléments et paramètres graphiques peuvent être combinés en les additionnant, ce qui permet de construire et de modifier des graphiques de manière cumulative, pas à pas. Cette caractéristique permet de tâtonner, et de construire progressivement des graphiques très complets.

    +
    +
    +

    Visualisation en séries temporelles

    +

    Enfin, pour produire le même graphique que ci-dessus en utilisant des lignes plutôt que des points, il suffit d’utiliser l’argument geom = "line", ce qui peut être considéré comme une meilleure manière de visualiser des séries temporelles, mais qui tend aussi à rendre plus difficile la détection des périodes pour lesquelles il manque des données (voir, à nouveau, le graphique pour l’Espagne) :

    +
    qplot(data = debt, y = growth, x = Year, geom = "line") + 
    +  facet_wrap(~ Country)
    +

    Dans ce dernier exemple, on a défini l’axe y avant de définir l’axe x, en écrivant ces arguments de manière explicite ; de même, on a commencé par spécifier l’argument data, et l’on a terminé par l’argument geom. Cet ordre d’écriture permet de conserver une forme de cohérence dans l’écriture des fonctions graphiques.

    +
    +
    +

    Combinaisons d’éléments graphiques

    +

    On n’a pas encore visualisé le ratio Dette publique / PIB, l’autre variable du raisonnement de Reinhart et Rogoff. C’est l’occasion de voir comment rajouter des titres aux axes des graphiques, et d’utiliser les lignes en même temps que des points, toujours grâce à l’argument geom, qui peut prendre plusieurs valeurs (ici, "point" produit les points et "line" produit les lignes) :

    +
    qplot(data = debt, y = ratio, x = Year, geom = c("line", "point")) + 
    +  facet_wrap(~ Country) +
    +  labs(x = NULL,
    +       y = "Ratio dette publique / produit intérieur brut (%)\n")
    +

    Dans ce graphique, on a combiné deux objets géométriques (geom) pour afficher à la fois des points et des lignes. On a ensuite défini les titres des axes, en supprimant celui de l’axe x, et en rajoutant un peu d’espace entre le titre de l’axe y et l’axe lui-même grâce à la chaîne de caractères finale \n, qui rajoute une ligne vide entre ces deux éléments4.

    +

    Les différents exemples vus dans cette section montrent qu’il va falloir apprendre un minimum de syntaxe graphique pour parvenir à produire des graphiques avec ggplot2. Ce petit investissement permet de savoir très vite produire de très nombreux types de graphiques, assez élégants de surcroît, et très facilement modifiables à l’aide de toutes sortes de paramètres optionnels.

    +
    +

    Aussi élégants que soient vos graphiques, il ne vous dispense évidemment pas de réfléchir à ce que vous êtes en train de visualiser, un graphique très élégant pouvant naturellement être complètement erroné, en particulier si les données de base du graphique ont été mal mesurées… ou endommagées.

    +
    +
    +
    +
    +

    Composition graphique avec ggplot2

    +

    La section précédente a montré comment utiliser la fonction qplot (quick plot). La syntaxe complète de l’extension ggplot2 passe par une autre fonction, ggplot, qui permet de mieux comprendre les différents éléments de sa grammaire graphique. Dans cette section, on va détailler cette syntaxe pour en tirer un graphique plus complexe que les précédents.

    +

    Commençons par créer un treillis de base au graphique :

    +
    p <- ggplot(data = debt, aes(y = growth, x = ratio))
    +

    Aucun graphique ne s’affiche ici : en effet, ce que l’on a stocké, dans l’objet p, n’est pas un graphique complet, mais une base de travail. Cette base définit les coordonnées x et y du graphique dans l’argument aes (aesthetics). Ici, on a choisi de mettre la variable dépendante de Reinhart et Rogoff, growth (le taux de croissance du PIB), sur l’axe y, et la variable indépendante ratio (le ratio Dette publique / PIB) sur l’axe x.

    +

    Rajoutons désormais un objet géométrique, geom_point, qui va projeter, sur le graphique, des points aux coordonnées précédemment définies, et divisons le graphique par un petit multiple, en projetant les points de chaque décennie dans une facette différente du graphique. Ce graphique propose une décomposition temporelle de la relation étudiée par Reinhart et Rogoff :

    +
    p + geom_point() +
    +  facet_grid(. ~ Decade)
    +
    +

    Le paramètre facet_grid, qui utilise aussi la syntaxe équation, permet de créer des facettes plus compliquées que celles créées par le paramètre facet_wrap, même si, dans nos exemples, on aurait pu utiliser aussi bien l’un que l’autre.

    +
    +

    Le graphique ci-dessus présente un problème fréquent : l’axe horizontal du graphique, très important puisque Reinhart et Rogoff évoquent un seuil fatidique, pour la croissance, de 90% du PIB, est illisible. Grâce à l’argument scale_x_continuous, on va pouvoir clarifier cet axe en n’y faisant figurer que certaines valeurs :

    +
    p + geom_point() +
    +  facet_grid(. ~ Decade) +
    +  scale_x_continuous(breaks = seq(0, 200, by = 100))
    +

    Ces réglages nous conviennent : on va donc les sauvegarder dans l’objet p, de manière à continuer de construire notre graphique en incluant ces différents éléments.

    +
    p <- p + geom_point() +
    +  facet_grid(. ~ Decade) +
    +  scale_x_continuous(breaks = seq(0, 200, by = 100))
    +
    +

    Couleurs et échelles

    +

    Abordons désormais un élément-clé de ggplot2 : la manipulation des paramètres esthétiques. Précédemment, on n’a montré que deux de ces paramètres : x et y, les coordonnées du graphique. Mais ces paramètres peuvent aussi influencer la couleur des points de notre graphique comme le montre l’exemple suivant :

    +
    p + aes(color = ratio < 90)
    +

    Qu’a-t-on fait ici ? On a rajouté, au graphique stocké dans p, un paramètre esthétique qui détermine la couleur de ses points en fonction d’une inégalité, ratio < 90, qui est vraie quand le ratio Dette publique / PIB est inférieur au seuil fatidique de Reinhart et Rogoff, et fausse quand ce ratio dépasse ce seuil. Les couleurs des points correspondent aux couleurs par défaut de ggplot2, que l’on peut très facilement modifier avec scale_colour_brewer :

    +
    p + aes(color = ratio < 90) + scale_colour_brewer(palette = "Set1")
    +

    Ici, on a fait appel à la palette de couleur Set1 de l’éventail de couleurs ColorBrewer, qui est automatiquement disponible dans ggplot2, et qui est contenu dans l’extension RColorBrewer. La palette de couleurs que l’on a choisie affiche les points situés au-dessus du seuil fatidique de Reinhart et Rogoff en rouge, les autres en bleu.

    +

    Que peut-on dire, à ce stade, du seuil fatidique de Reinhart et Rogoff ? On peut observer qu’après la Seconde guerre mondiale, de nombreux pays sont déjà endettés au-delà de ce seuil, et dégagent déjà moins de croissance que les autres. Sur la base de cette trajectoire, de nombreux critiques de Reinhart et Rogoff ont fait remarquer que le raisonnement de Reinhart et Rogoff pose en réalité un sérieux problème d’inversion du rapport causal entre endettement et croissance au cours du temps.

    +

    Envisageons une nouvelle modification des paramètres graphiques. La légende du graphique, qui affiche FALSE et TRUE en fonction de l’inégalité ratio < 90, peut être déroutante. Clarifions un peu cette légende en supprimant son titre et en remplaçant les libellés (labels) FALSE et TRUE par leur signification :

    +
    p <- p + aes(color = ratio < 90) +
    +  scale_color_brewer("", palette = "Set1",
    +                     labels = c("ratio > 90", "ratio < 90"))
    +

    Dans le bloc de code ci-dessus, on a stocké l’ensemble de nos modifications dans l’objet p, sans l’afficher ; en effet, on souhaite encore procéder à une dernière modification, en rajoutant une régression locale à travers les points de chaque facette5. Après consultation de la documentation de ggplot2 ici et , on en arrive au code ci-dessous, où p produit le graphique précédent et geom_smooth produit la régression locale :

    +
    p + geom_smooth(method = "loess", se = FALSE,
    +                size = 1, color = "black")
    +
    `geom_smooth()` using formula 'y ~ x'
    +

    Le graphique permet d’évaluer de manière encore un peu plus précise l’argument de Reinhart et Rogoff, et en particulier la nature pas si fatidique du seuil de 90% du ratio “Dette publique / PIB”, qui sans être une bonne nouvelle pour l’économie, ne détermine pas fatidiquement la direction du taux de croissance : si c’était le cas, toutes les courbes du graphique ressembleraient à celles des années 2000. Autrement dit, l’argumentaire de Reinhart et Rogoff laisse clairement à désirer.

    +
    +
    +

    Utilisation des thèmes

    +

    Reprenons notre graphique de départ. On va, pour terminer cette démonstration, en construire une version imprimable en noir et blanc, ce qui signifie qu’au lieu d’utiliser des couleurs pour distinguer les points en-deçà et au-delà du seuil fatidique de Reinhart et Rogoff, on va utiliser une ligne verticale, produite par geom_vline et affichée en pointillés par le paramètre lty (linetype) :

    +
    ggplot(data = debt, aes(y = growth, x = ratio)) + 
    +  geom_point(color = "grey50") +
    +  geom_vline(xintercept = 90, lty = "dotted") +
    +  geom_smooth(method = "loess", size = 1, color = "black", se = FALSE) +
    +  scale_x_continuous(breaks = seq(0, 200, by = 100)) +
    +  facet_grid(. ~ Decade) +
    +  labs(y = "Taux de croissance du produit intérieur brut\n",
    +       x = "\nRatio dette publique / produit intérieur brut (%)",
    +       title = "Données Reinhart et Rogoff corrigées, 1946-2009\n") +
    +  theme_bw() +
    +  theme(strip.background = element_rect(fill = "grey90", color = "grey50"),
    +        strip.text = element_text(size = rel(1)),
    +        panel.grid = element_blank())
    +
    `geom_smooth()` using formula 'y ~ x'
    +

    Ce graphique utilise tous les éléments présentés dans ce chapitre, ainsi qu’une dernière nouveauté : l’utilisation d’un thème graphique différent du thème par défaut de ggplot2. Le thème par défaut, qui s’appelle theme_grey, est ici remplacé par un thème moins chargé, theme_bw (“black and white”), que l’on a modifié en y rajoutant quelques paramètres supplémentaires :

    +
      +
    • le paramètre strip.background détermine la couleur du rectangle contenant les titres des facettes, c’est-à-dire les décennies observées ;
    • +
    • le paramètre strip.text détermine la taille des titres des facettes, qui sont ici affichés dans la même taille de texte que le reste du texte ;
    • +
    • et le paramètre panel.grid supprime ici les guides du graphique grâce à l’élément vide element_blank, de manière à en alléger la lecture.
    • +
    +

    Ces différents réglages peuvent être sauvegardés de manière à créer des thèmes réutilisables, comme ceux de l’extension ggthemes, ce qui permet par exemple de créer un thème entièrement blanc dans lequel on peut ensuite projeter une carte, ou de produire une série de graphiques homogènes d’un point de vue esthétique.

    +
    +
    +

    Export des graphiques

    +

    Les graphiques produits par ggplot2 peuvent être sauvegardés manuellement, comme expliqué dans le chapitre Export des graphiques, ou programmatiquement. Pour sauvegarder le dernier graphique affiché par ggplot2 au format PNG, il suffit d’utiliser la fonction ggsave, qui permet d’en régler la taille (en pouces) et la résolution (en pixels par pouce ; 72 par défaut) :

    +
    ggsave("reinhart-rogoff.png", width = 11, height = 8)
    +

    De la même manière, pour sauvegarder n’importe quel graphique construit avec ggplot2 et stocké dans un objet, il suffit de préciser le nom de cet objet, comme ci-dessous, où l’on sauvegarde le graphique contenu dans l’objet p au format vectoriel PDF, qui préserve la netteté du texte et des autres éléments du graphique à n’importe quelle résolution d’affichage :

    +
    ggsave("reinhart-rogoff.pdf", plot = p,
    +       width = 11, height = 8)
    +
    +
    +
    +

    Pour aller plus loin

    +

    Ce chapitre n’a pu faire la démonstration que d’une infime partie des manières d’utiliser ggplot2. En voici une dernière illustration, qui donne une idée des différents types de graphiques que l’extension permet de produire dès que l’on connaît les principaux éléments de sa syntaxe :

    +
    ggplot(data = debt, aes(x = ratio > 90, y = growth)) +
    +  geom_boxplot() +
    +  scale_x_discrete(labels = c("< 90", "90+")) +
    +  facet_grid(. ~ Decade) +
    +  labs(y = "Taux de croissance du produit intérieur brut\n",
    +       x = "\nRatio dette publique / produit intérieur brut (%)",
    +       title = "Données Reinhart et Rogoff corrigées, 1946-2009\n") +
    +  theme_linedraw() +
    +  theme(strip.text = element_text(size = rel(1)),
    +        panel.grid = element_blank())
    +

    Le code ci-dessus est somme toute très proche du code présenté dans le reste du texte, et en même temps, on a basculé de la visualisation sous forme de série temporelles à une visualisation par boxplots. Ces basculements sont très faciles à envisager dès que l’on maîtrise les principaux éléments de ggplot2, geom, scale et facet, et les paramètres labs et theme pour effectuer les finitions.

    +
    +

    Ressources essentielles

    +

    Pour tout ce qui concerne l’utilisation de ggplot2, l’ouvrage de Wickham, en cours d’actualisation, est la ressource essentielle à consulter. L’ouvrage de Winston Chang, qui contient des dizaines d’exemples, le complète utilement, de même que la documentation en ligne de l’extension. Enfin, le site StackOverflow contient de très nombreuses questions/réponses sur les subtilités de sa syntaxe.

    +

    On trouve aussi très facilement, ailleurs sur Internet, des dizaines de tutorials et autres cheatsheets pour ggplot2, ici ou par exemple.

    +

    A noter également une gallerie de graphiques sous R avec de très nombreux exemples de graphique ggplot2 : http://www.r-graph-gallery.com/portfolio/ggplot2-package/

    +
    +
    +

    Extensions de ggplot2

    +

    Il faut signaler, pour terminer, quelques-unes des différentes extensions inspirées de ggplot2, dont la plupart sont encore en cours de développement, mais qui permettent d’ores et déjà de produire des centaines de types de graphiques différents, à partir d’une syntaxe graphique proche de celle présentée dans ce chapitre :

    + +
    +
    +
    +
    +
      +
    1. Voir l’excellente documentation de l’extension et les autres ressources citées en fin de chapitre.

    2. +
    3. Bien que l’on ait fait le choix de présenter l’extension ggplot2 plutôt que l’extension lattice, celle-ci reste un excellent choix pour la visualisation, notamment, de panels et de séries temporelles. On trouve de très beaux exemples d’utilisation de lattice en ligne, mais un peu moins de documentation, et beaucoup moins d’extensions, que pour ggplot2.

    4. +
    5. Ce produit est mesuré en termes réels, de manière à ce que le calcul de sa croissance ne soit pas affecté par l’inflation.

    6. +
    7. Plus précisément, cela introduit un retour à la ligne dans le titre de l’axe.

    8. +
    9. La régression locale est une variante du calcul de la moyenne glissante (ou moyenne mobile) d’une courbe.

    10. +
    +
    + +
    +
    + + + +

    Graphiques univariés et bivariés avec ggplot2

    + +
    + + + +

    Après avoir introduit l’extension ggplot2 au travers d’une étude de cas, nous reprenons ici les graphiques produits dans les chapitres statistique univariée et statistique bivariée et montrons comment les réaliser avec ggplot2.

    +
    +

    Retour sur les bases de ggplot2

    +

    L’extension ggplot2 nécessite que les données du graphique soient sous la forme d’un tableau de données (data.frame) avec une ligne par observation et les différentes valeurs à représenter sous forme de variables du tableau.

    +

    Tous les graphiques avec ggplot2 suivent une même logique. En premier lieu, on appelera la fonction ggplot en lui passant en paramètre le fichier de données.

    +

    ggplot2 nomme esthétiques les différentes propriétés visuelles d’un graphique, à savoir l’axe des x (x), celui des y (y), la couleur des lignes (colour), celle de remplissage des polygones (fill), le type de lignes (linetype), etc. Une représentation graphique consiste donc à représenter chacune de nos variables d’intérêt selon une esthétique donnée. En second lieu, on appelera donc la fonction aes pour indiquer la correspondance entre les variables de notre fichier de données et les esthétiques du graphique.

    +

    A minima, il est nécessaire d’indiquer en troisième lieu une géométrie, autrement dit la manière dont les éléments seront représentés visuellement. À chaque géométrie corresponds une fonction commençant par geom_, par exemple geom_point pour dessiner des points, geom_line pour des lignes, geom_bar pour des barres ou encore geom_area pour des aires. Il existe de nombreuses géométries différentes, chacune prenant en compte certaines esthétiques, certaines étant requises pour cette géométrie et d’autres optionnelles. La liste des esthétiques prises en compte par chaque géométrie en indiquée dans l’aide en ligne de cette dernière.

    +

    Pour un document récapitulant les principales géométries et options de ggplot2, on pourra se référer à la Cheat Sheet officielle disponible à https://www.rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf. Une version en français est disponible à l’adresse http://thinkr.fr/pdf/ggplot2-french-cheatsheet.pdf.

    +

    ggplot2 reposant sur une syntaxe additive, la syntaxe de base d’un graphique sera donc de la forme :

    +
    ggplot(data) + aes(x = Var1, fill = Var2) + geom_bar()
    +

    De manière alternative, on peut également indiquer la correspondance entre variables et esthétiques comme deuxième argument de la fonction ggplot. Les deux syntaxes sont équivalentes.

    +
    ggplot(data, aes(x = Var1, fill = Var2)) + geom_bar()
    +

    Il est ensuite possible de personnaliser de nombreux éléments d’un graphique et notamment :

    +
      +
    • les étiquettes ou labs (titre, axes, légendes) avec ggtitle, xlab, ylab ou encore la fonction plus générique labs ;
    • +
    • les échelles (scales) des différentes esthétiques avec les fonctions commençant par scale_ ;
    • +
    • les facettes (facets) avec les fonctions commençant par facet_ ;
    • +
    • le système de coordonnées avec les fonctions commençant par coord_ ;
    • +
    • la légende (guides) avec les fonctions commençant par guide_ ;
    • +
    • le thème du graphiques (mise en forme des différents éléments) avec theme.
    • +
    +

    Ces différents éléments seront abordés plus en détails dans le chapitre avancé sur ggplot2. Dans la suite de ce chapitre, nous nous focaliserons sur les graphiques et options de base.

    +
    +

    Grammaire des graphiques de ggplot2

    +
    +

    Préparons les données des exemples et chargeons ggplot2 :

    +
    library(questionr)
    +library(ggplot2)
    +data("hdv2003")
    +d <- hdv2003
    +
    +
    +

    Histogramme

    +

    Pour un histogramme, on aura recours à la géométrie geom_histogram. Si l’on a une observation par ligne dans le fichier de données, l’histogramme s’obtient simplement en associant la variable d’intérêt à l’esthétique x. Notez la syntaxe de aes : le nom des variables est indiqué directement, sans guillemets.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  geom_histogram() +
    +  ggtitle("Nombres d'heures passées devant la télévision") +
    +  xlab("Heures") +
    +  ylab("Effectifs")
    +
    +Un histogramme +

    On peut personnaliser la couleur de remplissage des rectangles en indiduant une valeur fixe pour l’esthétique fill dans l’appel de geom_histogram (et non via la fonction aes puisqu’il ne s’agit pas d’une variable du tableau de données). L’esthétique colour permet de spécifier la couleur du trait des rectangles. Enfin, le paramètre binwidth permet de spécifier la largeur des barres.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  geom_histogram(fill ="orange", colour = "black", binwidth = 2) +
    +  ggtitle("Nombres d'heures passées devant la télévision") +
    +  xlab("Heures") +
    +  ylab("Effectifs")
    +
    +Un histogramme en couleur +

    Comme avec la fonction hist, on peut personnaliser les classes avec l’argument breaks.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  geom_histogram(fill ="orange", colour = "black", breaks = c(0, 1, 4, 9, 12)) +
    +  ggtitle("Nombres d'heures passées devant la télévision") +
    +  xlab("Heures") +
    +  ylab("Effectifs")
    +
    +Un histogramme avec classes personnalisées +

    On peut ajouter à l’axe des x des tirets représentant la position des observations à l’aide de geom_rug.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  geom_histogram(fill ="orange", colour = "black", binwidth = 2) +
    +  geom_rug() +
    +  ggtitle("Nombres d'heures passées devant la télévision") +
    +  xlab("Heures") +
    +  ylab("Effectifs")
    +
    +Un histogramme avec geom_rug() +
    +
    +
    +

    Densité et répartition cumulée

    +

    Une courbe de densité s’obtient aisément avec la géométrie geom_density.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  geom_density() +
    +  ggtitle("Nombres d'heures passées devant la télévision") +
    +  xlab("Heures") +
    +  ylab("Densité")
    +
    +Courbe de densité +

    On peut personnaliser la fenêtre d’ajustement avec l’argument adjust.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  geom_density(adjust = 1.5) +
    +  ggtitle("Nombres d'heures passées devant la télévision") +
    +  xlab("Heures") +
    +  ylab("Densité")
    +
    +Courbe de densité avec fenêtre d’ajustement personnalisée +

    Pour la fonction de répartition empirique ou empirical cumulative distribution function en anglais, on utilisera la statistique stat_ecdf. Au passage, on notera qu’il est possible d’ajouter une couche à un graphique en appelant soit une géométrie, soit une statistique.

    +
    ggplot(d) +
    +  aes(x = heures.tv) +
    +  stat_ecdf() +
    +  xlab("Heures") +
    +  ylab("Fonction de répartition cumulée")
    +
    +Fonction de répartition empirique cumulée +
    +
    +
    +

    Boîtes à moustaches (et représentations associées)

    +

    La géométrie geom_boxplot nécessite a minima deux esthétiques : x et y. Pour représenter une variable quantitative selon une variable catégorielle, on fera donc :

    +
    ggplot(d) +
    +  aes(x = hard.rock, y = age) +
    +  geom_boxplot() +
    +  xlab("Ecoute du hard rock") +
    +  ylab("Âge") +
    +  ggtitle("Répartition par âge selon que l'on écoute du hard rock ou non")
    +
    +Boîtes à moustache +

    Lorsque l’on souhaite représenter une seule variable quantitative (statistique univariée), on passera alors une constante à l’esthétique x.

    +
    ggplot(d) +
    +  aes(x = "Nombre d'heures passées devant la télévision", y = heures.tv) +
    +  geom_boxplot() +
    +  xlab("") +
    +  ylab("Heures quotidiennes")
    +
    +Boîte à moustache (une seule variable) +

    Une représentation alternative aux boîtes à moustaches ou boxplots sont les graphiques en violon ou violin plots, qui représentent la densité de distribution. Ils s’obtiennent avec la géométrie geom_violin.

    +
    ggplot(d) +
    +  aes(x = hard.rock, y = age) +
    +  geom_violin() +
    +  xlab("Ecoute du hard rock") +
    +  ylab("Âge") +
    +  ggtitle("Répartition par âge selon que l'on écoute du hard rock ou non")
    +
    +Graphiques en violon ou violin plot +

    Les boîtes à moustache peuvent parfois être trompeuses car ne représentant qu’imparfaitement la distribution d’une variable quantitative. Voir par exemple The boxplot and its pitfalls sur https://www.data-to-viz.com.

    +

    Les graphique de pirates ou pirateplot sont une visualisation alternative qui combinent :

    +
      +
    • un nuage de points représentant les données brutes ;
    • +
    • une barre verticale représentant la moyenne ;
    • +
    • un rectangle traduisant l’intervalle de confiance de cette moyenne ;
    • +
    • un violon indiquant la distribution.
    • +
    +

    L’extension ggpirate fournit une géométrie geom_pirate pour ggplot2. Cette extension n’étant disponible que sur GitHub, on l’installera avec la commande :

    +
    devtools::install_github("mikabr/ggpirate")
    +
    library(ggpirate)
    +ggplot(d) +
    +  aes(x = hard.rock, y = age, colour = hard.rock, fill = hard.rock)  +
    +  geom_pirate() +
    +  xlab("Ecoute du hard rock") +
    +  ylab("Âge") +
    +  ggtitle("Répartition par âge selon que l'on écoute du hard rock ou non") +
    +  theme_minimal() +
    +  theme(panel.grid.minor = element_blank())
    +
    No summary function supplied, defaulting to `mean_se()`
    +No summary function supplied, defaulting to `mean_se()`
    +
    +Graphiques de pirates ou pirateplot +
    +
    +
    +

    Diagramme en bâtons

    +

    Un diagramme en bâtons s’obtient avec la géométrie geom_bar.

    +
    ggplot(d) +
    +  aes(x = freres.soeurs) +
    +  geom_bar() +
    +  xlab("Nombre de frères et soeurs") +
    +  ylab("Effectifs")
    +
    +Diagramme en bâtons +

    La largeur des barres par défaut est de 0,9. Dès lors, le graphique ressemble plus à un histogramme qu’à un diagramme en bâtons. On peut personnaliser ce paramètre avec l’argument width.

    +
    ggplot(d) +
    +  aes(x = freres.soeurs) +
    +  geom_bar(width = .2) +
    +  xlab("Nombre de frères et soeurs") +
    +  ylab("Effectifs")
    +
    +Diagramme en bâtons avec ajustement de la largeur des barres +
    +
    +
    +

    Nuage de points

    +

    Un nuage de points se représente facilement avec la géométrie geom_point.

    +
    ggplot(d) +
    +  aes(x = age, y = heures.tv) +
    +  geom_point() +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision")
    +
    +Nuage de points +

    On pourra personnaliser la couleur des points avec colour et le niveau de transparence avec alpha.

    +
    ggplot(d) +
    +  aes(x = age, y = heures.tv) +
    +  geom_point(colour = "red", alpha = .2) +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision")
    +
    +Nuage de points semi-transparents +
    +

    Une variante à geom_point est geom_count qui compte le nombre d’observations situées sur le même point et dessine des points dont la taille est proportionnelle à ce nombre d’observations.

    +
    ggplot(d) +
    +  aes(x = age, y = heures.tv) +
    +  geom_count(colour = "red", alpha = .2) +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision") +
    +  labs(size = "effectifs")
    +
    +Nuage de points de taille proportionnelle au nombre d’observations +
    +
    +

    Pour représenter une troisième variable quantitative, on pourra faire varier la taille des points avec l’esthétique size. Pour une variable qualitative, on pourra faire varier la couleur avec colour. Pour faciliter la lecture, on positionnera la légende en bas du graphique, en modifiant l’argument legend.position via la fonction theme.

    +
    data("rp99")
    +rp99$prop.proprio <- 0
    +rp99[rp99$proprio >= mean(rp99$proprio), ]$prop.proprio <- 1
    +rp99$prop.proprio <- factor(rp99$prop.proprio, 0:1, c("non", "oui"))
    +ggplot(rp99) +
    +  aes(x = dipl.aucun, y = tx.chom, size = pop.tot, colour = prop.proprio) +
    +  geom_point(alpha = .5) +
    +  xlab("% sans diplôme") +
    +  ylab("Taux de chômage") +
    +  labs(size = "Population totale", colour = "Proportion de propriétaires supérieure à la moyenne") +
    +  theme(
    +    legend.position = "bottom",
    +    legend.box = "vertical"
    +  )
    +
    +Nuage de points proportionnels +

    geom_smooth permets d’ajouter au graphique une moyenne mobile du nuage de points avec son intervalle de confiance. Notez que l’on ajoute geom_smooth au graphique avant geom_point puisque l’ordre dans lequel sont affichées les différentes couches du graphique dépend de l’ordre dans lequel elles ont été ajoutées. Dans cet exemple, nous souhaitons afficher les points au-dessus de la moyenne mobile.

    +
    ggplot(rp99) +
    +  aes(x = dipl.sup, y = cadres) +
    +  geom_smooth() +
    +  geom_point() +
    +  xlab("% de diplômés du supérieur") +
    +  ylab("% de cadres")
    +
    `geom_smooth()` using method = 'loess' and formula 'y ~ x'
    +
    +Nuage de points avec moyenne mobile +

    Si l’on préfère afficher plutôt la droite de régression, on indiquera à geom_smooth l’agument method = "lm".

    +
    ggplot(rp99) +
    +  aes(x = dipl.sup, y = cadres) +
    +  geom_smooth(method = "lm") +
    +  geom_point() +
    +  xlab("% de diplômés du supérieur") +
    +  ylab("% de cadres")
    +
    `geom_smooth()` using formula 'y ~ x'
    +
    +Nuage de points avec droite de régression linéaire +
    +
    +
    +

    Matrice de nuages de points et matrice de corrélation

    +

    ggplot2 ne fournit pas de fonction native pour la réalisation d’une matrice de nuages de points. Cependant, il existe plusieurs extensions permettant d’étendre ggplot2. Parmi celles-ci, l’extension GGally propose une fonction ggpairs correspondant exactement à notre besoin.

    +
    library(GGally)
    +ggpairs(rp99[, c("proprio", "hlm", "locataire", "maison")])
    +
    +Matrice de nuages de points +

    ggpairs accepte même des variables catégorielles ainsi que des esthétiques supplémentaires, offrant ainsi plus de possibilités que la fonction pairs1.

    +
    ggpairs(rp99[, c("hlm", "locataire", "maison", "prop.proprio")], aes(colour = prop.proprio))
    +
    +Matrice de nuages de points avec variables catégorielles +

    GGally propose également une fonction ggcorr permettant d’afficher une matrice de corrélation entre variables quantitatives2.

    +
    ggcorr(rp99)
    +
    +Matrice de corrélarion +
    +
    +
    +

    Estimation locale de densité (et représentations associées)

    +

    On peut aisément représenter une estimation locale de densité avec la géométrie geom_density_2d.

    +
    ggplot(d) +
    +  aes(x = age, y = heures.tv) +
    +  geom_density_2d() +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision")
    +
    +Estimation locale de densité (contours) +

    Par défaut, le résultat est représenté sous forme de contours. Pour obtenir une représentation avec des polygones, on appelera la statistique stat_density_2d en forçant la géométrie.

    +
    ggplot(d) +
    +  aes(x = age, y = heures.tv, fill = after_stat(level)) +
    +  stat_density_2d(geom = "polygon") +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision") +
    +  labs(fill = "Densité")
    +
    +Estimation locale de densité (contours) +

    ggplot2 propose également deux géométries, geom_bin2d et geom_hex, permettant d’effectuer à un comptage des effectifs en deux dimensions.

    +
    ggplot(d) +
    +  aes(x = age, y = heures.tv) +
    +  geom_bin2d() +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision") +
    +  labs(fill = "Effectifs")
    +
    +Effectifs en deux dimensions +
    ggplot(d) +
    +  aes(x = age, y = heures.tv) +
    +  geom_hex() +
    +  xlab("Âge") +
    +  ylab("Heures quotidiennes de télévision") +
    +  labs(fill = "Effectifs")
    +
    +Effectifs en deux dimensions (hexagones) +
    +

    Pour reproduire à l’identique l’exemple donné dans le chapitre statistique bivariée, on aura besoin de la méthode tidy de l’extension broom afin de transformer le résultat de kde2d en un tableau de données exploitables par ggplot2. tidy est une méthode générique permettant de transformer un grand nombre d’objets (et en particulier les résultats d’un modèle) en un tableau de données exploitable by ggplot2.

    +
    library(MASS)
    +tmp <- d[, c("age", "heures.tv")]
    +tmp <- tmp[complete.cases(tmp), ]
    +library(broom)
    +tmp <- tidy(kde2d(tmp$age, tmp$heures.tv))
    +str(tmp)
    +
    tibble [625 x 3] (S3: tbl_df/tbl/data.frame)
    + $ x: num [1:625] 18 21.3 24.6 27.9 31.2 ...
    + $ y: num [1:625] 0 0 0 0 0 0 0 0 0 0 ...
    + $ z: num [1:625] 0.00147 0.00227 0.0027 0.00291 0.00308 ...
    +
    ggplot(tmp) + 
    +  aes(x = x, y = y, fill = z) +
    +  geom_raster(interpolate = TRUE) +
    +  scale_fill_gradientn(colors = terrain.colors(14)) +
    +  labs(x = "Âge", y = "Heures de TV", fill = "Densité")
    +

    +
    +
    +
    +

    Diagramme de Cleveland

    +

    Pour un diagramme de Cleveland, on aura recours à la géométrie geom_point. Cependant, il faudra lui préciser que l’on souhaite utiliser la statistique stat_count afin que les effectifs soient calculés pour chaque valeur de x.

    +
    ggplot(d) +
    +  aes(x = clso) +
    +  geom_point(stat = "count") +
    +  xlab("Sentiment d'appartenance à une classe sociale") +
    +  ylab("Effectifs")
    +
    +Diagramme de Cleveland +

    Une alternative, notamment si l’on souhaite un diagramme de Cleveland ordonné, consiste à calculer les effectifs de chaque modalité en amont. ggplot2 ayant besoin d’un tableau de données en entrée, nous calculerons notre tableau de fréquences avec xtabs et le transformerons en tableau de données avec as.data.frame. Pour que les niveaux de qualifaction soient représentés selon leur effectif, il est nécessaire d’ordonner les étiquettes du facteur de manière adéquate. Enfin, nous utiliserons coord_flip pour intervertir l’axe des x et celui des y.

    +
    tab <- as.data.frame(xtabs(~qualif, d))
    +tab$qualif <- factor(tab$qualif, levels = tab$qualif[order(tab$Freq)])
    +str(tab)
    +
    'data.frame':   7 obs. of  2 variables:
    + $ qualif: Factor w/ 7 levels "Autre","Technicien",..: 4 6 2 3 5 7 1
    + $ Freq  : int  203 292 86 160 260 594 58
    +
    ggplot(tab) +
    +  aes(x = qualif, y = Freq) +
    +  geom_point() +
    +  xlab("Niveau de qualification") +
    +  ylab("Effectifs") +
    +  coord_flip()
    +
    +Diagramme de Cleveland ordonné +
    +

    L’extension ggalt propose quelques géométries supplémentaires pour ggplot2. L’une d’elles dite en sucettes (geom_lollipop) propose une représentation graphique au croisement entre un diagramme en bâtons et un diagramme de Cleveland.

    +
    library(ggalt)
    +ggplot(tab) +
    +  aes(x = qualif, y = Freq) +
    +  geom_lollipop() +
    +  xlab("Niveau de qualification") +
    +  ylab("Effectifs") +
    +  coord_flip()
    +

    +
    +
    +
    +

    Diagrammes en barres

    +

    Un diagramme en barres se construit avec la géométrie geom_bar.

    +
    d$qualreg <- as.character(d$qualif)
    +d$qualreg[d$qualif %in% c("Ouvrier specialise", "Ouvrier qualifie")] <- "Ouvrier"
    +d$qualreg[d$qualif %in% c("Profession intermediaire", 
    +  "Technicien")] <- "Intermediaire"
    +ggplot(d) +
    +  aes(x = qualreg, fill = sport) +
    +  geom_bar() +
    +  xlab("CSP") +
    +  ylab("Effectifs") +
    +  labs(fill = "Pratique du sport")
    +
    +Diagramme en barres +

    On peut modifier la position des barres avec le paramètre position.

    +
    ggplot(d) +
    +  aes(x = qualreg, fill = sport) +
    +  geom_bar(position = "dodge") +
    +  xlab("CSP") +
    +  ylab("Effectifs") +
    +  labs(fill = "Pratique du sport")
    +
    +Diagramme en barres côte à côte +

    Pour des barres cumulées, on aura recours à position = "fill". Pour que les étiquettes de l’axe des y soient représentées sous forme de pourcentages (i.e. 25% au lieu de 0.25), on aura recours à la fonction percent de l’extension scales, qui sera transmise à ggplot2 via scale_y_continuous.

    +
    library(scales)
    +ggplot(d) +
    +  aes(x = qualreg, fill = sport) +
    +  geom_bar(position = "fill") +
    +  xlab("CSP") +
    +  ylab("Proportion") +
    +  labs(fill = "Pratique du sport") +
    +  scale_y_continuous(labels = percent)
    +
    +Diagramme en barres cumulées +
    +

    Ajouter des étiquettes sur un diagramme en barre

    +

    Il est facile d’ajouter des étiquettes en ayant recours à geom_text, à condition de lui passer les bon paramètres.

    +

    Tout d’abord, il faudra préciser stat = "count" pour indiquer que l’on souhaite utiliser la statistique stat_count qui est celle utilisé par défaut par geom_bar. C’est elle qui permets de compter le nombre d’observation.

    +

    Il faut ensuite utiliser l’esthétique label pour indiquer ce que l’on souhaite afficher comme étiquettes. after_stat(count) permets d’accéder à la variable calculée par stat_count.

    +

    Enfin, il faut indiquer la position verticale avec position_stack. En précisant un ajustement de vertical de 0.5, on indique que l’on souhaite positionner l’étiquette au milieu.

    +
    ggplot(d) +
    +  aes(x = qualreg, fill = sport) +
    +  geom_bar() +
    +  geom_text(aes(label = after_stat(count)), stat = "count", position = position_stack(.5)) +
    +  xlab("CSP") +
    +  ylab("Effectifs") +
    +  labs(fill = "Pratique du sport")
    +

    +

    Pour un graphique en barre cumulées, on peut utiliser de manière similaire position_fill.

    +
    ggplot(d) +
    +  aes(x = qualreg, fill = sport) +
    +  geom_bar(position = "fill") +
    +  geom_text(aes(label = after_stat(count)), stat = "count", position = position_fill(.5)) +
    +  xlab("CSP") +
    +  ylab("Proportion") +
    +  labs(fill = "Pratique du sport") +
    +  scale_y_continuous(labels = percent)
    +

    +

    On ne peut afficher directement les proportions avec stat_count. Cependant, l’extension GGally fournit une statistique stat_prop dont le dénominateur peut être personnalisé via l’esthétique by (attention : l’esthétique attendue doit impérativement être un facteur).

    +
    library(GGally)
    +d$qualreg <- forcats::fct_explicit_na(factor(d$qualreg))
    +ggplot(d) +
    +  aes(x = qualreg, fill = sport) +
    +  geom_bar(position = "fill") +
    +  geom_text(aes(by = qualreg), stat = "prop", position = position_fill(.5)) +
    +  xlab("CSP") +
    +  ylab("Proportion") +
    +  labs(fill = "Pratique du sport") +
    +  scale_y_continuous(labels = scales::percent)
    +

    +

    On peut aussi comparer facilement deux distributions, ici la proportion de chaque niveau de qualification au sein chaque sexe.

    +
    p <- ggplot(d) +
    +  aes(
    +    x = qualreg, fill = sexe, by = sexe, y = after_stat(prop),
    +    label = scales::percent(after_stat(prop), accuracy = 1), 
    +  ) +
    +  geom_bar(stat = "prop", position = position_dodge(.9)) +
    +  geom_text(
    +    aes(y = after_stat(prop) - .005), stat = "prop", 
    +    position = position_dodge(.9), vjust = "top"
    +  ) +
    +  scale_y_continuous(labels = percent)
    +p
    +

    +

    Il est possible d’alléger le graphique en retirant des éléments superflus.

    +
    p + 
    +  theme_light() +
    +  xlab("") +
    +  ylab("") +
    +  labs(fill = "") +
    +  ggtitle("Distribution de la population selon le niveau de qualification, par sexe") +
    +  theme(
    +    panel.grid = element_blank(),
    +    panel.border = element_blank(),
    +    axis.text.y = element_blank(),
    +    axis.ticks = element_blank(),
    +    legend.position = "top"
    +  ) +
    +  scale_fill_brewer()
    +

    +
    +
    +
    +

    Comparer plusieurs variables discrètes et/ou continues

    +

    L’extension GGally, déjà évoquée, fournit également deux fonctions utiles pour comparer plusieurs variables discrètes (et/ou continues) : ggbivariate et ggtable.

    +

    ggbivariate produit des graphiques en barre pour deux variables discrètes et des boites à moustache lorsque l’on compare une variable discrète avec une variable continue.

    +
    library(GGally)
    +ggbivariate(data = d, outcome = "sport", explanatory = c("sexe", "cuisine", "nivetud", "age"))
    +
    Warning: Removed 112 rows containing non-finite values
    +(stat_prop).
    +

    +

    ggbivariate quant à elle affiche un tableau croisé avec le nombre d’observations pour deux variables discrètes et les médianes avec l’intervalle interquartile pour une variable discrète croisée avec une variable continue.

    +
    ggtable(data = d, columnsX = "sport", columnsY = c("sexe", "cuisine", "nivetud", "age"))
    +

    +

    Il est possible de remplacer les effectifs par les pourcentages en ligne et de colorier les cellules en fonction des résidus du Chi² qui permettent de visualiser les cellules du tableau sur- ou sous-représentées.

    +
    ggtable(
    +  data = d, 
    +  columnsX = "sport", 
    +  columnsY = c("sexe", "cuisine", "nivetud"),
    +  cells = "row.prop",
    +  fill = "stdres",
    +  legend = 1
    +) + labs(fill = "Résidus\ndu Chi²")
    +

    +

    Pour plus de possibilités de personnalisation, voir la fonction ggduo de GGally.

    +
    +
    +

    Graphe en mosaïque

    +

    Il n’y a pas, à ce jour, d’implémentation officielle des graphiques en mosaïque sous ggplot2. On pourra néanmoins se référer à l’extension ggmosaic et sa fonction geom_mosaic3.

    +
    library(ggmosaic)
    +levels(d$sport) <- c("Ne fait pas de sport", "Pratique un sport")
    +levels(d$cuisine) <- c("Ne cuisine pas", "Cuisine")
    +levels(d$sexe) <- c("H", "F")
    +
    +ggplot(data = d) +
    +  geom_mosaic(aes(x = product(sport, cuisine), fill = sexe, na.rm = TRUE)) +
    +  xlab("") + ylab("") +
    +  theme(legend.position = "bottom")  
    +
    +Graphique en mosaïque +
    +
    +
    +

    Données labellisées et ggplot2

    +

    ggplot2 tient compte du type des variables, attendant à ce que les variables catégorielles soient présentées sous forme de facteurs. Si l’on utilise des données labellisées (voir le chapitre dédié), nos variables catégorielles seront stockées sous la forme d’un vecteur numérique avec des étiquettes. Il sera donc nécessaire de convertir ces variables en facteurs, tout simplement avec la fonction to_factor de l’extension labelled qui pourra utiliser les étiquettes de valeurs comme modalités du facteur.

    +
    +
    +

    Exporter les graphiques obtenus

    +

    Les graphiques produits par ggplot2 peuvent être sauvegardés manuellement, comme expliqué dans le chapitre Export des graphiques, ou programmatiquement. Pour sauvegarder le dernier graphique affiché par ggplot2 au format PNG, il suffit d’utiliser la fonction ggsave, qui permet d’en régler la taille (en pouces) et la résolution (en pixels par pouce ; 72 par défaut) :

    +
    ggsave("mon_graphique.png", width = 11, height = 8)
    +

    De la même manière, pour sauvegarder n’importe quel graphique construit avec ggplot2 et stocké dans un objet, il suffit de préciser le nom de cet objet, comme ci-dessous, où l’on sauvegarde le graphique contenu dans l’objet p au format vectoriel PDF, qui préserve la netteté du texte et des autres éléments du graphique à n’importe quelle résolution d’affichage :

    +
    ggsave("mon_graphique.pdf", plot = p,
    +       width = 11, height = 8)
    +
    +
    +
    +
      +
    1. Pour plus de détails, on pourra lire https://tgmstat.wordpress.com/2013/11/13/plot-matrix-with-the-r-package-ggally/.

    2. +
    3. Pour une présentation détaillée de cette fonction et de ses options, voir https://briatte.github.io/ggcorr/.

    4. +
    5. Pour information, une première implémentation expérimentale avait été proposée avec l’extension productplots, voir https://github.com/hadley/productplots et http://vita.had.co.nz/papers/prodplots.html

    6. +
    +
    + +
    +
    + + + +

    Données pondérées

    + +
    + + + +

    S’il est tout à fait possible de travailler avec des données pondérées sous R, cette fonctionnalité n’est pas aussi bien intégrée que dans la plupart des autres logiciels de traitement statistique. En particulier, il y a plusieurs manières possibles de gérer la pondération. Cependant, lorsque l’on doit également prendre un compte un plan d’échantillonnage complexe (voir section dédiée ci-après), R fournit tous les outils nécessaires, alors que dans la plupart des logiciels propriétaires, il faut disposer d’une extension adéquate, pas toujours vendue de base avec le logiciel.

    +

    Dans ce qui suit, on utilisera le jeu de données tiré de l’enquête Histoire de vie et notamment sa variable de pondération poids1.

    +
    library(questionr)
    +data(hdv2003)
    +d <- hdv2003
    +range(d$poids)
    +
    [1]    78.07834 31092.14132
    +
    +

    Options de certaines fonctions

    +

    Tout d’abord, certaines fonctions de R acceptent en argument un vecteur permettant de pondérer les observations (l’option est en général nommée weights ou row.w). C’est le cas par exemple des méthodes d’estimation de modèles linéaires2 (lm) ou de modèles linéaires généralisés 3 (glm) ou dans les analyses de correspondances4 des extensions ade4 ou FactoMineR.

    +

    Par contre cette option n’est pas présente dans les fonctions de base comme mean, var, table ou chisq.test.

    +
    +
    +

    Données pondérées avec l’extension survey

    +

    L’extension survey est spécialement dédiée au traitement d’enquêtes ayant des techniques d’échantillonnage et de pondération potentiellement très complexes.

    +

    L’extension s’installe comme la plupart des autres :

    +
    install.packages("survey")
    +

    Le site officiel (en anglais) comporte beaucoup d’informations, mais pas forcément très accessibles :
    http://r-survey.r-forge.r-project.org/.

    +

    Pour utiliser les fonctionnalités de l’extension, on doit d’abord définir le plan d’échantillonnage ou design de notre enquête, c’est-à-dire indiquer quel type de pondération nous souhaitons lui appliquer.

    +

    Dans un premier temps, nous utiliserons le plan d’échantillonnage le plus simple, avec une variable de pondération déjà calculée. Pour d’autres types de plan d’échantillonnage, voir la chapitre sur les plans d’échantillonnage complexes.

    +

    Ceci se fait à l’aide de la fonction svydesign :

    +
    library(survey)
    +dw <- svydesign(ids = ~1, data = d, weights = ~d$poids)
    +

    Cette fonction crée un nouvel objet, que nous avons nommé dw. Cet objet n’est pas à proprement parler un tableau de données, mais plutôt un tableau de données plus une méthode de pondération. dw et d sont des objets distincts, les opérations effectuées sur l’un n’ont pas d’influence sur l’autre. On peut cependant retrouver le contenu de d depuis dw en utilisant dw$variables :

    +
    str(d$age)
    +
     int [1:2000] 28 23 59 34 71 35 60 47 20 28 ...
    +
    str(dw$variables$age)
    +
     int [1:2000] 28 23 59 34 71 35 60 47 20 28 ...
    +

    Lorsque notre plan d’échantillonnage est déclaré, on peut lui appliquer une série de fonctions permettant d’effectuer diverses opérations statistiques en tenant compte de la pondération. On citera notamment :

    +
      +
    • +svymean, svyvar, svytotal, svyquantile : statistiques univariées (moyenne, variance, total, quantiles)
    • +
    • +svytable : tri à plat et tableau croisé +
    • +
    • +svychisq : test du ² +
    • +
    • +svyby : statistiques selon un facteur
    • +
    • +svyttest : test t de Student de comparaison de moyennes +
    • +
    • +svyciprop : intervalle de confiance d’une proportion +
    • +
    • +svyglm : modèles linéaires généralisés (dont régression logistique)
    • +
    • +svyplot, svyhist, svyboxplot : fonctions graphiques
    • +
    +

    D’autres fonctions sont disponibles, comme svyratio, mais elles ne seront pas abordées ici.

    +

    Pour ne rien arranger, ces fonctions prennent leurs arguments sous forme de formules5, c’est-à-dire pas de la manière habituelle. En général l’appel de fonction se fait en spécifiant d’abord les variables d’intérêt sous forme de formule, puis l’objet survey.design.

    +

    Voyons tout de suite quelques exemples6 :

    +
    svymean(~age, dw)
    +
          mean     SE
    +age 46.347 0.5284
    +
    svyquantile(~age, dw, quantile = c(0.25, 0.5, 0.75), ci = TRUE)
    +
    $quantiles
    +    0.25 0.5 0.75
    +age   31  45   60
    +
    +$CIs
    +, , age
    +
    +       0.25 0.5 0.75
    +(lower   30  43   58
    +upper)   32  47   62
    +
    svyvar(~heures.tv, dw, na.rm = TRUE)
    +
              variance     SE
    +heures.tv   2.9886 0.1836
    +

    Les tris à plat se déclarent en passant comme argument le nom de la variable précédé d’un tilde (~), tandis que les tableaux croisés utilisent les noms des deux variables séparés par un signe plus (+) et précédés par un tilde (~).

    +
    svytable(~sexe, dw)
    +
    sexe
    +  Homme   Femme 
    +5149382 5921844 
    +
    svytable(~sexe + clso, dw)
    +
           clso
    +sexe           Oui        Non Ne sait pas
    +  Homme 2658744.04 2418187.64    72450.75
    +  Femme 2602031.76 3242389.36    77422.79
    +

    La fonction freq peut être utilisée si on lui passe en argument non pas la variable elle-même, mais son tri à plat obtenu avec svytable :

    +
    tab <- svytable(~peche.chasse, dw)
    +freq(tab, total = TRUE)
    +
    + +
    +

    On peut également récupérer le tableau issu de svytable dans un objet et le réutiliser ensuite comme n’importe quel tableau croisé :

    +
    tab <- svytable(~sexe + clso, dw)
    +tab
    +
           clso
    +sexe           Oui        Non Ne sait pas
    +  Homme 2658744.04 2418187.64    72450.75
    +  Femme 2602031.76 3242389.36    77422.79
    +

    Les fonctions lprop et cprop de questionr sont donc tout à fait compatibles avec l’utilisation de survey.

    +
    lprop(tab)
    +
              clso
    +sexe       Oui   Non   Ne sait pas Total
    +  Homme     51.6  47.0   1.4       100.0
    +  Femme     43.9  54.8   1.3       100.0
    +  Ensemble  47.5  51.1   1.4       100.0
    +

    Le principe de la fonction svyby est similaire à celui de tapply7. Elle permet de calculer des statistiques selon plusieurs sous-groupes définis par un facteur. Par exemple :

    +
    svyby(~age, ~sexe, dw, svymean)
    +
    + +
    +
    +

    gtsummary et survey

    +

    L’extension gtsummary fournit une fonction tbl_svysummary, similaire à tbl_summary, mais adaptée aux objets survey.

    +
    library(gtsummary)
    +theme_gtsummary_language("fr", decimal.mark = ",", big.mark = " ")
    +
    Setting `language: fr` theme
    +
    dw %>% tbl_svysummary(include = c("age", "sexe", "clso", "peche.chasse"))
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Caractéristique +N = 11 071 2261 +
    age45 (31 – 60)
    sexe
    Homme5 149 382 (47%)
    Femme5 921 844 (53%)
    clso
    Oui5 260 776 (48%)
    Non5 660 577 (51%)
    Ne sait pas149 874 (1,4%)
    peche.chasse
    Non9 716 683 (88%)
    Oui1 354 544 (12%)
    +

    + 1 + + + Statistique présentée: médiane (EI); n (%) +

    +
    +
    dw %>% tbl_svysummary(include = c("age", "sexe", "clso", "peche.chasse"), 
    +  by = "sexe") %>% add_overall(last = TRUE) %>% add_p()
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Caractéristique +Homme, N = 5 149 3821 + +Femme, N = 5 921 8441 + +Total, N = 11 071 226 +p-valeur2 +
    age44 (30 – 59)45 (32 – 61)45 (31 – 60)0,067
    clso0,036
    Oui2 658 744 (52%)2 602 032 (44%)5 260 776 (48%)
    Non2 418 188 (47%)3 242 389 (55%)5 660 577 (51%)
    Ne sait pas72 451 (1,4%)77 423 (1,3%)149 874 (1,4%)
    peche.chasse<0,001
    Non4 101 242 (80%)5 615 441 (95%)9 716 683 (88%)
    Oui1 048 141 (20%)306 403 (5,2%)1 354 544 (12%)
    +

    + 1 + + + Statistique présentée: médiane (EI); n (%) +

    +

    + 2 + + + Test statistique réalisé: Wilcoxon rank-sum test for complex survey samples; chi-squared test with Rao & Scott's second-order correction +

    +
    +
    +
    +

    Graphiques natifs avec survey

    +

    survey est également capable de produire des graphiques à partir des données pondérées. Quelques exemples :

    +
    par(mfrow = c(2, 2))
    +svyplot(~age + heures.tv, dw, col = "red", main = "Bubble plot")
    +svyhist(~heures.tv, dw, col = "peachpuff", main = "Histogramme")
    +svyboxplot(age ~ 1, dw, main = "Boxplot simple", ylab = "Âge")
    +svyboxplot(age ~ sexe, dw, main = "Boxplot double", ylab = "Âge", 
    +  xlab = "Sexe")
    +
    +Fonctions graphiques de l’extension survey +
    +
    +
    +

    Graphiques ggplot2

    +

    ggplot2 accepte une esthétique weight pour indiquer des poids à prendre en compte dans les différents graphiques. La fonction weights permets justement de récupérer les poids d’un objet survey. La fonction ggplot n’accepte pas d’objet survey mais a besoin d’un tableau de données. Ce dernier peut être récupéré avec $variables.

    +
    library(ggplot2)
    +ggplot(dw$variables) + aes(weight = weights(dw), x = sexe, fill = clso) + 
    +  geom_bar(position = "fill")
    +

    +

    ATTENTION : les graphiques obtenus ne sont corrects qu’à la condition que seuls les poids soient nécessaires pour les construire, ce qui est le cas d’un nuage de points ou d’un diagramme en barres. Par contre, si le calcul du graphique implique le calcul de variance, la représentation sera incorrecte. Par exemple, avec geom_smooth, les aires de confiance affichées ne prendront pas correctement en compte le plan d’échantillonnage.

    +
    +

    L’extenstion JLutils propose une fonction ggsurvey pour faciliter les choses. Elle prend un objet survey, extrait le tableau de données et les poids, associe les poids à l’esthétique correspondante et appelle ggplot.

    +
    library(JLutils)
    +ggsurvey(dw) + aes(x = sexe, fill = clso) + geom_bar(position = "fill")
    +

    +

    JLutils n’est disponible que sur GitHub. Pour l’installer, on pourra utiliser la commande suivante :

    +
    if (!require(devtools)) {
    +  install.packages("devtools")
    +  library(devtools)
    +}
    +install_github("larmarange/JLutils")
    +
    +
    +
    +

    Extraire un sous-échantillon

    +

    Si l’on souhaite travailler sur un sous-échantillon tout en gardant les informations d’échantillonnage, on utilisera la fonction subset présentée en détail dans le chapitre Sous-ensembles.

    +
    sous <- subset(dw, sexe == "Femme" & age >= 40)
    +
    +
    +

    Modèles logistiques

    +

    Pour réaliser des modèles logistiques (binaires, multinomiaux ou ordinaux) avec prise en compte d’un plan d’échantillonnage, on pourra se référer à la sous-section dédiée du chapitre Régression logistique.

    +
    +
    +

    dplyr et survey

    +

    L’extension srvyr vise à permettre d’utiliser les verbes de dplyr avec survey. Le fonctionnement de cette extension est expliqué dans une vignette dédiée : https://cran.r-project.org/web/packages/srvyr/vignettes/srvyr-vs-survey.html.

    +
    +
    +
    +

    Conclusion

    +

    Si, la gestion de la pondération sous R n’est sans doute pas ce qui se fait de plus pratique et de plus simple, on pourra quand même donner les conseils suivants :

    +
      +
    • utiliser les options de pondération des fonctions usuelles ou les fonctions d’extensions comme questionr pour les cas les plus simples ;
    • +
    • si on utilise survey, effectuer autant que possible tous les recodages et manipulations sur les données non pondérées ;
    • +
    • une fois les recodages effectués, on déclare le design et on fait les analyses en tenant compte de la pondération ;
    • +
    • surtout ne jamais modifier les variables du design. Toujours effectuer recodages et manipulations sur les données non pondérées, puis redéclarer le design pour que les mises à jour effectuées soient disponibles pour l’analyse.
    • +
    +
    +
    +
    +
      +
    1. On notera que cette variable est utilisée à titre purement illustratif. Le jeu de données étant un extrait d’enquête et la variable de pondération n’ayant pas été recalculée, elle n’a ici à proprement parler aucun sens.

    2. +
    3. Voir le chapitre régression linéaire.

    4. +
    5. Voir le chapitre sur la régression logistique.

    6. +
    7. Voir le chapitre dédié à l’analyse des correspondances.

    8. +
    9. Pour plus de détails sur les formules, voir le chapitre dédié.

    10. +
    11. Pour d’autres exemples, voir http://www.ats.ucla.edu/stat/r/faq/svy_r_oscluster.htm (en anglais).

    12. +
    13. La fonction tapply est présentée plus en détails dans le chapitre Manipulation de données.

    14. +
    +
    + +
    +
    + + + +

    Intervalles de confiance

    + +
    + + + +

    Nous utiliserons dans ce chapitre les données de l’enquête Histoire de vie 2003 fournies avec l’extension questionr.

    +
    library(questionr)
    +data("hdv2003")
    +d <- hdv2003
    +
    +

    Intervalle de confiance d’une moyenne

    +

    L’intervalle de confiance d’une moyenne peut être calculé avec la fonction t.test (fonction qui permet également de réaliser un test t de Student comme nous le verrons dans le chapitre dédié aux comparaisons de moyennes) :

    +
    t.test(d$heures.tv)
    +
    
    +    One Sample t-test
    +
    +data:  d$heures.tv
    +t = 56.505, df = 1994, p-value < 2.2e-16
    +alternative hypothesis: true mean is not equal to 0
    +95 percent confidence interval:
    + 2.168593 2.324540
    +sample estimates:
    +mean of x 
    + 2.246566 
    +

    Le niveau de confiance peut être précisé via l’argument conf.level :

    +
    t.test(d$heures.tv, conf.level = 0.9)
    +
    
    +    One Sample t-test
    +
    +data:  d$heures.tv
    +t = 56.505, df = 1994, p-value < 2.2e-16
    +alternative hypothesis: true mean is not equal to 0
    +90 percent confidence interval:
    + 2.181138 2.311995
    +sample estimates:
    +mean of x 
    + 2.246566 
    +

    Le nombre d’heures moyennes à regarder la télévision parmi les enquêtés s’avère être de 2,2 heures, avec un intervalle de confiance à 95 % de [2,17 - 2,33] et un intervalle de confiance à 90 % de [2,18 - 2,31].

    +
    +
    +

    Intervalle de confiance d’une proportion

    +

    La fonction prop.test permet de calculer l’intervalle de confiance d’une proportion. Une première possibilité consiste à lui transmettre une table à une dimension et deux entrées. Par exemple, si l’on s’intéresse à la proportion de personnes ayant pratiqué une activité physique au cours des douze derniers mois :

    +
    freq(d$sport)
    +
    + +
    +
    prop.test(table(d$sport))
    +
    
    +    1-sample proportions test with continuity correction
    +
    +data:  table(d$sport), null probability 0.5
    +X-squared = 152.9, df = 1, p-value < 2.2e-16
    +alternative hypothesis: true p is not equal to 0.5
    +95 percent confidence interval:
    + 0.6169447 0.6595179
    +sample estimates:
    +     p 
    +0.6385 
    +

    On remarquera que la fonction a calculé l’intervalle de confiance correspondant à la première entrée du tableau, autrement dit celui de la proportion d’enquêtés n’ayant pas pratiqué une activité sportive. Or, nous sommes intéressé par la proportion complémentaire, à savoir celle d’enquêtés ayant pratiqué une activité sportive. On peut dès lors modifier l’ordre de la table en indiquant notre modalité d’intérêt avec la fonction relevel ou bien indiquer à prop.test d’abord le nombre de succès puis l’effectif total :

    +
    prop.test(table(relevel(d$sport, "Oui")))
    +
    
    +    1-sample proportions test with continuity correction
    +
    +data:  table(relevel(d$sport, "Oui")), null probability 0.5
    +X-squared = 152.9, df = 1, p-value < 2.2e-16
    +alternative hypothesis: true p is not equal to 0.5
    +95 percent confidence interval:
    + 0.3404821 0.3830553
    +sample estimates:
    +     p 
    +0.3615 
    +
    prop.test(sum(d$sport == "Oui"), length(d$sport))
    +
    
    +    1-sample proportions test with continuity correction
    +
    +data:  sum(d$sport == "Oui") out of length(d$sport), null probability 0.5
    +X-squared = 152.9, df = 1, p-value < 2.2e-16
    +alternative hypothesis: true p is not equal to 0.5
    +95 percent confidence interval:
    + 0.3404821 0.3830553
    +sample estimates:
    +     p 
    +0.3615 
    +

    Enfin, le niveau de confiance peut être modifié via l’argument conf.level :

    +
    prop.test(table(relevel(d$sport, "Oui")), conf.level = 0.9)
    +
    
    +    1-sample proportions test with continuity correction
    +
    +data:  table(relevel(d$sport, "Oui")), null probability 0.5
    +X-squared = 152.9, df = 1, p-value < 2.2e-16
    +alternative hypothesis: true p is not equal to 0.5
    +90 percent confidence interval:
    + 0.3437806 0.3795989
    +sample estimates:
    +     p 
    +0.3615 
    +
    +

    Il existe de nombreuses manières de calculer un intervalle de confiance pour une proportion. En l’occurence, l’intervalle calculé par prop.test correspond dans le cas présent à un intervalle bilatéral selon la méthode des scores de Wilson avec correction de continuité. Pour plus d’information, on pourra lire http://joseph.larmarange.net/?Intervalle-de-confiance-bilateral.

    +
    +
    +

    Pour se simplifier un peu la vie, le package JLutils propose une fonction prop.ci (et ses deux variantes prop.ci.lower et prop.ci.upper) permettant d’appeler plus facilement prop.test et renvoyant directement l’intervalle de confiance.

    +

    JLutils n’étant disponible que sur GitHub, on aura recours au package devtools et à sa fonction install_github pour l’installer :

    +
    library(devtools)
    +install_github("larmarange/JLutils")
    +

    prop.ci fonction accepte directement un tri à plat obtenu avec table, un vecteur de données, un vecteur logique (issu d’une condition), ou bien le nombre de succès et le nombre total d’essais. Voir les exemples ci-après :

    +
    library(JLutils)
    +freq(d$sport)
    +
    + +
    +
    prop.ci(d$sport)
    +
    [1] 0.6169447 0.6595179
    +
    prop.ci.lower(d$sport)
    +
    [1] 0.6169447
    +
    prop.ci.upper(d$sport)
    +
    [1] 0.6595179
    +
    prop.ci(d$sport, conf.level = 0.9)
    +
    [1] 0.6204011 0.6562194
    +
    prop.ci(table(d$sport))
    +
    [1] 0.6169447 0.6595179
    +
    prop.ci(d$sport == "Non")
    +
    [1] 0.6169447 0.6595179
    +
    prop.ci(d$sport == "Oui")
    +
    [1] 0.3404821 0.3830553
    +
    prop.ci.lower(c(1277, 723), n = 2000)
    +
    [1] 0.6169447 0.3404821
    +
    prop.ci.upper(c(1277, 723), n = 2000)
    +
    [1] 0.6595179 0.3830553
    +
    +
    +
    +

    Données pondérées et l’extension survey

    +

    Lorsque l’on utilise des données pondérées définies à l’aide de l’extension survey1, l’intervalle de confiance d’une moyenne s’obtient avec confint et celui d’une proportion avec svyciprop.

    +

    Quelques exemples :

    +
    library(survey)
    +dw <- svydesign(ids = ~1, data = d, weights = ~poids)
    +svymean(~age, dw)
    +
          mean     SE
    +age 46.347 0.5284
    +
    confint(svymean(~age, dw))  # Intervalle de confiance d'une moyenne
    +
          2.5 %   97.5 %
    +age 45.3117 47.38282
    +
    confint(svyby(~age, ~sexe, dw, svymean))  # Intervalles de confiance pour chaque sexe
    +
             2.5 %   97.5 %
    +Homme 43.74781 46.65618
    +Femme 45.88867 48.79758
    +
    freq(svytable(~sexe, dw))
    +
    + +
    +
    svyciprop(~sexe, dw)  # Intervalle de confiance d'une proportion
    +
                2.5% 97.5%
    +sexe 0.535 0.507  0.56
    +
    +
    +
    +
      +
    1. Voir le chapitre dédié aux données pondérées.

    2. +
    +
    + +
    +
    + + + +

    Comparaisons (moyennes et proportions)

    + +
    + + + +

    Nous utiliserons dans ce chapitre les données de l’enquête Histoire de vie 2003 fournies avec l’extension questionr.

    +
    library(questionr)
    +data("hdv2003")
    +d <- hdv2003
    +
    +

    Comparaison de moyennes

    +

    On peut calculer la moyenne d’âge des deux groupes en utilisant la fonction tapply1 :

    +
    tapply(d$age, d$hard.rock, mean)
    +
         Non      Oui 
    +48.30211 27.57143 
    +

    L’écart est important. Est-il statistiquement significatif ? Pour cela on peut faire un test t de Student de comparaison de moyennes à l’aide de la fonction t.test :

    +
    t.test(age ~ hard.rock, data = d)
    +
    
    +    Welch Two Sample t-test
    +
    +data:  age by hard.rock
    +t = 9.6404, df = 13.848, p-value = 1.611e-07
    +alternative hypothesis: true difference in means is not equal to 0
    +95 percent confidence interval:
    + 16.11379 25.34758
    +sample estimates:
    +mean in group Non mean in group Oui 
    +         48.30211          27.57143 
    +

    Le test est extrêmement significatif. L’intervalle de confiance à 95 % de la différence entre les deux moyennes va de 16,1 ans à 25,3 ans.

    +
    +

    La valeur affichée pour p est de 1.611e-07. Cette valeur peut paraître étrange pour les non avertis. Cela signifie tout simplement 1,611 multiplié par 10 à la puissance -7, autrement dit 0,0000001611. Cette manière de représenter un nombre est couramment appelée notation scientifique.

    +

    Pour plus de détails, voir http://fr.wikipedia.org/wiki/Notation_scientifique.

    +

    Il est possible de désactiver la notation scientifique avec la commande :

    +
    options(scipen = 999)
    +

    Pour rétablir la notation scientifique :

    +
    options(scipen = 0)
    +
    +

    Nous sommes cependant allés un peu vite en besogne, car nous avons négligé une hypothèse fondamentale du test t : les ensembles de valeur comparés doivent suivre approximativement une loi normale et être de même variance2.

    +
    +

    Dans le test de Student, on suppose l’égalité des variances parentes, ce qui permet de former une estimation commune de la variance des deux échantillons (on parle de pooled variance), qui revient à une moyenne pondérée des variances estimées à partir des deux échantillons. Dans le cas où l’on souhaite relaxer cette hypothèse, le test de Welch ou la correction de Satterthwaite reposent sur l’idée que l’on utilise les deux estimations de variance séparément, suivie d’une approximation des degrés de liberté pour la somme de ces deux variances. Le même principe s’applique dans le cas de l’analyse de variance à un facteur (cf. oneway.test).

    +
    +

    Comment vérifier que l’hypothèse de normalité est acceptable pour ces données ? D’abord avec un petit graphique composés de deux histogrammes :

    +
    par(mfrow = c(1, 2))
    +hist(d$age[d$hard.rock == "Oui"], main = "Hard rock", col = "red")
    +hist(d$age[d$hard.rock == "Non"], main = "Sans hard rock", col = "red")
    +
    +Distribution des âges pour appréciation de la normalité +

    Une alternative consisterait à utiliser des graphiques de type QQ-plot, à l’aide de la fonction qnorm, même si leur utilisation et leur interprétation ne sera pas détaillée ici.

    +
    +

    La fonction par permet de modifier de nombreux paramètres graphiques. Ici, l’instruction par(mfrow = c(1, 2)) sert à indiquer que l’on souhaite afficher deux graphiques sur une même fenêtre, plus précisément que la fenêtre doit comporter une ligne et deux colonnes.

    +
    +

    Ça a l’air à peu près bon pour les « Sans hard rock », mais un peu plus limite pour les fans de Metallica, dont les effectifs sont d’ailleurs assez faibles. Si on veut en avoir le cœur net on peut utiliser le test de normalité de Shapiro-Wilk avec la fonction shapiro.test :

    +
    shapiro.test(d$age[d$hard.rock == "Oui"])
    +
    
    +    Shapiro-Wilk normality test
    +
    +data:  d$age[d$hard.rock == "Oui"]
    +W = 0.86931, p-value = 0.04104
    +
    shapiro.test(d$age[d$hard.rock == "Non"])
    +
    
    +    Shapiro-Wilk normality test
    +
    +data:  d$age[d$hard.rock == "Non"]
    +W = 0.98141, p-value = 2.079e-15
    +

    Visiblement, le test estime que les distributions ne sont pas suffisamment proches de la normalité dans les deux cas.

    +

    Et concernant l’égalité des variances ?

    +
    tapply(d$age, d$hard.rock, var)
    +
          Non       Oui 
    +285.62858  62.72527 
    +

    L’écart n’a pas l’air négligeable. On peut le vérifier avec le test d’égalité des variances fourni par la fonction var.test :

    +
    var.test(age ~ hard.rock, data = d)
    +
    
    +    F test to compare two variances
    +
    +data:  age by hard.rock
    +F = 4.5536, num df = 1985, denom df = 13, p-value =
    +0.003217
    +alternative hypothesis: true ratio of variances is not equal to 1
    +95 percent confidence interval:
    + 1.751826 8.694405
    +sample estimates:
    +ratio of variances 
    +          4.553644 
    +

    La différence est très significative. En toute rigueur le test t n’aurait donc pas pu être utilisé. Cela dit, il convient de rappeler que ce test statistique (1) suppose la normalité des distributions et (2) considère comme hypothèse nulle l’égalité des variances (parentes) – ce que l’on souhaiterait vérifier alors qu’on ne peut pas accepter l’hypothèse nulle dans un cadre d’inférence fréquentiste – sans que l’on définisse réellement ce que signifie des variances différentes sur le plan pratique. Est-ce qu’une variation de la variance du simple au double est pertinente au regard du domaine d’étude, ou bien faut-il décider qu’à partir d’un rapport de 4 on peut considérer qu’il y a bien une différence importante entre deux variances ? Sans avoir fixé au préalable cette hypothèse alternative, on ne peut guère conclure à partir de ce test. Une alternative consiste à comparer la forme des distributions à l’aide, par exemple, de diagrammes de type boîtes à moustaches.

    +

    Damned ! Ces maudits tests statistiques vont-ils nous empêcher de faire connaître au monde entier notre fabuleuse découverte sur l’âge des fans de Sepultura ? Non ! Car voici qu’approche à l’horizon un nouveau test, connu sous le nom de Wilcoxon/Mann-Whitney. Celui-ci a l’avantage d’être non-paramétrique, c’est à dire de ne faire aucune hypothèse sur la distribution des échantillons comparés, à l’exception que celles-ci ont des formes à peu près comparables (essentiellement en termes de variance). Attention, il ne s’agit pas d’un test comparant les différences de médianes (pour cela il existe le test de Mood) mais d’un test reposant sur la somme des rangs des observations, au lieu des valeurs brutes, dans les deux groupes :

    +
    wilcox.test(age ~ hard.rock, data = d)
    +
    
    +    Wilcoxon rank sum test with continuity correction
    +
    +data:  age by hard.rock
    +W = 23980, p-value = 2.856e-06
    +alternative hypothesis: true location shift is not equal to 0
    +

    Ouf ! La différence est hautement significative3. Nous allons donc pouvoir entamer la rédaction de notre article pour la Revue française de sociologie.

    +
    +
    +

    Comparaison de proportions

    +

    La fonction prop.test, que nous avons déjà rencontrée pour calculer l’intervalle de confiance d’une proportion (voir le chapitre dédié aux intervalles de confiance) permets également d’effectuer un test de comparaison de deux proportions.

    +

    Supposons que l’on souhaite comparer la proportion de personnes faisant du sport entre ceux qui lisent des bandes dessinées et les autres :

    +
    tab <- xtabs(~lecture.bd + sport, data = d)
    +lprop(tab)
    +
              sport
    +lecture.bd Non   Oui   Total
    +  Non       64.2  35.8 100.0
    +  Oui       48.9  51.1 100.0
    +  Ensemble  63.8  36.1 100.0
    +

    Une représentation graphique sous forme de diagramme en barres peut être définie comme suit :

    +
    barplot(prop.table(tab, margin = 1) * 100, beside = TRUE, ylim = c(0, 
    +  100), xlab = "Sport", legend.text = c("Lecture : non", "Lecture : oui"))
    +
    +Répartition des individus (en %) selon les variables sport et lecture +

    Il suffit de transmettre notre tableau croisé (à 2×2 dimensions) à prop.test :

    +
    prop.test(tab)
    +
    
    +    2-sample test for equality of proportions with
    +    continuity correction
    +
    +data:  tab
    +X-squared = 4, df = 1, p-value = 0.0455
    +alternative hypothesis: two.sided
    +95 percent confidence interval:
    + -0.002652453  0.308107236
    +sample estimates:
    +   prop 1    prop 2 
    +0.6420891 0.4893617 
    +

    On pourra également avoir recours à la fonction fisher.test qui renverra notamment l’odds ratio et son intervalle de confiance correspondant :

    +
    fisher.test(tab)
    +
    
    +    Fisher's Exact Test for Count Data
    +
    +data:  tab
    +p-value = 0.0445
    +alternative hypothesis: true odds ratio is not equal to 1
    +95 percent confidence interval:
    + 1.003372 3.497759
    +sample estimates:
    +odds ratio 
    +  1.871433 
    +
    +

    Formellement, le test de Fisher suppose que les marges du tableau (totaux lignes et colonnes) sont fixées, puisqu’il repose sur une loi hypergéométrique, et donc celui-ci se prête plus au cas des situations expérimentales (plans d’expérience, essais cliniques) qu’au cas des données tirées d’études observationnelles.

    +
    +

    On pourra aussi avoir recours à la fonction odds.ratio de l’extension questionr qui réalise le même calcul mais présente le résultat légèrement différemment :

    +
    odds.ratio(tab)
    +
    + +
    +

    Note : pour le calcul du risque relatif, on pourra regarder du côté de la fonction relrisk de l’extension mosaic.

    +
    +
    +

    ² et dérivés

    +

    Dans le cadre d’un tableau croisé, on peut tester l’existence d’un lien entre les modalités de deux variables, avec le très classique test du ² de Pearson4. Celui-ci s’obtient grâce à la fonction chisq.test, appliquée au tableau croisé obtenu avec table ou xtabs5 :

    +
    d$qualreg <- as.character(d$qualif)
    +d$qualreg[d$qualif %in% c("Ouvrier specialise", "Ouvrier qualifie")] <- "Ouvrier"
    +d$qualreg[d$qualif %in% c("Profession intermediaire", "Technicien")] <- "Intermediaire"
    +
    +tab <- table(d$sport, d$qualreg)
    +tab
    +
         
    +      Autre Cadre Employe Intermediaire Ouvrier
    +  Non    38   117     401           127     381
    +  Oui    20   143     193           119     114
    +
    chisq.test(tab)
    +
    
    +    Pearson's Chi-squared test
    +
    +data:  tab
    +X-squared = 96.798, df = 4, p-value < 2.2e-16
    +

    Le test est hautement significatif : on ne peut donc pas considérer qu’il y a indépendance entre les lignes et les colonnes du tableau.

    +
    +

    Notons que l’agrégation des niveaux d’une variable catégorielle peut être réalisée d’une manière différente en utilisant les fonctions de gestion des niveaux d’un facteur. Les expressions précédentes sont donc équivalentes à l’approche ci-après, qui ne nécessite pas de convertir d$qualif en chaîne de caractères :

    +
    d$qualreg <- d$qualif
    +levels(d$qualreg)[1:2] <- "Ouvrier"
    +levels(d$qualreg)[2:3] <- "Intermédiaire"
    +tab <- table(d$sport, d$qualreg)
    +
    +

    On peut affiner l’interprétation du test en déterminant dans quelle cas l’écart à l’indépendance est le plus significatif en utilisant les résidus du test. Ceux-ci sont notamment affichables avec la fonction chisq.residuals de questionr :

    +
    chisq.residuals(tab)
    +
         
    +      Autre Cadre Employe Intermediaire Ouvrier
    +  Non  0.11 -3.89    0.95         -2.49    3.49
    +  Oui -0.15  5.23   -1.28          3.35   -4.70
    +

    Les cases pour lesquelles l’écart à l’indépendance est significatif ont un résidu dont la valeur est supérieure à 2 ou inférieure à -2 (le fameux nombre 2 issu de la loi normale, au-delà duquel on s’attend à observer au maximum 2,5 % des observations). Ici on constate que la pratique d’un sport est sur-représentée parmi les cadres et, à un niveau un peu moindre, parmi les professions intermédiaires, tandis qu’elle est sous-représentée chez les ouvriers.

    +

    Enfin, on peut calculer le coefficient de contingence de Cramer du tableau, qui présente l’avantage de pouvoir être comparé par la suite à celui calculé sur d’autres tableaux croisés. On peut pour cela utiliser la fonction cramer.v de questionr :

    +
    cramer.v(tab)
    +
    [1] 0.24199
    +
    +

    Pour un tableau à 2×2 entrées, comme discuté plus haut, il est également possible de calculer le test exact de Fisher avec la fonction fisher.test. On peut soit lui passer le résultat de table ou xtabs, soit directement les deux variables à croiser.

    +
    lprop(table(d$sexe, d$cuisine))
    +
              
    +           Non   Oui   Total
    +  Homme     70.0  30.0 100.0
    +  Femme     44.5  55.5 100.0
    +  Ensemble  56.0  44.0 100.0
    +
    fisher.test(table(d$sexe, d$cuisine))
    +
    
    +    Fisher's Exact Test for Count Data
    +
    +data:  table(d$sexe, d$cuisine)
    +p-value < 2.2e-16
    +alternative hypothesis: true odds ratio is not equal to 1
    +95 percent confidence interval:
    + 2.402598 3.513723
    +sample estimates:
    +odds ratio 
    +  2.903253 
    +

    Le test du ² de Pearson étant assez robuste quant aux déviations par rapport aux hypothèses d’applications du test (effectifs théoriques tous = 5), le test de Fisher présente en général peu d’intérêt dans le cas de l’analyse des tableaux de contingence.

    +
    +
    +
    +

    Données pondérées et l’extension survey

    +

    Lorsque l’on utilise des données pondérées, on aura recours à l’extension survey6.

    +

    Préparons des données d’exemple :

    +
    library(survey)
    +dw <- svydesign(ids = ~1, data = d, weights = ~poids)
    +

    Pour comparer deux moyennes à l’aide d’un test t on aura recours à svyttest :

    +
    svyttest(age ~ sexe, dw)
    +
    
    +    Design-based t-test
    +
    +data:  age ~ sexe
    +t = 2.0404, df = 1998, p-value = 0.04144
    +alternative hypothesis: true difference in mean is not equal to 0
    +95 percent confidence interval:
    + 0.08440815 4.19785019
    +sample estimates:
    +difference in mean 
    +          2.141129 
    +

    Pour le test de Wilcoxon/Mann-Whitney, on pourra avoir recours à svyranktest :

    +
    svyranktest(age ~ hard.rock, dw)
    +
    
    +    Design-based KruskalWallis test
    +
    +data:  age ~ hard.rock
    +t = -11.12, df = 1998, p-value < 2.2e-16
    +alternative hypothesis: true difference in mean rank score is not equal to 0
    +sample estimates:
    +difference in mean rank score 
    +                   -0.3636859 
    +

    On ne peut pas utiliser chisq.test directement sur un tableau généré par svytable. Les effectifs étant extrapolés à partir de la pondération, les résultats du test seraient complètement faussés. Si on veut faire un test du ² sur un tableau croisé pondéré, il faut utiliser svychisq :

    +
    rprop(svytable(~sexe + clso, dw))
    +
              clso
    +sexe       Oui   Non   Ne sait pas Total
    +  Homme     51.6  47.0   1.4       100.0
    +  Femme     43.9  54.8   1.3       100.0
    +  Ensemble  47.5  51.1   1.4       100.0
    +
    svychisq(~sexe + clso, dw)
    +
    
    +    Pearson's X^2: Rao & Scott adjustment
    +
    +data:  svychisq(~sexe + clso, dw)
    +F = 3.3331, ndf = 1.9734, ddf = 3944.9024, p-value =
    +0.03641
    +

    L’extension survey ne propose pas de version adaptée du test exact de Fisher. Pour comparer deux proportions, on aura donc recours au test du ² :

    +
    rprop(svytable(~lecture.bd + sport, dw))
    +
              sport
    +lecture.bd Non   Oui   Total
    +  Non       61.0  39.0 100.0
    +  Oui       46.8  53.2 100.0
    +  Ensemble  60.7  39.3 100.0
    +
    svychisq(~lecture.bd + sport, dw)
    +
    
    +    Pearson's X^2: Rao & Scott adjustment
    +
    +data:  svychisq(~lecture.bd + sport, dw)
    +F = 2.6213, ndf = 1, ddf = 1999, p-value = 0.1056
    +
    +
    +

    Tests dans les tableaux de gtsummary +

    +

    Lorsque l’on réalise un tableau croisé avec tbl_summary ou tbl_svysummary de l’extension gtsummary, il est possible d’ajouter des tests de comparaison avec add_p.

    +
    library(gtsummary)
    +theme_gtsummary_language("fr", decimal.mark = ",", big.mark = " ")
    +
    Setting `language: fr` theme
    +
    d %>% tbl_summary(include = c("hard.rock", "age", "sport"), by = "hard.rock") %>% 
    +  add_p()
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Caractéristique +Non, N = 1 9861 + +Oui, N = 141 + +p-valeur2 +
    age48 (35 – 60)26 (22 – 30)<0,001
    sport>0,9
    Non1 268 (64%)9 (64%)
    Oui718 (36%)5 (36%)
    +

    + 1 + + + Statistique présentée: médiane (EI); n (%) +

    +

    + 2 + + + Test statistique réalisé: test de Wilcoxon-Mann-Whitney; test du khi-deux d'indépendance +

    +
    +

    Il est possible de préciser le type de test à utiliser.

    +
    d %>% tbl_summary(include = c("hard.rock", "age"), by = "hard.rock") %>% 
    +  add_p(test = list(all_continuous() ~ "wilcox.test"))
    + +
    + + + + + + + + + + + + + + + +
    Caractéristique +Non, N = 1 9861 + +Oui, N = 141 + +p-valeur2 +
    age48 (35 – 60)26 (22 – 30)<0,001
    +

    + 1 + + + Statistique présentée: médiane (EI) +

    +

    + 2 + + + Test statistique réalisé: test de Wilcoxon-Mann-Whitney +

    +
    +

    Cela fonctionne également avec les données pondérées et les plans d’échantillonnage complexe.

    +
    dw %>% tbl_svysummary(include = c("hard.rock", "age", "sport"), 
    +  by = "hard.rock") %>% add_p()
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Caractéristique +Non, N = 10 981 9631 + +Oui, N = 89 2641 + +p-valeur2 +
    age45 (31 – 60)23 (19 – 28)<0,001
    sport0,8
    Non6 656 841 (61%)57 920 (65%)
    Oui4 325 122 (39%)31 344 (35%)
    +

    + 1 + + + Statistique présentée: médiane (EI); n (%) +

    +

    + 2 + + + Test statistique réalisé: Wilcoxon rank-sum test for complex survey samples; chi-squared test with Rao & Scott's second-order correction +

    +

    @@ -16900,7 +21135,7 @@

    gtsummary

    -

    Il est à noter que tbl_regression sait prendre en comptre les effts d’interactions (voir ci-après).

    +

    Il est à noter que tbl_regression sait prendre en comptre les effets d’interactions (voir ci-après).

    @@ -21497,19 +25732,19 @@

    Un exemple concret : mortalité infanto-juvénile

    lookfor(menages)
    lookfor(femmes)
    lookfor(enfants)
    @@ -22039,7 +26274,7 @@

    Modèle de Cox

    tidy(mod2, exponentiate = TRUE)

    Pour représenter ces rapports de risque, on peut ici encore avoir recours à la fonction ggcoef de l’extension GGally.

    @@ -25811,7 +30046,7 @@

    Étendre ggplot2

    De nombreuses extensions permettent d’étendre les possibilités graphiques de ggplot2. Certaines ont déjà été abordées dans les différents chapitres d’analyse-R. Le présent chapitre ne se veut pas exhaustif et ne présente qu’une sélection choisie d’extensions.

    -

    Le site ggplot2 extensions (http://www.ggplot2-exts.org/) recense diverses extensions pour ggplot2.

    +

    Le site ggplot2 extensions (https://exts.ggplot2.tidyverse.org/gallery/) recense diverses extensions pour ggplot2.

    Pour une présentation des fonctions de base et des concepts de ggplot2, on pourra se référer au chapitre dédié ainsi qu’au deux chapitres introductifs : introduction à ggplot2 et graphiques bivariés avec ggplot2.

    Pour trouver l’inspiration et des exemples de code, rien ne vaut l’excellent site https://www.r-graph-gallery.com/.

    @@ -26546,36 +30781,41 @@

    ggpubr

    # Add the name colums dfm$name <- rownames(dfm) # Calculate the z-score of the mpg data -dfm$mpg_z <- (dfm$mpg -mean(dfm$mpg))/sd(dfm$mpg) -dfm$mpg_grp <- factor(ifelse(dfm$mpg_z < 0, "low", "high"), - levels = c("low", "high")) - -ggbarplot(dfm, x = "name", y = "mpg_z", - fill = "mpg_grp", # change fill color by mpg_level - color = "white", # Set bar border colors to white - palette = "jco", # jco journal color palett. see ?ggpar - sort.val = "asc", # Sort the value in ascending order - sort.by.groups = FALSE, # Don't sort inside each group - x.text.angle = 90, # Rotate vertically x axis texts - ylab = "MPG z-score", - xlab = FALSE, - legend.title = "MPG Group" - )
    +dfm$mpg_z <- (dfm$mpg - mean(dfm$mpg)) / sd(dfm$mpg) +dfm$mpg_grp <- factor(ifelse(dfm$mpg_z < 0, "low", "high"), + levels = c("low", "high") +) + +ggbarplot(dfm, + x = "name", y = "mpg_z", + fill = "mpg_grp", # change fill color by mpg_level + color = "white", # Set bar border colors to white + palette = "jco", # jco journal color palett. see ?ggpar + sort.val = "asc", # Sort the value in ascending order + sort.by.groups = FALSE, # Don't sort inside each group + x.text.angle = 90, # Rotate vertically x axis texts + ylab = "MPG z-score", + xlab = FALSE, + legend.title = "MPG Group" +)

    -
    ggdotchart(dfm, x = "name", y = "mpg_z",
    -           color = "cyl",                                # Color by groups
    -           palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette
    -           sorting = "descending",                       # Sort value in descending order
    -           add = "segments",                             # Add segments from y = 0 to dots
    -           add.params = list(color = "lightgray", size = 2), # Change segment color and size
    -           group = "cyl",                                # Order by groups
    -           dot.size = 6,                                 # Large dot size
    -           label = round(dfm$mpg_z,1),                        # Add mpg values as dot labels
    -           font.label = list(color = "white", size = 9, 
    -                             vjust = 0.5),               # Adjust label parameters
    -           ggtheme = theme_pubr()                        # ggplot2 theme
    -           )+
    -  geom_hline(yintercept = 0, linetype = 2, color = "lightgray")
    +
    ggdotchart(dfm,
    +  x = "name", y = "mpg_z",
    +  color = "cyl", # Color by groups
    +  palette = c("#00AFBB", "#E7B800", "#FC4E07"), # Custom color palette
    +  sorting = "descending", # Sort value in descending order
    +  add = "segments", # Add segments from y = 0 to dots
    +  add.params = list(color = "lightgray", size = 2), # Change segment color and size
    +  group = "cyl", # Order by groups
    +  dot.size = 6, # Large dot size
    +  label = round(dfm$mpg_z, 1), # Add mpg values as dot labels
    +  font.label = list(
    +    color = "white", size = 9,
    +    vjust = 0.5
    +  ), # Adjust label parameters
    +  ggtheme = theme_pubr() # ggplot2 theme
    +) +
    +  geom_hline(yintercept = 0, linetype = 2, color = "lightgray")

    Plus d’informations : https://rpkgs.datanovia.com/ggpubr/

    @@ -26602,255 +30842,209 @@

    ggdendro

    circlize

    L’extension circlize est l’extension de référence quand il s’agit de représentations circulaires. Un ouvrage entier lui est dédié : https://jokergoo.github.io/circlize_book/book/.

    Voici un exemple issu de https://www.data-to-viz.com/story/AdjacencyMatrix.html.

    -
    library(tidyverse)
    -
    -- Attaching packages -------------------------------------------------- tidyverse 1.3.0 --
    -
    v tibble  3.0.1     v purrr   0.3.4
    -v readr   1.3.1     v forcats 0.5.0
    -
    -- Conflicts ----------------------------------------------------- tidyverse_conflicts() --
    -x dplyr::arrange()         masks plyr::arrange()
    -x lubridate::as.difftime() masks base::as.difftime()
    -x dplyr::between()         masks data.table::between()
    -x purrr::compact()         masks plyr::compact()
    -x dplyr::count()           masks plyr::count()
    -x lubridate::date()        masks base::date()
    -x tidyr::extract()         masks magrittr::extract()
    -x dplyr::failwith()        masks plyr::failwith()
    -x dplyr::filter()          masks stats::filter()
    -x dplyr::first()           masks data.table::first()
    -x lubridate::hour()        masks data.table::hour()
    -x dplyr::id()              masks plyr::id()
    -x lubridate::intersect()   masks base::intersect()
    -x lubridate::isoweek()     masks data.table::isoweek()
    -x dplyr::lag()             masks stats::lag()
    -x dplyr::last()            masks data.table::last()
    -x lubridate::mday()        masks data.table::mday()
    -x lubridate::minute()      masks data.table::minute()
    -x lubridate::month()       masks data.table::month()
    -x ggpubr::mutate()         masks dplyr::mutate(), plyr::mutate()
    -x lubridate::quarter()     masks data.table::quarter()
    -x dplyr::rename()          masks plyr::rename()
    -x lubridate::second()      masks data.table::second()
    -x purrr::set_names()       masks magrittr::set_names()
    -x lubridate::setdiff()     masks base::setdiff()
    -x dplyr::summarise()       masks plyr::summarise()
    -x dplyr::summarize()       masks plyr::summarize()
    -x purrr::transpose()       masks data.table::transpose()
    -x lubridate::union()       masks base::union()
    -x lubridate::wday()        masks data.table::wday()
    -x lubridate::week()        masks data.table::week()
    -x lubridate::yday()        masks data.table::yday()
    -x lubridate::year()        masks data.table::year()
    -
    # Load data
    -data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/13_AdjacencyDirectedWeighted.csv", 
    -  header = TRUE)
    -# short names
    -colnames(data) <- c("Africa", "East Asia", "Europe", "Latin Ame.", 
    -  "North Ame.", "Oceania", "South Asia", "South East Asia", 
    -  "Soviet Union", "West.Asia")
    -rownames(data) <- colnames(data)
    -
    -# I need a long format
    -data_long <- data %>% rownames_to_column %>% gather(key = "key", 
    -  value = "value", -rowname)
    -
    -
    -library(circlize)
    -
    ========================================
    -circlize version 0.4.8
    -CRAN page: https://cran.r-project.org/package=circlize
    -Github page: https://github.com/jokergoo/circlize
    -Documentation: http://jokergoo.github.io/circlize_book/book/
    -
    -If you use it in published research, please cite:
    -Gu, Z. circlize implements and enhances circular visualization 
    -  in R. Bioinformatics 2014.
    -========================================
    -
    # parameters
    -circos.clear()
    -circos.par(start.degree = 90, gap.degree = 4, track.margin = c(-0.1, 
    -  0.1), points.overflow.warning = FALSE)
    -par(mar = rep(0, 4))
    -
    -# color palette
    -library(viridis)
    -
    Loading required package: viridisLite
    -
    mycolor <- viridis(10, alpha = 1, begin = 0, end = 1, option = "D")
    -mycolor <- mycolor[sample(1:10)]
    -
    -# Base plot
    -chordDiagram(x = data_long, grid.col = mycolor, transparency = 0.25, 
    -  directional = 1, direction.type = c("arrows", "diffHeight"), 
    -  diffHeight = -0.04, annotationTrack = "grid", annotationTrackHeight = c(0.05, 
    -    0.1), link.arr.type = "big.arrow", link.sort = TRUE, 
    -  link.largest.ontop = TRUE)
    -
    -# Add text and axis
    -circos.trackPlotRegion(track.index = 1, bg.border = NA, panel.fun = function(x, 
    -  y) {
    -  
    -  xlim = get.cell.meta.data("xlim")
    -  sector.index = get.cell.meta.data("sector.index")
    -  
    -  # Add names to the sector.
    -  circos.text(x = mean(xlim), y = 3.2, labels = sector.index, 
    -    facing = "bending", cex = 0.8)
    -  
    -  # Add graduation on axis
    -  circos.axis(h = "top", major.at = seq(from = 0, to = xlim[2], 
    -    by = ifelse(test = xlim[2] > 10, yes = 2, no = 1)), minor.ticks = 1, 
    -    major.tick.percentage = 0.5, labels.niceFacing = FALSE)
    -})
    +
    library(tidyverse)
    +
    +# Load data
    +data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/13_AdjacencyDirectedWeighted.csv", 
    +  header = TRUE)
    +# short names
    +colnames(data) <- c("Africa", "East Asia", "Europe", "Latin Ame.", 
    +  "North Ame.", "Oceania", "South Asia", "South East Asia", 
    +  "Soviet Union", "West.Asia")
    +rownames(data) <- colnames(data)
    +
    +# I need a long format
    +data_long <- data %>% rownames_to_column() %>% gather(key = "key", 
    +  value = "value", -rowname)
    +
    +
    +library(circlize)
    +# parameters
    +circos.clear()
    +circos.par(start.degree = 90, gap.degree = 4, track.margin = c(-0.1, 
    +  0.1), points.overflow.warning = FALSE)
    +par(mar = rep(0, 4))
    +
    +# color palette
    +library(viridis)
    +mycolor <- viridis(10, alpha = 1, begin = 0, end = 1, option = "D")
    +mycolor <- mycolor[sample(1:10)]
    +
    +# Base plot
    +chordDiagram(x = data_long, grid.col = mycolor, transparency = 0.25, 
    +  directional = 1, direction.type = c("arrows", "diffHeight"), 
    +  diffHeight = -0.04, annotationTrack = "grid", annotationTrackHeight = c(0.05, 
    +    0.1), link.arr.type = "big.arrow", link.sort = TRUE, 
    +  link.largest.ontop = TRUE)
    +
    +# Add text and axis
    +circos.trackPlotRegion(track.index = 1, bg.border = NA, panel.fun = function(x, 
    +  y) {
    +  xlim <- get.cell.meta.data("xlim")
    +  sector.index <- get.cell.meta.data("sector.index")
    +  
    +  # Add names to the sector.
    +  circos.text(x = mean(xlim), y = 3.2, labels = sector.index, 
    +    facing = "bending", cex = 0.8)
    +  
    +  # Add graduation on axis
    +  circos.axis(h = "top", major.at = seq(from = 0, to = xlim[2], 
    +    by = ifelse(test = xlim[2] > 10, yes = 2, no = 1)), minor.ticks = 1, 
    +    major.tick.percentage = 0.5, labels.niceFacing = FALSE)
    +})

    Diagrammes de Sankey

    Les diagrammes de Sankey sont un type alternatif de représentation de flux. Voici un premier exemple, qui reprend les données utilisées pour le diagramme circulaire précédent, avec la fonction sankeyNetwork de l’extension sankeyNetwork.

    -
    # Package
    -library(networkD3)
    -
    -# I need a long format
    -data_long <- data %>% rownames_to_column %>% gather(key = "key", 
    -  value = "value", -rowname) %>% filter(value > 0)
    -colnames(data_long) <- c("source", "target", "value")
    -data_long$target <- paste(data_long$target, " ", sep = "")
    -
    -# From these flows we need to create a node data frame: it
    -# lists every entities involved in the flow
    -nodes <- data.frame(name = c(as.character(data_long$source), 
    -  as.character(data_long$target)) %>% unique())
    -
    -# With networkD3, connection must be provided using id, not
    -# using real name like in the links dataframe.. So we need to
    -# reformat it.
    -data_long$IDsource = match(data_long$source, nodes$name) - 1
    -data_long$IDtarget = match(data_long$target, nodes$name) - 1
    -
    -# prepare colour scale
    -ColourScal = "d3.scaleOrdinal() .range([\"#FDE725FF\",\"#B4DE2CFF\",\"#6DCD59FF\",\"#35B779FF\",\"#1F9E89FF\",\"#26828EFF\",\"#31688EFF\",\"#3E4A89FF\",\"#482878FF\",\"#440154FF\"])"
    -
    -# Make the Network
    -sankeyNetwork(Links = data_long, Nodes = nodes, Source = "IDsource", 
    -  Target = "IDtarget", Value = "value", NodeID = "name", sinksRight = FALSE, 
    -  colourScale = ColourScal, nodeWidth = 40, fontSize = 13, 
    -  nodePadding = 20)
    -
    -

    Une alternative possible est fournie par l’extension ggalluvial et ses géométries geom_alluvium et geom_stratum.

    -
    library(ggalluvial)
    -ggplot(data = as.data.frame(Titanic)) + aes(axis1 = Class, axis2 = Sex, 
    -  axis3 = Age, y = Freq) + scale_x_discrete(limits = c("Class", 
    -  "Sex", "Age"), expand = c(0.1, 0.05)) + xlab("Demographic") + 
    -  geom_alluvium(aes(fill = Survived)) + geom_stratum() + geom_text(stat = "stratum", 
    -  infer.label = TRUE) + theme_minimal()
    +
    # Package
    +library(networkD3)
    +
    +# I need a long format
    +data_long <- data %>% rownames_to_column() %>% gather(key = "key", 
    +  value = "value", -rowname) %>% filter(value > 0)
    +colnames(data_long) <- c("source", "target", "value")
    +data_long$target <- paste(data_long$target, " ", sep = "")
    +
    +# From these flows we need to create a node data frame: it
    +# lists every entities involved in the flow
    +nodes <- data.frame(name = c(as.character(data_long$source), 
    +  as.character(data_long$target)) %>% unique())
    +
    +# With networkD3, connection must be provided using id, not
    +# using real name like in the links dataframe.. So we need to
    +# reformat it.
    +data_long$IDsource <- match(data_long$source, nodes$name) - 1
    +data_long$IDtarget <- match(data_long$target, nodes$name) - 1
    +
    +# prepare colour scale
    +ColourScal <- "d3.scaleOrdinal() .range([\"#FDE725FF\",\"#B4DE2CFF\",\"#6DCD59FF\",\"#35B779FF\",\"#1F9E89FF\",\"#26828EFF\",\"#31688EFF\",\"#3E4A89FF\",\"#482878FF\",\"#440154FF\"])"
    +
    +# Make the Network
    +sankeyNetwork(Links = data_long, Nodes = nodes, Source = "IDsource", 
    +  Target = "IDtarget", Value = "value", NodeID = "name", sinksRight = FALSE, 
    +  colourScale = ColourScal, nodeWidth = 40, fontSize = 13, 
    +  nodePadding = 20)
    +
    +

    Une alternative possible est fournie par l’extension ggalluvial et ses géométries geom_alluvium et geom_stratum.

    +
    library(ggalluvial)
    +ggplot(data = as.data.frame(Titanic)) + aes(axis1 = Class, axis2 = Sex, 
    +  axis3 = Age, y = Freq) + scale_x_discrete(limits = c("Class", 
    +  "Sex", "Age"), expand = c(0.1, 0.05)) + xlab("Demographic") + 
    +  geom_alluvium(aes(fill = Survived)) + geom_stratum() + geom_text(stat = "stratum", 
    +  infer.label = TRUE) + theme_minimal()
    +
    Warning: The parameter `infer.label` is deprecated.
    +Use `aes(label = after_stat(stratum))`.

    Mentionnons également l’extension riverplot pour la création de diagrammes de Sankey.

    DiagrammeR

    DiagrammeR est dédiée à la réalisation de diagrammes en ayant recours à la syntaxe Graphviz (via la fonction grViz) ou encore à la syntaxe Mermaid (via la fonction mermaid).

    -
    library(DiagrammeR)
    -grViz("
    -digraph boxes_and_circles {
    -
    -  # a 'graph' statement
    -  graph [overlap = true, fontsize = 10]
    -
    -  # several 'node' statements
    -  node [shape = box,
    -    fontname = Helvetica]
    -  A; B; C; D; E; F
    -
    -  node [shape = circle,
    -    fixedsize = true,
    -    width = 0.9] // sets as circles
    -  1; 2; 3; 4; 5; 6; 7; 8
    -
    -  # several 'edge' statements
    -  A->1 B->2 B->3 B->4 C->A
    -  1->D E->A 2->4 1->5 1->F
    -  E->6 4->6 5->7 6->7 3->8
    -}
    -")
    -
    -
    mermaid("
    -graph LR
    -A(Rounded)-->B[Rectangular]
    -B-->C{A Rhombus}
    -C-->D[Rectangle One]
    -C-->E[Rectangle Two]
    -")
    -
    -
    mermaid("
    -sequenceDiagram
    -  customer->>ticket seller: ask ticket
    -  ticket seller->>database: seats
    -  alt tickets available
    -  database->>ticket seller: ok
    -  ticket seller->>customer: confirm
    -  customer->>ticket seller: ok
    -  ticket seller->>database: book a seat
    -  ticket seller->>printer: print ticket else sold out
    -  database->>ticket seller: none left
    -  ticket seller->>customer: sorry
    -  end
    -")
    -
    -
    mermaid("
    -gantt
    -     dateFormat  YYYY-MM-DD
    -     title Adding GANTT diagram functionality to mermaid
    -
    -     section A section
    -     Completed task            :done,    des1, 2014-01-06,2014-01-08
    -     Active task               :active,  des2, 2014-01-09, 3d
    -     Future task               :         des3, after des2, 5d
    -     Future task2              :         des4, after des3, 5d
    -
    -     section Critical tasks
    -     Completed task in the critical line :crit, done, 2014-01-06,24h
    -     Implement parser and jison          :crit, done, after des1, 2d
    -     Create tests for parser             :crit, active, 3d
    -     Future task in critical line        :crit, 5d
    -     Create tests for renderer           :2d
    -     Add to mermaid                      :1d
    -
    -     section Documentation
    -     Describe gantt syntax               :active, a1, after des1, 3d
    -     Add gantt diagram to demo page      :after a1  , 20h
    -     Add another diagram to demo page    :doc1, after a1  , 48h
    -
    -     section Last section
    -     Describe gantt syntax               :after doc1, 3d
    -     Add gantt diagram to demo page      :20h
    -     Add another diagram to demo page    :48h
    -")
    -
    -

    Plus d’informations : https://rich-iannone.github.io/DiagrammeR/

    +
    library(DiagrammeR)
    +grViz("
    +digraph boxes_and_circles {
    +
    +  # a 'graph' statement
    +  graph [overlap = true, fontsize = 10]
    +
    +  # several 'node' statements
    +  node [shape = box,
    +    fontname = Helvetica]
    +  A; B; C; D; E; F
    +
    +  node [shape = circle,
    +    fixedsize = true,
    +    width = 0.9] // sets as circles
    +  1; 2; 3; 4; 5; 6; 7; 8
    +
    +  # several 'edge' statements
    +  A->1 B->2 B->3 B->4 C->A
    +  1->D E->A 2->4 1->5 1->F
    +  E->6 4->6 5->7 6->7 3->8
    +}
    +")
    +
    +
    mermaid("
    +graph LR
    +A(Rounded)-->B[Rectangular]
    +B-->C{A Rhombus}
    +C-->D[Rectangle One]
    +C-->E[Rectangle Two]
    +")
    +
    +
    mermaid("
    +sequenceDiagram
    +  customer->>ticket seller: ask ticket
    +  ticket seller->>database: seats
    +  alt tickets available
    +  database->>ticket seller: ok
    +  ticket seller->>customer: confirm
    +  customer->>ticket seller: ok
    +  ticket seller->>database: book a seat
    +  ticket seller->>printer: print ticket else sold out
    +  database->>ticket seller: none left
    +  ticket seller->>customer: sorry
    +  end
    +")
    +
    +
    mermaid("
    +gantt
    +     dateFormat  YYYY-MM-DD
    +     title Adding GANTT diagram functionality to mermaid
    +
    +     section A section
    +     Completed task            :done,    des1, 2014-01-06,2014-01-08
    +     Active task               :active,  des2, 2014-01-09, 3d
    +     Future task               :         des3, after des2, 5d
    +     Future task2              :         des4, after des3, 5d
    +
    +     section Critical tasks
    +     Completed task in the critical line :crit, done, 2014-01-06,24h
    +     Implement parser and jison          :crit, done, after des1, 2d
    +     Create tests for parser             :crit, active, 3d
    +     Future task in critical line        :crit, 5d
    +     Create tests for renderer           :2d
    +     Add to mermaid                      :1d
    +
    +     section Documentation
    +     Describe gantt syntax               :active, a1, after des1, 3d
    +     Add gantt diagram to demo page      :after a1  , 20h
    +     Add another diagram to demo page    :doc1, after a1  , 48h
    +
    +     section Last section
    +     Describe gantt syntax               :after doc1, 3d
    +     Add gantt diagram to demo page      :20h
    +     Add another diagram to demo page    :48h
    +")
    +
    +

    Plus d’informations : https://rich-iannone.github.io/DiagrammeR/

    highcharter

    L’extension highcharter permet de réaliser des graphiques HTML utilisant la librairie Javascript Highcharts.js.

    -
    library("highcharter")
    -data(diamonds, mpg, package = "ggplot2")
    -
    -hchart(mpg, "scatter", hcaes(x = displ, y = hwy, group = class))
    -
    -
    library(tidyverse)
    -library(highcharter)
    -mpgman3 <- mpg %>% group_by(manufacturer) %>% summarise(n = n(), 
    -  unique = length(unique(model))) %>% arrange(-n, -unique)
    -
    -hchart(mpgman3, "treemap", hcaes(x = manufacturer, value = n, 
    -  color = unique))
    -
    -
    data(unemployment)
    -
    -hcmap("countries/us/us-all-all", data = unemployment, name = "Unemployment", 
    -  value = "value", joinBy = c("hc-key", "code"), borderColor = "transparent") %>% 
    -  hc_colorAxis(dataClasses = color_classes(c(seq(0, 10, by = 2), 
    -    50))) %>% hc_legend(layout = "vertical", align = "right", 
    -  floating = TRUE, valueDecimals = 0, valueSuffix = "%")
    -
    -

    Plus d’informations : http://jkunst.com/highcharter/

    +
    library("highcharter")
    +data(diamonds, mpg, package = "ggplot2")
    +
    +hchart(mpg, "scatter", hcaes(x = displ, y = hwy, group = class))
    +
    +
    library(tidyverse)
    +library(highcharter)
    +mpgman3 <- mpg %>% group_by(manufacturer) %>% summarise(n = n(), 
    +  unique = length(unique(model))) %>% arrange(-n, -unique)
    +
    +hchart(mpgman3, "treemap", hcaes(x = manufacturer, value = n, 
    +  color = unique))
    +
    +
    data(unemployment)
    +
    +hcmap("countries/us/us-all-all", data = unemployment, name = "Unemployment", 
    +  value = "value", joinBy = c("hc-key", "code"), borderColor = "transparent") %>% 
    +  hc_colorAxis(dataClasses = color_classes(c(seq(0, 10, by = 2), 
    +    50))) %>% hc_legend(layout = "vertical", align = "right", 
    +  floating = TRUE, valueDecimals = 0, valueSuffix = "%")
    +
    +

    Plus d’informations : http://jkunst.com/highcharter/

    @@ -28244,525 +32438,1210 @@

    La fonction Vectorize

    - -
    +
    +
    + + + +

    Expressions régulières

    + +
    + + +

    Les expressions régulières sont un outils pour rechercher / remplacer dans des chaînes de texte. Il est préférable d’avoir lu au préalable le chapitre dédié à la manipulation de texte.

    +

    Pour une introduction (en anglais) aux expressions régulières, on pourra se référer au chapitre Strings de l’ouvrage R for Data Science de Garrett Grolemund et Hadley Wickham (http://r4ds.had.co.nz/strings.html).

    +

    Pour aller plus loin, le site de l’extension stringr propose une présentation détaillée (en anglais) de la syntaxe des expressions régulières (http://stringr.tidyverse.org/articles/regular-expressions.html).

    +

    Pour des besoins plus pointus, on pourra aussi utiliser l’extension stringi sur laquelle est elle-même basée stringr.

    + +
    +
    + + + +

    R Markdown : les rapports automatisés

    + +
    + +
    + +
    + +
    +

    La version originale de ce chapitre a été écrite par Julien Barnier dans le cadre de son Introduction à R et au tidyverse.

    +
    +

    +

    L’extension rmarkdown permet de générer des documents de manière dynamique en mélangeant texte mis en forme et résultats produits par du code R. Les documents générés peuvent être au format HTML, PDF, Word, et bien d’autres1. C’est donc un outil très pratique pour l’exportation, la communication et la diffusion de résultats d’analyse.

    +

    Le présent document a lui-même été généré à partir de fichiers R Markdown.

    +

    rmarkdown ne fait pas partie du tidyverse, mais elle est installée et chargée par défaut par RStudio2.

    +
    +

    Rapport rapide à partir d’un script R

    +

    Si vos analyses sont présentes dans un script R et que ce script contient tout le nécessaire pour la réalisation de votre analyse (i.e. chargement des données et des packages requis), vous pouvez très facilement réaliser un rapport rapide au format HTML, Word ou PDF, contenant à la fois votre code et les sorties associées.

    +

    Il suffit de cliquer sur l’icône compile report dans le quadrant supérieur gauche.

    +
    position de l’icône compile report
    +Position de l’icône compile report +

    De manière alternative, si votre script s’intitule analyses.R, vous pouvez exécuter la commande suivante :

    +
    rmarkdown::render("analyses.R")
    +

    Pour plus d’informations sur les options disponibles, vous pouvez également consulter https://rmarkdown.rstudio.com/articles_report_from_r_script.html.

    +
    +
    +

    Un premier exemple

    +

    Voici un exemple de document R Markdown minimal :

    +
    ---
    +title: "Test R Markdown"
    +---
    +
    +
    +*R Markdown* permet de mélanger :
    +
    +- du texte libre mis en forme
    +- des blocs de code R
    +
    +Les blocs de code sont exécutés et leur résultat affiché, par exemple :
    +
    +```{r}
    +mean(mtcars$mpg)
    +```
    +
    +## Graphiques
    +
    +On peut également inclure des graphiques :
    +
    +```{r}
    +plot(mtcars$hp, mtcars$mpg)
    +```
    +

    Ce document peut être compilé sous différents formats. Lors de cette étape, le texte est mis en forme, les blocs de code sont exécutés, leur résultat ajouté au document, et le tout est transformé dans un des différents formats possibles.

    +

    Voici le rendu du document précédent au format HTML :

    +
    Rendu HTML
    +Rendu HTML +

    Le rendu du même document au format PDF :

    +
    Rendu PDF
    +Rendu PDF +

    Et le rendu au format Word :

    +
    Rendu docx
    +Rendu docx +

    Les avantages de ce système sont nombreux :

    + +
    +
    +

    Créer un nouveau document

    +

    Un document R Markdown est un simple fichier texte enregistré avec l’extension .Rmd.

    +

    Sous RStudio, on peut créer un nouveau document en allant dans le menu File puis en choisissant New file puis R Markdown…. La boîte de dialogue suivante s’affiche :

    +
    Création d’un document R Markdown
    +Création d’un document R Markdown +

    On peut indiquer le titre, l’auteur du document ainsi que le format de sortie par défaut (il est possible de modifier facilement ses éléments par la suite). Plutôt qu’un document classique, on verra plus loin qu’on peut aussi choisir de créer une présentation sous forme de slides (entrée Presentation) ou de créer un document à partir d’un modèle (Entrée From Template).

    +

    Un fichier comportant un contenu d’exemple s’affiche alors. Vous pouvez l’enregistrer où vous le souhaitez avec une extension .Rmd.

    +
    +
    +

    Élements d’un document R Markdown

    +

    Un document R Markdown est donc un fichier texte qui ressemble à quelque chose comme ça :

    +
    ---
    +title: "Titre"
    +author: "Prénom Nom"
    +date: "10 avril 2017"
    +output: html_document
    +---
    +
    +```{r setup, include=FALSE}
    +knitr::opts_chunk$set(echo = TRUE)
    +```
    +
    +## Introduction
    +
    +Ceci est un document RMarkdown, qui mélange :
    +
    +- du texte balisé selon la syntaxe Markdown
    +- des bouts de code R qui seront exécutés
    +
    +Le code R se présente de la manière suivante :
    +
    +```{r}
    +summary(cars)
    +```
    +
    +## Graphiques
    +
    +On peut aussi inclure des graphiques, par exemple :
    +
    +```{r}
    +plot(pressure)
    +```
    +
    +

    En-tête (préambule)

    +

    La première partie du document est son en-tête. Il se situe en tout début de document, et est délimité par trois tirets (---) avant et après :

    +
    ---
    +title: "Titre"
    +author: "Prénom Nom"
    +date: "10 avril 2017"
    +output: html_document
    +---
    +

    Cet en-tête contient les métadonnées du document, comme son titre, son auteur, sa date, plus tout un tas d’options possibles qui vont permettre de configurer ou personnaliser l’ensemble du document et son rendu. Ici, par exemple, la ligne output: html_document indique que le document généré doit être au format HTML.

    +
    +
    +

    Texte du document

    +

    Le corps du document est constitué de texte qui suit la syntaxe Markdown. Un fichier Markdown est un fichier texte contenant un balisage léger qui permet de définir des niveaux de titres ou de mettre en forme le texte. Par exemple, le texte suivant :

    +
    Ceci est du texte avec *de l'italique* et **du gras**.
    +
    +On peut définir des listes à puces :
    +
    +- premier élément
    +- deuxième élément
    +

    Génèrera le texte mis en forme suivant :

    +
    +

    Ceci est du texte avec de l’italique et du gras.

    +

    On peut définir des listes à puces :

    +
      +
    • premier élément
    • +
    • deuxième élément
    • +
    +
    +

    On voit que des mots placés entre des astérisques sont mis en italique, des lignes qui commencent par un tiret sont transformés en liste à puce, etc.

    +

    On peut définir des titres de différents niveaux en faisant débuter une ligne par un ou plusieurs caractères # :

    +
    # Titre de niveau 1
    +
    +## Titre de niveau 2
    +
    +### Titre de niveau 3
    +

    Quand des titres ont été définis, si vous cliquez sur l’icône Show document outline totalement à droite de la barre d’outils associée au fichier R Markdown, une table des matières dynamique générée automatiquement à partir des titres présents dans le document s’affiche et vous permet de naviguer facilement dans celui-ci :

    +
    Table des matières dynamique
    +Table des matières dynamique +

    La syntaxe Markdown permet d’autres mises en forme, comme la possibilité d’insérer des liens ou des images. Par exemple, le code suivant :

    +
    [Exemple de lien](https://example.com)
    +

    Donnera le lien suivant :

    +
    +

    Exemple de lien

    +
    +

    Dans RStudio, le menu Help puis Markdown quick reference donne un aperçu plus complet de la syntaxe.

    +
    +
    +

    Blocs de code R

    +

    En plus du texte libre au format Markdown, un document R Markdown contient, comme son nom l’indique, du code R. Celui-ci est inclus dans des blocs (chunks) délimités par la syntaxe suivante :

    +
    ```{r}
    +x <- 1:5
    +```
    +

    Comme cette suite de caractères n’est pas très simple à saisir, vous pouvez utiliser le menu Insert de RStudio et choisir R3, ou utiliser le raccourci clavier Ctrl+Alt+i.

    +
    Menu d’insertion d’un bloc de code
    +Menu d’insertion d’un bloc de code +

    Dans RStudio les blocs de code R sont en général affichés avec une couleur de fond légèrement différente pour les distinguer du reste du document.

    +

    Quand votre curseur se trouve dans un bloc, vous pouvez saisir le code R que vous souhaitez, l’exécuter, utiliser l’autocomplétion, exactement comme si vous vous trouviez dans un script R. Vous pouvez également exécuter l’ensemble du code contenu dans un bloc à l’aide du raccourci clavier Ctrl+Shift+Entrée.

    +

    Dans RStudio, par défaut, les résultats d’un bloc de code (texte, tableau ou graphique) s’affichent directement dans la fenêtre d’édition du document, permettant de les visualiser facilement et de les conserver le temps de la session 4.

    +

    Lorsque le document est compilé au format HTML, PDF ou docx, chaque bloc est exécuté tour à tour, et le résultat inclus dans le document final, qu’il s’agisse de texte, d’un tableau ou d’un graphique. Les blocs sont liés entre eux, dans le sens où les données importées ou calculées dans un bloc sont accessibles aux blocs suivants. On peut donc aussi voir un document R Markdown comme un script R dans lequel on aurait intercalé du texte libre au format Markdown.

    +
    +

    À noter qu’avant chaque compilation, une nouvelle session R est lancée, ne contenant aucun objet. Les premiers blocs de code d’un document sont donc souvent utilisés pour importer des données, exécuter des recodages, etc.

    +
    +
    +
    +

    Compiler un document (Knit)

    +

    On peut à tout moment compiler, ou plutôt tricoter (Knit), un document R Markdown pour obtenir et visualiser le document généré. Pour cela, il suffit de cliquer sur le bouton Knit et de choisir le format de sortie voulu :

    +
    Menu Knit
    +Menu Knit +

    Vous pouvez aussi utiliser le raccourci Ctrl+Shift+K pour compiler le document dans le dernier format utilisé.

    +
    +

    Pour la génération du format PDF, vous devez avoir une installation fonctionnelle de LaTeX sur votre système. C’est en général le cas pour des ordinateurs Mac ou Linux, mais pas sous Windows : dans ce cas vous devrez installer une distribution comme MiKTeX.

    +
    +

    Un onglet R Markdown s’ouvre dans la même zone que l’onglet Console et indique la progression de la compilation, ainsi que les messages d’erreur éventuels. Si tout se passe bien, Le document devrait s’afficher soit dans une fenêtre Viewer de RStudio (pour la sortie HTML), soit dans le logiciel par défaut de votre ordinateur.

    +
    +
    +
    +

    Personnaliser le document généré

    +

    La personnalisation du document généré se fait en modifiant des options dans le préambule du document. RStudio propose néanmoins une petite interface graphique permettant de changer ces options plus facilement. Pour cela, cliquez sur l’icône en forme d’engrenage à droite du bouton Knit et choisissez Output Options…

    +
    Options de sortie R Markdown
    +Options de sortie R Markdown +

    Une boîte de dialogue s’affiche vous permettant de sélectionner le format de sortie souhaité et, selon le format, différentes options :

    +
    Dialogue d’options de sortie R Markdown
    +Dialogue d’options de sortie R Markdown +

    Pour le format HTML par exemple, l’onglet General vous permet de spécifier si vous voulez une table des matières, sa profondeur, les thèmes à appliquer pour le document et la coloration syntaxique des blocs R, etc. L’onglet Figures vous permet de changer les dimensions par défaut des graphiques générés.

    +
    +

    Une option très intéressante pour les fichiers HTML, accessible via l’onglet Advanced, est l’entrée Create standalone HTML document. Si elle est cochée (ce qui est le cas par défaut), le document HTML généré contiendra en un seul fichier le code HTML mais aussi les images et toutes les autres ressources nécessaires à son affichage. Ceci permet de générer des fichiers (parfois assez volumineux) que vous pouvez transférer très facilement à quelqu’un par mail ou en le mettant en ligne quelque part. Si la case n’est pas cochée, les images et autres ressources sont placées dans un dossier à part.

    +
    +

    Lorsque vous changez des options, RStudio va en fait modifier le préambule de votre document. Ainsi, si vous choisissez d’afficher une table des matières et de modifier le thème de coloration syntaxique, votre en-tête va devenir quelque chose comme :

    +
    ---
    +title: "Test R Markdown"
    +output:
    +   html_document: 
    +     highlight: kate
    +     toc: yes
    +---
    +

    Vous pouvez modifier les options directement en éditant le préambule.

    +

    À noter qu’il est possible de spécifier des options différentes selon les formats, par exemple :

    +
    ---
    +title: "Test R Markdown"
    +output:
    +  html_document: 
    +    highlight: kate
    +    toc: yes
    +  pdf_document: 
    +    fig_caption: yes
    +    highlight: kate
    +---
    +

    La liste complète des options possibles est présente sur le site de la documentation officielle (très complet et bien fait) et sur l’antisèche et le guide de référence, accessibles depuis RStudio via le menu Help puis Cheatsheets.

    +
    +
    +

    Options des blocs de code R

    +

    Il est également possible de passer des options à chaque bloc de code R pour modifier son comportement.

    +

    On rappelle qu’on bloc de code se présente de la manière suivante :

    +
    ```{r}
    +x <- 1:5
    +```
    +

    Les options d’un bloc de code sont à placer à l’intérieur des accolades {r}.

    +
    +

    Nom du bloc

    +

    La première possibilité est de donner un nom au bloc. Celui-ci est indiqué directement après le r :

    +

    {r nom_du_bloc}

    +

    Il n’est pas obligatoire de nommer un bloc, mais cela peut être utile en cas d’erreur à la compilation, pour identifier le bloc ayant causé le problème. Attention, on ne peut pas avoir deux blocs avec le même nom.

    +
    +
    +

    Options

    +

    En plus d’un nom, on peut passer à un bloc une série d’options sous la forme option = valeur. Voici un exemple de bloc avec un nom et des options :

    +
    ```{r mon_bloc, echo = FALSE, warning = TRUE}
    +x <- 1:5
    +```
    +

    Et un exemple de bloc non nommé avec des options :

    +
    ```{r echo = FALSE, warning = FALSE}
    +x <- 1:5
    +```
    +

    Une des options la plus utile est l’option echo. Par défaut echo vaut TRUE, et le bloc de code R est inséré dans le document généré, de cette manière :

    +
    x <- 1:5
    +print(x)
    +
    [1] 1 2 3 4 5
    +

    Mais si on positionne l’option echo=FALSE, alors le code R n’est plus inséré dans le document, et seul le résultat est visible :

    +
    [1] 1 2 3 4 5
    +

    Voici une liste de quelques unes des options disponibles :

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    OptionValeursDescription
    echoTRUE/FALSEAfficher ou non le code R dans le document
    evalTRUE/FALSEExécuter ou non le code R à la compilation
    includeTRUE/FALSEInclure ou non le code R et ses résultats dans le document
    results“hide”/“asis”/“markup”/“hold”Type de résultats renvoyés par le bloc de code
    warningTRUE/FALSEAfficher ou non les avertissements générés par le bloc
    messageTRUE/FALSEAfficher ou non les messages générés par le bloc
    +

    Il existe de nombreuses autres options décrites notamment dans guide de référence R Markdown (PDF en anglais).

    +
    +
    +

    Modifier les options

    +

    Il est possible de modifier les options manuellement en éditant l’en-tête du bloc de code, mais on peut aussi utiliser une petite interface graphique proposée par RStudio. Pour cela, il suffit de cliquer sur l’icône d’engrenage située à droite sur la ligne de l’en-tête de chaque bloc :

    +
    Menu d’options de bloc de code
    +Menu d’options de bloc de code +

    Vous pouvez ensuite modifier les options les plus courantes, et cliquer sur Apply pour les appliquer.

    +
    +
    +

    Options globales

    +

    On peut vouloir appliquer une option à l’ensemble des blocs d’un document. Par exemple, on peut souhaiter par défaut ne pas afficher le code R de chaque bloc dans le document final.

    +

    On peut positionner une option globalement en utilisant la fonction knitr::opts_chunk$set(). Par exemple, insérer knitr::opts_chunk$set(echo = FALSE) dans un bloc de code positionnera l’option echo = FALSE par défaut pour tous les blocs suivants.

    +

    En général, on place toutes ces modifications globales dans un bloc spécial nommé setup et qui est le premier bloc du document :

    +
    ```{r setup, include=FALSE}
    +knitr::opts_chunk$set(echo = TRUE)
    +```
    +
    +

    Par défaut RStudio exécute systématiquement le contenu du bloc setup avant d’exécuter celui d’un autre bloc.

    +
    +
    +
    +

    Mise en cache des résultats

    +

    Compiler un document R Markdown peut être long, car il faut à chaque fois exécuter l’ensemble des blocs de code R qui le constituent.

    +

    Pour accélérer cette opération, R Markdown utilise un système de mise en cache : les résultats de chaque bloc sont enregistrés dans un fichier et à la prochaine compilation, si le code et les options du bloc n’ont pas été modifiés, c’est le contenu du fichier de cache qui est utilisé, ce qui évite d’exécuter le code R.

    +
    +

    On peut activer ou désactiver la mise en cache des résultats pour chaque bloc de code avec l’option cache = TRUE ou cache = FALSE, et on peut aussi désactiver totalement la mise en cache pour le document en ajoutant knitr::opts_chunk$set(echo = FALSE) dans le premier bloc setup.

    +
    +

    Ce système de cache peut poser problème par exemple si les données source changent : dans ce cas les résultats de certains blocs peuvent ne pas être mis à jour s’ils sont présents en cache. Dans ce cas, on peut vider le cache du document, ce qui forcera un recalcul de tous les blocs de code à la prochaine compilation. Pour cela, vous pouvez ouvrir le menu Knit et choisir Clear Knitr Cache… :

    +
    Menu Knit
    +Menu Knit +
    +
    +
    +
    +

    Rendu des tableaux

    +
    +

    Tableaux croisés

    +

    Par défaut, les tableaux issus de la fonction table sont affichés comme ils apparaissent dans la console de R, en texte brut :

    +
    library(questionr)
    +data(hdv2003)
    +tab <- lprop(table(hdv2003$qualif, hdv2003$sexe))
    +tab
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Homme + +Femme + +Total +
    +Ouvrier specialise + +47.29064 + +52.70936 + +100 +
    +Ouvrier qualifie + +78.42466 + +21.57534 + +100 +
    +Technicien + +76.74419 + +23.25581 + +100 +
    +Profession intermediaire + +55.00000 + +45.00000 + +100 +
    +Cadre + +55.76923 + +44.23077 + +100 +
    +Employe + +16.16162 + +83.83838 + +100 +
    +Autre + +36.20690 + +63.79310 + +100 +
    +Ensemble + +44.82759 + +55.17241 + +100 +
    +

    On peut améliorer leur présentation en utilisant la fonction kable de l’extension knitr. Celle-ci fournit un formatage adapté en fonction du format de sortie. On aura donc des tableaux propres que ce soit en HTML, PDF ou aux formats traitements de texte :

    +
    library(knitr)
    +kable(tab)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Homme + +Femme + +Total +
    +Ouvrier specialise + +47.29064 + +52.70936 + +100 +
    +Ouvrier qualifie + +78.42466 + +21.57534 + +100 +
    +Technicien + +76.74419 + +23.25581 + +100 +
    +Profession intermediaire + +55.00000 + +45.00000 + +100 +
    +Cadre + +55.76923 + +44.23077 + +100 +
    +Employe + +16.16162 + +83.83838 + +100 +
    +Autre + +36.20690 + +63.79310 + +100 +
    +Ensemble + +44.82759 + +55.17241 + +100 +
    +

    Différents arguments permettent de modifier la sortie de kable. digits, par exemple, permet de spécifier le nombre de chiffres significatifs à afficher dans les colonnes de nombres :

    +
    kable(tab, digits = 1)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Homme + +Femme + +Total +
    +Ouvrier specialise + +47.3 + +52.7 + +100 +
    +Ouvrier qualifie + +78.4 + +21.6 + +100 +
    +Technicien + +76.7 + +23.3 + +100 +
    +Profession intermediaire + +55.0 + +45.0 + +100 +
    +Cadre + +55.8 + +44.2 + +100 +
    +Employe + +16.2 + +83.8 + +100 +
    +Autre + +36.2 + +63.8 + +100 +
    +Ensemble + +44.8 + +55.2 + +100 +
    +

    Pour une présentation plus avancée, on pourra également avoir recours à l’extenstion gtsummary et aux fonctions tbl_summary, tbl_svysummary et tbl_regression.

    +
    library(gtsummary)
    +theme_gtsummary_language("fr", decimal.mark = ",", big.mark = " ")
    +
    Setting `language: fr` theme
    +
    hdv2003 %>% dplyr::select(sexe, qualif) %>% tbl_summary(by = "sexe")
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
    Caractéristique +Homme, N = 8991 + +Femme, N = 1 1011 +
    qualif
    Ouvrier specialise96 (13%)107 (12%)
    Ouvrier qualifie229 (31%)63 (6,9%)
    Technicien66 (8,9%)20 (2,2%)
    Profession intermediaire88 (12%)72 (7,9%)
    Cadre145 (20%)115 (13%)
    Employe96 (13%)498 (55%)
    Autre21 (2,8%)37 (4,1%)
    Manquant158189
    + + +

    + 1 + + + Statistique présentée: n (%) +

    + + +

    Tableaux de données et tris à plat

    En ce qui concerne les tableaux de données (tibble ou data frame), l’affichage HTML par défaut se contente d’un affichage texte comme dans la console, très peu lisible dès que le tableau dépasse une certaine dimension.

    Une alternative est d’utiliser la fonction paged_table, qui affiche une représentation HTML paginée du tableau :

    -
    rmarkdown::paged_table(hdv2003)
    +
    rmarkdown::paged_table(hdv2003)

    Une autre alternative est d’utiliser kable, ou encore la fonction datatable de l’extension DT, qui propose encore davantage d’interactivité :

    -
    DT::datatable(hdv2003)
    +
    DT::datatable(hdv2003)

    Dans tous les cas il est déconseillé d’afficher de cette manière un tableau de données de très grandes dimensions, car le fichier HTML résultant contiendrait l’ensemble des données et serait donc très volumineux.

    @@ -28776,69 +33655,128 @@

    Autres extensions pour présenter des tableaux

    printr

    L’extension printr développée par le même auteur que knitr étent le fonctionnement par défaut de knitr. Une fois chargée, le rendu automatique de certains objets (tel qu’un tableau croisé à trois variables) sera amélioré.

    -
    library(printr)
    -
    Registered S3 method overwritten by 'printr':
    -  method                from     
    -  knit_print.data.frame rmarkdown
    -
    x1 = sample(letters[1:2], 1000, TRUE)
    -x2 = sample(letters[1:2], 1000, TRUE)
    -x3 = sample(letters[1:2], 1000, TRUE)
    -table(x1, x2, x3)
    +
    library(printr)
    +
    x1 = sample(letters[1:2], 1000, TRUE)
    +x2 = sample(letters[1:2], 1000, TRUE)
    +x3 = sample(letters[1:2], 1000, TRUE)
    +table(x1, x2, x3)
    - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + +
    x1x2x3Freq
    +x1 + +x2 + +x3 + +Freq +
    aaa136
    +a + +a + +a + +136 +
    b137
    + + +b + +137 +
    ba108
    + +b + +a + +108 +
    b135
    + + +b + +135 +
    baa126
    +b + +a + +a + +126 +
    b110
    + + +b + +110 +
    ba132
    + +b + +a + +132 +
    b116
    + + +b + +116 +
    @@ -28847,26 +33785,26 @@

    printr

    kableExtra

    L’extension kableExtra a pour objectif d’étendre la fonction kable de knitr avec des options comme la possibilité de regrouper des colonnes, ajouter des notes de tableau, coloriser certaines cellules…

    -
    library(kableExtra)
    -dt <- mtcars[1:5, 1:4]
    -
    -kable(dt, format = "html", caption = "Demo Table") %>% kable_styling(bootstrap_options = "striped", 
    -  full_width = F) %>% add_header_above(c(" ", `Group 1` = 2, 
    -  `Group 2[note]` = 2)) %>% add_footnote(c("table footnote"))
    +
    library(kableExtra)
    +dt <- mtcars[1:5, 1:4]
    +
    +kable(dt, format = "html", caption = "Demo Table") %>% kable_styling(bootstrap_options = "striped", 
    +  full_width = F) %>% add_header_above(c(" ", `Group 1` = 2, 
    +  `Group 2[note]` = 2)) %>% add_footnote(c("table footnote"))
    - - -
    Demo Table
    + +
    Group 1
    +
    Group 2a
    @@ -28984,41 +33922,30 @@

    kableExtra

    Pour une présentation détaillée, vous pouvez vous référer aux vignettes disponibles avec l’extension.

    Notamment, il est possible d’utiliser kableExtra en conjonction avec l’extension formattable pour des rendus colorés et encore plus personnalisé de vos tableaux (voir la vignette dédiée).

    -
    library(knitr)
    -library(kableExtra)
    -library(formattable)
    -library(dplyr, quietly = TRUE)
    -
    
    -Attaching package: 'dplyr'
    -
    The following object is masked from 'package:kableExtra':
    -
    -    group_rows
    -
    The following objects are masked from 'package:stats':
    -
    -    filter, lag
    -
    The following objects are masked from 'package:base':
    -
    -    intersect, setdiff, setequal, union
    -
    mtcars[1:5, 1:4] %>% mutate(car = row.names(.), mpg = color_tile("white", 
    -  "orange")(mpg), cyl = cell_spec(cyl, "html", angle = (1:5) * 
    -  60, background = "red", color = "white", align = "center"), 
    -  disp = ifelse(disp > 200, cell_spec(disp, "html", color = "red", 
    -    bold = T), cell_spec(disp, "html", color = "green", italic = T)), 
    -  hp = color_bar("lightgreen")(hp)) %>% select(car, everything()) %>% 
    -  kable("html", escape = F) %>% kable_styling("hover", full_width = F) %>% 
    -  column_spec(5, width = "3cm") %>% add_header_above(c(" ", 
    -  Hello = 2, World = 2))
    +
    library(knitr)
    +library(kableExtra)
    +library(formattable)
    +library(dplyr, quietly = TRUE)
    +mtcars[1:5, 1:4] %>% mutate(car = row.names(.), mpg = color_tile("white", 
    +  "orange")(mpg), cyl = cell_spec(cyl, "html", angle = (1:5) * 
    +  60, background = "red", color = "white", align = "center"), 
    +  disp = ifelse(disp > 200, cell_spec(disp, "html", color = "red", 
    +    bold = T), cell_spec(disp, "html", color = "green", italic = T)), 
    +  hp = color_bar("lightgreen")(hp)) %>% select(car, everything()) %>% 
    +  kable("html", escape = F) %>% kable_styling("hover", full_width = F) %>% 
    +  column_spec(5, width = "3cm") %>% add_header_above(c(" ", 
    +  Hello = 2, World = 2))
    - - -
    + +
    Hello
    +
    World
    @@ -29134,26 +34061,21 @@

    kableExtra

    gt

    L’extension gt en cours de développement par l’équipe de RStudio vise, un peu sur le modèle de ggplot2, à proposer une grammaire des tableaux. L’extension n’est pour le moment compatible qu’avec un rendu HTML mais la prise en compte du format PDF est prévue. C’est une extension encore assez nouvelle mais qui risque de se développer assez rapidement vu les équipes en charge de son développement.

    -
    library(gt)
    -
    
    -Attaching package: 'gt'
    -
    The following object is masked from 'package:formattable':
    -
    -    currency
    -
    exibble %>% gt(rowname_col = "row", groupname_col = "group") %>% 
    -  tab_spanner(label = "Date et/ou Heure", columns = vars(date, 
    -    time, datetime)) %>% fmt_number(columns = vars(num), 
    -  decimals = 2, locale = "fr") %>% fmt_date(columns = vars(date), 
    -  date_style = 7) %>% fmt_time(columns = vars(time), time_style = 4) %>% 
    -  fmt_datetime(columns = vars(datetime), date_style = 6, time_style = 4) %>% 
    -  fmt_currency(columns = vars(currency), currency = "EUR", 
    -    locale = "fr") %>% tab_options(column_labels.font.size = "small", 
    -  table.font.size = "small", row_group.font.size = "small", 
    -  data_row.padding = px(3)) %>% summary_rows(groups = TRUE, 
    -  columns = vars(num), fns = list(moyenne = ~mean(., na.rm = TRUE), 
    -    total = ~sum(., na.rm = TRUE))) %>% grand_summary_rows(columns = vars(currency), 
    -  fns = list(`grand total` = ~sum(., na.rm = TRUE)), formatter = fmt_currency, 
    -  currency = "EUR")
    +
    library(gt)
    +exibble %>% gt(rowname_col = "row", groupname_col = "group") %>% 
    +  tab_spanner(label = "Date et/ou Heure", columns = vars(date, 
    +    time, datetime)) %>% fmt_number(columns = vars(num), 
    +  decimals = 2, locale = "fr") %>% fmt_date(columns = vars(date), 
    +  date_style = 7) %>% fmt_time(columns = vars(time), time_style = 4) %>% 
    +  fmt_datetime(columns = vars(datetime), date_style = 6, time_style = 4) %>% 
    +  fmt_currency(columns = vars(currency), currency = "EUR", 
    +    locale = "fr") %>% tab_options(column_labels.font.size = "small", 
    +  table.font.size = "small", row_group.font.size = "small", 
    +  data_row.padding = px(3)) %>% summary_rows(groups = TRUE, 
    +  columns = vars(num), fns = list(moyenne = ~mean(., na.rm = TRUE), 
    +    total = ~sum(., na.rm = TRUE))) %>% grand_summary_rows(columns = vars(currency), 
    +  fns = list(`grand total` = ~sum(., na.rm = TRUE)), formatter = fmt_currency, 
    +  currency = "EUR")
    + diff --git a/analyse-de-sequences.html b/analyse-de-sequences.html index 10b784f3..cc9b18ae 100644 --- a/analyse-de-sequences.html +++ b/analyse-de-sequences.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + + diff --git a/annotations-mathematiques.html b/annotations-mathematiques.html index c9553af5..10f6416c 100644 --- a/annotations-mathematiques.html +++ b/annotations-mathematiques.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + + diff --git a/classification-ascendante-hierarchique.html b/classification-ascendante-hierarchique.html index 4882f290..168116d7 100644 --- a/classification-ascendante-hierarchique.html +++ b/classification-ascendante-hierarchique.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + + + + + diff --git a/donnees-ponderees.html b/donnees-ponderees.html index 305b54ea..611be616 100644 --- a/donnees-ponderees.html +++ b/donnees-ponderees.html @@ -59,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + diff --git a/effets-d-interaction.html b/effets-d-interaction.html index 9e0ccf65..eb8ca665 100644 --- a/effets-d-interaction.html +++ b/effets-d-interaction.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + + + diff --git a/extensions.html b/extensions.html index f3b1df2e..74814caa 100644 --- a/extensions.html +++ b/extensions.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + diff --git a/formater-nombres.html b/formater-nombres.html index 92186169..106162ee 100644 --- a/formater-nombres.html +++ b/formater-nombres.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,15 @@ gtag('config', 'UA-121727005-1'); + + diff --git a/formules.html b/formules.html index b0a10ba1..d6414372 100644 --- a/formules.html +++ b/formules.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + diff --git a/ggplot2.html b/ggplot2.html index eeeb60c0..6f8aaf2f 100644 --- a/ggplot2.html +++ b/ggplot2.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,15 @@ gtag('config', 'UA-121727005-1'); + + diff --git a/graphiques-bivaries-ggplot2.html b/graphiques-bivaries-ggplot2.html index 2a81e616..dbb451b8 100644 --- a/graphiques-bivaries-ggplot2.html +++ b/graphiques-bivaries-ggplot2.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + diff --git a/graphiques-interactifs.html b/graphiques-interactifs.html index a54f3cc1..c2afa090 100644 --- a/graphiques-interactifs.html +++ b/graphiques-interactifs.html @@ -20,6 +20,7 @@ + @@ -65,6 +66,78 @@ gtag('config', 'UA-121727005-1'); + + + + diff --git a/index-des-extensions.html b/index-des-extensions.html index a2b09636..f37600b7 100644 --- a/index-des-extensions.html +++ b/index-des-extensions.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,15 @@ gtag('config', 'UA-121727005-1'); + + @@ -953,8 +963,13 @@

    gtsummary

    @@ -1018,6 +1033,10 @@

    L

    +

    laballed

    +

    labelled

    diff --git a/index-des-fonctions.html b/index-des-fonctions.html index 8ab3204c..37843cea 100644 --- a/index-des-fonctions.html +++ b/index-des-fonctions.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,15 @@ gtag('config', 'UA-121727005-1'); + + @@ -503,8 +513,14 @@

    add_overall (gtsummary)

    +

    add_p (gtsummary)

    +

    addNA (base)

    DOI

    diff --git a/installation-de-R-et-RStudio.html b/installation-de-R-et-RStudio.html index 2144e177..cdf22e3f 100644 --- a/installation-de-R-et-RStudio.html +++ b/installation-de-R-et-RStudio.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,15 @@ gtag('config', 'UA-121727005-1'); + + diff --git a/intervalles-de-confiance.html b/intervalles-de-confiance.html index 97cbeda9..76adea56 100644 --- a/intervalles-de-confiance.html +++ b/intervalles-de-confiance.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + + '+ +this.getTable(!0)+"";F(f(a,"application/vnd.ms-excel")||"data:application/vnd.ms-excel;base64,"+p.btoa(unescape(encodeURIComponent(a))),this.getFilename()+".xls")};b.prototype.viewData=function(){this.dataTableDiv||(this.dataTableDiv=u.createElement("div"),this.dataTableDiv.className="highcharts-data-table",this.renderTo.parentNode.insertBefore(this.dataTableDiv,this.renderTo.nextSibling));this.dataTableDiv.innerHTML=this.getTable();D(this,"afterViewData",this.dataTableDiv)};if(b=K().exporting)E(b.menuItemDefinitions, +{downloadCSV:{textKey:"downloadCSV",onclick:function(){this.downloadCSV()}},downloadXLS:{textKey:"downloadXLS",onclick:function(){this.downloadXLS()}},viewData:{textKey:"viewData",onclick:function(){this.viewData()}}}),b.buttons&&b.buttons.contextButton.menuItems.push("separator","downloadCSV","downloadXLS","viewData");c.map&&(c.map.prototype.exportKey="name");c.mapbubble&&(c.mapbubble.prototype.exportKey="name");c.treemap&&(c.treemap.prototype.exportKey="name")});e(a,"masters/modules/export-data.src.js", +[],function(){})}); +//# sourceMappingURL=export-data.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/exporting.js b/libs/highcharts-8.1.2/modules/exporting.js new file mode 100644 index 00000000..6be7ca4f --- /dev/null +++ b/libs/highcharts-8.1.2/modules/exporting.js @@ -0,0 +1,43 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Exporting module + + (c) 2010-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/exporting",["highcharts"],function(p){c(p);c.Highcharts=p;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function p(c,l,h,k){c.hasOwnProperty(l)||(c[l]=k.apply(null,h))}c=c?c._modules:{};p(c,"modules/full-screen.src.js",[c["parts/Chart.js"],c["parts/Globals.js"],c["parts/Utilities.js"]],function(c,l,h){var k=h.addEvent; +h=function(){function c(e){this.chart=e;this.isOpen=!1;e=e.renderTo;this.browserProps||("function"===typeof e.requestFullscreen?this.browserProps={fullscreenChange:"fullscreenchange",requestFullscreen:"requestFullscreen",exitFullscreen:"exitFullscreen"}:e.mozRequestFullScreen?this.browserProps={fullscreenChange:"mozfullscreenchange",requestFullscreen:"mozRequestFullScreen",exitFullscreen:"mozCancelFullScreen"}:e.webkitRequestFullScreen?this.browserProps={fullscreenChange:"webkitfullscreenchange", +requestFullscreen:"webkitRequestFullScreen",exitFullscreen:"webkitExitFullscreen"}:e.msRequestFullscreen&&(this.browserProps={fullscreenChange:"MSFullscreenChange",requestFullscreen:"msRequestFullscreen",exitFullscreen:"msExitFullscreen"}))}c.prototype.close=function(){var e=this.chart;if(this.isOpen&&this.browserProps&&e.container.ownerDocument instanceof Document)e.container.ownerDocument[this.browserProps.exitFullscreen]();this.unbindFullscreenEvent&&this.unbindFullscreenEvent();this.isOpen=!1; +this.setButtonText()};c.prototype.open=function(){var e=this,c=e.chart;if(e.browserProps){e.unbindFullscreenEvent=k(c.container.ownerDocument,e.browserProps.fullscreenChange,function(){e.isOpen?(e.isOpen=!1,e.close()):(e.isOpen=!0,e.setButtonText())});var h=c.renderTo[e.browserProps.requestFullscreen]();if(h)h["catch"](function(){alert("Full screen is not supported inside a frame.")});k(c,"destroy",e.unbindFullscreenEvent)}};c.prototype.setButtonText=function(){var e,c=this.chart,h=c.exportDivElements, +k=c.options.exporting,l=null===(e=null===k||void 0===k?void 0:k.buttons)||void 0===e?void 0:e.contextButton.menuItems;e=c.options.lang;(null===k||void 0===k?0:k.menuItemDefinitions)&&(null===e||void 0===e?0:e.exitFullscreen)&&e.viewFullscreen&&l&&h&&h.length&&(h[l.indexOf("viewFullscreen")].innerHTML=this.isOpen?e.exitFullscreen:k.menuItemDefinitions.viewFullscreen.text||e.viewFullscreen)};c.prototype.toggle=function(){this.isOpen?this.close():this.open()};return c}();l.Fullscreen=h;k(c,"beforeRender", +function(){this.fullscreen=new l.Fullscreen(this)});return l.Fullscreen});p(c,"mixins/navigation.js",[],function(){return{initUpdate:function(c){c.navigation||(c.navigation={updates:[],update:function(c,h){this.updates.forEach(function(k){k.update.call(k.context,c,h)})}})},addUpdate:function(c,l){l.navigation||this.initUpdate(l);l.navigation.updates.push({update:c,context:l})}}});p(c,"modules/exporting.src.js",[c["parts/Chart.js"],c["mixins/navigation.js"],c["parts/Globals.js"],c["parts/Options.js"], +c["parts/SVGRenderer.js"],c["parts/Utilities.js"]],function(c,l,h,k,p,e){var x=h.doc,H=h.isTouchDevice,z=h.win;k=k.defaultOptions;var t=e.addEvent,u=e.css,y=e.createElement,D=e.discardElement,w=e.extend,I=e.find,B=e.fireEvent,J=e.isObject,n=e.merge,E=e.objectEach,q=e.pick,K=e.removeEvent,L=e.uniqueKey,F=z.navigator.userAgent,G=h.Renderer.prototype.symbols,M=/Edge\/|Trident\/|MSIE /.test(F),N=/firefox/i.test(F);w(k.lang,{viewFullscreen:"View in full screen",exitFullscreen:"Exit from full screen",printChart:"Print chart", +downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});k.navigation||(k.navigation={});n(!0,k.navigation,{buttonOptions:{theme:{},symbolSize:14,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,verticalAlign:"top",width:24}});n(!0,k.navigation,{menuStyle:{border:"1px solid #999999",background:"#ffffff",padding:"5px 0"},menuItemStyle:{padding:"0.5em 1em", +color:"#333333",background:"none",fontSize:H?"14px":"11px",transition:"background 250ms, color 250ms"},menuItemHoverStyle:{background:"#335cad",color:"#ffffff"},buttonOptions:{symbolFill:"#666666",symbolStroke:"#666666",symbolStrokeWidth:3,theme:{padding:5}}});k.exporting={type:"image/png",url:"https://export.highcharts.com/",printMaxWidth:780,scale:2,buttons:{contextButton:{className:"highcharts-contextbutton",menuClassName:"highcharts-contextmenu",symbol:"menu",titleKey:"contextButtonTitle",menuItems:"viewFullscreen printChart separator downloadPNG downloadJPEG downloadPDF downloadSVG".split(" ")}}, +menuItemDefinitions:{viewFullscreen:{textKey:"viewFullscreen",onclick:function(){this.fullscreen.toggle()}},printChart:{textKey:"printChart",onclick:function(){this.print()}},separator:{separator:!0},downloadPNG:{textKey:"downloadPNG",onclick:function(){this.exportChart()}},downloadJPEG:{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},downloadPDF:{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},downloadSVG:{textKey:"downloadSVG", +onclick:function(){this.exportChart({type:"image/svg+xml"})}}}};h.post=function(a,b,f){var d=y("form",n({method:"post",action:a,enctype:"multipart/form-data"},f),{display:"none"},x.body);E(b,function(a,b){y("input",{type:"hidden",name:b,value:a},null,d)});d.submit();D(d)};h.isSafari&&h.win.matchMedia("print").addListener(function(a){h.printingChart&&(a.matches?h.printingChart.beforePrint():h.printingChart.afterPrint())});w(c.prototype,{sanitizeSVG:function(a,b){var f=a.indexOf("")+6,d=a.substr(f); +a=a.substr(0,f);b&&b.exporting&&b.exporting.allowHTML&&d&&(d=''+d+"",a=a.replace("",d+""));a=a.replace(/zIndex="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\(("|")(.*?)("|");?\)/g,"url($2)").replace(/url\([^#]+#/g,"url(#").replace(/]+(>|$)/g,"").replace(/[\s_]+/g,"-").replace(/[^a-z0-9\-]/g,"").replace(/^[\-]+/g,"").replace(/[\-]+/g,"-").substr(0,24).replace(/[\-]+$/g,""));if(!b||5>b.length)b="chart";return b},exportChart:function(a,b){b=this.getSVGForExport(a,b);a=n(this.options.exporting,a);h.post(a.url,{filename:a.filename?a.filename.replace(/\//g,"-"):this.getFilename(),type:a.type,width:a.width||0, +scale:a.scale,svg:b},a.formAttributes)},moveContainers:function(a){(this.fixedDiv?[this.fixedDiv,this.scrollingContainer]:[this.container]).forEach(function(b){a.appendChild(b)})},beforePrint:function(){var a=x.body,b=this.options.exporting.printMaxWidth,f={childNodes:a.childNodes,origDisplay:[],resetParams:void 0};this.isPrinting=!0;this.pointer.reset(null,0);B(this,"beforePrint");b&&this.chartWidth>b&&(f.resetParams=[this.options.chart.width,void 0,!1],this.setSize(b,void 0,!1));[].forEach.call(f.childNodes, +function(a,b){1===a.nodeType&&(f.origDisplay[b]=a.style.display,a.style.display="none")});this.moveContainers(a);this.printReverseInfo=f},afterPrint:function(){if(this.printReverseInfo){var a=this.printReverseInfo.childNodes,b=this.printReverseInfo.origDisplay,f=this.printReverseInfo.resetParams;this.moveContainers(this.renderTo);[].forEach.call(a,function(a,f){1===a.nodeType&&(a.style.display=b[f]||"")});this.isPrinting=!1;f&&this.setSize.apply(this,f);delete this.printReverseInfo;delete h.printingChart; +B(this,"afterPrint")}},print:function(){var a=this;a.isPrinting||(h.printingChart=a,h.isSafari||a.beforePrint(),setTimeout(function(){z.focus();z.print();h.isSafari||setTimeout(function(){a.afterPrint()},1E3)},1))},contextMenu:function(a,b,f,d,c,h,k){var g=this,C=g.options.navigation,l=g.chartWidth,A=g.chartHeight,r="cache-"+a,m=g[r],v=Math.max(c,h);if(!m){g.exportContextMenu=g[r]=m=y("div",{className:a},{position:"absolute",zIndex:1E3,padding:v+"px",pointerEvents:"auto"},g.fixedDiv||g.container); +var n=y("ul",{className:"highcharts-menu"},{listStyle:"none",margin:0,padding:0},m);g.styledMode||u(n,w({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},C.menuStyle));m.hideMenu=function(){u(m,{display:"none"});k&&k.setState(0);g.openMenu=!1;u(g.renderTo,{overflow:"hidden"});e.clearTimeout(m.hideTimer);B(g,"exportMenuHidden")};g.exportEvents.push(t(m,"mouseleave",function(){m.hideTimer=z.setTimeout(m.hideMenu,500)}),t(m,"mouseenter",function(){e.clearTimeout(m.hideTimer)}), +t(x,"mouseup",function(b){g.pointer.inClass(b.target,a)||m.hideMenu()}),t(m,"click",function(){g.openMenu&&m.hideMenu()}));b.forEach(function(a){"string"===typeof a&&(a=g.options.exporting.menuItemDefinitions[a]);if(J(a,!0)){if(a.separator)var b=y("hr",null,null,n);else b=y("li",{className:"highcharts-menu-item",onclick:function(b){b&&b.stopPropagation();m.hideMenu();a.onclick&&a.onclick.apply(g,arguments)},innerHTML:a.text||g.options.lang[a.textKey]},null,n),g.styledMode||(b.onmouseover=function(){u(this, +C.menuItemHoverStyle)},b.onmouseout=function(){u(this,C.menuItemStyle)},u(b,w({cursor:"pointer"},C.menuItemStyle)));g.exportDivElements.push(b)}});g.exportDivElements.push(n,m);g.exportMenuWidth=m.offsetWidth;g.exportMenuHeight=m.offsetHeight}b={display:"block"};f+g.exportMenuWidth>l?b.right=l-f-c-v+"px":b.left=f-v+"px";d+h+g.exportMenuHeight>A&&"top"!==k.alignOptions.verticalAlign?b.bottom=A-d-v+"px":b.top=d+h-v+"px";u(m,b);u(g.renderTo,{overflow:""});g.openMenu=!0;B(g,"exportMenuShown")},addButton:function(a){var b= +this,f=b.renderer,d=n(b.options.navigation.buttonOptions,a),c=d.onclick,e=d.menuItems,h=d.symbolSize||12;b.btnCount||(b.btnCount=0);b.exportDivElements||(b.exportDivElements=[],b.exportSVGElements=[]);if(!1!==d.enabled){var g=d.theme,k=g.states,l=k&&k.hover;k=k&&k.select;var A;b.styledMode||(g.fill=q(g.fill,"#ffffff"),g.stroke=q(g.stroke,"none"));delete g.states;c?A=function(a){a&&a.stopPropagation();c.call(b,a)}:e&&(A=function(a){a&&a.stopPropagation();b.contextMenu(r.menuClassName,e,r.translateX, +r.translateY,r.width,r.height,r);r.setState(2)});d.text&&d.symbol?g.paddingLeft=q(g.paddingLeft,25):d.text||w(g,{width:d.width,height:d.height,padding:0});b.styledMode||(g["stroke-linecap"]="round",g.fill=q(g.fill,"#ffffff"),g.stroke=q(g.stroke,"none"));var r=f.button(d.text,0,0,A,g,l,k).addClass(a.className).attr({title:q(b.options.lang[d._titleKey||d.titleKey],"")});r.menuClassName=a.menuClassName||"highcharts-menu-"+b.btnCount++;if(d.symbol){var m=f.symbol(d.symbol,d.symbolX-h/2,d.symbolY-h/2, +h,h,{width:h,height:h}).addClass("highcharts-button-symbol").attr({zIndex:1}).add(r);b.styledMode||m.attr({stroke:d.symbolStroke,fill:d.symbolFill,"stroke-width":d.symbolStrokeWidth||1})}r.add(b.exportingGroup).align(w(d,{width:r.width,x:q(d.x,b.buttonOffset)}),!0,"spacingBox");b.buttonOffset+=(r.width+d.buttonSpacing)*("right"===d.align?-1:1);b.exportSVGElements.push(r,m)}},destroyExport:function(a){var b=a?a.target:this;a=b.exportSVGElements;var f=b.exportDivElements,d=b.exportEvents,c;a&&(a.forEach(function(a, +d){a&&(a.onclick=a.ontouchstart=null,c="cache-"+a.menuClassName,b[c]&&delete b[c],b.exportSVGElements[d]=a.destroy())}),a.length=0);b.exportingGroup&&(b.exportingGroup.destroy(),delete b.exportingGroup);f&&(f.forEach(function(a,d){e.clearTimeout(a.hideTimer);K(a,"mouseleave");b.exportDivElements[d]=a.onmouseout=a.onmouseover=a.ontouchstart=a.onclick=null;D(a)}),f.length=0);d&&(d.forEach(function(a){a()}),d.length=0)}});p.prototype.inlineToAttributes="fill stroke strokeLinecap strokeLinejoin strokeWidth textAnchor x y".split(" "); +p.prototype.inlineBlacklist=[/-/,/^(clipPath|cssText|d|height|width)$/,/^font$/,/[lL]ogical(Width|Height)$/,/perspective/,/TapHighlightColor/,/^transition/,/^length$/];p.prototype.unstyledElements=["clipPath","defs","desc"];c.prototype.inlineStyles=function(){function a(a){return a.replace(/([A-Z])/g,function(a,b){return"-"+b.toLowerCase()})}function b(c){function f(b,f){v=u=!1;if(h){for(q=h.length;q--&&!u;)u=h[q].test(f);v=!u}"transform"===f&&"none"===b&&(v=!0);for(q=e.length;q--&&!v;)v=e[q].test(f)|| +"function"===typeof b;v||y[f]===b&&"svg"!==c.nodeName||g[c.nodeName][f]===b||(d&&-1===d.indexOf(f)?m+=a(f)+":"+b+";":b&&c.setAttribute(a(f),b))}var m="",v,u,q;if(1===c.nodeType&&-1===k.indexOf(c.nodeName)){var t=z.getComputedStyle(c,null);var y="svg"===c.nodeName?{}:z.getComputedStyle(c.parentNode,null);if(!g[c.nodeName]){l=p.getElementsByTagName("svg")[0];var w=p.createElementNS(c.namespaceURI,c.nodeName);l.appendChild(w);g[c.nodeName]=n(z.getComputedStyle(w,null));"text"===c.nodeName&&delete g.text.fill; +l.removeChild(w)}if(N||M)for(var x in t)f(t[x],x);else E(t,f);m&&(t=c.getAttribute("style"),c.setAttribute("style",(t?t+";":"")+m));"svg"===c.nodeName&&c.setAttribute("stroke-width","1px");"text"!==c.nodeName&&[].forEach.call(c.children||c.childNodes,b)}}var c=this.renderer,d=c.inlineToAttributes,e=c.inlineBlacklist,h=c.inlineWhitelist,k=c.unstyledElements,g={},l;c=x.createElement("iframe");u(c,{width:"1px",height:"1px",visibility:"hidden"});x.body.appendChild(c);var p=c.contentWindow.document;p.open(); +p.write('');p.close();b(this.container.querySelector("svg"));l.parentNode.removeChild(l)};G.menu=function(a,b,c,d){return[["M",a,b+2.5],["L",a+c,b+2.5],["M",a,b+d/2+.5],["L",a+c,b+d/2+.5],["M",a,b+d-1.5],["L",a+c,b+d-1.5]]};G.menuball=function(a,b,c,d){a=[];d=d/3-2;return a=a.concat(this.circle(c-d,b,d,d),this.circle(c-d,b+d+4,d,d),this.circle(c-d,b+2*(d+4),d,d))};c.prototype.renderExporting=function(){var a=this,b=a.options.exporting,c=b.buttons,d=a.isDirtyExporting|| +!a.exportSVGElements;a.buttonOffset=0;a.isDirtyExporting&&a.destroyExport();d&&!1!==b.enabled&&(a.exportEvents=[],a.exportingGroup=a.exportingGroup||a.renderer.g("exporting-group").attr({zIndex:3}).add(),E(c,function(b){a.addButton(b)}),a.isDirtyExporting=!1);t(a,"destroy",a.destroyExport)};t(c,"init",function(){var a=this;a.exporting={update:function(b,c){a.isDirtyExporting=!0;n(!0,a.options.exporting,b);q(c,!0)&&a.redraw()}};l.addUpdate(function(b,c){a.isDirtyExporting=!0;n(!0,a.options.navigation, +b);q(c,!0)&&a.redraw()},a)});c.prototype.callbacks.push(function(a){a.renderExporting();t(a,"redraw",a.renderExporting)})});p(c,"masters/modules/exporting.src.js",[],function(){})}); +//# sourceMappingURL=exporting.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/full-screen.js b/libs/highcharts-8.1.2/modules/full-screen.js new file mode 100644 index 00000000..90fc5b8a --- /dev/null +++ b/libs/highcharts-8.1.2/modules/full-screen.js @@ -0,0 +1,17 @@ +/* + Highstock JS v8.1.2 (2020-06-16) + + Advanced Highstock tools + + (c) 2010-2019 Highsoft AS + Author: Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/full-screen",["highcharts"],function(c){a(c);a.Highcharts=c;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function c(a,g,c,d){a.hasOwnProperty(g)||(a[g]=d.apply(null,c))}a=a?a._modules:{};c(a,"modules/full-screen.src.js",[a["parts/Chart.js"],a["parts/Globals.js"],a["parts/Utilities.js"]],function(a,c,f){var d=f.addEvent; +f=function(){function a(b){this.chart=b;this.isOpen=!1;b=b.renderTo;this.browserProps||("function"===typeof b.requestFullscreen?this.browserProps={fullscreenChange:"fullscreenchange",requestFullscreen:"requestFullscreen",exitFullscreen:"exitFullscreen"}:b.mozRequestFullScreen?this.browserProps={fullscreenChange:"mozfullscreenchange",requestFullscreen:"mozRequestFullScreen",exitFullscreen:"mozCancelFullScreen"}:b.webkitRequestFullScreen?this.browserProps={fullscreenChange:"webkitfullscreenchange", +requestFullscreen:"webkitRequestFullScreen",exitFullscreen:"webkitExitFullscreen"}:b.msRequestFullscreen&&(this.browserProps={fullscreenChange:"MSFullscreenChange",requestFullscreen:"msRequestFullscreen",exitFullscreen:"msExitFullscreen"}))}a.prototype.close=function(){var b=this.chart;if(this.isOpen&&this.browserProps&&b.container.ownerDocument instanceof Document)b.container.ownerDocument[this.browserProps.exitFullscreen]();this.unbindFullscreenEvent&&this.unbindFullscreenEvent();this.isOpen=!1; +this.setButtonText()};a.prototype.open=function(){var b=this,a=b.chart;if(b.browserProps){b.unbindFullscreenEvent=d(a.container.ownerDocument,b.browserProps.fullscreenChange,function(){b.isOpen?(b.isOpen=!1,b.close()):(b.isOpen=!0,b.setButtonText())});var c=a.renderTo[b.browserProps.requestFullscreen]();if(c)c["catch"](function(){alert("Full screen is not supported inside a frame.")});d(a,"destroy",b.unbindFullscreenEvent)}};a.prototype.setButtonText=function(){var b,a=this.chart,c=a.exportDivElements, +e=a.options.exporting,d=null===(b=null===e||void 0===e?void 0:e.buttons)||void 0===b?void 0:b.contextButton.menuItems;b=a.options.lang;(null===e||void 0===e?0:e.menuItemDefinitions)&&(null===b||void 0===b?0:b.exitFullscreen)&&b.viewFullscreen&&d&&c&&c.length&&(c[d.indexOf("viewFullscreen")].innerHTML=this.isOpen?b.exitFullscreen:e.menuItemDefinitions.viewFullscreen.text||b.viewFullscreen)};a.prototype.toggle=function(){this.isOpen?this.close():this.open()};return a}();c.Fullscreen=f;d(a,"beforeRender", +function(){this.fullscreen=new c.Fullscreen(this)});return c.Fullscreen});c(a,"masters/modules/full-screen.src.js",[],function(){})}); +//# sourceMappingURL=full-screen.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/funnel.js b/libs/highcharts-8.1.2/modules/funnel.js new file mode 100644 index 00000000..543c41bb --- /dev/null +++ b/libs/highcharts-8.1.2/modules/funnel.js @@ -0,0 +1,18 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Highcharts funnel module + + (c) 2010-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(b){"object"===typeof module&&module.exports?(b["default"]=b,module.exports=b):"function"===typeof define&&define.amd?define("highcharts/modules/funnel",["highcharts"],function(e){b(e);b.Highcharts=e;return b}):b("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(b){function e(b,l,n,e){b.hasOwnProperty(l)||(b[l]=e.apply(null,n))}var x=b?b._modules:{};e(x,"modules/funnel.src.js",[x["parts/Chart.js"],x["parts/Globals.js"],x["parts/Utilities.js"]],function(e,l,n){var x=l.noop,C=l.seriesType, +I=l.seriesTypes;l=n.addEvent;var J=n.fireEvent,K=n.isArray,H=n.pick;C("funnel","pie",{animation:!1,center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",reversed:!1,size:!0,dataLabels:{connectorWidth:1,verticalAlign:"middle"},states:{select:{color:"#cccccc",borderColor:"#000000"}}},{animate:x,translate:function(){function a(a,c){return/%$/.test(a)?c*parseInt(a,10)/100:parseInt(a,10)}var r=0,c=this,g=c.chart,f=c.options,k=f.reversed,d=f.ignoreHiddenPoint,b=g.plotWidth;g=g.plotHeight; +var e=0,l=f.center,h=a(l[0],b),m=a(l[1],g),n=a(f.width,b),u,v=a(f.height,g),z=a(f.neckWidth,b),G=a(f.neckHeight,g),A=m-v/2+v-G;b=c.data;var D,E,C="left"===f.dataLabels.position?1:0,B,p,F,w,q,y,t;c.getWidthAt=function(a){var c=m-v/2;return a>A||v===G?z:z+(n-z)*(1-(a-c)/(v-G))};c.getX=function(a,d,b){return h+(d?-1:1)*(c.getWidthAt(k?2*m-a:a)/2+b.labelDistance)};c.center=[h,m,v];c.centerX=h;b.forEach(function(a){d&&!1===a.visible||(r+=a.y)});b.forEach(function(a){t=null;E=r?a.y/r:0;p=m-v/2+e*v;q=p+ +E*v;u=c.getWidthAt(p);B=h-u/2;F=B+u;u=c.getWidthAt(q);w=h-u/2;y=w+u;p>A?(B=w=h-z/2,F=y=h+z/2):q>A&&(t=q,u=c.getWidthAt(A),w=h-u/2,y=w+u,q=A);k&&(p=2*m-p,q=2*m-q,null!==t&&(t=2*m-t));D=[["M",B,p],["L",F,p],["L",y,q]];null!==t&&D.push(["L",y,t],["L",w,t]);D.push(["L",w,q],["Z"]);a.shapeType="path";a.shapeArgs={d:D};a.percentage=100*E;a.plotX=h;a.plotY=(p+(t||q))/2;a.tooltipPos=[h,a.plotY];a.dlBox={x:w,y:p,topWidth:F-B,bottomWidth:y-w,height:Math.abs(H(t,q)-p),width:NaN};a.slice=x;a.half=C;d&&!1===a.visible|| +(e+=E)});J(c,"afterTranslate")},sortByAngle:function(a){a.sort(function(a,c){return a.plotY-c.plotY})},drawDataLabels:function(){var a=this.data,b=this.options.dataLabels.distance,c,g=a.length;for(this.center[2]-=2*b;g--;){var f=a[g];var k=(c=f.half)?1:-1;var d=f.plotY;f.labelDistance=H(f.options.dataLabels&&f.options.dataLabels.distance,b);this.maxLabelDistance=Math.max(f.labelDistance,this.maxLabelDistance||0);var e=this.getX(d,c,f);f.labelPosition={natural:{x:0,y:d},"final":{},alignment:c?"right": +"left",connectorPosition:{breakAt:{x:e+(f.labelDistance-5)*k,y:d},touchingSliceAt:{x:e+f.labelDistance*k,y:d}}}}I[this.options.dataLabels.inside?"column":"pie"].prototype.drawDataLabels.call(this)},alignDataLabel:function(a,e,c,g,f){var k=a.series;g=k.options.reversed;var d=a.dlBox||a.shapeArgs,l=c.align,r=c.verticalAlign,n=((k.options||{}).dataLabels||{}).inside,h=k.center[1];k=k.getWidthAt((g?2*h-a.plotY:a.plotY)-d.height/2+e.height);k="middle"===r?(d.topWidth-d.bottomWidth)/4:(k-d.bottomWidth)/ +2;h=d.y;var m=d.x;"middle"===r?h=d.y-d.height/2+e.height/2:"top"===r&&(h=d.y-d.height+e.height+c.padding);if("top"===r&&!g||"bottom"===r&&g||"middle"===r)"right"===l?m=d.x-c.padding+k:"left"===l&&(m=d.x+c.padding-k);g={x:m,y:g?h-d.height:h,width:d.bottomWidth,height:d.height};c.verticalAlign="bottom";n&&!a.visible||b.Series.prototype.alignDataLabel.call(this,a,e,c,g,f);n&&(!a.visible&&a.dataLabel&&(a.dataLabel.placed=!1),a.contrastColor&&e.css({color:a.contrastColor}))}});l(e,"afterHideAllOverlappingLabels", +function(){this.series.forEach(function(a){var b=a.options&&a.options.dataLabels;K(b)&&(b=b[0]);a.is("pie")&&a.placeDataLabels&&b&&!b.inside&&a.placeDataLabels()})});C("pyramid","funnel",{neckWidth:"0%",neckHeight:"0%",reversed:!0});""});e(x,"masters/modules/funnel.src.js",[],function(){})}); +//# sourceMappingURL=funnel.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/funnel3d.js b/libs/highcharts-8.1.2/modules/funnel3d.js new file mode 100644 index 00000000..b9dafc10 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/funnel3d.js @@ -0,0 +1,26 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Highcharts funnel module + + (c) 2010-2019 Kacper Madej + + License: www.highcharts.com/license +*/ +(function(d){"object"===typeof module&&module.exports?(d["default"]=d,module.exports=d):"function"===typeof define&&define.amd?define("highcharts/modules/funnel3d",["highcharts","highcharts/highcharts-3d","highcharts/modules/cylinder"],function(t){d(t);d.Highcharts=t;return d}):d("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(d){function t(d,m,l,h){d.hasOwnProperty(m)||(d[m]=h.apply(null,l))}d=d?d._modules:{};t(d,"modules/funnel3d.src.js",[d["parts/Globals.js"],d["parts/Color.js"], +d["parts/Utilities.js"]],function(d,m,l){var h=m.parse,t=l.error,D=l.extend,k=l.merge,B=l.pick,v=l.relativeLength;l=l.seriesType;var H=d.charts,J=d.seriesTypes;m=d.Renderer.prototype;var K=m.cuboidPath;l("funnel3d","column",{center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",reversed:!1,gradientForSides:!0,animation:!1,edgeWidth:0,colorByPoint:!0,showInLegend:!1,dataLabels:{align:"right",crop:!1,inside:!1,overflow:"allow"}},{bindAxes:function(){d.Series.prototype.bindAxes.apply(this, +arguments);D(this.xAxis.options,{gridLineWidth:0,lineWidth:0,title:null,tickPositions:[]});D(this.yAxis.options,{gridLineWidth:0,title:null,labels:{enabled:!1}})},translate3dShapes:d.noop,translate:function(){d.Series.prototype.translate.apply(this,arguments);var a=0,b=this.chart,c=this.options,g=c.reversed,u=c.ignoreHiddenPoint,e=b.plotWidth,E=b.plotHeight,f=0,I=c.center,w=v(I[0],e),r=v(I[1],E),l=v(c.width,e),p,k,n=v(c.height,E),m=v(c.neckWidth,e),t=v(c.neckHeight,E),h=r-n/2+n-t;e=this.data;var z, +F,x,A,G,C,q;this.getWidthAt=k=function(b){var a=r-n/2;return b>h||n===t?m:m+(l-m)*(1-(b-a)/(n-t))};this.center=[w,r,n];this.centerX=w;e.forEach(function(b){u&&!1===b.visible||(a+=b.y)});e.forEach(function(e){G=null;z=a?e.y/a:0;x=r-n/2+f*n;A=x+z*n;p=k(x);C=A-x;q={gradientForSides:B(e.options.gradientForSides,c.gradientForSides),x:w,y:x,height:C,width:p,z:1,top:{width:p}};p=k(A);q.bottom={fraction:z,width:p};x>=h?q.isCylinder=!0:A>h&&(G=A,p=k(h),A=h,q.bottom.width=p,q.middle={fraction:C?(h-x)/C:0,width:p}); +g&&(q.y=x=r+n/2-(f+z)*n,q.middle&&(q.middle.fraction=1-(C?q.middle.fraction:0)),p=q.width,q.width=q.bottom.width,q.bottom.width=p);e.shapeArgs=D(e.shapeArgs,q);e.percentage=100*z;e.plotX=w;e.plotY=g?r+n/2-(f+z/2)*n:(x+(G||A))/2;F=d.perspective([{x:w,y:e.plotY,z:g?-(l-k(e.plotY))/2:-k(e.plotY)/2}],b,!0)[0];e.tooltipPos=[F.x,F.y];e.dlBoxRaw={x:w,width:k(e.plotY),y:x,bottom:q.height,fullWidth:l};u&&!1===e.visible||(f+=z)})},alignDataLabel:function(a,b,c){var g=a.dlBoxRaw,u=this.chart.inverted,e=a.plotY> +B(this.translatedThreshold,this.yAxis.len),d=B(c.inside,!!this.options.stacking),f={x:g.x,y:g.y,height:0};c.align=B(c.align,!u||d?"center":e?"right":"left");c.verticalAlign=B(c.verticalAlign,u||d?"middle":e?"top":"bottom");"top"!==c.verticalAlign&&(f.y+=g.bottom/("bottom"===c.verticalAlign?1:2));f.width=this.getWidthAt(f.y);this.options.reversed&&(f.width=g.fullWidth-f.width);d?f.x-=f.width/2:"left"===c.align?(c.align="right",f.x-=1.5*f.width):"right"===c.align?(c.align="left",f.x+=f.width/2):f.x-= +f.width/2;a.dlBox=f;J.column.prototype.alignDataLabel.apply(this,arguments)}},{shapeType:"funnel3d",hasNewShapeType:d.seriesTypes.column.prototype.pointClass.prototype.hasNewShapeType});l=k(m.elements3d.cuboid,{parts:"top bottom frontUpper backUpper frontLower backLower rightUpper rightLower".split(" "),mainParts:["top","bottom"],sideGroups:["upperGroup","lowerGroup"],sideParts:{upperGroup:["frontUpper","backUpper","rightUpper"],lowerGroup:["frontLower","backLower","rightLower"]},pathType:"funnel3d", +opacitySetter:function(a){var b=this,c=b.parts,g=d.charts[b.renderer.chartIndex],u="group-opacity-"+a+"-"+g.index;b.parts=b.mainParts;b.singleSetterForParts("opacity",a);b.parts=c;g.renderer.filterId||(g.renderer.definition({tagName:"filter",id:u,children:[{tagName:"feComponentTransfer",children:[{tagName:"feFuncA",type:"table",tableValues:"0 "+a}]}]}),b.sideGroups.forEach(function(a){b[a].attr({filter:"url(#"+u+")"})}),b.renderer.styledMode&&(g.renderer.definition({tagName:"style",textContent:".highcharts-"+ +u+" {filter:url(#"+u+")}"}),b.sideGroups.forEach(function(b){b.addClass("highcharts-"+u)})));return b},fillSetter:function(a){var b=this,c=h(a),g=c.rgba[3],d={top:h(a).brighten(.1).get(),bottom:h(a).brighten(-.2).get()};1>g?(c.rgba[3]=1,c=c.get("rgb"),b.attr({opacity:g})):c=a;c.linearGradient||c.radialGradient||!b.gradientForSides||(c={linearGradient:{x1:0,x2:1,y1:1,y2:1},stops:[[0,h(a).brighten(-.2).get()],[.5,a],[1,h(a).brighten(-.2).get()]]});c.linearGradient?b.sideGroups.forEach(function(a){var e= +b[a].gradientBox,f=c.linearGradient,g=k(c,{linearGradient:{x1:e.x+f.x1*e.width,y1:e.y+f.y1*e.height,x2:e.x+f.x2*e.width,y2:e.y+f.y2*e.height}});b.sideParts[a].forEach(function(b){d[b]=g})}):(k(!0,d,{frontUpper:c,backUpper:c,rightUpper:c,frontLower:c,backLower:c,rightLower:c}),c.radialGradient&&b.sideGroups.forEach(function(a){var c=b[a].gradientBox,e=c.x+c.width/2,g=c.y+c.height/2,d=Math.min(c.width,c.height);b.sideParts[a].forEach(function(a){b[a].setRadialReference([e,g,d])})}));b.singleSetterForParts("fill", +null,d);b.color=b.fill=a;c.linearGradient&&[b.frontLower,b.frontUpper].forEach(function(a){(a=(a=a.element)&&b.renderer.gradients[a.gradient])&&"userSpaceOnUse"!==a.attr("gradientUnits")&&a.attr({gradientUnits:"userSpaceOnUse"})});return b},adjustForGradient:function(){var a=this,b;a.sideGroups.forEach(function(c){var g={x:Number.MAX_VALUE,y:Number.MAX_VALUE},d={x:-Number.MAX_VALUE,y:-Number.MAX_VALUE};a.sideParts[c].forEach(function(c){b=a[c].getBBox(!0);g={x:Math.min(g.x,b.x),y:Math.min(g.y,b.y)}; +d={x:Math.max(d.x,b.x+b.width),y:Math.max(d.y,b.y+b.height)}});a[c].gradientBox={x:g.x,width:d.x-g.x,y:g.y,height:d.y-g.y}})},zIndexSetter:function(){this.finishedOnAdd&&this.adjustForGradient();return this.renderer.Element.prototype.zIndexSetter.apply(this,arguments)},onAdd:function(){this.adjustForGradient();this.finishedOnAdd=!0}});m.elements3d.funnel3d=l;m.funnel3d=function(a){var b=this.element3d("funnel3d",a),c=this.styledMode,d={"stroke-width":1,stroke:"none"};b.upperGroup=this.g("funnel3d-upper-group").attr({zIndex:b.frontUpper.zIndex}).add(b); +[b.frontUpper,b.backUpper,b.rightUpper].forEach(function(a){c||a.attr(d);a.add(b.upperGroup)});b.lowerGroup=this.g("funnel3d-lower-group").attr({zIndex:b.frontLower.zIndex}).add(b);[b.frontLower,b.backLower,b.rightLower].forEach(function(a){c||a.attr(d);a.add(b.lowerGroup)});b.gradientForSides=a.gradientForSides;return b};m.funnel3dPath=function(a){this.getCylinderEnd||t("A required Highcharts module is missing: cylinder.js",!0,H[this.chartIndex]);var b=H[this.chartIndex],c=a.alphaCorrection=90-Math.abs(b.options.chart.options3d.alpha% +180-90),d=K.call(this,k(a,{depth:a.width,width:(a.width+a.bottom.width)/2})),l=d.isTop,e=!d.isFront,m=!!a.middle,f=this.getCylinderEnd(b,k(a,{x:a.x-a.width/2,z:a.z-a.width/2,alphaCorrection:c})),h=a.bottom.width,w=k(a,{width:h,x:a.x-h/2,z:a.z-h/2,alphaCorrection:c}),r=this.getCylinderEnd(b,w,!0),y=h,p=w,v=r,n=r;m&&(y=a.middle.width,p=k(a,{y:a.y+a.middle.fraction*a.height,width:y,x:a.x-y/2,z:a.z-y/2}),v=this.getCylinderEnd(b,p,!1),n=this.getCylinderEnd(b,p,!1));d={top:f,bottom:r,frontUpper:this.getCylinderFront(f, +v),zIndexes:{group:d.zIndexes.group,top:0!==l?0:3,bottom:1!==l?0:3,frontUpper:e?2:1,backUpper:e?1:2,rightUpper:e?2:1}};d.backUpper=this.getCylinderBack(f,v);f=1!==Math.min(y,a.width)/Math.max(y,a.width);d.rightUpper=this.getCylinderFront(this.getCylinderEnd(b,k(a,{x:a.x-a.width/2,z:a.z-a.width/2,alphaCorrection:f?-c:0}),!1),this.getCylinderEnd(b,k(p,{alphaCorrection:f?-c:0}),!m));m&&(f=1!==Math.min(y,h)/Math.max(y,h),k(!0,d,{frontLower:this.getCylinderFront(n,r),backLower:this.getCylinderBack(n,r), +rightLower:this.getCylinderFront(this.getCylinderEnd(b,k(w,{alphaCorrection:f?-c:0}),!0),this.getCylinderEnd(b,k(p,{alphaCorrection:f?-c:0}),!1)),zIndexes:{frontLower:e?2:1,backLower:e?1:2,rightLower:e?1:2}}));return d}});t(d,"masters/modules/funnel3d.src.js",[],function(){})}); +//# sourceMappingURL=funnel3d.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/gantt.js b/libs/highcharts-8.1.2/modules/gantt.js new file mode 100644 index 00000000..1131ae8f --- /dev/null +++ b/libs/highcharts-8.1.2/modules/gantt.js @@ -0,0 +1,194 @@ +/* + Highcharts Gantt JS v8.1.2 (2020-06-16) + + Gantt series + + (c) 2016-2019 Lars A. V. Cabrera + + License: www.highcharts.com/license +*/ +(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/gantt",["highcharts"],function(J){c(J);c.Highcharts=J;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function J(c,l,u,z){c.hasOwnProperty(l)||(c[l]=z.apply(null,u))}c=c?c._modules:{};J(c,"parts-gantt/Tree.js",[c["parts/Utilities.js"]],function(c){var l=c.extend,u=c.isNumber,z=c.pick,x=function(l,y){var k=l.reduce(function(b, +g){var m=z(g.parent,"");"undefined"===typeof b[m]&&(b[m]=[]);b[m].push(g);return b},{});Object.keys(k).forEach(function(b,g){var m=k[b];""!==b&&-1===y.indexOf(b)&&(m.forEach(function(b){g[""].push(b)}),delete g[b])});return k},A=function(c,y,k,b,g,m){var t=0,H=0,I=m&&m.after,E=m&&m.before;y={data:b,depth:k-1,id:c,level:k,parent:y};var p,a;"function"===typeof E&&E(y,m);E=(g[c]||[]).map(function(w){var e=A(w.id,c,k+1,w,g,m),C=w.start;w=!0===w.milestone?C:w.end;p=!u(p)||Ca?w:a;t=t+ +1+e.descendants;H=Math.max(e.height+1,H);return e});b&&(b.start=z(b.start,p),b.end=z(b.end,a));l(y,{children:E,descendants:t,height:H});"function"===typeof I&&I(y,m);return y};return{getListOfParents:x,getNode:A,getTree:function(l,y){var k=l.map(function(b){return b.id});l=x(l,k);return A("",null,1,null,l,y)}}});J(c,"parts-gantt/TreeGridTick.js",[c["parts/Utilities.js"]],function(c){var l=c.addEvent,u=c.defined,z=c.isObject,x=c.isNumber,A=c.pick,D=c.wrap,y;(function(k){function b(){this.treeGrid|| +(this.treeGrid=new c(this))}function g(b,p){b=b.treeGrid;var a=!b.labelIcon,w=p.renderer,e=p.xy,C=p.options,q=C.width,f=C.height,d=e.x-q/2-C.padding;e=e.y-f/2;var v=p.collapsed?90:180,G=p.show&&x(e),B=b.labelIcon;B||(b.labelIcon=B=w.path(w.symbols[C.type](C.x,C.y,q,f)).addClass("highcharts-label-icon").add(p.group));G||B.attr({y:-9999});w.styledMode||B.attr({"stroke-width":1,fill:A(p.color,"#666666")}).css({cursor:"pointer",stroke:C.lineColor,strokeWidth:C.lineWidth});B[a?"attr":"animate"]({translateX:d, +translateY:e,rotation:v})}function m(b,p,a,w,e,C,q,f,d){var v=A(this.options&&this.options.labels,C);C=this.pos;var G=this.axis,B="treegrid"===G.options.type;b=b.apply(this,[p,a,w,e,v,q,f,d]);B&&(p=v&&z(v.symbol,!0)?v.symbol:{},v=v&&x(v.indentation)?v.indentation:0,C=(C=(G=G.treeGrid.mapOfPosToGridNode)&&G[C])&&C.depth||1,b.x+=p.width+2*p.padding+(C-1)*v);return b}function t(b){var p=this,a=p.pos,w=p.axis,e=p.label,C=w.treeGrid.mapOfPosToGridNode,q=w.options,f=A(p.options&&p.options.labels,q&&q.labels), +d=f&&z(f.symbol,!0)?f.symbol:{},v=(C=C&&C[a])&&C.depth;q="treegrid"===q.type;var G=-1b&&!a.startOnTick&&(f[0]=b),v>B&&v-r=p?(g-p)%m: +m-(p-g)%m;return b.inclusive?g<=a:g=b)break;else p.to=b)break;else if(g.isInBreak(a,b)){k-=b-a.from;break}}return k};g.prototype.findBreakAt=function(b,g){return A(g, +function(g){return g.fromd;)h-=f;for(;ha.to||q>a.from&&da.from&&da.from&&d>a.to&&db&&a>=this.basePointRange&&(b=a),q=void 0;e--;)q&&!1!==q.visible||(q=w[e+1]),a=w[e],!1!==q.visible&&!1!==a.visible&&(q.x-a.x>b&&(q=(a.x+q.x)/2,w.splice(e+1,0,{isNull:!0,x:q}),g.stacking&&this.options.stacking&&(q=g.stacking.stacks[this.stackKey][q]=new z(g,g.options.stackLabels,!1,q,this.stack),q.total=0)),q=a);return this.getGraphPath(w)};x(t,"init", +function(){this.brokenAxis||(this.brokenAxis=new m(this))});x(t,"afterInit",function(){"undefined"!==typeof this.brokenAxis&&this.brokenAxis.setBreaks(this.options.breaks,!1)});x(t,"afterSetTickPositions",function(){var b=this.brokenAxis;if(b&&b.hasBreaks){var a=this.tickPositions,g=this.tickPositions.info,e=[],m;for(m=0;m=d&&(h-=.5);return{from:h,to:a,showPoints:!1}}function w(a,d,h){var n=[],f=[],e={},b={},r=-1,v="boolean"===typeof d? +d:!1;a=u.getTree(a,{after:function(a){a=b[a.pos];var h=0,n=0;a.children.forEach(function(a){n+=(a.descendants||0)+1;h=Math.max((a.height||0)+1,h)});a.descendants=n;a.height=h;a.collapsed&&f.push(a)},before:function(a){var h=g(a.data,!0)?a.data:{},d=m(h.name)?h.name:"",f=e[a.parent];f=g(f,!0)?b[f.pos]:null;var F=function(a){return a.name===d},B;v&&g(f,!0)&&(B=y(f.children,F))?(F=B.pos,B.nodes.push(a)):F=r++;b[F]||(b[F]=B={depth:f?f.depth+1:0,name:d,nodes:[a],children:[],pos:F},-1!==F&&n.push(d),g(f, +!0)&&f.children.push(B));m(a.id)&&(e[a.id]=a);B&&!0===h.collapsed&&(B.collapsed=!0);a.pos=F}});b=function(a,h){var n=function(a,d,f){var e=d+(-1===d?0:h-1),b=(e-d)/2,r=d+b;a.nodes.forEach(function(a){var h=a.data;g(h,!0)&&(h.y=d+(h.seriesIndex||0),delete h.seriesIndex);a.pos=r});f[r]=a;a.pos=r;a.tickmarkOffset=b+.5;a.collapseStart=e+.5;a.children.forEach(function(a){n(a,e+1,f);e=(a.collapseEnd||0)-.5});a.collapseEnd=e+.5;return f};return n(a["-1"],-1,{})}(b,h);return{categories:n,mapOfIdToNode:e, +mapOfPosToGridNode:b,collapsedNodes:f,tree:a}}function e(a){a.target.axes.filter(function(a){return"treegrid"===a.options.type}).forEach(function(d){var h=d.options||{},n=h.labels,f=h.uniqueNames,e=0;if(!d.treeGrid.mapOfPosToGridNode||d.series.some(function(a){return!a.hasRendered||a.isDirtyData||a.isDirty}))h=d.series.reduce(function(a,h){h.visible&&((h.options.data||[]).forEach(function(h){g(h,!0)&&(h.seriesIndex=e,a.push(h))}),!0===f&&e++);return a},[]),h=w(h,f||!1,!0===f?e:1),d.categories=h.categories, +d.treeGrid.mapOfPosToGridNode=h.mapOfPosToGridNode,d.hasNames=!0,d.treeGrid.tree=h.tree,d.series.forEach(function(a){var h=(a.options.data||[]).map(function(a){return g(a,!0)?t(a):a});a.visible&&a.setData(h,!1)}),d.treeGrid.mapOptionsToLevel=x.getLevelOptions({defaults:n,from:1,levels:n&&n.levels,to:d.treeGrid.tree&&d.treeGrid.tree.height}),"beforeRender"===a.type&&(d.treeGrid.collapsedNodes=h.collapsedNodes)})}function c(a,d){var h=this.treeGrid.mapOptionsToLevel||{},n=this.ticks,f=n[d],e;if("treegrid"=== +this.options.type&&this.treeGrid.mapOfPosToGridNode){var b=this.treeGrid.mapOfPosToGridNode[d];(h=h[b.depth])&&(e={labels:h});f?(f.parameters.category=b.name,f.options=e,f.addLabel()):n[d]=new l(this,d,void 0,void 0,{category:b.name,tickmarkOffset:b.tickmarkOffset,options:e})}else a.apply(this,Array.prototype.slice.call(arguments,1))}function q(a){var d=this.options;d=(d=d&&d.labels)&&b(d.indentation)?d.indentation:0;var h=a.apply(this,Array.prototype.slice.call(arguments,1));if("treegrid"===this.options.type&& +this.treeGrid.mapOfPosToGridNode){var n=this.treeGrid.mapOfPosToGridNode[-1].height||0;h.width+=d*(n-1)}return h}function f(a,d,h){var n=this,f="treegrid"===h.type;n.treeGrid||(n.treeGrid=new G(n));f&&(D(d,"beforeRender",e),D(d,"beforeRedraw",e),D(d,"addSeries",function(a){a.options.data&&(a=w(a.options.data,h.uniqueNames||!1,1),n.treeGrid.collapsedNodes=(n.treeGrid.collapsedNodes||[]).concat(a.collapsedNodes))}),D(n,"foundExtremes",function(){n.treeGrid.collapsedNodes&&n.treeGrid.collapsedNodes.forEach(function(a){var h= +n.treeGrid.collapse(a);n.brokenAxis&&(n.brokenAxis.setBreaks(h,!1),n.treeGrid.collapsedNodes&&(n.treeGrid.collapsedNodes=n.treeGrid.collapsedNodes.filter(function(h){return a.collapseStart!==h.collapseStart||a.collapseEnd!==h.collapseEnd})))})}),D(n,"afterBreaks",function(){var a;"yAxis"===n.coll&&!n.staticScale&&(null===(a=n.chart.options.chart)||void 0===a?0:a.height)&&(n.isDirty=!0)}),h=t({grid:{enabled:!0},labels:{align:"left",levels:[{level:void 0},{level:1,style:{fontWeight:"bold"}}],symbol:{type:"triangle", +x:-5,y:-5,height:10,width:10,padding:5}},uniqueNames:!1},h,{reversed:!0,grid:{columns:void 0}}));a.apply(n,[d,h]);f&&(n.hasNames=!0,n.options.showLastLabel=!0)}function d(a){var d=this.options;"treegrid"===d.type?(this.min=H(this.userMin,d.min,this.dataMin),this.max=H(this.userMax,d.max,this.dataMax),k(this,"foundExtremes"),this.setAxisTranslation(!0),this.tickmarkOffset=.5,this.tickInterval=1,this.tickPositions=this.treeGrid.mapOfPosToGridNode?this.treeGrid.getTickPositions():[]):a.apply(this,Array.prototype.slice.call(arguments, +1))}var v=!1;p.compose=function(a){v||(I(a.prototype,"generateTick",c),I(a.prototype,"getMaxLabelDimensions",q),I(a.prototype,"init",f),I(a.prototype,"setTickInterval",d),z.compose(l),v=!0)};var G=function(){function d(a){this.axis=a}d.prototype.collapse=function(d){var h=this.axis,n=h.options.breaks||[];d=a(d,h.max);n.push(d);return n};d.prototype.expand=function(d){var h=this.axis,n=h.options.breaks||[],f=a(d,h.max);return n.reduce(function(a,d){d.to===f.to&&d.from===f.from||a.push(d);return a}, +[])};d.prototype.getTickPositions=function(){var a=this.axis;return Object.keys(a.treeGrid.mapOfPosToGridNode||{}).reduce(function(d,n){n=+n;!(a.min<=n&&a.max>=n)||a.brokenAxis&&a.brokenAxis.isInAnyBreak(n)||d.push(n);return d},[])};d.prototype.isCollapsed=function(d){var h=this.axis,n=h.options.breaks||[],f=a(d,h.max);return n.some(function(a){return a.from===f.from&&a.to===f.to})};d.prototype.toggleCollapse=function(a){return this.isCollapsed(a)?this.expand(a):this.collapse(a)};return d}();p.Additions= +G})(E||(E={}));c.prototype.utils={getNode:u.getNode};E.compose(c);return E});J(c,"parts-gantt/CurrentDateIndicator.js",[c["parts/Globals.js"],c["parts/Options.js"],c["parts/Utilities.js"],c["parts/PlotLineOrBand.js"]],function(c,l,u,z){var x=l.dateFormat;l=u.addEvent;var A=u.merge;u=u.wrap;var D={currentDateIndicator:!0,color:"#ccd6eb",width:2,label:{format:"%a, %b %d %Y, %H:%M",formatter:function(c,k){return x(k,c)},rotation:0,style:{fontSize:"10px"}}};l(c.Axis,"afterSetOptions",function(){var c= +this.options,k=c.currentDateIndicator;k&&(k="object"===typeof k?A(D,k):A(D),k.value=new Date,c.plotLines||(c.plotLines=[]),c.plotLines.push(k))});l(z,"render",function(){this.label&&this.label.attr({text:this.getLabelText(this.options.label)})});u(z.prototype,"getLabelText",function(c,k){var b=this.options;return b.currentDateIndicator&&b.label&&"function"===typeof b.label.formatter?(b.value=new Date,b.label.formatter.call(this,b.value,b.label.format)):c.call(this,k)})});J(c,"modules/static-scale.src.js", +[c["parts/Globals.js"],c["parts/Utilities.js"]],function(c,l){var u=l.addEvent,z=l.defined,x=l.isNumber,A=l.pick;l=c.Chart;u(c.Axis,"afterSetOptions",function(){var c=this.chart.options&&this.chart.options.chart;!this.horiz&&x(this.options.staticScale)&&(!c.height||c.scrollablePlotArea&&c.scrollablePlotArea.minHeight)&&(this.staticScale=this.options.staticScale)});l.prototype.adjustHeight=function(){"adjustHeight"!==this.redrawTrigger&&((this.axes||[]).forEach(function(c){var l=c.chart,k=!!l.initiatedScale&& +l.options.animation,b=c.options.staticScale;if(c.staticScale&&z(c.min)){var g=A(c.brokenAxis&&c.brokenAxis.unitLength,c.max+c.tickInterval-c.min)*b;g=Math.max(g,b);b=g-l.plotHeight;1<=Math.abs(b)&&(l.plotHeight=g,l.redrawTrigger="adjustHeight",l.setSize(void 0,l.chartHeight+b,k));c.series.forEach(function(b){(b=b.sharedClipKey&&l[b.sharedClipKey])&&b.attr({height:l.plotHeight})})}}),this.initiatedScale=!0);this.redrawTrigger=null};u(l,"render",l.prototype.adjustHeight)});J(c,"parts-gantt/PathfinderAlgorithms.js", +[c["parts/Utilities.js"]],function(c){function l(b,m,c){c=c||0;var g=b.length-1;m-=1e-7;for(var k,t;c<=g;)if(k=g+c>>1,t=m-b[k].xMin,0t)g=k-1;else return k;return 0=m.x)c=b[g],c=m.x<=c.xMax&&m.x>=c.xMin&&m.y<=c.yMax&&m.y>=c.yMin;if(c)return g}return-1}function z(b){var g=[];if(b.length){g.push(["M",b[0].start.x,b[0].start.y]);for(var c=0;cb(f[d]-a[d+"Max"]);return m(f,d,a,d+(e?"Max":"Min"),e?1:-1)}var t=[],p=D(k.startDirectionX,b(c.x-g.x)> +b(c.y-g.y))?"x":"y",a=k.chartObstacles,w=u(a,g);k=u(a,c);if(-1=g[p]===k[p]>=C[p]&&(p="y"===p?"x":"y",c=g[p]f?y(l(B,e.x),B.length-1):0;B[n]&&(0f&&B[n].xMax>=b.x);){if(B[n].xMin<=e.x&&B[n].xMax>=b.x&&B[n].yMin<=F.y&&B[n].yMax>=v.y)return h?{y:a.y,x:a.x=n[r+"Max"];n=a[r+"Min"]<=n[r+"Min"];var G=a[r+"Max"]>=v[r+"Max"];v=a[r+"Min"]<=v[r+"Min"];var F=b(a[r+"Min"]-d[r]),g=b(a[r+"Max"]-d[r]);h=10>b(F-g)?d[r]b(c.y-g.y)),w=a?"x":"y",e=[],C=!1,q=t.obstacleMetrics,f=y(g.x, +c.x)-q.maxWidth-10,d=k(g.x,c.x)+q.maxWidth+10,v=y(g.y,c.y)-q.maxHeight-10,G=k(g.y,c.y)+q.maxHeight+10,B=t.chartObstacles;var r=l(B,f);q=l(B,d);B=B.slice(r,q+1);if(-1<(q=u(B,c))){var h=p(B[q],c,g);e.push({end:c,start:h});c=h}for(;-1<(q=u(B,c));)r=0>c[w]-g[w],h={x:c.x,y:c.y},h[w]=B[q][r?w+"Max":w+"Min"]+(r?1:-1),e.push({end:c,start:h}),c=h;g=E(g,c,a);g=g.concat(e.reverse());return{path:z(g),obstacles:g}},{requiresObstacles:!0})}});J(c,"parts-gantt/ArrowSymbols.js",[c["parts/SVGRenderer.js"]],function(c){c.prototype.symbols.arrow= +function(c,u,z,x){return[["M",c,u+x/2],["L",c+z,u],["L",c,u+x/2],["L",c+z,u+x]]};c.prototype.symbols["arrow-half"]=function(l,u,z,x){return c.prototype.symbols.arrow(l,u,z/2,x)};c.prototype.symbols["triangle-left"]=function(c,u,z,x){return[["M",c+z,u],["L",c,u+x/2],["L",c+z,u+x],["Z"]]};c.prototype.symbols["arrow-filled"]=c.prototype.symbols["triangle-left"];c.prototype.symbols["triangle-left-half"]=function(l,u,z,x){return c.prototype.symbols["triangle-left"](l,u,z/2,x)};c.prototype.symbols["arrow-filled-half"]= +c.prototype.symbols["triangle-left-half"]});J(c,"parts-gantt/Pathfinder.js",[c["parts/Chart.js"],c["parts/Globals.js"],c["parts/Options.js"],c["parts/Point.js"],c["parts/Utilities.js"],c["parts-gantt/PathfinderAlgorithms.js"]],function(c,l,u,z,x,A){function D(a){var d=a.shapeArgs;return d?{xMin:d.x,xMax:d.x+d.width,yMin:d.y,yMax:d.y+d.height}:(d=a.graphic&&a.graphic.getBBox())?{xMin:a.plotX-d.width/2,xMax:a.plotX+d.width/2,yMin:a.plotY-d.height/2,yMax:a.plotY+d.height/2}:null}function y(b){for(var d= +b.length,f=0,e,c,r=[],h=function(d,b,f){f=a(f,10);var n=d.yMax+f>b.yMin-f&&d.yMin-fb.xMin-f&&d.xMin-fb.xMax?d.xMin-b.xMax:b.xMin-d.xMax:Infinity,r=e?d.yMin>b.yMax?d.yMin-b.yMax:b.yMin-d.yMax:Infinity;return e&&n?f?h(d,b,Math.floor(f/2)):Infinity:q(c,r)};fc&&r.push(c);r.push(80);return C(Math.floor(r.sort(function(a,d){return a-d})[Math.floor(r.length/10)]/2-1),1)}function k(a,d,b){this.init(a,d,b)}function b(a){this.init(a)} +function g(a){if(a.options.pathfinder||a.series.reduce(function(a,b){b.options&&E(!0,b.options.connectors=b.options.connectors||{},b.options.pathfinder);return a||b.options&&b.options.pathfinder},!1))E(!0,a.options.connectors=a.options.connectors||{},a.options.pathfinder),H('WARNING: Pathfinder options have been renamed. Use "chart.connectors" or "series.connectors" instead.')}"";var m=x.addEvent,t=x.defined,H=x.error,I=x.extend,E=x.merge,p=x.objectEach,a=x.pick,w=x.splat,e=l.deg2rad,C=Math.max,q= +Math.min;I(u.defaultOptions,{connectors:{type:"straight",lineWidth:1,marker:{enabled:!1,align:"center",verticalAlign:"middle",inside:!1,lineWidth:1},startMarker:{symbol:"diamond"},endMarker:{symbol:"arrow-filled"}}});k.prototype={init:function(a,d,b){this.fromPoint=a;this.toPoint=d;this.options=b;this.chart=a.series.chart;this.pathfinder=this.chart.pathfinder},renderPath:function(a,d,b){var e=this.chart,f=e.styledMode,c=e.pathfinder,h=!e.options.chart.forExport&&!1!==b,n=this.graphics&&this.graphics.path; +c.group||(c.group=e.renderer.g().addClass("highcharts-pathfinder-group").attr({zIndex:-1}).add(e.seriesGroup));c.group.translate(e.plotLeft,e.plotTop);n&&n.renderer||(n=e.renderer.path().add(c.group),f||n.attr({opacity:0}));n.attr(d);a={d:a};f||(a.opacity=1);n[h?"animate":"attr"](a,b);this.graphics=this.graphics||{};this.graphics.path=n},addMarker:function(a,d,b){var f=this.fromPoint.series.chart,c=f.pathfinder;f=f.renderer;var r="start"===a?this.fromPoint:this.toPoint,h=r.getPathfinderAnchorPoint(d); +if(d.enabled&&((b="start"===a?b[1]:b[b.length-2])&&"M"===b[0]||"L"===b[0])){b={x:b[1],y:b[2]};b=r.getRadiansToVector(b,h);h=r.getMarkerVector(b,d.radius,h);b=-b/e;if(d.width&&d.height){var n=d.width;var v=d.height}else n=v=2*d.radius;this.graphics=this.graphics||{};h={x:h.x-n/2,y:h.y-v/2,width:n,height:v,rotation:b,rotationOriginX:h.x,rotationOriginY:h.y};this.graphics[a]?this.graphics[a].animate(h):(this.graphics[a]=f.symbol(d.symbol).addClass("highcharts-point-connecting-path-"+a+"-marker").attr(h).add(c.group), +f.styledMode||this.graphics[a].attr({fill:d.color||this.fromPoint.color,stroke:d.lineColor,"stroke-width":d.lineWidth,opacity:0}).animate({opacity:1},r.series.options.animation))}},getPath:function(a){var d=this.pathfinder,b=this.chart,e=d.algorithms[a.type],f=d.chartObstacles;if("function"!==typeof e)H('"'+a.type+'" is not a Pathfinder algorithm.');else return e.requiresObstacles&&!f&&(f=d.chartObstacles=d.getChartObstacles(a),b.options.connectors.algorithmMargin=a.algorithmMargin,d.chartObstacleMetrics= +d.getObstacleMetrics(f)),e(this.fromPoint.getPathfinderAnchorPoint(a.startMarker),this.toPoint.getPathfinderAnchorPoint(a.endMarker),E({chartObstacles:f,lineObstacles:d.lineObstacles||[],obstacleMetrics:d.chartObstacleMetrics,hardBounds:{xMin:0,xMax:b.plotWidth,yMin:0,yMax:b.plotHeight},obstacleOptions:{margin:a.algorithmMargin},startDirectionX:d.getAlgorithmStartDirection(a.startMarker)},a))},render:function(){var a=this.fromPoint,d=a.series,b=d.chart,e=b.pathfinder,c=E(b.options.connectors,d.options.connectors, +a.options.connectors,this.options),r={};b.styledMode||(r.stroke=c.lineColor||a.color,r["stroke-width"]=c.lineWidth,c.dashStyle&&(r.dashstyle=c.dashStyle));r["class"]="highcharts-point-connecting-path highcharts-color-"+a.colorIndex;c=E(r,c);t(c.marker.radius)||(c.marker.radius=q(C(Math.ceil((c.algorithmMargin||8)/2)-1,1),5));a=this.getPath(c);b=a.path;a.obstacles&&(e.lineObstacles=e.lineObstacles||[],e.lineObstacles=e.lineObstacles.concat(a.obstacles));this.renderPath(b,r,d.options.animation);this.addMarker("start", +E(c.marker,c.startMarker),b);this.addMarker("end",E(c.marker,c.endMarker),b)},destroy:function(){this.graphics&&(p(this.graphics,function(a){a.destroy()}),delete this.graphics)}};b.prototype={algorithms:A,init:function(a){this.chart=a;this.connections=[];m(a,"redraw",function(){this.pathfinder.update()})},update:function(a){var d=this.chart,b=this,e=b.connections;b.connections=[];d.series.forEach(function(a){a.visible&&!a.options.isInternal&&a.points.forEach(function(a){var h,e=a.options&&a.options.connect&& +w(a.options.connect);a.visible&&!1!==a.isInside&&e&&e.forEach(function(e){h=d.get("string"===typeof e?e:e.to);h instanceof z&&h.series.visible&&h.visible&&!1!==h.isInside&&b.connections.push(new k(a,h,"string"===typeof e?{}:e))})})});for(var f=0,c,h,n=e.length,g=b.connections.length;fMath.PI;)a-=e;e=Math.tan(a);a>-n&&a<=n?(t=-1,g=!0):a>n&&a<=Math.PI-n?t=-1:a>Math.PI-n||a<=-(Math.PI-n)?(m= +-1,g=!0):m=-1;g?(k+=m*c,v+=t*c*e):(k+=h/(2*e)*m,v+=t*w);b.x!==q&&(k=b.x);b.y!==f&&(v=b.y);p.x=k+d*Math.cos(a);p.y=v-d*Math.sin(a);return p}});c.prototype.callbacks.push(function(a){!1!==a.options.connectors.enabled&&(g(a),this.pathfinder=new b(this),this.pathfinder.update(!0))})});J(c,"modules/xrange.src.js",[c["parts/Axis.js"],c["parts/Globals.js"],c["parts/Color.js"],c["parts/Point.js"],c["parts/Utilities.js"]],function(c,l,u,z,x){var A=u.parse;u=x.addEvent;var D=x.clamp,y=x.correctFloat,k=x.defined, +b=x.find,g=x.isNumber,m=x.isObject,t=x.merge,H=x.pick;x=x.seriesType;var I=l.seriesTypes.column,E=l.seriesTypes,p=l.Series;x("xrange","column",{colorByPoint:!0,dataLabels:{formatter:function(){var a=this.point.partialFill;m(a)&&(a=a.amount);if(g(a)&&0{point.x} - {point.x2}
    ',pointFormat:'\u25cf {series.name}: {point.yCategory}
    '}, +borderRadius:3,pointRange:0},{type:"xrange",parallelArrays:["x","x2","y"],requireSorting:!1,animate:E.line.prototype.animate,cropShoulder:1,getExtremesFromAll:!0,autoIncrement:l.noop,buildKDTree:l.noop,init:function(){E.column.prototype.init.apply(this,arguments);this.options.stacking=void 0},getColumnMetrics:function(){function a(){b.series.forEach(function(a){var b=a.xAxis;a.xAxis=a.yAxis;a.yAxis=b})}var b=this.chart;a();var e=I.prototype.getColumnMetrics.call(this);a();return e},cropData:function(a, +b,e,c){b=p.prototype.cropData.call(this,this.x2Data,b,e,c);b.xData=a.slice(b.start,b.end);return b},findPointIndex:function(a){var c=this.cropped,e=this.cropStart,k=this.points,q=a.id;if(q)var f=(f=b(k,function(a){return a.id===q}))?f.index:void 0;"undefined"===typeof f&&(f=(f=b(k,function(d){return d.x===a.x&&d.x2===a.x2&&!d.touched}))?f.index:void 0);c&&g(f)&&g(e)&&f>=e&&(f-=e);return f},translatePoint:function(a){var b=this.xAxis,e=this.yAxis,c=this.columnMetrics,q=this.options,f=q.minPointLength|| +0,d=a.plotX,v=H(a.x2,a.x+(a.len||0)),p=b.translate(v,0,0,0,1);v=Math.abs(p-d);var B=this.chart.inverted,r=H(q.borderWidth,1)%2/2,h=c.offset,n=Math.round(c.width);f&&(f-=v,0>f&&(f=0),d-=f/2,p+=f/2);d=Math.max(d,-10);p=D(p,-10,b.len+10);k(a.options.pointWidth)&&(h-=(Math.ceil(a.options.pointWidth)-n)/2,n=Math.ceil(a.options.pointWidth));q.pointPlacement&&g(a.plotY)&&e.categories&&(a.plotY=e.translate(a.y,0,1,0,1,q.pointPlacement));a.shapeArgs={x:Math.floor(Math.min(d,p))+r,y:Math.floor(a.plotY+h)+r, +width:Math.round(Math.abs(p-d)),height:n,r:this.options.borderRadius};q=a.shapeArgs.x;f=q+a.shapeArgs.width;0>q||f>b.len?(q=D(q,0,b.len),f=D(f,0,b.len),p=f-q,a.dlBox=t(a.shapeArgs,{x:q,width:f-q,centerX:p?p/2:null})):a.dlBox=null;q=a.tooltipPos;f=B?1:0;p=B?0:1;c=this.columnMetrics?this.columnMetrics.offset:-c.width/2;q[f]=D(q[f]+v/2*(b.reversed?-1:1)*(B?-1:1),0,b.len-1);q[p]=D(q[p]+(B?-1:1)*c,0,e.len-1);if(c=a.partialFill)m(c)&&(c=c.amount),g(c)||(c=0),e=a.shapeArgs,a.partShapeArgs={x:e.x,y:e.y,width:e.width, +height:e.height,r:this.options.borderRadius},d=Math.max(Math.round(v*c+a.plotX-d),0),a.clipRectArgs={x:b.reversed?e.x+v-d:e.x,y:e.y,width:d,height:e.height}},translate:function(){I.prototype.translate.apply(this,arguments);this.points.forEach(function(a){this.translatePoint(a)},this)},drawPoint:function(a,b){var e=this.options,c=this.chart.renderer,g=a.graphic,f=a.shapeType,d=a.shapeArgs,w=a.partShapeArgs,k=a.clipRectArgs,p=a.partialFill,r=e.stacking&&!e.borderRadius,h=a.state,n=e.states[h||"normal"]|| +{},F="undefined"===typeof h?"attr":b;h=this.pointAttribs(a,h);n=H(this.chart.options.chart.animation,n.animation);if(a.isNull||!1===a.visible)g&&(a.graphic=g.destroy());else{if(g)g.rect[b](d);else a.graphic=g=c.g("point").addClass(a.getClassName()).add(a.group||this.group),g.rect=c[f](t(d)).addClass(a.getClassName()).addClass("highcharts-partfill-original").add(g);w&&(g.partRect?(g.partRect[b](t(w)),g.partialClipRect[b](t(k))):(g.partialClipRect=c.clipRect(k.x,k.y,k.width,k.height),g.partRect=c[f](w).addClass("highcharts-partfill-overlay").add(g).clip(g.partialClipRect))); +this.chart.styledMode||(g.rect[b](h,n).shadow(e.shadow,null,r),w&&(m(p)||(p={}),m(e.partialFill)&&(p=t(p,e.partialFill)),a=p.fill||A(h.fill).brighten(-.3).get()||A(a.color||this.color).brighten(-.3).get(),h.fill=a,g.partRect[F](h,n).shadow(e.shadow,null,r)))}},drawPoints:function(){var a=this,b=a.getAnimationVerb();a.points.forEach(function(e){a.drawPoint(e,b)})},getAnimationVerb:function(){return this.chart.pointCount<(this.options.animationLimit||250)?"animate":"attr"}},{resolveColor:function(){var a= +this.series;if(a.options.colorByPoint&&!this.options.color){var b=a.options.colors||a.chart.options.colors;var e=this.y%(b?b.length:a.chart.options.chart.colorCount);b=b&&b[e];a.chart.styledMode||(this.color=b);this.options.colorIndex||(this.colorIndex=e)}else this.color||(this.color=a.color)},init:function(){z.prototype.init.apply(this,arguments);this.y||(this.y=0);return this},setState:function(){z.prototype.setState.apply(this,arguments);this.series.drawPoint(this,this.series.getAnimationVerb())}, +getLabelConfig:function(){var a=z.prototype.getLabelConfig.call(this),b=this.series.yAxis.categories;a.x2=this.x2;a.yCategory=this.yCategory=b&&b[this.y];return a},tooltipDateKeys:["x","x2"],isValid:function(){return"number"===typeof this.x&&"number"===typeof this.x2}});u(c,"afterGetSeriesExtremes",function(){var a=this.series,b;if(this.isXAxis){var e=H(this.dataMax,-Number.MAX_VALUE);a.forEach(function(a){a.x2Data&&a.x2Data.forEach(function(a){a>e&&(e=a,b=!0)})});b&&(this.dataMax=e)}});""});J(c, +"parts-gantt/GanttSeries.js",[c["parts/Globals.js"],c["parts/Options.js"],c["parts/Utilities.js"]],function(c,l,u){var z=l.dateFormat,x=u.isNumber,A=u.merge,D=u.pick;l=u.seriesType;var y=u.splat,k=c.seriesTypes.xrange;l("gantt","xrange",{grouping:!1,dataLabels:{enabled:!0},tooltip:{headerFormat:'{series.name}
    ',pointFormat:null,pointFormatter:function(){var b=this.series,c=b.chart.tooltip,k=b.xAxis,t=b.tooltipOptions.dateTimeLabelFormats,l=k.options.startOfWeek, +x=b.tooltipOptions,u=x.xDateFormat;b=this.options.milestone;var p=""+(this.name||this.yCategory)+"";if(x.pointFormat)return this.tooltipFormatter(x.pointFormat);u||(u=y(c.getDateFormat(k.closestPointRange,this.start,l,t))[0]);c=z(u,this.start);k=z(u,this.end);p+="
    ";return b?p+(c+"
    "):p+("Start: "+c+"
    End: ")+(k+"
    ")}},connectors:{type:"simpleConnect",animation:{reversed:!0},startMarker:{enabled:!0,symbol:"arrow-filled",radius:4,fill:"#fa0",align:"left"},endMarker:{enabled:!1, +align:"right"}}},{pointArrayMap:["start","end","y"],keyboardMoveVertical:!1,translatePoint:function(b){k.prototype.translatePoint.call(this,b);if(b.options.milestone){var c=b.shapeArgs;var m=c.height;b.shapeArgs={x:c.x-m/2,y:c.y,width:m,height:m}}},drawPoint:function(b,c){var g=this.options,t=this.chart.renderer,l=b.shapeArgs,u=b.plotY,y=b.graphic,p=b.selected&&"select",a=g.stacking&&!g.borderRadius;if(b.options.milestone)if(x(u)&&null!==b.y&&!1!==b.visible){l=t.symbols.diamond(l.x,l.y,l.width,l.height); +if(y)y[c]({d:l});else b.graphic=t.path(l).addClass(b.getClassName(),!0).add(b.group||this.group);this.chart.styledMode||b.graphic.attr(this.pointAttribs(b,p)).shadow(g.shadow,null,a)}else y&&(b.graphic=y.destroy());else k.prototype.drawPoint.call(this,b,c)},setData:c.Series.prototype.setData,setGanttPointAliases:function(b){function c(c,g){"undefined"!==typeof g&&(b[c]=g)}c("x",D(b.start,b.x));c("x2",D(b.end,b.x2));c("partialFill",D(b.completed,b.partialFill));c("connect",D(b.dependency,b.connect))}}, +A(k.prototype.pointClass.prototype,{applyOptions:function(b,g){b=A(b);c.seriesTypes.gantt.prototype.setGanttPointAliases(b);return b=k.prototype.pointClass.prototype.applyOptions.call(this,b,g)},isValid:function(){return("number"===typeof this.start||"number"===typeof this.x)&&("number"===typeof this.end||"number"===typeof this.x2||this.milestone)}}));""});J(c,"parts-gantt/GanttChart.js",[c["parts/Chart.js"],c["parts/Globals.js"],c["parts/Utilities.js"]],function(c,l,u){var z=u.getOptions,x=u.isArray, +A=u.merge,D=u.splat;l.ganttChart=function(u,k,b){var g="string"===typeof u||u.nodeName,m=k.series,t=z(),y,I=k;k=arguments[g?1:0];x(k.xAxis)||(k.xAxis=[k.xAxis||{},{}]);k.xAxis=k.xAxis.map(function(b,c){1===c&&(y=0);return A(t.xAxis,{grid:{enabled:!0},opposite:!0,linkedTo:y},b,{type:"datetime"})});k.yAxis=D(k.yAxis||{}).map(function(b){return A(t.yAxis,{grid:{enabled:!0},staticScale:50,reversed:!0,type:b.categories?b.type:"treegrid"},b)});k.series=null;k=A(!0,{chart:{type:"gantt"},title:{text:null}, +legend:{enabled:!1}},k,{isGantt:!0});k.series=I.series=m;(k.series||[]).forEach(function(b){b.data&&b.data.forEach(function(b){l.seriesTypes.gantt.prototype.setGanttPointAliases(b)})});return g?new c(u,k,b):new c(k,k)}});J(c,"parts/ScrollbarAxis.js",[c["parts/Globals.js"],c["parts/Utilities.js"]],function(c,l){var u=l.addEvent,z=l.defined,x=l.pick;return function(){function l(){}l.compose=function(l,y){u(l,"afterInit",function(){var k=this;k.options&&k.options.scrollbar&&k.options.scrollbar.enabled&& +(k.options.scrollbar.vertical=!k.horiz,k.options.startOnTick=k.options.endOnTick=!1,k.scrollbar=new y(k.chart.renderer,k.options.scrollbar,k.chart),u(k.scrollbar,"changed",function(b){var g=x(k.options&&k.options.min,k.min),m=x(k.options&&k.options.max,k.max),l=z(k.dataMin)?Math.min(g,k.min,k.dataMin):g,u=(z(k.dataMax)?Math.max(m,k.max,k.dataMax):m)-l;z(g)&&z(m)&&(k.horiz&&!k.reversed||!k.horiz&&k.reversed?(g=l+u*this.to,l+=u*this.from):(g=l+u*(1-this.from),l+=u*(1-this.to)),x(this.options.liveRedraw, +c.svg&&!c.isTouchDevice&&!this.chart.isBoosting)||"mouseup"===b.DOMType||!z(b.DOMType)?k.setExtremes(l,g,!0,"mousemove"!==b.DOMType,b):this.setRange(this.from,this.to))}))});u(l,"afterRender",function(){var c=Math.min(x(this.options.min,this.min),this.min,x(this.dataMin,this.min)),b=Math.max(x(this.options.max,this.max),this.max,x(this.dataMax,this.max)),g=this.scrollbar,m=this.axisTitleMargin+(this.titleOffset||0),l=this.chart.scrollbarsOffsets,u=this.options.margin||0;g&&(this.horiz?(this.opposite|| +(l[1]+=m),g.position(this.left,this.top+this.height+2+l[1]-(this.opposite?u:0),this.width,this.height),this.opposite||(l[1]+=u),m=1):(this.opposite&&(l[0]+=m),g.position(this.left+this.width+2+l[0]-(this.opposite?0:u),this.top,this.width,this.height),this.opposite&&(l[0]+=u),m=0),l[m]+=g.size+g.options.margin,isNaN(c)||isNaN(b)||!z(this.min)||!z(this.max)||this.min===this.max?g.setRange(0,1):(l=(this.min-c)/(b-c),c=(this.max-c)/(b-c),this.horiz&&!this.reversed||!this.horiz&&this.reversed?g.setRange(l, +c):g.setRange(1-c,1-l)))});u(l,"afterGetOffset",function(){var c=this.horiz?2:1,b=this.scrollbar;b&&(this.chart.scrollbarsOffsets=[0,0],this.chart.axisOffset[c]+=b.size+b.options.margin)})};return l}()});J(c,"parts/Scrollbar.js",[c["parts/Axis.js"],c["parts/Globals.js"],c["parts/ScrollbarAxis.js"],c["parts/Utilities.js"],c["parts/Options.js"]],function(c,l,u,z,x){var A=z.addEvent,D=z.correctFloat,y=z.defined,k=z.destroyObjectProperties,b=z.fireEvent,g=z.merge,m=z.pick,t=z.removeEvent;z=x.defaultOptions; +var H=l.hasTouch,I=l.isTouchDevice,E=l.swapXY=function(b,a){a&&b.forEach(function(a){for(var b=a.length,c,g=0;gthis.calculatedWidth?b.minWidth:0;return{chartX:(a.chartX-this.x-this.xOffset)/(this.barWidth-b),chartY:(a.chartY-this.y-this.yOffset)/(this.barWidth-b)}};c.prototype.destroy=function(){var a=this.chart.scroller;this.removeEvents();["track","scrollbarRifles","scrollbar", +"scrollbarGroup","group"].forEach(function(a){this[a]&&this[a].destroy&&(this[a]=this[a].destroy())},this);a&&this===a.scrollbar&&(a.scrollbar=null,k(a.scrollbarButtons))};c.prototype.drawScrollbarButton=function(a){var b=this.renderer,c=this.scrollbarButtons,g=this.options,k=this.size;var f=b.g().add(this.group);c.push(f);f=b.rect().addClass("highcharts-scrollbar-button").add(f);this.chart.styledMode||f.attr({stroke:g.buttonBorderColor,"stroke-width":g.buttonBorderWidth,fill:g.buttonBackgroundColor}); +f.attr(f.crisp({x:-.5,y:-.5,width:k+1,height:k+1,r:g.buttonBorderRadius},f.strokeWidth()));f=b.path(E([["M",k/2+(a?-1:1),k/2-3],["L",k/2+(a?-1:1),k/2+3],["L",k/2+(a?2:-2),k/2]],g.vertical)).addClass("highcharts-scrollbar-arrow").add(c[a]);this.chart.styledMode||f.attr({fill:g.buttonArrowColor})};c.prototype.init=function(a,b,e){this.scrollbarButtons=[];this.renderer=a;this.userOptions=b;this.options=g(c.defaultOptions,b);this.chart=e;this.size=m(this.options.size,this.options.height);b.enabled&&(this.render(), +this.addEvents())};c.prototype.mouseDownHandler=function(a){a=this.chart.pointer.normalize(a);a=this.cursorToScrollbarPosition(a);this.chartX=a.chartX;this.chartY=a.chartY;this.initPositions=[this.from,this.to];this.grabbedCenter=!0};c.prototype.mouseMoveHandler=function(a){var c=this.chart.pointer.normalize(a),e=this.options.vertical?"chartY":"chartX",g=this.initPositions||[];!this.grabbedCenter||a.touches&&0===a.touches[0][e]||(c=this.cursorToScrollbarPosition(c)[e],e=this[e],e=c-e,this.hasDragged= +!0,this.updatePosition(g[0]+e,g[1]+e),this.hasDragged&&b(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:a.type,DOMEvent:a}))};c.prototype.mouseUpHandler=function(a){this.hasDragged&&b(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:a.type,DOMEvent:a});this.grabbedCenter=this.hasDragged=this.chartX=this.chartY=null};c.prototype.position=function(a,b,c,g){var e=this.options.vertical,f=0,d=this.rendered?"animate":"attr";this.x=a;this.y=b+this.trackBorderWidth; +this.width=c;this.xOffset=this.height=g;this.yOffset=f;e?(this.width=this.yOffset=c=f=this.size,this.xOffset=b=0,this.barWidth=g-2*c,this.x=a+=this.options.margin):(this.height=this.xOffset=g=b=this.size,this.barWidth=c-2*g,this.y+=this.options.margin);this.group[d]({translateX:a,translateY:this.y});this.track[d]({width:c,height:g});this.scrollbarButtons[1][d]({translateX:e?0:c-b,translateY:e?g-f:0})};c.prototype.removeEvents=function(){this._events.forEach(function(a){t.apply(null,a)});this._events.length= +0};c.prototype.render=function(){var a=this.renderer,b=this.options,c=this.size,g=this.chart.styledMode,k;this.group=k=a.g("scrollbar").attr({zIndex:b.zIndex,translateY:-99999}).add();this.track=a.rect().addClass("highcharts-scrollbar-track").attr({x:0,r:b.trackBorderRadius||0,height:c,width:c}).add(k);g||this.track.attr({fill:b.trackBackgroundColor,stroke:b.trackBorderColor,"stroke-width":b.trackBorderWidth});this.trackBorderWidth=this.track.strokeWidth();this.track.attr({y:-this.trackBorderWidth% +2/2});this.scrollbarGroup=a.g().add(k);this.scrollbar=a.rect().addClass("highcharts-scrollbar-thumb").attr({height:c,width:c,r:b.barBorderRadius||0}).add(this.scrollbarGroup);this.scrollbarRifles=a.path(E([["M",-3,c/4],["L",-3,2*c/3],["M",0,c/4],["L",0,2*c/3],["M",3,c/4],["L",3,2*c/3]],b.vertical)).addClass("highcharts-scrollbar-rifles").add(this.scrollbarGroup);g||(this.scrollbar.attr({fill:b.barBackgroundColor,stroke:b.barBorderColor,"stroke-width":b.barBorderWidth}),this.scrollbarRifles.attr({stroke:b.rifleColor, +"stroke-width":1}));this.scrollbarStrokeWidth=this.scrollbar.strokeWidth();this.scrollbarGroup.translate(-this.scrollbarStrokeWidth%2/2,-this.scrollbarStrokeWidth%2/2);this.drawScrollbarButton(0);this.drawScrollbarButton(1)};c.prototype.setRange=function(a,b){var c=this.options,g=c.vertical,k=c.minWidth,f=this.barWidth,d,v=!this.rendered||this.hasDragged||this.chart.navigator&&this.chart.navigator.hasDragged?"attr":"animate";if(y(f)){a=Math.max(a,0);var l=Math.ceil(f*a);this.calculatedWidth=d=D(f* +Math.min(b,1)-l);d=d?this.scrollbarRifles.hide():this.scrollbarRifles.show(!0);!1===c.showFull&&(0>= +a&&1<=b?this.group.hide():this.group.show());this.rendered=!0}};c.prototype.trackClick=function(a){var c=this.chart.pointer.normalize(a),e=this.to-this.from,g=this.y+this.scrollbarTop,k=this.x+this.scrollbarLeft;this.options.vertical&&c.chartY>g||!this.options.vertical&&c.chartX>k?this.updatePosition(this.from+e,this.to+e):this.updatePosition(this.from-e,this.to-e);b(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:a})};c.prototype.update=function(a){this.destroy();this.init(this.chart.renderer, +g(!0,this.options,a),this.chart)};c.prototype.updatePosition=function(a,b){1a&&(b=D(b-a),a=0);this.from=a;this.to=b};c.defaultOptions={height:I?20:14,barBorderRadius:0,buttonBorderRadius:0,liveRedraw:void 0,margin:10,minWidth:6,step:.2,zIndex:3,barBackgroundColor:"#cccccc",barBorderWidth:1,barBorderColor:"#cccccc",buttonArrowColor:"#333333",buttonBackgroundColor:"#e6e6e6",buttonBorderColor:"#cccccc",buttonBorderWidth:1,rifleColor:"#333333",trackBackgroundColor:"#f2f2f2", +trackBorderColor:"#f2f2f2",trackBorderWidth:1};return c}();l.Scrollbar||(z.scrollbar=g(!0,x.defaultOptions,z.scrollbar),l.Scrollbar=x,u.compose(c,x));return l.Scrollbar});J(c,"parts/RangeSelector.js",[c["parts/Axis.js"],c["parts/Chart.js"],c["parts/Globals.js"],c["parts/Options.js"],c["parts/SVGElement.js"],c["parts/Utilities.js"]],function(c,l,u,z,x,A){var D=z.defaultOptions,y=A.addEvent,k=A.createElement,b=A.css,g=A.defined,m=A.destroyObjectProperties,t=A.discardElement,H=A.extend,I=A.fireEvent, +E=A.isNumber,p=A.merge,a=A.objectEach,w=A.pick,e=A.pInt,C=A.splat;H(D,{rangeSelector:{verticalAlign:"top",buttonTheme:{width:28,height:18,padding:2,zIndex:7},floating:!1,x:0,y:0,height:void 0,inputPosition:{align:"right",x:0,y:0},buttonPosition:{align:"left",x:0,y:0},labelStyle:{color:"#666666"}}});D.lang=p(D.lang,{rangeSelectorZoom:"Zoom",rangeSelectorFrom:"From",rangeSelectorTo:"To"});var q=function(){function f(a){this.buttons=void 0;this.buttonOptions=f.prototype.defaultButtons;this.options=void 0; +this.chart=a;this.init(a)}f.prototype.clickButton=function(a,b){var d=this.chart,e=this.buttonOptions[a],f=d.xAxis[0],h=d.scroller&&d.scroller.getUnionExtremes()||f||{},n=h.dataMin,g=h.dataMax,k=f&&Math.round(Math.min(f.max,w(g,f.max))),v=e.type;h=e._range;var l,p=e.dataGrouping;if(null!==n&&null!==g){d.fixedRange=h;p&&(this.forcedDataGrouping=!0,c.prototype.setDataGrouping.call(f||{chart:this.chart},p,!1),this.frozenStates=e.preserveDataGrouping);if("month"===v||"year"===v)if(f){v={range:e,max:k, +chart:d,dataMin:n,dataMax:g};var m=f.minFromRange.call(v);E(v.newMax)&&(k=v.newMax)}else h=e;else if(h)m=Math.max(k-h,n),k=Math.min(m+h,g);else if("ytd"===v)if(f)"undefined"===typeof g&&(n=Number.MAX_VALUE,g=Number.MIN_VALUE,d.series.forEach(function(a){a=a.xData;n=Math.min(a[0],n);g=Math.max(a[a.length-1],g)}),b=!1),k=this.getYTDExtremes(g,n,d.time.useUTC),m=l=k.min,k=k.max;else{this.deferredYTDClick=a;return}else"all"===v&&f&&(m=n,k=g);m+=e._offsetMin;k+=e._offsetMax;this.setSelected(a);if(f)f.setExtremes(m, +k,w(b,1),null,{trigger:"rangeSelectorButton",rangeSelectorButton:e});else{var q=C(d.options.xAxis)[0];var t=q.range;q.range=h;var u=q.min;q.min=l;y(d,"load",function(){q.range=t;q.min=u})}}};f.prototype.setSelected=function(a){this.selected=this.options.selected=a};f.prototype.init=function(a){var b=this,c=a.options.rangeSelector,d=c.buttons||b.defaultButtons.slice(),e=c.selected,h=function(){var a=b.minInput,c=b.maxInput;a&&a.blur&&I(a,"blur");c&&c.blur&&I(c,"blur")};b.chart=a;b.options=c;b.buttons= +[];b.buttonOptions=d;this.unMouseDown=y(a.container,"mousedown",h);this.unResize=y(a,"resize",h);d.forEach(b.computeButtonRange);"undefined"!==typeof e&&d[e]&&this.clickButton(e,!1);y(a,"load",function(){a.xAxis&&a.xAxis[0]&&y(a.xAxis[0],"setExtremes",function(c){this.max-this.min!==a.fixedRange&&"rangeSelectorButton"!==c.trigger&&"updatedData"!==c.trigger&&b.forcedDataGrouping&&!b.frozenStates&&this.setDataGrouping(!1,!1)})})};f.prototype.updateButtonStates=function(){var a=this,b=this.chart,c=b.xAxis[0], +e=Math.round(c.max-c.min),f=!c.hasVisibleSeries,h=b.scroller&&b.scroller.getUnionExtremes()||c,n=h.dataMin,g=h.dataMax;b=a.getYTDExtremes(g,n,b.time.useUTC);var k=b.min,l=b.max,p=a.selected,m=E(p),q=a.options.allButtonsEnabled,t=a.buttons;a.buttonOptions.forEach(function(b,d){var h=b._range,r=b.type,F=b.count||1,v=t[d],B=0,G=b._offsetMax-b._offsetMin;b=d===p;var w=h>g-n,K=h=864E5*{month:28,year:365}[r]*F-G&&e-36E5<=864E5*{month:31,year:366}[r]* +F+G?h=!0:"ytd"===r?(h=l-k+G===e,u=!b):"all"===r&&(h=c.max-c.min>=g-n,P=!b&&m&&h);r=!q&&(w||K||P||f);F=b&&h||h&&!m&&!u||b&&a.frozenStates;r?B=3:F&&(m=!0,B=2);v.state!==B&&(v.setState(B),0===B&&p===d&&a.setSelected(null))})};f.prototype.computeButtonRange=function(a){var b=a.type,c=a.count||1,d={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5};if(d[b])a._range=d[b]*c;else if("month"===b||"year"===b)a._range=864E5*{month:30,year:365}[b]*c;a._offsetMin=w(a.offsetMin,0);a._offsetMax= +w(a.offsetMax,0);a._range+=a._offsetMax-a._offsetMin};f.prototype.setInputValue=function(a,b){var c=this.chart.options.rangeSelector,d=this.chart.time,e=this[a+"Input"];g(b)&&(e.previousValue=e.HCTime,e.HCTime=b);e.value=d.dateFormat(c.inputEditDateFormat||"%Y-%m-%d",e.HCTime);this[a+"DateBox"].attr({text:d.dateFormat(c.inputDateFormat||"%b %e, %Y",e.HCTime)})};f.prototype.showInput=function(a){var c=this.inputGroup,d=this[a+"DateBox"];b(this[a+"Input"],{left:c.translateX+d.x+"px",top:c.translateY+ +"px",width:d.width-2+"px",height:d.height-2+"px",border:"2px solid silver"})};f.prototype.hideInput=function(a){b(this[a+"Input"],{border:0,width:"1px",height:"1px"});this.setInputValue(a)};f.prototype.drawInput=function(a){function c(){var a=m.value,b=(n.inputDateParser||Date.parse)(a),c=f.xAxis[0],h=f.scroller&&f.scroller.xAxis?f.scroller.xAxis:c,g=h.dataMin;h=h.dataMax;b!==m.previousValue&&(m.previousValue=b,E(b)||(b=a.split("-"),b=Date.UTC(e(b[0]),e(b[1])-1,e(b[2]))),E(b)&&(f.time.useUTC||(b+= +6E4*(new Date).getTimezoneOffset()),l?b>d.maxInput.HCTime?b=void 0:bh&&(b=h),"undefined"!==typeof b&&c.setExtremes(l?b:c.min,l?c.max:b,void 0,void 0,{trigger:"rangeSelectorInput"})))}var d=this,f=d.chart,g=f.renderer.style||{},h=f.renderer,n=f.options.rangeSelector,F=d.div,l="min"===a,m,q,t=this.inputGroup;this[a+"Label"]=q=h.label(D.lang[l?"rangeSelectorFrom":"rangeSelectorTo"],this.inputGroup.offset).addClass("highcharts-range-label").attr({padding:2}).add(t); +t.offset+=q.width+5;this[a+"DateBox"]=h=h.label("",t.offset).addClass("highcharts-range-input").attr({padding:2,width:n.inputBoxWidth||90,height:n.inputBoxHeight||17,"text-align":"center"}).on("click",function(){d.showInput(a);d[a+"Input"].focus()});f.styledMode||h.attr({stroke:n.inputBoxBorderColor||"#cccccc","stroke-width":1});h.add(t);t.offset+=h.width+(l?10:0);this[a+"Input"]=m=k("input",{name:a,className:"highcharts-range-selector",type:"text"},{top:f.plotTop+"px"},F);f.styledMode||(q.css(p(g, +n.labelStyle)),h.css(p({color:"#333333"},g,n.inputStyle)),b(m,H({position:"absolute",border:0,width:"1px",height:"1px",padding:0,textAlign:"center",fontSize:g.fontSize,fontFamily:g.fontFamily,top:"-9999em"},n.inputStyle)));m.onfocus=function(){d.showInput(a)};m.onblur=function(){m===u.doc.activeElement&&c();d.hideInput(a);m.blur()};m.onchange=c;m.onkeypress=function(a){13===a.keyCode&&c()}};f.prototype.getPosition=function(){var a=this.chart,b=a.options.rangeSelector;a="top"===b.verticalAlign?a.plotTop- +a.axisOffset[0]:0;return{buttonTop:a+b.buttonPosition.y,inputTop:a+b.inputPosition.y-10}};f.prototype.getYTDExtremes=function(a,b,c){var d=this.chart.time,e=new d.Date(a),h=d.get("FullYear",e);c=c?d.Date.UTC(h,0,1):+new d.Date(h,0,1);b=Math.max(b||0,c);e=e.getTime();return{max:Math.min(a||e,e),min:b}};f.prototype.render=function(a,b){var c=this,d=c.chart,e=d.renderer,h=d.container,n=d.options,f=n.exporting&&!1!==n.exporting.enabled&&n.navigation&&n.navigation.buttonOptions,g=D.lang,l=c.div,m=n.rangeSelector, +p=w(n.chart.style&&n.chart.style.zIndex,0)+1;n=m.floating;var q=c.buttons;l=c.inputGroup;var v=m.buttonTheme,t=m.buttonPosition,u=m.inputPosition,x=m.inputEnabled,y=v&&v.states,z=d.plotLeft,A=c.buttonGroup,C,E=c.options.verticalAlign,H=d.legend,I=H&&H.options,J=t.y,N=u.y,O=d.hasLoaded,Q=O?"animate":"attr",M=0,L=0;if(!1!==m.enabled){c.rendered||(c.group=C=e.g("range-selector-group").attr({zIndex:7}).add(),c.buttonGroup=A=e.g("range-selector-buttons").add(C),c.zoomText=e.text(g.rangeSelectorZoom,0, +15).add(A),d.styledMode||(c.zoomText.css(m.labelStyle),v["stroke-width"]=w(v["stroke-width"],0)),c.buttonOptions.forEach(function(a,b){q[b]=e.button(a.text,0,0,function(h){var d=a.events&&a.events.click,e;d&&(e=d.call(a,h));!1!==e&&c.clickButton(b);c.isActive=!0},v,y&&y.hover,y&&y.select,y&&y.disabled).attr({"text-align":"center"}).add(A)}),!1!==x&&(c.div=l=k("div",null,{position:"relative",height:0,zIndex:p}),h.parentNode.insertBefore(l,h),c.inputGroup=l=e.g("input-group").add(C),l.offset=0,c.drawInput("min"), +c.drawInput("max")));c.zoomText[Q]({x:w(z+t.x,z)});var R=w(z+t.x,z)+c.zoomText.getBBox().width+5;c.buttonOptions.forEach(function(a,b){q[b][Q]({x:R});R+=q[b].width+w(m.buttonSpacing,5)});z=d.plotLeft-d.spacing[3];c.updateButtonStates();f&&this.titleCollision(d)&&"top"===E&&"right"===t.align&&t.y+A.getBBox().height-12<(f.y||0)+f.height&&(M=-40);h=t.x-d.spacing[3];"right"===t.align?h+=M-z:"center"===t.align&&(h-=z/2);A.align({y:t.y,width:A.getBBox().width,align:t.align,x:h},!0,d.spacingBox);c.group.placed= +O;c.buttonGroup.placed=O;!1!==x&&(M=f&&this.titleCollision(d)&&"top"===E&&"right"===u.align&&u.y-l.getBBox().height-12<(f.y||0)+f.height+d.spacing[0]?-40:0,"left"===u.align?h=z:"right"===u.align&&(h=-Math.max(d.axisOffset[1],-M)),l.align({y:u.y,width:l.getBBox().width,align:u.align,x:u.x+h-2},!0,d.spacingBox),f=l.alignAttr.translateX+l.alignOptions.x-M+l.getBBox().x+2,h=l.alignOptions.width,g=A.alignAttr.translateX+A.getBBox().x,z=A.getBBox().width+20,(u.align===t.align||g+z>f&&f+h>g&&J=-M?0:-M),translateY:l.alignAttr.translateY+A.getBBox().height+10}),c.setInputValue("min",a),c.setInputValue("max",b),c.inputGroup.placed=O);c.group.align({verticalAlign:E},!0,d.spacingBox);a=c.group.getBBox().height+20;b=c.group.alignAttr.translateY;"bottom"===E&&(H=I&&"bottom"===I.verticalAlign&&I.enabled&&!I.floating?H.legendHeight+w(I.margin,10):0,a=a+H-20,L=b-a-(n?0:m.y)-(d.titleOffset?d.titleOffset[2]:0)-10);if("top"===E)n&&(L=0),d.titleOffset&& +d.titleOffset[0]&&(L=d.titleOffset[0]),L+=d.margin[0]-d.spacing[0]||0;else if("middle"===E)if(N===J)L=0>N?b+void 0:b;else if(N||J)L=0>N||0>J?L-Math.min(N,J):b-a+NaN;c.group.translate(m.x,m.y+Math.floor(L));!1!==x&&(c.minInput.style.marginTop=c.group.translateY+"px",c.maxInput.style.marginTop=c.group.translateY+"px");c.rendered=!0}};f.prototype.getHeight=function(){var a=this.options,b=this.group,c=a.y,e=a.buttonPosition.y,f=a.inputPosition.y;if(a.height)return a.height;a=b?b.getBBox(!0).height+13+ +c:0;b=Math.min(f,e);if(0>f&&0>e||0g&&(l?b=c-m:c=b+m);D(b)&&D(c)||(b=c=void 0);return{min:b,max:c}};return b}();return function(){function b(){}b.compose=function(b){b.keepProps.push("navigatorAxis");z(b,"init",function(){this.navigatorAxis||(this.navigatorAxis=new k(this))});z(b,"zoom",function(b){var c=this.chart.options, +g=c.navigator,k=this.navigatorAxis,l=c.chart.pinchType,m=c.rangeSelector;c=c.chart.zoomType;this.isXAxis&&(g&&g.enabled||m&&m.enabled)&&("y"===c?b.zoomed=!1:(!u&&"xy"===c||u&&"xy"===l)&&this.options.range&&(g=k.previousZoom,A(b.newMin)?k.previousZoom=[this.min,this.max]:g&&(b.newMin=g[0],b.newMax=g[1],k.previousZoom=void 0)));"undefined"!==typeof b.zoomed&&b.preventDefault()})};b.AdditionsClass=k;return b}()});J(c,"parts/Navigator.js",[c["parts/Axis.js"],c["parts/Chart.js"],c["parts/Color.js"],c["parts/Globals.js"], +c["parts/NavigatorAxis.js"],c["parts/Options.js"],c["parts/Scrollbar.js"],c["parts/Utilities.js"]],function(c,l,u,z,x,A,D,y){u=u.parse;var k=A.defaultOptions,b=y.addEvent,g=y.clamp,m=y.correctFloat,t=y.defined,H=y.destroyObjectProperties,I=y.erase,E=y.extend,p=y.find,a=y.isArray,w=y.isNumber,e=y.merge,C=y.pick,q=y.removeEvent,f=y.splat,d=z.hasTouch,v=z.isTouchDevice;A=z.Series;var G=function(a){for(var b=[],c=1;cv&&(this.grabbedLeft?c=n.toPixels(b-v-k,!0):this.grabbedRight&&(e=n.toPixels(a+v+k,!0)));this.zoomedMax= +g(Math.max(c,e),0,q);this.zoomedMin=g(this.fixedWidth?this.zoomedMax-this.fixedWidth:Math.min(c,e),0,q);this.range=this.zoomedMax-this.zoomedMin;q=Math.round(this.zoomedMax);c=Math.round(this.zoomedMin);p&&(this.navigatorGroup.attr({visibility:"visible"}),r=r&&!this.hasDragged?"animate":"attr",this.drawMasks(c,q,F,r),this.drawOutline(c,q,F,r),this.navigatorOptions.handles.enabled&&(this.drawHandle(c,0,F,r),this.drawHandle(q,1,F,r)));this.scrollbar&&(F?(F=this.top-h,l=this.left-h+(p||!l.opposite?0: +(l.titleOffset||0)+l.axisTitleMargin),h=f+2*h):(F=this.top+(p?this.height:-h),l=this.left-h),this.scrollbar.position(l,F,d,h),this.scrollbar.setRange(this.zoomedMin/(f||1),this.zoomedMax/(f||1)));this.rendered=!0}};l.prototype.addMouseEvents=function(){var a=this,c=a.chart,e=c.container,f=[],g,k;a.mouseMoveHandler=g=function(b){a.onMouseMove(b)};a.mouseUpHandler=k=function(b){a.onMouseUp(b)};f=a.getPartsEvents("mousedown");f.push(b(c.renderTo,"mousemove",g),b(e.ownerDocument,"mouseup",k));d&&(f.push(b(c.renderTo, +"touchmove",g),b(e.ownerDocument,"touchend",k)),f.concat(a.getPartsEvents("touchstart")));a.eventsToUnbind=f;a.series&&a.series[0]&&f.push(b(a.series[0].xAxis,"foundExtremes",function(){c.navigator.modifyNavigatorAxisExtremes()}))};l.prototype.getPartsEvents=function(a){var c=this,e=[];["shades","handles"].forEach(function(d){c[d].forEach(function(h,f){e.push(b(h.element,a,function(a){c[d+"Mousedown"](a,f)}))})});return e};l.prototype.shadesMousedown=function(a,b){a=this.chart.pointer.normalize(a); +var c=this.chart,e=this.xAxis,d=this.zoomedMin,h=this.left,f=this.size,g=this.range,n=a.chartX;c.inverted&&(n=a.chartY,h=this.top);if(1===b)this.grabbedCenter=n,this.fixedWidth=g,this.dragOffset=n-d;else{a=n-h-g/2;if(0===b)a=Math.max(0,a);else if(2===b&&a+g>=f)if(a=f-g,this.reversedExtremes){a-=g;var k=this.getUnionExtremes().dataMin}else var l=this.getUnionExtremes().dataMax;a!==d&&(this.fixedWidth=g,b=e.navigatorAxis.toFixedRange(a,a+g,k,l),t(b.min)&&c.xAxis[0].setExtremes(Math.min(b.min,b.max), +Math.max(b.min,b.max),!0,null,{trigger:"navigator"}))}};l.prototype.handlesMousedown=function(a,b){this.chart.pointer.normalize(a);a=this.chart;var c=a.xAxis[0],e=this.reversedExtremes;0===b?(this.grabbedLeft=!0,this.otherHandlePos=this.zoomedMax,this.fixedExtreme=e?c.min:c.max):(this.grabbedRight=!0,this.otherHandlePos=this.zoomedMin,this.fixedExtreme=e?c.max:c.min);a.fixedRange=null};l.prototype.onMouseMove=function(a){var b=this,c=b.chart,e=b.left,d=b.navigatorSize,h=b.range,f=b.dragOffset,g=c.inverted; +a.touches&&0===a.touches[0].pageX||(a=c.pointer.normalize(a),c=a.chartX,g&&(e=b.top,c=a.chartY),b.grabbedLeft?(b.hasDragged=!0,b.render(0,0,c-e,b.otherHandlePos)):b.grabbedRight?(b.hasDragged=!0,b.render(0,0,b.otherHandlePos,c-e)):b.grabbedCenter&&(b.hasDragged=!0,cd+f-h&&(c=d+f-h),b.render(0,0,c-f,c-f+h)),b.hasDragged&&b.scrollbar&&C(b.scrollbar.options.liveRedraw,z.svg&&!v&&!this.chart.isBoosting)&&(a.DOMType=a.type,setTimeout(function(){b.onMouseUp(a)},0)))};l.prototype.onMouseUp=function(a){var b= +this.chart,c=this.xAxis,e=this.scrollbar,d=a.DOMEvent||a,h=b.inverted,f=this.rendered&&!this.hasDragged?"animate":"attr",g=Math.round(this.zoomedMax),k=Math.round(this.zoomedMin);if(this.hasDragged&&(!e||!e.hasDragged)||"scrollbar"===a.trigger){e=this.getUnionExtremes();if(this.zoomedMin===this.otherHandlePos)var l=this.fixedExtreme;else if(this.zoomedMax===this.otherHandlePos)var m=this.fixedExtreme;this.zoomedMax===this.size&&(m=this.reversedExtremes?e.dataMin:e.dataMax);0===this.zoomedMin&&(l= +this.reversedExtremes?e.dataMax:e.dataMin);c=c.navigatorAxis.toFixedRange(this.zoomedMin,this.zoomedMax,l,m);t(c.min)&&b.xAxis[0].setExtremes(Math.min(c.min,c.max),Math.max(c.min,c.max),!0,this.hasDragged?!1:null,{trigger:"navigator",triggerOp:"navigator-drag",DOMEvent:d})}"mousemove"!==a.DOMType&&"touchmove"!==a.DOMType&&(this.grabbedLeft=this.grabbedRight=this.grabbedCenter=this.fixedWidth=this.fixedExtreme=this.otherHandlePos=this.hasDragged=this.dragOffset=null);this.navigatorEnabled&&(this.shades&& +this.drawMasks(k,g,h,f),this.outline&&this.drawOutline(k,g,h,f),this.navigatorOptions.handles.enabled&&Object.keys(this.handles).length===this.handles.length&&(this.drawHandle(k,0,h,f),this.drawHandle(g,1,h,f)))};l.prototype.removeEvents=function(){this.eventsToUnbind&&(this.eventsToUnbind.forEach(function(a){a()}),this.eventsToUnbind=void 0);this.removeBaseSeriesEvents()};l.prototype.removeBaseSeriesEvents=function(){var a=this.baseSeries||[];this.navigatorEnabled&&a[0]&&(!1!==this.navigatorOptions.adaptToUpdatedData&& +a.forEach(function(a){q(a,"updatedData",this.updatedDataHandler)},this),a[0].xAxis&&q(a[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes))};l.prototype.init=function(a){var d=a.options,h=d.navigator,f=h.enabled,g=d.scrollbar,k=g.enabled;d=f?h.height:0;var l=k?g.height:0;this.handles=[];this.shades=[];this.chart=a;this.setBaseSeries();this.height=d;this.scrollbarHeight=l;this.scrollbarEnabled=k;this.navigatorEnabled=f;this.navigatorOptions=h;this.scrollbarOptions=g;this.outlineHeight=d+l;this.opposite= +C(h.opposite,!(f||!a.inverted));var m=this;f=m.baseSeries;g=a.xAxis.length;k=a.yAxis.length;var p=f&&f[0]&&f[0].xAxis||a.xAxis[0]||{options:{}};a.isDirtyBox=!0;m.navigatorEnabled?(m.xAxis=new c(a,e({breaks:p.options.breaks,ordinal:p.options.ordinal},h.xAxis,{id:"navigator-x-axis",yAxis:"navigator-y-axis",isX:!0,type:"datetime",index:g,isInternal:!0,offset:0,keepOrdinalPadding:!0,startOnTick:!1,endOnTick:!1,minPadding:0,maxPadding:0,zoomEnabled:!1},a.inverted?{offsets:[l,0,-l,0],width:d}:{offsets:[0, +-l,0,l],height:d})),m.yAxis=new c(a,e(h.yAxis,{id:"navigator-y-axis",alignTicks:!1,offset:0,index:k,isInternal:!0,zoomEnabled:!1},a.inverted?{width:d}:{height:d})),f||h.series.data?m.updateNavigatorSeries(!1):0===a.series.length&&(m.unbindRedraw=b(a,"beforeRedraw",function(){0g.indexOf(b)?(b&&(q(b,"updatedData",d.updatedDataHandler),delete b.navigatorSeries),a.chart&&a.destroy(), +!1):!0});g&&g.length&&g.forEach(function(b){var f=b.navigatorSeries,q=E({color:b.color,visible:b.visible},a(m)?k.navigator.series:m);f&&!1===d.navigatorOptions.adaptToUpdatedData||(r.name="Navigator "+g.length,n=b.options||{},p=n.navigatorOptions||{},l=e(n,r,q,p),l.pointRange=C(q.pointRange,p.pointRange,k.plotOptions[l.type||"line"].pointRange),q=p.data||q.data,d.hasNavigatorData=d.hasNavigatorData||!!q,l.data=q||n.data&&n.data.slice(0),f&&f.options?f.update(l,c):(b.navigatorSeries=h.initSeries(l), +b.navigatorSeries.baseSeries=b,t.push(b.navigatorSeries)))});if(m.data&&(!g||!g.length)||a(m))d.hasNavigatorData=!1,m=f(m),m.forEach(function(a,b){r.name="Navigator "+(t.length+1);l=e(k.navigator.series,{color:h.series[b]&&!h.series[b].options.isInternal&&h.series[b].color||h.options.colors[b]||h.options.colors[0]},r,a);l.data=a.data;l.data&&(d.hasNavigatorData=!0,t.push(h.initSeries(l)))});b&&this.addBaseSeriesEvents()};l.prototype.addBaseSeriesEvents=function(){var a=this,c=a.baseSeries||[];c[0]&& +c[0].xAxis&&b(c[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes);c.forEach(function(c){b(c,"show",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!0,!1)});b(c,"hide",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!1,!1)});!1!==this.navigatorOptions.adaptToUpdatedData&&c.xAxis&&b(c,"updatedData",this.updatedDataHandler);b(c,"remove",function(){this.navigatorSeries&&(I(a.series,this.navigatorSeries),t(this.navigatorSeries.options)&&this.navigatorSeries.remove(!1), +delete this.navigatorSeries)})},this)};l.prototype.getBaseSeriesMin=function(a){return this.baseSeries.reduce(function(a,b){return Math.min(a,b.xData?b.xData[0]:a)},a)};l.prototype.modifyNavigatorAxisExtremes=function(){var a=this.xAxis,b;"undefined"!==typeof a.getExtremes&&(!(b=this.getUnionExtremes(!0))||b.dataMin===a.min&&b.dataMax===a.max||(a.min=b.dataMin,a.max=b.dataMax))};l.prototype.modifyBaseAxisExtremes=function(){var a=this.chart.navigator,b=this.getExtremes(),c=b.dataMin,e=b.dataMax;b= +b.max-b.min;var d=a.stickToMin,f=a.stickToMax,g=C(this.options.overscroll,0),k=a.series&&a.series[0],l=!!this.setExtremes;if(!this.eventArgs||"rangeSelectorButton"!==this.eventArgs.trigger){if(d){var m=c;var p=m+b}f&&(p=e+g,d||(m=Math.max(c,p-b,a.getBaseSeriesMin(k&&k.xData?k.xData[0]:-Number.MAX_VALUE))));l&&(d||f)&&w(m)&&(this.min=this.userMin=m,this.max=this.userMax=p)}a.stickToMin=a.stickToMax=null};l.prototype.updatedDataHandler=function(){var a=this.chart.navigator,b=this.navigatorSeries,c= +a.getBaseSeriesMin(this.xData[0]);a.stickToMax=a.reversedExtremes?0===Math.round(a.zoomedMin):Math.round(a.zoomedMax)>=Math.round(a.size);a.stickToMin=w(this.xAxis.min)&&this.xAxis.min<=c&&(!this.chart.fixedRange||!a.stickToMax);b&&!a.hasNavigatorData&&(b.options.pointStart=this.xData[0],b.setData(this.options.data,!1,null,!1))};l.prototype.addChartEvents=function(){this.eventsToUnbind||(this.eventsToUnbind=[]);this.eventsToUnbind.push(b(this.chart,"redraw",function(){var a=this.navigator,b=a&&(a.baseSeries&& +a.baseSeries[0]&&a.baseSeries[0].xAxis||this.xAxis[0]);b&&a.render(b.min,b.max)}),b(this.chart,"getMargins",function(){var a=this.navigator,b=a.opposite?"plotTop":"marginBottom";this.inverted&&(b=a.opposite?"marginRight":"plotLeft");this[b]=(this[b]||0)+(a.navigatorEnabled||!this.inverted?a.outlineHeight:0)+a.navigatorOptions.margin}))};l.prototype.destroy=function(){this.removeEvents();this.xAxis&&(I(this.chart.xAxis,this.xAxis),I(this.chart.axes,this.xAxis));this.yAxis&&(I(this.chart.yAxis,this.yAxis), +I(this.chart.axes,this.yAxis));(this.series||[]).forEach(function(a){a.destroy&&a.destroy()});"series xAxis yAxis shades outline scrollbarTrack scrollbarRifles scrollbarGroup scrollbar navigatorGroup rendered".split(" ").forEach(function(a){this[a]&&this[a].destroy&&this[a].destroy();this[a]=null},this);[this.handles].forEach(function(a){H(a)},this)};return l}();z.Navigator||(z.Navigator=B,x.compose(c),b(l,"beforeShowResetZoom",function(){var a=this.options,b=a.navigator,c=a.rangeSelector;if((b&& +b.enabled||c&&c.enabled)&&(!v&&"x"===a.chart.zoomType||v&&"x"===a.chart.pinchType))return!1}),b(l,"beforeRender",function(){var a=this.options;if(a.navigator.enabled||a.scrollbar.enabled)this.scroller=this.navigator=new B(this)}),b(l,"afterSetChartSize",function(){var a=this.legend,b=this.navigator;if(b){var c=a&&a.options;var d=b.xAxis;var e=b.yAxis;var f=b.scrollbarHeight;this.inverted?(b.left=b.opposite?this.chartWidth-f-b.height:this.spacing[3]+f,b.top=this.plotTop+f):(b.left=this.plotLeft+f, +b.top=b.navigatorOptions.top||this.chartHeight-b.height-f-this.spacing[2]-(this.rangeSelector&&this.extraBottomMargin?this.rangeSelector.getHeight():0)-(c&&"bottom"===c.verticalAlign&&"proximate"!==c.layout&&c.enabled&&!c.floating?a.legendHeight+C(c.margin,10):0)-(this.titleOffset?this.titleOffset[2]:0));d&&e&&(this.inverted?d.options.left=e.options.left=b.left:d.options.top=e.options.top=b.top,d.setAxisSize(),e.setAxisSize())}}),b(l,"update",function(a){var b=a.options.navigator||{},c=a.options.scrollbar|| +{};this.navigator||this.scroller||!b.enabled&&!c.enabled||(e(!0,this.options.navigator,b),e(!0,this.options.scrollbar,c),delete a.options.navigator,delete a.options.scrollbar)}),b(l,"afterUpdate",function(a){this.navigator||this.scroller||!this.options.navigator.enabled&&!this.options.scrollbar.enabled||(this.scroller=this.navigator=new B(this),C(a.redraw,!0)&&this.redraw(a.animation))}),b(l,"afterAddSeries",function(){this.navigator&&this.navigator.setBaseSeries(null,!1)}),b(A,"afterUpdate",function(){this.chart.navigator&& +!this.options.isInternal&&this.chart.navigator.setBaseSeries(null,!1)}),l.prototype.callbacks.push(function(a){var b=a.navigator;b&&a.xAxis[0]&&(a=a.xAxis[0].getExtremes(),b.render(a.min,a.max))}));z.Navigator=B;return z.Navigator});J(c,"masters/modules/gantt.src.js",[],function(){})}); +//# sourceMappingURL=gantt.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/grid-axis.js b/libs/highcharts-8.1.2/modules/grid-axis.js new file mode 100644 index 00000000..f0e225c5 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/grid-axis.js @@ -0,0 +1,29 @@ +/* + Highcharts Gantt JS v8.1.2 (2020-06-16) + + GridAxis + + (c) 2016-2019 Lars A. V. Cabrera + + License: www.highcharts.com/license +*/ +(function(d){"object"===typeof module&&module.exports?(d["default"]=d,module.exports=d):"function"===typeof define&&define.amd?define("highcharts/modules/grid-axis",["highcharts"],function(n){d(n);d.Highcharts=n;return d}):d("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(d){function n(d,x,n,B){d.hasOwnProperty(x)||(d[x]=B.apply(null,n))}d=d?d._modules:{};n(d,"parts-gantt/GridAxis.js",[d["parts/Axis.js"],d["parts/Globals.js"],d["parts/Options.js"],d["parts/Tick.js"],d["parts/Utilities.js"]], +function(d,n,A,B,l){var x=A.dateFormat,f=l.addEvent,p=l.defined,C=l.erase,E=l.find,F=l.isArray,v=l.isNumber,y=l.merge,z=l.pick,G=l.timeUnits,D=l.wrap;A=n.Chart;var H=function(b){var a=b.options;a.labels||(a.labels={});a.labels.align=z(a.labels.align,"center");b.categories||(a.showLastLabel=!1);b.labelRotation=0;a.labels.rotation=0};"";d.prototype.getMaxLabelDimensions=function(b,a){var c={width:0,height:0};a.forEach(function(a){a=b[a];if(l.isObject(a,!0)){var e=l.isObject(a.label,!0)?a.label:{};a= +e.getBBox?e.getBBox().height:0;e.textStr&&!v(e.textPxLength)&&(e.textPxLength=e.getBBox().width);e=v(e.textPxLength)?Math.round(e.textPxLength):0;c.height=Math.max(a,c.height);c.width=Math.max(e,c.width)}});return c};n.dateFormats.W=function(b){b=new this.Date(b);var a=(this.get("Day",b)+6)%7,c=new this.Date(b.valueOf());this.set("Date",c,this.get("Date",b)-a+3);a=new this.Date(this.get("FullYear",c),0,1);4!==this.get("Day",a)&&(this.set("Month",b,0),this.set("Date",b,1+(11-this.get("Day",a))%7)); +return(1+Math.floor((c.valueOf()-a.valueOf())/6048E5)).toString()};n.dateFormats.E=function(b){return x("%a",b,!0).charAt(0)};f(A,"afterSetChartSize",function(){this.axes.forEach(function(b){(b.grid&&b.grid.columns||[]).forEach(function(a){a.setAxisSize();a.setAxisTranslation()})})});f(B,"afterGetLabelPosition",function(b){var a=this.label,c=this.axis,m=c.reversed,e=c.chart,k=c.options.grid||{},g=c.options.labels,u=g.align,h=w.Side[c.side],d=b.tickmarkOffset,r=c.tickPositions,q=this.pos-d;r=v(r[b.index+ +1])?r[b.index+1]-d:c.max+d;var t=c.tickSize("tick");d=t?t[0]:0;t=t?t[1]/2:0;if(!0===k.enabled){if("top"===h){k=c.top+c.offset;var f=k-d}else"bottom"===h?(f=e.chartHeight-c.bottom+c.offset,k=f+d):(k=c.top+c.len-c.translate(m?r:q),f=c.top+c.len-c.translate(m?q:r));"right"===h?(h=e.chartWidth-c.right+c.offset,m=h+d):"left"===h?(m=c.left+c.offset,h=m-d):(h=Math.round(c.left+c.translate(m?r:q))-t,m=Math.round(c.left+c.translate(m?q:r))-t);this.slotWidth=m-h;b.pos.x="left"===u?h:"right"===u?m:h+(m-h)/2; +b.pos.y=f+(k-f)/2;e=e.renderer.fontMetrics(g.style.fontSize,a.element);a=a.getBBox().height;g.useHTML?b.pos.y+=e.b+-(a/2):(a=Math.round(a/e.h),b.pos.y+=(e.b-(e.h-e.f))/2+-((a-1)*e.h/2));b.pos.x+=c.horiz&&g.x||0}});var I=function(){function b(a){this.axis=a}b.prototype.isOuterAxis=function(){var a=this.axis,c=a.grid.columnIndex,b=a.linkedParent&&a.linkedParent.grid.columns||a.grid.columns,e=c?a.linkedParent:a,d=-1,g=0;a.chart[a.coll].forEach(function(c,b){c.side!==a.side||c.options.isInternal||(g= +b,c===e&&(d=b))});return g===d&&(v(c)?b.length===c:!0)};return b}(),w=function(){function b(){}b.compose=function(a){d.keepProps.push("grid");D(a.prototype,"unsquish",b.wrapUnsquish);f(a,"init",b.onInit);f(a,"afterGetOffset",b.onAfterGetOffset);f(a,"afterGetTitlePosition",b.onAfterGetTitlePosition);f(a,"afterInit",b.onAfterInit);f(a,"afterRender",b.onAfterRender);f(a,"afterSetAxisTranslation",b.onAfterSetAxisTranslation);f(a,"afterSetOptions",b.onAfterSetOptions);f(a,"afterSetOptions",b.onAfterSetOptions2); +f(a,"afterSetScale",b.onAfterSetScale);f(a,"afterTickSize",b.onAfterTickSize);f(a,"trimTicks",b.onTrimTicks);f(a,"destroy",b.onDestroy)};b.onAfterGetOffset=function(){var a=this.grid;(a&&a.columns||[]).forEach(function(a){a.getOffset()})};b.onAfterGetTitlePosition=function(a){if(!0===(this.options.grid||{}).enabled){var c=this.axisTitle,d=this.height,e=this.horiz,k=this.left,g=this.offset,u=this.opposite,h=this.options.title,f=void 0===h?{}:h;h=this.top;var r=this.width,q=this.tickSize(),t=c&&c.getBBox().width, +l=f.x||0,n=f.y||0,p=z(f.margin,e?5:10);c=this.chart.renderer.fontMetrics(f.style&&f.style.fontSize,c).f;q=(e?h+d:k)+(e?1:-1)*(u?-1:1)*(q?q[0]/2:0)+(this.side===b.Side.bottom?c:0);a.titlePosition.x=e?k-t/2-p+l:q+(u?r:0)+g+l;a.titlePosition.y=e?q-(u?d:0)+(u?c:-c)/2+g+n:h-p+n}};b.onAfterInit=function(){var a=this.chart,c=this.options.grid;c=void 0===c?{}:c;var b=this.userOptions;c.enabled&&(H(this),D(this,"labelFormatter",function(a){var c=this.axis,b=this.value,e=c.tickPositions,d=(c.isLinked?c.linkedParent: +c).series[0],m=b===e[0];e=b===e[e.length-1];d=d&&E(d.options.data,function(a){return a[c.isXAxis?"x":"y"]===b});this.isFirst=m;this.isLast=e;this.point=d;return a.call(this)}));if(c.columns)for(var e=this.grid.columns=[],k=this.grid.columnIndex=0;++kg&&!a.startOnTick&&(b[0]=g),f>l&&f-hl?.5:e/(l-1))})};b.prototype.hasData=function(){return!!(this.tickPositions||[]).length};b.prototype.setTickPositions=function(){if(!this.dataClasses)return c.prototype.setTickPositions.call(this)};b.prototype.initStops=function(){this.stops=this.options.stops||[[0,this.options.minColor],[1,this.options.maxColor]];this.stops.forEach(function(d){d.color=p(d[1])})};b.prototype.setOptions=function(d){c.prototype.setOptions.call(this, +d);this.options.crosshair=this.options.marker};b.prototype.setAxisSize=function(){var d=this.legendSymbol,e=this.chart,c=e.options.legend||{},f,a;d?(this.left=c=d.attr("x"),this.top=f=d.attr("y"),this.width=a=d.attr("width"),this.height=d=d.attr("height"),this.right=e.chartWidth-c-a,this.bottom=e.chartHeight-f-d,this.len=this.horiz?a:d,this.pos=this.horiz?c:f):this.len=(this.horiz?c.symbolWidth:c.symbolHeight)||b.defaultLegendLength};b.prototype.normalizedValue=function(d){this.logarithmic&&(d=this.logarithmic.log2lin(d)); +return 1-(this.max-d)/(this.max-this.min||1)};b.prototype.toColor=function(d,b){var c=this.dataClasses,e=this.stops,a;if(c)for(a=c.length;a--;){var g=c[a];var l=g.from;e=g.to;if(("undefined"===typeof l||d>=l)&&("undefined"===typeof e||d<=e)){var h=g.color;b&&(b.dataClass=a,b.colorIndex=g.colorIndex);break}}else{d=this.normalizedValue(d);for(a=e.length;a--&&!(d>e[a][0]););l=e[a]||e[a+1];e=e[a+1]||l;d=1-(e[0]-d)/(e[0]-l[0]||1);h=l.color.tweenTo(e.color,d)}return h};b.prototype.getOffset=function(){var d= +this.legendGroup,b=this.chart.axisOffset[this.side];d&&(this.axisParent=d,c.prototype.getOffset.call(this),this.added||(this.added=!0,this.labelLeft=0,this.labelRight=this.width),this.chart.axisOffset[this.side]=b)};b.prototype.setLegendColor=function(){var d=this.reversed,b=d?1:0;d=d?0:1;b=this.horiz?[b,0,d,0]:[0,d,0,b];this.legendColor={linearGradient:{x1:b[0],y1:b[1],x2:b[2],y2:b[3]},stops:this.stops}};b.prototype.drawLegendSymbol=function(d,c){var e=d.padding,f=d.options,a=this.horiz,g=A(f.symbolWidth, +a?b.defaultLegendLength:12),l=A(f.symbolHeight,a?12:b.defaultLegendLength),h=A(f.labelPadding,a?16:30);f=A(f.itemDistance,10);this.setLegendColor();c.legendSymbol=this.chart.renderer.rect(0,d.baseline-11,g,l).attr({zIndex:1}).add(c.legendGroup);this.legendItemWidth=g+e+(a?f:h);this.legendItemHeight=l+e+(a?h:0)};b.prototype.setState=function(d){this.series.forEach(function(b){b.setState(d)})};b.prototype.setVisible=function(){};b.prototype.getSeriesExtremes=function(){var b=this.series,c=b.length, +a;this.dataMin=Infinity;for(this.dataMax=-Infinity;c--;){var f=b[c];var g=f.colorKey=A(f.options.colorKey,f.colorKey,f.pointValKey,f.zoneAxis,"y");var h=f.pointArrayMap;var z=f[g+"Min"]&&f[g+"Max"];if(f[g+"Data"])var n=f[g+"Data"];else if(h){n=[];h=h.indexOf(g);var k=f.yData;if(0<=h&&k)for(a=0;ag+l&&(h=g+l+2);e.plotX=h;e.plotY=this.len-h;c.prototype.drawCrosshair.call(this,b,e);e.plotX=d;e.plotY=a;this.cross&&!this.cross.addedToColorAxis&&this.legendGroup&& +(this.cross.addClass("highcharts-coloraxis-marker").add(this.legendGroup),this.cross.addedToColorAxis=!0,!this.chart.styledMode&&this.crosshair&&this.cross.attr({fill:this.crosshair.color}))}};b.prototype.getPlotLinePath=function(b){var d=this.left,a=b.translatedValue,f=this.top;return g(a)?this.horiz?[["M",a-4,f-6],["L",a+4,f-6],["L",a,f],["Z"]]:[["M",d,a],["L",d-6,a+6],["L",d-6,a-6],["Z"]]:c.prototype.getPlotLinePath.call(this,b)};b.prototype.update=function(d,a){var e=this.chart,g=e.legend,l=b.buildOptions(e, +{},d);this.series.forEach(function(b){b.isDirtyData=!0});(d.dataClasses&&g.allItems||this.dataClasses)&&this.destroyItems();e.options[this.coll]=C(this.userOptions,l);c.prototype.update.call(this,l,a);this.legendItem&&(this.setLegendColor(),g.colorizeItem(this,!0))};b.prototype.destroyItems=function(){var b=this.chart;this.legendItem?b.legend.destroyItem(this):this.legendItems&&this.legendItems.forEach(function(d){b.legend.destroyItem(d)});b.isDirtyLegend=!0};b.prototype.remove=function(b){this.destroyItems(); +c.prototype.remove.call(this,b)};b.prototype.getDataClassLegendSymbols=function(){var b=this,c=b.chart,a=b.legendItems,g=c.options.legend,l=g.valueDecimals,h=g.valueSuffix||"",n;a.length||b.dataClasses.forEach(function(d,g){var e=!0,f=d.from,z=d.to,k=c.numberFormatter;n="";"undefined"===typeof f?n="< ":"undefined"===typeof z&&(n="> ");"undefined"!==typeof f&&(n+=k(f,l)+h);"undefined"!==typeof f&&"undefined"!==typeof z&&(n+=" - ");"undefined"!==typeof z&&(n+=k(z,l)+h);a.push(w({chart:c,name:n,options:{}, +drawLegendSymbol:q.drawRectangle,visible:!0,setState:B,isDataClass:!0,setVisible:function(){e=b.visible=!e;b.series.forEach(function(b){b.points.forEach(function(b){b.dataClass===g&&b.setVisible(e)})});c.legend.colorizeItem(this,e)}},d))});return a};b.defaultLegendLength=200;b.defaultOptions={lineWidth:0,minPadding:0,maxPadding:0,gridLineWidth:1,tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50},width:.01,color:"#999999"},labels:{overflow:"justify",rotation:0}, +minColor:"#e6ebf5",maxColor:"#003399",tickLength:5,showInLegend:!0};b.keepProps=["legendGroup","legendItemHeight","legendItemWidth","legendItem","legendSymbol"];return b}(a);Array.prototype.push.apply(a.keepProps,h.keepProps);k.ColorAxis=h;["fill","stroke"].forEach(function(a){c.prototype[a+"Setter"]=function(){this.elem.attr(a,p(this.start).tweenTo(p(this.end),this.pos),null,!0)}});m(t,"afterGetAxes",function(){var c=this,b=c.options;this.colorAxis=[];b.colorAxis&&(b.colorAxis=n(b.colorAxis),b.colorAxis.forEach(function(b, +a){b.index=a;new h(c,b)}))});m(l,"bindAxes",function(){var c=this.axisTypes;c?-1===c.indexOf("colorAxis")&&c.push("colorAxis"):this.axisTypes=["colorAxis"]});m(y,"afterGetAllItems",function(c){var b=[],d,a;(this.chart.colorAxis||[]).forEach(function(a){(d=a.options)&&d.showInLegend&&(d.dataClasses&&d.visible?b=b.concat(a.getDataClassLegendSymbols()):d.visible&&b.push(a),a.series.forEach(function(b){if(!b.options.showInLegend||d.dataClasses)"point"===b.options.legendType?b.points.forEach(function(b){u(c.allItems, +b)}):u(c.allItems,b)}))});for(a=b.length;a--;)c.allItems.unshift(b[a])});m(y,"afterColorizeItem",function(c){c.visible&&c.item.legendColor&&c.item.legendSymbol.attr({fill:c.item.legendColor})});m(y,"afterUpdate",function(){var c=this.chart.colorAxis;c&&c.forEach(function(b,c,a){b.update({},a)})});m(l,"afterTranslate",function(){(this.chart.colorAxis&&this.chart.colorAxis.length||this.colorAttribs)&&this.translateColors()});return h});p(a,"parts-map/ColorMapSeriesMixin.js",[a["parts/Globals.js"],a["parts/Point.js"], +a["parts/Utilities.js"]],function(a,p,m){var k=m.defined;m=a.noop;var x=a.seriesTypes;a.colorMapPointMixin={dataLabelOnNull:!0,isValid:function(){return null!==this.value&&Infinity!==this.value&&-Infinity!==this.value},setState:function(a){p.prototype.setState.call(this,a);this.graphic&&this.graphic.attr({zIndex:"hover"===a?1:0})}};a.colorMapSeriesMixin={pointArrayMap:["value"],axisTypes:["xAxis","yAxis","colorAxis"],trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:m,parallelArrays:["x", +"y","value"],colorKey:"value",pointAttribs:x.column.prototype.pointAttribs,colorAttribs:function(a){var m={};k(a.color)&&(m[this.colorProp||"fill"]=a.color);return m}}});p(a,"parts-map/HeatmapSeries.js",[a["parts/Globals.js"],a["mixins/legend-symbol.js"],a["parts/SVGRenderer.js"],a["parts/Utilities.js"]],function(a,p,m,k){var y=k.clamp,q=k.extend,v=k.fireEvent,r=k.isNumber,t=k.merge,x=k.pick;k=k.seriesType;"";var B=a.colorMapPointMixin,u=a.Series,w=m.prototype.symbols;k("heatmap","scatter",{animation:!1, +borderWidth:0,nullColor:"#f7f7f7",dataLabels:{formatter:function(){return this.point.value},inside:!0,verticalAlign:"middle",crop:!1,overflow:!1,padding:0},marker:{symbol:"rect",radius:0,lineColor:void 0,states:{hover:{lineWidthPlus:0},select:{}}},clip:!0,pointRange:null,tooltip:{pointFormat:"{point.x}, {point.y}: {point.value}
    "},states:{hover:{halo:!1,brightness:.2}}},t(a.colorMapSeriesMixin,{pointArrayMap:["y","value"],hasPointSpecificOptions:!0,getExtremesFromAll:!0,directTouch:!0,init:function(){u.prototype.init.apply(this, +arguments);var a=this.options;a.pointRange=x(a.pointRange,a.colsize||1);this.yAxis.axisPointRange=a.rowsize||1;q(w,{ellipse:w.circle,rect:w.square})},getSymbol:u.prototype.getSymbol,setClip:function(a){var c=this.chart;u.prototype.setClip.apply(this,arguments);(!1!==this.options.clip||a)&&this.markerGroup.clip((a||this.clipBox)&&this.sharedClipKey?c[this.sharedClipKey]:c.clipRect)},translate:function(){var a=this.options,g=a.marker&&a.marker.symbol||"",k=w[g]?g:"rect";a=this.options;var m=-1!==["circle", +"square"].indexOf(k);this.generatePoints();this.points.forEach(function(a){var c=a.getCellAttributes(),h={x:Math.min(c.x1,c.x2),y:Math.min(c.y1,c.y2),width:Math.max(Math.abs(c.x2-c.x1),0),height:Math.max(Math.abs(c.y2-c.y1),0)};var n=a.hasImage=0===(a.marker&&a.marker.symbol||g||"").indexOf("url");if(m){var b=Math.abs(h.width-h.height);h.x=Math.min(c.x1,c.x2)+(h.width{point.x} - {point.x2}
    \u25cf {series.name} {point.y}
    '}},k(c,{setDerivedData:function(){var a=this.baseSeries.yData;a.length&&(a=this.derivedData(a,this.binsNumber(),this.options.binWidth),this.setData(a,!1))},derivedData:function(a,e,c){var h=p(a),g=b(l(a)),n=[],d={},k=[];c=this.binWidth=b(m(c)?c||1:(h-g)/e);this.options.pointRange=Math.max(c,0);for(e=g;e=c||0>=b(b(g+n.length*c)-e));e=b(e+c))n.push(e),d[e]=0;0!==d[g]&&(n.push(b(g)),d[b(g)]=0);var q=f(n.map(function(a){return parseFloat(a)}));a.forEach(function(a){a=b(q(a));d[a]++});r(d,function(a,h){k.push({x:Number(h),y:a,x2:b(Number(h)+c)})});k.sort(function(a,h){return a.x-h.x});return k},binsNumber:function(){var a=this.options.binsNumber,b=g[a]||"function"===typeof a&&a;return Math.ceil(b&&b(this.baseSeries)||(m(a)?a:g["square-root"](this.baseSeries)))}}));""});c(a,"modules/bellcurve.src.js", +[a["parts/Utilities.js"],a["mixins/derived-series.js"]],function(a,c){function d(a){var b=a.length;a=a.reduce(function(a,b){return a+b},0);return 0this.total+(e&&E?e.length:0);)for(A=q,q=n.length=0,e=k,k=[],h++,p=c/h/2,g?(d=(p-g)/p*c,0<=d?p=g:(d=0,m=1)):p=Math.floor(p* +m),x=p;0b)break;a--}else for(a=Math.floor(a);a\u25cf {series.name}: {point.y}
    '}},{pointArrayMap:["y"],pointValKey:"y",toYData:function(b){return[a.pick(b.y,b.low)]},translatePoint:e.translate,drawPoint:e.drawPoints,drawDataLabels:c.drawDataLabels,setShapeArgs:c.translate},{pointSetState:e.pointClass.prototype.setState, +setState:a.seriesTypes.dumbbell.prototype.pointClass.prototype.setState,init:function(b,d,c){a.isObject(d)&&"low"in d&&(d.y=d.low,delete d.low);return a.Point.prototype.init.apply(this,arguments)}});""});b(a,"masters/modules/lollipop.src.js",[],function(){})}); +//# sourceMappingURL=lollipop.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/map.js b/libs/highcharts-8.1.2/modules/map.js new file mode 100644 index 00000000..7246bcf8 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/map.js @@ -0,0 +1,108 @@ +/* + Highmaps JS v8.1.2 (2020-06-16) + + Highmaps as a plugin for Highcharts or Highstock. + + (c) 2011-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/map",["highcharts"],function(z){a(z);a.Highcharts=z;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function z(a,r,k,n){a.hasOwnProperty(r)||(a[r]=n.apply(null,k))}a=a?a._modules:{};z(a,"parts-map/MapAxis.js",[a["parts/Axis.js"],a["parts/Utilities.js"]],function(a,r){var k=r.addEvent,n=r.pick,c=function(){return function(c){this.axis= +c}}();r=function(){function a(){}a.compose=function(a){a.keepProps.push("mapAxis");k(a,"init",function(){this.mapAxis||(this.mapAxis=new c(this))});k(a,"getSeriesExtremes",function(){if(this.mapAxis){var c=[];this.isXAxis&&(this.series.forEach(function(a,u){a.useMapGeometry&&(c[u]=a.xData,a.xData=[])}),this.mapAxis.seriesXData=c)}});k(a,"afterGetSeriesExtremes",function(){if(this.mapAxis){var c=this.mapAxis.seriesXData||[],a;if(this.isXAxis){var u=n(this.dataMin,Number.MAX_VALUE);var h=n(this.dataMax, +-Number.MAX_VALUE);this.series.forEach(function(f,x){f.useMapGeometry&&(u=Math.min(u,n(f.minX,u)),h=Math.max(h,n(f.maxX,h)),f.xData=c[x],a=!0)});a&&(this.dataMin=u,this.dataMax=h);this.mapAxis.seriesXData=void 0}}});k(a,"afterSetAxisTranslation",function(){if(this.mapAxis){var c=this.chart,a=c.plotWidth/c.plotHeight;c=c.xAxis[0];var u;"yAxis"===this.coll&&"undefined"!==typeof c.transA&&this.series.forEach(function(c){c.preserveAspectRatio&&(u=!0)});if(u&&(this.transA=c.transA=Math.min(this.transA, +c.transA),a/=(c.max-c.min)/(this.max-this.min),a=1>a?this:c,c=(a.max-a.min)*a.transA,a.mapAxis.pixelPadding=a.len-c,a.minPixelPadding=a.mapAxis.pixelPadding/2,c=a.mapAxis.fixTo)){c=c[1]-a.toValue(c[0],!0);c*=a.transA;if(Math.abs(c)>a.minPixelPadding||a.min===a.dataMin&&a.max===a.dataMax)c=0;a.minPixelPadding-=c}}});k(a,"render",function(){this.mapAxis&&(this.mapAxis.fixTo=void 0)})};return a}();r.compose(a);return r});z(a,"parts-map/ColorSeriesMixin.js",[a["parts/Globals.js"]],function(a){a.colorPointMixin= +{setVisible:function(a){var k=this,n=a?"show":"hide";k.visible=k.options.visible=!!a;["graphic","dataLabel"].forEach(function(c){if(k[c])k[c][n]()});this.series.buildKDTree()}};a.colorSeriesMixin={optionalAxis:"colorAxis",colorAxis:0,translateColors:function(){var a=this,k=this.options.nullColor,n=this.colorAxis,c=this.colorKey;(this.data.length?this.data:this.points).forEach(function(C){var w=C.getNestedProperty(c);(w=C.options.color||(C.isNull||null===C.value?k:n&&"undefined"!==typeof w?n.toColor(w, +C):C.color||a.color))&&C.color!==w&&(C.color=w,"point"===a.options.legendType&&C.legendItem&&a.chart.legend.colorizeItem(C,C.visible))})}}});z(a,"parts-map/ColorAxis.js",[a["parts/Axis.js"],a["parts/Chart.js"],a["parts/Color.js"],a["parts/Globals.js"],a["parts/Legend.js"],a["mixins/legend-symbol.js"],a["parts/Point.js"],a["parts/Utilities.js"]],function(a,r,k,n,c,C,D,A){var w=this&&this.__extends||function(){var b=function(e,d){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,e){b.__proto__= +e}||function(b,e){for(var d in e)e.hasOwnProperty(d)&&(b[d]=e[d])};return b(e,d)};return function(e,d){function t(){this.constructor=e}b(e,d);e.prototype=null===d?Object.create(d):(t.prototype=d.prototype,new t)}}(),u=k.parse,h=n.noop;k=A.addEvent;var f=A.erase,x=A.extend,l=A.Fx,q=A.isNumber,p=A.merge,y=A.pick,g=A.splat;"";var d=n.Series;A=n.colorPointMixin;x(d.prototype,n.colorSeriesMixin);x(D.prototype,A);r.prototype.collectionsWithUpdate.push("colorAxis");r.prototype.collectionsWithInit.colorAxis= +[r.prototype.addColorAxis];var b=function(b){function e(e,d){var t=b.call(this,e,d)||this;t.beforePadding=!1;t.chart=void 0;t.coll="colorAxis";t.dataClasses=void 0;t.legendItem=void 0;t.legendItems=void 0;t.name="";t.options=void 0;t.stops=void 0;t.visible=!0;t.init(e,d);return t}w(e,b);e.buildOptions=function(b,e,d){b=b.options.legend||{};var t=d.layout?"vertical"!==d.layout:"vertical"!==b.layout;return p(e,{side:t?2:1,reversed:!t},d,{opposite:!t,showEmpty:!1,title:null,visible:b.enabled&&(d?!1!== +d.visible:!0)})};e.prototype.init=function(d,t){var v=e.buildOptions(d,e.defaultOptions,t);this.coll="colorAxis";b.prototype.init.call(this,d,v);t.dataClasses&&this.initDataClasses(t);this.initStops();this.horiz=!v.opposite;this.zoomEnabled=!1};e.prototype.initDataClasses=function(b){var e=this.chart,d,v=0,g=e.options.chart.colorCount,m=this.options,f=b.dataClasses.length;this.dataClasses=d=[];this.legendItems=[];b.dataClasses.forEach(function(b,t){b=p(b);d.push(b);if(e.styledMode||!b.color)"category"=== +m.dataClassColor?(e.styledMode||(t=e.options.colors,g=t.length,b.color=t[v]),b.colorIndex=v,v++,v===g&&(v=0)):b.color=u(m.minColor).tweenTo(u(m.maxColor),2>f?.5:t/(f-1))})};e.prototype.hasData=function(){return!!(this.tickPositions||[]).length};e.prototype.setTickPositions=function(){if(!this.dataClasses)return b.prototype.setTickPositions.call(this)};e.prototype.initStops=function(){this.stops=this.options.stops||[[0,this.options.minColor],[1,this.options.maxColor]];this.stops.forEach(function(b){b.color= +u(b[1])})};e.prototype.setOptions=function(e){b.prototype.setOptions.call(this,e);this.options.crosshair=this.options.marker};e.prototype.setAxisSize=function(){var b=this.legendSymbol,d=this.chart,g=d.options.legend||{},m,f;b?(this.left=g=b.attr("x"),this.top=m=b.attr("y"),this.width=f=b.attr("width"),this.height=b=b.attr("height"),this.right=d.chartWidth-g-f,this.bottom=d.chartHeight-m-b,this.len=this.horiz?f:b,this.pos=this.horiz?g:m):this.len=(this.horiz?g.symbolWidth:g.symbolHeight)||e.defaultLegendLength}; +e.prototype.normalizedValue=function(b){this.logarithmic&&(b=this.logarithmic.log2lin(b));return 1-(this.max-b)/(this.max-this.min||1)};e.prototype.toColor=function(b,e){var d=this.dataClasses,t=this.stops,g;if(d)for(g=d.length;g--;){var m=d[g];var v=m.from;t=m.to;if(("undefined"===typeof v||b>=v)&&("undefined"===typeof t||b<=t)){var f=m.color;e&&(e.dataClass=g,e.colorIndex=m.colorIndex);break}}else{b=this.normalizedValue(b);for(g=t.length;g--&&!(b>t[g][0]););v=t[g]||t[g+1];t=t[g+1]||v;b=1-(t[0]- +b)/(t[0]-v[0]||1);f=v.color.tweenTo(t.color,b)}return f};e.prototype.getOffset=function(){var e=this.legendGroup,d=this.chart.axisOffset[this.side];e&&(this.axisParent=e,b.prototype.getOffset.call(this),this.added||(this.added=!0,this.labelLeft=0,this.labelRight=this.width),this.chart.axisOffset[this.side]=d)};e.prototype.setLegendColor=function(){var b=this.reversed,e=b?1:0;b=b?0:1;e=this.horiz?[e,0,b,0]:[0,b,0,e];this.legendColor={linearGradient:{x1:e[0],y1:e[1],x2:e[2],y2:e[3]},stops:this.stops}}; +e.prototype.drawLegendSymbol=function(b,d){var t=b.padding,g=b.options,m=this.horiz,f=y(g.symbolWidth,m?e.defaultLegendLength:12),v=y(g.symbolHeight,m?12:e.defaultLegendLength),c=y(g.labelPadding,m?16:30);g=y(g.itemDistance,10);this.setLegendColor();d.legendSymbol=this.chart.renderer.rect(0,b.baseline-11,f,v).attr({zIndex:1}).add(d.legendGroup);this.legendItemWidth=f+t+(m?g:c);this.legendItemHeight=v+t+(m?c:0)};e.prototype.setState=function(b){this.series.forEach(function(e){e.setState(b)})};e.prototype.setVisible= +function(){};e.prototype.getSeriesExtremes=function(){var b=this.series,e=b.length,g;this.dataMin=Infinity;for(this.dataMax=-Infinity;e--;){var m=b[e];var f=m.colorKey=y(m.options.colorKey,m.colorKey,m.pointValKey,m.zoneAxis,"y");var c=m.pointArrayMap;var a=m[f+"Min"]&&m[f+"Max"];if(m[f+"Data"])var l=m[f+"Data"];else if(c){l=[];c=c.indexOf(f);var h=m.yData;if(0<=c&&h)for(g=0;gt+f&&(c=t+f+2);d.plotX=c;d.plotY=this.len-c;b.prototype.drawCrosshair.call(this,e,d);d.plotX= +m;d.plotY=g;this.cross&&!this.cross.addedToColorAxis&&this.legendGroup&&(this.cross.addClass("highcharts-coloraxis-marker").add(this.legendGroup),this.cross.addedToColorAxis=!0,!this.chart.styledMode&&this.crosshair&&this.cross.attr({fill:this.crosshair.color}))}};e.prototype.getPlotLinePath=function(e){var d=this.left,m=e.translatedValue,g=this.top;return q(m)?this.horiz?[["M",m-4,g-6],["L",m+4,g-6],["L",m,g],["Z"]]:[["M",d,m],["L",d-6,m+6],["L",d-6,m-6],["Z"]]:b.prototype.getPlotLinePath.call(this, +e)};e.prototype.update=function(d,m){var g=this.chart,t=g.legend,f=e.buildOptions(g,{},d);this.series.forEach(function(b){b.isDirtyData=!0});(d.dataClasses&&t.allItems||this.dataClasses)&&this.destroyItems();g.options[this.coll]=p(this.userOptions,f);b.prototype.update.call(this,f,m);this.legendItem&&(this.setLegendColor(),t.colorizeItem(this,!0))};e.prototype.destroyItems=function(){var b=this.chart;this.legendItem?b.legend.destroyItem(this):this.legendItems&&this.legendItems.forEach(function(e){b.legend.destroyItem(e)}); +b.isDirtyLegend=!0};e.prototype.remove=function(e){this.destroyItems();b.prototype.remove.call(this,e)};e.prototype.getDataClassLegendSymbols=function(){var b=this,e=b.chart,d=b.legendItems,m=e.options.legend,g=m.valueDecimals,f=m.valueSuffix||"",c;d.length||b.dataClasses.forEach(function(m,t){var l=!0,a=m.from,v=m.to,q=e.numberFormatter;c="";"undefined"===typeof a?c="< ":"undefined"===typeof v&&(c="> ");"undefined"!==typeof a&&(c+=q(a,g)+f);"undefined"!==typeof a&&"undefined"!==typeof v&&(c+=" - "); +"undefined"!==typeof v&&(c+=q(v,g)+f);d.push(x({chart:e,name:c,options:{},drawLegendSymbol:C.drawRectangle,visible:!0,setState:h,isDataClass:!0,setVisible:function(){l=b.visible=!l;b.series.forEach(function(b){b.points.forEach(function(b){b.dataClass===t&&b.setVisible(l)})});e.legend.colorizeItem(this,l)}},m))});return d};e.defaultLegendLength=200;e.defaultOptions={lineWidth:0,minPadding:0,maxPadding:0,gridLineWidth:1,tickPixelInterval:72,startOnTick:!0,endOnTick:!0,offset:0,marker:{animation:{duration:50}, +width:.01,color:"#999999"},labels:{overflow:"justify",rotation:0},minColor:"#e6ebf5",maxColor:"#003399",tickLength:5,showInLegend:!0};e.keepProps=["legendGroup","legendItemHeight","legendItemWidth","legendItem","legendSymbol"];return e}(a);Array.prototype.push.apply(a.keepProps,b.keepProps);n.ColorAxis=b;["fill","stroke"].forEach(function(b){l.prototype[b+"Setter"]=function(){this.elem.attr(b,u(this.start).tweenTo(u(this.end),this.pos),null,!0)}});k(r,"afterGetAxes",function(){var e=this,d=e.options; +this.colorAxis=[];d.colorAxis&&(d.colorAxis=g(d.colorAxis),d.colorAxis.forEach(function(d,m){d.index=m;new b(e,d)}))});k(d,"bindAxes",function(){var b=this.axisTypes;b?-1===b.indexOf("colorAxis")&&b.push("colorAxis"):this.axisTypes=["colorAxis"]});k(c,"afterGetAllItems",function(b){var e=[],d,g;(this.chart.colorAxis||[]).forEach(function(g){(d=g.options)&&d.showInLegend&&(d.dataClasses&&d.visible?e=e.concat(g.getDataClassLegendSymbols()):d.visible&&e.push(g),g.series.forEach(function(e){if(!e.options.showInLegend|| +d.dataClasses)"point"===e.options.legendType?e.points.forEach(function(e){f(b.allItems,e)}):f(b.allItems,e)}))});for(g=e.length;g--;)b.allItems.unshift(e[g])});k(c,"afterColorizeItem",function(b){b.visible&&b.item.legendColor&&b.item.legendSymbol.attr({fill:b.item.legendColor})});k(c,"afterUpdate",function(){var b=this.chart.colorAxis;b&&b.forEach(function(b,e,d){b.update({},d)})});k(d,"afterTranslate",function(){(this.chart.colorAxis&&this.chart.colorAxis.length||this.colorAttribs)&&this.translateColors()}); +return b});z(a,"parts-map/ColorMapSeriesMixin.js",[a["parts/Globals.js"],a["parts/Point.js"],a["parts/Utilities.js"]],function(a,r,k){var n=k.defined;k=a.noop;var c=a.seriesTypes;a.colorMapPointMixin={dataLabelOnNull:!0,isValid:function(){return null!==this.value&&Infinity!==this.value&&-Infinity!==this.value},setState:function(c){r.prototype.setState.call(this,c);this.graphic&&this.graphic.attr({zIndex:"hover"===c?1:0})}};a.colorMapSeriesMixin={pointArrayMap:["value"],axisTypes:["xAxis","yAxis", +"colorAxis"],trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:k,parallelArrays:["x","y","value"],colorKey:"value",pointAttribs:c.column.prototype.pointAttribs,colorAttribs:function(c){var a={};n(c.color)&&(a[this.colorProp||"fill"]=c.color);return a}}});z(a,"parts-map/MapNavigation.js",[a["parts/Chart.js"],a["parts/Globals.js"],a["parts/Utilities.js"]],function(a,r,k){function n(f){f&&(f.preventDefault&&f.preventDefault(),f.stopPropagation&&f.stopPropagation(),f.cancelBubble=!0)} +function c(f){this.init(f)}var C=r.doc,w=k.addEvent,A=k.extend,B=k.merge,u=k.objectEach,h=k.pick;c.prototype.init=function(f){this.chart=f;f.mapNavButtons=[]};c.prototype.update=function(f){var c=this.chart,a=c.options.mapNavigation,q,p,y,g,d,b=function(b){this.handler.call(c,b);n(b)},e=c.mapNavButtons;f&&(a=c.options.mapNavigation=B(c.options.mapNavigation,f));for(;e.length;)e.pop().destroy();h(a.enableButtons,a.enabled)&&!c.renderer.forExport&&u(a.buttons,function(m,f){q=B(a.buttonOptions,m);c.styledMode|| +(p=q.theme,p.style=B(q.theme.style,q.style),g=(y=p.states)&&y.hover,d=y&&y.select);m=c.renderer.button(q.text,0,0,b,p,g,d,0,"zoomIn"===f?"topbutton":"bottombutton").addClass("highcharts-map-navigation highcharts-"+{zoomIn:"zoom-in",zoomOut:"zoom-out"}[f]).attr({width:q.width,height:q.height,title:c.options.lang[f],padding:q.padding,zIndex:5}).add();m.handler=q.onclick;w(m.element,"dblclick",n);e.push(m);var t=q,l=w(c,"load",function(){m.align(A(t,{width:m.width,height:2*m.height}),null,t.alignTo); +l()})});this.updateEvents(a)};c.prototype.updateEvents=function(c){var f=this.chart;h(c.enableDoubleClickZoom,c.enabled)||c.enableDoubleClickZoomTo?this.unbindDblClick=this.unbindDblClick||w(f.container,"dblclick",function(c){f.pointer.onContainerDblClick(c)}):this.unbindDblClick&&(this.unbindDblClick=this.unbindDblClick());h(c.enableMouseWheelZoom,c.enabled)?this.unbindMouseWheel=this.unbindMouseWheel||w(f.container,"undefined"===typeof C.onmousewheel?"DOMMouseScroll":"mousewheel",function(c){f.pointer.onContainerMouseWheel(c); +n(c);return!1}):this.unbindMouseWheel&&(this.unbindMouseWheel=this.unbindMouseWheel())};A(a.prototype,{fitToBox:function(c,a){[["x","width"],["y","height"]].forEach(function(f){var l=f[0];f=f[1];c[l]+c[f]>a[l]+a[f]&&(c[f]>a[f]?(c[f]=a[f],c[l]=a[l]):c[l]=a[l]+a[f]-c[f]);c[f]>a[f]&&(c[f]=a[f]);c[l]=f.dataMax-f.dataMin&&d.y<=g.dataMin&&d.height>=g.dataMax-g.dataMin;q&&f.mapAxis&&(f.mapAxis.fixTo=[q-f.pos,a]);p&&g.mapAxis&&(g.mapAxis.fixTo=[p-g.pos,l]);"undefined"===typeof c||b?(f.setExtremes(void 0,void 0,!1),g.setExtremes(void 0,void 0,!1)):(f.setExtremes(d.x,d.x+d.width,!1),g.setExtremes(d.y,d.y+d.height,!1));this.redraw()}});w(a, +"beforeRender",function(){this.mapNavigation=new c(this);this.mapNavigation.update()});r.MapNavigation=c});z(a,"parts-map/MapPointer.js",[a["parts/Pointer.js"],a["parts/Utilities.js"]],function(a,r){var k=r.extend,n=r.pick;r=r.wrap;k(a.prototype,{onContainerDblClick:function(c){var a=this.chart;c=this.normalize(c);a.options.mapNavigation.enableDoubleClickZoomTo?a.pointer.inClass(c.target,"highcharts-tracker")&&a.hoverPoint&&a.hoverPoint.zoomTo():a.isInsidePlot(c.chartX-a.plotLeft,c.chartY-a.plotTop)&& +a.mapZoom(.5,a.xAxis[0].toValue(c.chartX),a.yAxis[0].toValue(c.chartY),c.chartX,c.chartY)},onContainerMouseWheel:function(c){var a=this.chart;c=this.normalize(c);var k=c.detail||-(c.wheelDelta/120);a.isInsidePlot(c.chartX-a.plotLeft,c.chartY-a.plotTop)&&a.mapZoom(Math.pow(a.options.mapNavigation.mouseWheelSensitivity,k),a.xAxis[0].toValue(c.chartX),a.yAxis[0].toValue(c.chartY),c.chartX,c.chartY)}});r(a.prototype,"zoomOption",function(c){var a=this.chart.options.mapNavigation;n(a.enableTouchZoom,a.enabled)&& +(this.chart.options.chart.pinchType="xy");c.apply(this,[].slice.call(arguments,1))});r(a.prototype,"pinchTranslate",function(c,a,k,n,w,u,h){c.call(this,a,k,n,w,u,h);"map"===this.chart.options.chart.type&&this.hasZoom&&(c=n.scaleX>n.scaleY,this.pinchTranslateDirection(!c,a,k,n,w,u,h,c?n.scaleX:n.scaleY))})});z(a,"parts-map/MapSeries.js",[a["parts/Globals.js"],a["mixins/legend-symbol.js"],a["parts/Point.js"],a["parts/SVGRenderer.js"],a["parts/Utilities.js"]],function(a,r,k,n,c){var w=c.extend,z=c.fireEvent, +A=c.getNestedProperty,B=c.isArray,u=c.isNumber,h=c.merge,f=c.objectEach,x=c.pick,l=c.seriesType,q=c.splat,p=a.colorMapPointMixin,y=a.noop,g=a.Series,d=a.seriesTypes;l("map","scatter",{animation:!1,dataLabels:{crop:!1,formatter:function(){return this.point.value},inside:!0,overflow:!1,padding:0,verticalAlign:"middle"},marker:null,nullColor:"#f7f7f7",stickyTracking:!1,tooltip:{followPointer:!0,pointFormat:"{point.name}: {point.value}
    "},turboThreshold:0,allAreas:!0,borderColor:"#cccccc",borderWidth:1, +joinBy:"hc-key",states:{hover:{halo:null,brightness:.2},normal:{animation:!0},select:{color:"#cccccc"},inactive:{opacity:1}}},h(a.colorMapSeriesMixin,{type:"map",getExtremesFromAll:!0,useMapGeometry:!0,forceDL:!0,searchPoint:y,directTouch:!0,preserveAspectRatio:!0,pointArrayMap:["value"],setOptions:function(b){b=g.prototype.setOptions.call(this,b);var e=b.joinBy;null===e&&(e="_i");e=this.joinBy=q(e);e[1]||(e[1]=e[0]);return b},getBox:function(b){var e=Number.MAX_VALUE,d=-e,c=e,g=-e,f=e,l=e,h=this.xAxis, +p=this.yAxis,q;(b||[]).forEach(function(b){if(b.path){"string"===typeof b.path?b.path=a.splitPath(b.path):"M"===b.path[0]&&(b.path=n.prototype.pathToSegments(b.path));var m=b.path||[],t=-e,h=e,p=-e,v=e,u=b.properties;b._foundBox||(m.forEach(function(b){var e=b[b.length-2];b=b[b.length-1];"number"===typeof e&&"number"===typeof b&&(h=Math.min(h,e),t=Math.max(t,e),v=Math.min(v,b),p=Math.max(p,b))}),b._midX=h+(t-h)*x(b.middleX,u&&u["hc-middle-x"],.5),b._midY=v+(p-v)*x(b.middleY,u&&u["hc-middle-y"],.5), +b._maxX=t,b._minX=h,b._maxY=p,b._minY=v,b.labelrank=x(b.labelrank,(t-h)*(p-v)),b._foundBox=!0);d=Math.max(d,b._maxX);c=Math.min(c,b._minX);g=Math.max(g,b._maxY);f=Math.min(f,b._minY);l=Math.min(b._maxX-b._minX,b._maxY-b._minY,l);q=!0}});q&&(this.minY=Math.min(f,x(this.minY,e)),this.maxY=Math.max(g,x(this.maxY,-e)),this.minX=Math.min(c,x(this.minX,e)),this.maxX=Math.max(d,x(this.maxX,-e)),h&&"undefined"===typeof h.options.minRange&&(h.minRange=Math.min(5*l,(this.maxX-this.minX)/5,h.minRange||e)),p&& +"undefined"===typeof p.options.minRange&&(p.minRange=Math.min(5*l,(this.maxY-this.minY)/5,p.minRange||e)))},hasData:function(){return!!this.processedXData.length},getExtremes:function(){var b=g.prototype.getExtremes.call(this,this.valueData),e=b.dataMin;b=b.dataMax;this.chart.hasRendered&&this.isDirtyData&&this.getBox(this.options.data);u(e)&&(this.valueMin=e);u(b)&&(this.valueMax=b);return{dataMin:this.minY,dataMax:this.maxY}},translatePath:function(b){var e=this.xAxis,d=this.yAxis,a=e.min,c=e.transA, +g=e.minPixelPadding,f=d.min,l=d.transA,h=d.minPixelPadding,p=[];b&&b.forEach(function(b){"M"===b[0]?p.push(["M",(b[1]-(a||0))*c+g,(b[2]-(f||0))*l+h]):"L"===b[0]?p.push(["L",(b[1]-(a||0))*c+g,(b[2]-(f||0))*l+h]):"C"===b[0]?p.push(["C",(b[1]-(a||0))*c+g,(b[2]-(f||0))*l+h,(b[3]-(a||0))*c+g,(b[4]-(f||0))*l+h,(b[5]-(a||0))*c+g,(b[6]-(f||0))*l+h]):"Q"===b[0]?p.push(["Q",(b[1]-(a||0))*c+g,(b[2]-(f||0))*l+h,(b[3]-(a||0))*c+g,(b[4]-(f||0))*l+h]):"Z"===b[0]&&p.push(["Z"])});return p},setData:function(b,e,d, +c){var m=this.options,l=this.chart.options.chart,p=l&&l.map,q=m.mapData,v=this.joinBy,y=m.keys||this.pointArrayMap,n=[],x={},r=this.chart.mapTransforms;!q&&p&&(q="string"===typeof p?a.maps[p]:p);b&&b.forEach(function(e,d){var a=0;if(u(e))b[d]={value:e};else if(B(e)){b[d]={};!m.keys&&e.length>y.length&&"string"===typeof e[0]&&(b[d]["hc-key"]=e[0],++a);for(var c=0;ch&&.99p&&(p=h=1,q=Math.round(q),u=Math.round(u));var y=this.transformGroup;if(g.renderer.globalAnimation){var n=y.attr("translateX");var k=y.attr("translateY");var r=y.attr("scaleX");var w=y.attr("scaleY");y.attr({animator:0}).animate({animator:1},{step:function(b,e){y.attr({translateX:n+(q-n)*e.pos,translateY:k+(u-k)*e.pos,scaleX:r+(h-r)*e.pos,scaleY:w+ +(p-w)*e.pos})}})}else y.attr({translateX:q,translateY:u,scaleX:h,scaleY:p})}g.styledMode||a.element.setAttribute("stroke-width",x(b.options[b.pointAttrToOptions&&b.pointAttrToOptions["stroke-width"]||"borderWidth"],1)/(h||1));this.drawMapDataLabels()},drawMapDataLabels:function(){g.prototype.drawDataLabels.call(this);this.dataLabelsGroup&&this.dataLabelsGroup.clip(this.chart.clipRect)},render:function(){var b=this,e=g.prototype.render;b.chart.renderer.isVML&&3E3=b&&this.renderRange(e)},this);this.legendSymbol.add(this.legendItem);this.legendItem.add(this.legendGroup);this.hideOverlappingLabels()}; +a.prototype.renderRange=function(d){var b=this.options,e=b.labels,a=this.chart.renderer,c=this.symbols,g=c.labels,f=d.center,l=Math.abs(d.radius),h=b.connectorDistance||0,p=e.align,q=e.style.fontSize;h=this.legend.options.rtl||"left"===p?-h:h;e=b.connectorWidth;var u=this.ranges[0].radius||0,y=f-l-b.borderWidth/2+e/2;q=q/2-(this.fontMetrics.h-q)/2;var k=a.styledMode;"center"===p&&(h=0,b.connectorDistance=0,d.labelStyle.align="center");p=y+b.labels.y;var n=u+h+b.labels.x;c.bubbleItems.push(a.circle(u, +f+((y%1?1:.5)-(e%2?0:.5)),l).attr(k?{}:d.bubbleStyle).addClass((k?"highcharts-color-"+this.options.seriesIndex+" ":"")+"highcharts-bubble-legend-symbol "+(b.className||"")).add(this.legendSymbol));c.connectors.push(a.path(a.crispLine([["M",u,y],["L",u+h,y]],b.connectorWidth)).attr(k?{}:d.connectorStyle).addClass((k?"highcharts-color-"+this.options.seriesIndex+" ":"")+"highcharts-bubble-legend-connectors "+(b.connectorClassName||"")).add(this.legendSymbol));d=a.text(this.formatLabel(d),n,p+q).attr(k? +{}:d.labelStyle).addClass("highcharts-bubble-legend-labels "+(b.labels.className||"")).add(this.legendSymbol);g.push(d);d.placed=!0;d.alignAttr={x:n,y:p+q}};a.prototype.getMaxLabelSize=function(){var d,b;this.symbols.labels.forEach(function(e){b=e.getBBox(!0);d=d?b.width>d.width?b:d:b});return d||{}};a.prototype.formatLabel=function(d){var b=this.options,e=b.labels.formatter;b=b.labels.format;var a=this.chart.numberFormatter;return b?c.format(b,d):e?e.call(d):a(d.value,1)};a.prototype.hideOverlappingLabels= +function(){var d=this.chart,b=this.symbols;!this.options.labels.allowOverlap&&b&&(d.hideOverlappingLabels(b.labels),b.labels.forEach(function(e,d){e.newOpacity?e.newOpacity!==e.oldOpacity&&b.connectors[d].show():b.connectors[d].hide()}))};a.prototype.getRanges=function(){var d=this.legend.bubbleLegend,b=d.options.ranges,e,a=Number.MAX_VALUE,c=-Number.MAX_VALUE;d.chart.series.forEach(function(b){b.isBubble&&!b.ignoreSeries&&(e=b.zData.filter(B),e.length&&(a=f(b.options.zMin,Math.min(a,Math.max(A(e), +!1===b.options.displayNegative?b.options.zThreshold:-Number.MAX_VALUE))),c=f(b.options.zMax,Math.max(c,z(e)))))});var g=a===c?[{value:c}]:[{value:a},{value:(a+c)/2},{value:c,autoRanges:!0}];b.length&&b[0].radius&&g.reverse();g.forEach(function(e,d){b&&b[d]&&(g[d]=u(!1,b[d],e))});return g};a.prototype.predictBubbleSizes=function(){var d=this.chart,b=this.fontMetrics,e=d.legend.options,a="horizontal"===e.layout,c=a?d.legend.lastLineHeight:0,g=d.plotSizeX,f=d.plotSizeY,l=d.series[this.options.seriesIndex]; +d=Math.ceil(l.minPxSize);var h=Math.ceil(l.maxPxSize);l=l.options.maxSize;var p=Math.min(f,g);if(e.floating||!/%$/.test(l))b=h;else if(l=parseFloat(l),b=(p+c-b.h/2)*l/100/(l/100+1),a&&f-b>=g||!a&&g-b>=f)b=h;return[d,Math.ceil(b)]};a.prototype.updateRanges=function(d,b){var e=this.legend.options.bubbleLegend;e.minSize=d;e.maxSize=b;e.ranges=this.getRanges()};a.prototype.correctSizes=function(){var d=this.legend,b=this.chart.series[this.options.seriesIndex];1f.height&&(f.height=a[c].itemHeight);f.step=e}return d};n.prototype.retranslateItems=function(a){var d, +b,e,c=this.options.rtl,f=0;this.allItems.forEach(function(g,l){d=g.legendGroup.translateX;b=g._legendItemPos[1];if((e=g.movementX)||c&&g.ranges)e=c?d-g.options.maxSize/2:d+e,g.legendGroup.attr({translateX:e});l>a[f].step&&f++;g.legendGroup.attr({translateY:Math.round(b+a[f].height/2)});g._legendItemPos[1]=b+a[f].height/2})};r(p,"legendItemClick",function(){var a=this.chart,d=this.visible,b=this.chart.legend;b&&b.bubbleLegend&&(this.visible=!d,this.ignoreSeries=d,a=0<=a.getVisibleBubbleSeriesIndex(), +b.bubbleLegend.visible!==a&&(b.update({bubbleLegend:{enabled:a}}),b.bubbleLegend.visible=a),this.visible=d)});q(a.prototype,"drawChartBox",function(a,d,b){var e=this.legend,c=0<=this.getVisibleBubbleSeriesIndex();if(e&&e.options.enabled&&e.bubbleLegend&&e.options.bubbleLegend.autoRanges&&c){var f=e.bubbleLegend.options;c=e.bubbleLegend.predictBubbleSizes();e.bubbleLegend.updateRanges(c[0],c[1]);f.placed||(e.group.placed=!1,e.allItems.forEach(function(b){b.legendGroup.translateY=null}));e.render(); +this.getMargins();this.axes.forEach(function(b){b.visible&&b.render();f.placed||(b.setScale(),b.updateNames(),h(b.ticks,function(b){b.isNew=!0;b.isNewLabel=!0}))});f.placed=!0;this.getMargins();a.call(this,d,b);e.bubbleLegend.correctSizes();e.retranslateItems(e.getLinesHeights())}else a.call(this,d,b),e&&e.options.enabled&&e.bubbleLegend&&(e.render(),e.retranslateItems(e.getLinesHeights()))});k.BubbleLegend=x;return k.BubbleLegend});z(a,"parts-more/BubbleSeries.js",[a["parts/Globals.js"],a["parts/Color.js"], +a["parts/Point.js"],a["parts/Utilities.js"]],function(a,r,k,n){var c=r.parse,w=n.arrayMax,z=n.arrayMin,A=n.clamp,B=n.extend,u=n.isNumber,h=n.pick,f=n.pInt;r=n.seriesType;n=a.Axis;var x=a.noop,l=a.Series,q=a.seriesTypes;r("bubble","scatter",{dataLabels:{formatter:function(){return this.point.z},inside:!0,verticalAlign:"middle"},animationLimit:250,marker:{lineColor:null,lineWidth:1,fillOpacity:.5,radius:null,states:{hover:{radiusPlus:0}},symbol:"circle"},minSize:8,maxSize:"20%",softThreshold:!1,states:{hover:{halo:{size:5}}}, +tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"},{pointArrayMap:["y","z"],parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],specialGroup:"group",bubblePadding:!0,zoneAxis:"z",directTouch:!0,isBubble:!0,pointAttribs:function(a,f){var g=this.options.marker.fillOpacity;a=l.prototype.pointAttribs.call(this,a,f);1!==g&&(a.fill=c(a.fill).setOpacity(g).get("rgba"));return a},getRadii:function(a,c,f){var d=this.zData,b=this.yData, +e=f.minPxSize,g=f.maxPxSize,l=[];var h=0;for(f=d.length;h=this.minPxSize/2?(d.marker=B(d.marker,{radius:b,width:2*b,height:2*b}),d.dlBox={x:d.plotX-b,y:d.plotY-b,width:2* +b,height:2*b}):d.shapeArgs=d.plotY=d.dlBox=void 0}},alignDataLabel:q.column.prototype.alignDataLabel,buildKDTree:x,applyZones:x},{haloPath:function(a){return k.prototype.haloPath.call(this,0===a?0:(this.marker?this.marker.radius||0:0)+a)},ttBelow:!1});n.prototype.beforePadding=function(){var a=this,c=this.len,g=this.chart,d=0,b=c,e=this.isXAxis,l=e?"xData":"yData",q=this.min,k={},n=Math.min(g.plotWidth,g.plotHeight),x=Number.MAX_VALUE,r=-Number.MAX_VALUE,C=this.max-q,B=c/C,D=[];this.series.forEach(function(b){var d= +b.options;!b.bubblePadding||!b.visible&&g.options.chart.ignoreHiddenSeries||(a.allowZoomOutside=!0,D.push(b),e&&(["minSize","maxSize"].forEach(function(b){var a=d[b],e=/%$/.test(a);a=f(a);k[b]=e?n*a/100:a}),b.minPxSize=k.minSize,b.maxPxSize=Math.max(k.maxSize,k.minSize),b=b.zData.filter(u),b.length&&(x=h(d.zMin,A(z(b),!1===d.displayNegative?d.zThreshold:-Number.MAX_VALUE,x)),r=h(d.zMax,Math.max(r,w(b))))))});D.forEach(function(c){var f=c[l],g=f.length;e&&c.getRadii(x,r,c);if(0"},states:{hover:{halo:!1,brightness:.2}}},B(a.colorMapSeriesMixin,{pointArrayMap:["y","value"],hasPointSpecificOptions:!0,getExtremesFromAll:!0,directTouch:!0,init:function(){f.prototype.init.apply(this,arguments);var a=this.options;a.pointRange=u(a.pointRange, +a.colsize||1);this.yAxis.axisPointRange=a.rowsize||1;w(x,{ellipse:x.circle,rect:x.square})},getSymbol:f.prototype.getSymbol,setClip:function(a){var c=this.chart;f.prototype.setClip.apply(this,arguments);(!1!==this.options.clip||a)&&this.markerGroup.clip((a||this.clipBox)&&this.sharedClipKey?c[this.sharedClipKey]:c.clipRect)},translate:function(){var a=this.options,c=a.marker&&a.marker.symbol||"",f=x[c]?c:"rect";a=this.options;var h=-1!==["circle","square"].indexOf(f);this.generatePoints();this.points.forEach(function(a){var d= +a.getCellAttributes(),b={x:Math.min(d.x1,d.x2),y:Math.min(d.y1,d.y2),width:Math.max(Math.abs(d.x2-d.x1),0),height:Math.max(Math.abs(d.y2-d.y1),0)};var e=a.hasImage=0===(a.marker&&a.marker.symbol||c||"").indexOf("url");if(h){var g=Math.abs(b.width-b.height);b.x=Math.min(d.x1,d.x2)+(b.widthq;var k=c[f][1]>q;p!==k&&l<(c[f][0]-c[a][0])*(q-c[a][1])/(c[f][1]-c[a][1])+c[a][0]&&(h=!h)}return h}var c=r.win,w=k.error,z=k.extend,A=k.format,B=k.merge;k=k.wrap;"";a.prototype.transformFromLatLon=function(a,h){var f,k=(null===(f=this.userOptions.chart)||void 0===f?void 0:f.proj4)||c.proj4;if(!k)return w(21,!1,this),{x:0,y:null};a=k(h.crs,[a.lon,a.lat]);f=h.cosAngle||h.rotation&&Math.cos(h.rotation);k=h.sinAngle||h.rotation&& +Math.sin(h.rotation);a=h.rotation?[a[0]*f+a[1]*k,-a[0]*k+a[1]*f]:a;return{x:((a[0]-(h.xoffset||0))*(h.scale||1)+(h.xpan||0))*(h.jsonres||1)+(h.jsonmarginX||0),y:(((h.yoffset||0)-a[1])*(h.scale||1)+(h.ypan||0))*(h.jsonres||1)-(h.jsonmarginY||0)}};a.prototype.transformToLatLon=function(a,h){if("undefined"===typeof c.proj4)w(21,!1,this);else{a={x:((a.x-(h.jsonmarginX||0))/(h.jsonres||1)-(h.xpan||0))/(h.scale||1)+(h.xoffset||0),y:((-a.y-(h.jsonmarginY||0))/(h.jsonres||1)+(h.ypan||0))/(h.scale||1)+(h.yoffset|| +0)};var f=h.cosAngle||h.rotation&&Math.cos(h.rotation),k=h.sinAngle||h.rotation&&Math.sin(h.rotation);h=c.proj4(h.crs,"WGS84",h.rotation?{x:a.x*f+a.y*-k,y:a.x*k+a.y*f}:a);return{lat:h.y,lon:h.x}}};a.prototype.fromPointToLatLon=function(a){var c=this.mapTransforms,f;if(c){for(f in c)if(Object.hasOwnProperty.call(c,f)&&c[f].hitZone&&n({x:a.x,y:-a.y},c[f].hitZone.coordinates[0]))return this.transformToLatLon(a,c[f]);return this.transformToLatLon(a,c["default"])}w(22,!1,this)};a.prototype.fromLatLonToPoint= +function(a){var c=this.mapTransforms,f;if(!c)return w(22,!1,this),{x:0,y:null};for(f in c)if(Object.hasOwnProperty.call(c,f)&&c[f].hitZone){var k=this.transformFromLatLon(a,c[f]);if(n({x:k.x,y:-k.y},c[f].hitZone.coordinates[0]))return k}return this.transformFromLatLon(a,c["default"])};r.geojson=function(a,c,f){var h=[],l=[],k=function(a){a.forEach(function(a,c){0===c?l.push(["M",a[0],-a[1]]):l.push(["L",a[0],-a[1]])})};c=c||"map";a.features.forEach(function(a){var f=a.geometry,g=f.type;f=f.coordinates; +a=a.properties;var d;l=[];"map"===c||"mapbubble"===c?("Polygon"===g?(f.forEach(k),l.push(["Z"])):"MultiPolygon"===g&&(f.forEach(function(a){a.forEach(k)}),l.push(["Z"])),l.length&&(d={path:l})):"mapline"===c?("LineString"===g?k(f):"MultiLineString"===g&&f.forEach(k),l.length&&(d={path:l})):"mappoint"===c&&"Point"===g&&(d={x:f[0],y:-f[1]});d&&h.push(z(d,{name:a.name||a.NAME,properties:a}))});f&&a.copyrightShort&&(f.chart.mapCredits=A(f.chart.options.credits.mapText,{geojson:a}),f.chart.mapCreditsFull= +A(f.chart.options.credits.mapTextFull,{geojson:a}));return h};k(a.prototype,"addCredits",function(a,c){c=B(!0,this.options.credits,c);this.mapCredits&&(c.href=null);a.call(this,c);this.credits&&this.mapCreditsFull&&this.credits.attr({title:this.mapCreditsFull})})});z(a,"parts-map/Map.js",[a["parts/Chart.js"],a["parts/Globals.js"],a["parts/Options.js"],a["parts/SVGRenderer.js"],a["parts/Utilities.js"]],function(a,r,k,n,c){function w(a,c,h,k,p,n,g,d){return[["M",a+p,c],["L",a+h-n,c],["C",a+h-n/2,c, +a+h,c+n/2,a+h,c+n],["L",a+h,c+k-g],["C",a+h,c+k-g/2,a+h-g/2,c+k,a+h-g,c+k],["L",a+d,c+k],["C",a+d/2,c+k,a,c+k-d/2,a,c+k-d],["L",a,c+p],["C",a,c+p/2,a+p/2,c,a+p,c],["Z"]]}k=k.defaultOptions;var z=c.extend,A=c.getOptions,B=c.merge,u=c.pick;c=r.Renderer;var h=r.VMLRenderer;z(k.lang,{zoomIn:"Zoom in",zoomOut:"Zoom out"});k.mapNavigation={buttonOptions:{alignTo:"plotBox",align:"left",verticalAlign:"top",x:0,width:18,height:18,padding:5,style:{fontSize:"15px",fontWeight:"bold"},theme:{"stroke-width":1, +"text-align":"center"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(.5)},text:"+",y:0},zoomOut:{onclick:function(){this.mapZoom(2)},text:"-",y:28}},mouseWheelSensitivity:1.1};r.splitPath=function(a){"string"===typeof a&&(a=a.replace(/([A-Za-z])/g," $1 ").replace(/^\s*/,"").replace(/\s*$/,""),a=a.split(/[ ,;]+/).map(function(a){return/[A-za-z]/.test(a)?a:parseFloat(a)}));return n.prototype.pathToSegments(a)};r.maps={};n.prototype.symbols.topbutton=function(a,c,h,k,p){p=p&&p.r||0;return w(a-1, +c-1,h,k,p,p,0,0)};n.prototype.symbols.bottombutton=function(a,c,h,k,p){p=p&&p.r||0;return w(a-1,c-1,h,k,0,0,p,p)};c===h&&["topbutton","bottombutton"].forEach(function(a){h.prototype.symbols[a]=n.prototype.symbols[a]});r.Map=r.mapChart=function(c,h,k){var f="string"===typeof c||c.nodeName,l=arguments[f?1:0],n=l,g={endOnTick:!1,visible:!1,minPadding:0,maxPadding:0,startOnTick:!1},d=A().credits;var b=l.series;l.series=null;l=B({chart:{panning:{enabled:!0,type:"xy"},type:"map"},credits:{mapText:u(d.mapText, +' \u00a9 {geojson.copyrightShort}'),mapTextFull:u(d.mapTextFull,"{geojson.copyright}")},tooltip:{followTouchMove:!1},xAxis:g,yAxis:B(g,{reversed:!0})},l,{chart:{inverted:!1,alignTicks:!1}});l.series=n.series=b;return f?new a(c,l,k):new a(l,h)}});z(a,"masters/modules/map.src.js",[],function(){})}); +//# sourceMappingURL=map.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/marker-clusters.js b/libs/highcharts-8.1.2/modules/marker-clusters.js new file mode 100644 index 00000000..5d1e5856 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/marker-clusters.js @@ -0,0 +1,44 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Marker clusters module for Highcharts + + (c) 2010-2019 Wojciech Chmiel + + License: www.highcharts.com/license +*/ +(function(t){"object"===typeof module&&module.exports?(t["default"]=t,module.exports=t):"function"===typeof define&&define.amd?define("highcharts/modules/marker-clusters",["highcharts"],function(y){t(y);t.Highcharts=y;return t}):t("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(t){function y(t,F,C,y){t.hasOwnProperty(F)||(t[F]=y.apply(null,C))}t=t?t._modules:{};y(t,"modules/marker-clusters.src.js",[t["parts/Chart.js"],t["parts/Globals.js"],t["parts/Options.js"],t["parts/Point.js"],t["parts/SVGRenderer.js"], +t["parts/Utilities.js"]],function(t,y,C,P,Z,v){function I(a){var b=a.length,e=0,f=0,c;for(c=0;cClustered points: {point.clusterPointsAmount}
    "}});Z.prototype.symbols.cluster=function(a,b,e,f){e/=2;f/=2;var c=this.arc(a+e,b+f,e-4,f-4,{start:.5*Math.PI,end:2.5*Math.PI,open:!1});var k=this.arc(a+e,b+f,e-3,f-3,{start:.5*Math.PI,end:2.5*Math.PI,innerR:e-2,open:!1});return this.arc(a+e,b+f,e-1,f-1,{start:.5*Math.PI,end:2.5*Math.PI,innerR:e,open:!1}).concat(k,c)};w.prototype.animateClusterPoint=function(a){var b= +this.xAxis,e=this.yAxis,f=this.chart,c=T((this.options.cluster||{}).animation),k=c.duration||500,h=(this.markerClusterInfo||{}).pointsState,m=(h||{}).newState,r=(h||{}).oldState,g=[],l=h=0,p=0,q=!1,u=!1;if(r&&m){var d=m[a.stateId];l=b.toPixels(d.x)-f.plotLeft;p=e.toPixels(d.y)-f.plotTop;if(1===d.parentsId.length){a=(m||{})[a.stateId].parentsId[0];var n=r[a];d.point&&d.point.graphic&&n&&n.point&&n.point.plotX&&n.point.plotY&&n.point.plotX!==d.point.plotX&&n.point.plotY!==d.point.plotY&&(a=d.point.graphic.getBBox(), +h=a.width/2,d.point.graphic.attr({x:n.point.plotX-h,y:n.point.plotY-h}),d.point.graphic.animate({x:l-d.point.graphic.radius,y:p-d.point.graphic.radius},c,function(){u=!0;n.point&&n.point.destroy&&n.point.destroy()}),d.point.dataLabel&&d.point.dataLabel.alignAttr&&n.point.dataLabel&&n.point.dataLabel.alignAttr&&(d.point.dataLabel.attr({x:n.point.dataLabel.alignAttr.x,y:n.point.dataLabel.alignAttr.y}),d.point.dataLabel.animate({x:d.point.dataLabel.alignAttr.x,y:d.point.dataLabel.alignAttr.y},c)))}else 0=== +d.parentsId.length?(R(d,!0,!0),J(function(){Q(d,.1,c,!0,!0)},k/2)):(R(d,!0,!0),d.parentsId.forEach(function(a){r&&r[a]&&(n=r[a],g.push(n),n.point&&n.point.graphic&&(q=!0,n.point.graphic.show(),n.point.graphic.animate({x:l-n.point.graphic.radius,y:p-n.point.graphic.radius,opacity:.4},c,function(){u=!0;L(d,g,c,.7)}),n.point.dataLabel&&-9999!==n.point.dataLabel.y&&d.point&&d.point.dataLabel&&d.point.dataLabel.alignAttr&&(n.point.dataLabel.show(),n.point.dataLabel.animate({x:d.point.dataLabel.alignAttr.x, +y:d.point.dataLabel.alignAttr.y,opacity:.4},c))))}),J(function(){u||L(d,g,c,.85)},k),q||J(function(){L(d,g,c,.1)},k/2))}};w.prototype.getGridOffset=function(){var a=this.chart,b=this.xAxis,e=this.yAxis;b=this.dataMinX&&this.dataMaxX?b.reversed?b.toPixels(this.dataMaxX):b.toPixels(this.dataMinX):a.plotLeft;a=this.dataMinY&&this.dataMaxY?e.reversed?e.toPixels(this.dataMinY):e.toPixels(this.dataMaxY):a.plotTop;return{plotLeft:b,plotTop:a}};w.prototype.getScaledGridSize=function(a){var b=this.xAxis,e= +!0,f=1,c=1;a=a.processedGridSize||E.layoutAlgorithm.gridSize;this.gridValueSize||(this.gridValueSize=Math.abs(b.toValue(a)-b.toValue(0)));b=b.toPixels(this.gridValueSize)-b.toPixels(0);for(b=+(a/b).toFixed(14);e&&1!==b;){var k=Math.pow(2,f);.75b?e=!1:b>=1/k&&b<1/k*2?(e=!1,c=k):b<=k&&b>k/2&&(e=!1,c=1/k);f++}return a/c/b};w.prototype.getRealExtremes=function(){var a=this.chart,b=this.xAxis,e=this.yAxis;var f=b?b.toValue(a.plotLeft):0;b=b?b.toValue(a.plotLeft+a.plotWidth):0;var c=e?e.toValue(a.plotTop): +0;a=e?e.toValue(a.plotTop+a.plotHeight):0;f>b&&(f=[f,b],b=f[0],f=f[1]);c>a&&(c=[c,a],a=c[0],c=c[1]);return{minX:f,maxX:b,minY:c,maxY:a}};w.prototype.onDrillToCluster=function(a){(a.point||a.target).firePointEvent("drillToCluster",a,function(a){var b=a.point||a.target,f=b.series.xAxis,c=b.series.yAxis,k=b.series.chart;if((b.series.options.cluster||{}).drillToCluster&&b.clusteredData){var h=b.clusteredData.map(function(a){return a.x}).sort(function(a,b){return a-b});var m=b.clusteredData.map(function(a){return a.y}).sort(function(a, +b){return a-b});b=h[0];var r=h[h.length-1];h=m[0];var g=m[m.length-1];m=Math.abs(.1*(r-b));var l=Math.abs(.1*(g-h));k.pointer.zoomX=!0;k.pointer.zoomY=!0;b>r&&(r=[r,b],b=r[0],r=r[1]);h>g&&(g=[g,h],h=g[0],g=g[1]);k.zoom({originalEvent:a,xAxis:[{axis:f,min:b-m,max:r+m}],yAxis:[{axis:c,min:h-l,max:g+l}]})}})};w.prototype.getClusterDistancesFromPoint=function(a,b,e){var f=this.xAxis,c=this.yAxis,k=[],h;for(h=0;hc[d].oldX+1||c[d].posXc[d].oldY+1||c[d].posY +r.minX||this.initMaxY&&this.initMaxYr.minY?(this.initMaxX=r.maxX,this.initMinX=r.minX,this.initMaxY=r.maxY,this.initMinY=r.minY,m=this.markerClusterAlgorithms?this.markerClusterAlgorithms.kmeans.call(this,a,b,e,f):{},this.baseClusters=null):(this.baseClusters||(this.baseClusters={clusters:this.markerClusterInfo.clusters,noise:this.markerClusterInfo.noise}),this.baseClusters.clusters.forEach(function(a){a.pointsOutside=[];a.pointsInside=[];a.data.forEach(function(b){p= +Math.sqrt(Math.pow(c.toPixels(b.x)-c.toPixels(a.x),2)+Math.pow(k.toPixels(b.y)-k.toPixels(a.y),2));q=a.clusterZone&&a.clusterZone.marker&&a.clusterZone.marker.radius?a.clusterZone.marker.radius:g&&g.radius?g.radius:E.marker.radius;l=0<=h-q?h-q:q;p>q+l&&D(a.pointsOutside)?a.pointsOutside.push(b):D(a.pointsInside)&&a.pointsInside.push(b)});a.pointsInside.length&&(m[a.id]=a.pointsInside);a.pointsOutside.forEach(function(b,f){m[a.id+"_noise"+f]=[b]})}),this.baseClusters.noise.forEach(function(a){m[a.id]= +a.data}));return m}};w.prototype.preventClusterCollisions=function(a){var b=this.xAxis,e=this.yAxis,f=a.key.split("-").map(parseFloat),c=f[0],k=f[1],h=a.gridSize,m=a.groupedData,r=a.defaultRadius,g=a.clusterRadius,l=k*h,p=c*h,q=b.toPixels(a.x),u=e.toPixels(a.y);f=[];var d=0,n=0,t=(this.options.cluster||{}).marker,x=(this.options.cluster||{}).zones,v=this.getGridOffset(),w,y,A,B,C,F,G;q-=v.plotLeft;u-=v.plotTop;for(A=1;5>A;A++){var H=A%2?-1:1;var z=3>A?-1:1;H=Math.floor((q+H*g)/h);z=Math.floor((u+ +z*g)/h);H=[z+"-"+H,z+"-"+k,c+"-"+H];for(z=0;z=x[A].from&&d<=x[A].to&&(n=D((x[A].marker||{}).radius)?x[A].marker.radius||0:t&&t.radius?t.radius:E.marker.radius);1B-k?l+g:l+h-g);C!==c&&Math.abs(u-y)C-c?p+g:p+h-g)}});f=b.toValue(q+v.plotLeft);z=e.toValue(u+v.plotTop);m[a.key].posX=f;m[a.key].posY=z;return{x:f,y:z}};w.prototype.isValidGroupedDataObject=function(a){var b=!1,e;if(!N(a))return!1;S(a,function(a){b=!0;if(V(a)&&a.length)for(e=0;e=r){var p=a[l];var q=Math.random().toString(36).substring(2,7)+"-"+Y++;var u=p.length;if(b.zones)for(g=0;g=b.zones[g].from&&u<=b.zones[g].to){var d=b.zones[g];d.zoneIndex=g;var n=b.zones[g].marker;var t=b.zones[g].className}var x= +I(p);"grid"!==b.layoutAlgorithm.type||b.allowOverlap?x={x:x.x,y:x.y}:(g=this.options.marker||{},x=this.preventClusterCollisions({x:x.x,y:x.y,key:l,groupedData:a,gridSize:this.getScaledGridSize(b.layoutAlgorithm),defaultRadius:g.radius||3+(g.lineWidth||0),clusterRadius:n&&n.radius?n.radius:(b.marker||{}).radius||E.marker.radius}));for(g=0;g=k.minX-e&&a.xData[q]<=k.maxX+e&&(a.yData[q]||k.minY)>=k.minY-f&&(a.yData[q]|| +k.maxY)<=k.maxY+f&&(h.push(a.xData[q]),m.push(a.yData[q]),r.push(q))}D(n)&&D(g)&&G(t)&&G(l)&&(a.dataMaxX=n,a.dataMinX=g,a.dataMaxY=t,a.dataMinY=l);k=M(u)?u:a.markerClusterAlgorithms?u&&a.markerClusterAlgorithms[u]?a.markerClusterAlgorithms[u]:h.lengthb?1:0)},barycenter:function(){var b=this.options.gravitationalConstant,a=this.barycenter.xFactor,e=this.barycenter.yFactor;a=(a-(this.box.left+this.box.width)/2)*b;e= +(e-(this.box.top+this.box.height)/2)*b;this.nodes.forEach(function(d){d.fixedPosition||(d.plotX-=a/d.mass/d.degree,d.plotY-=e/d.mass/d.degree)})},repulsive:function(b,a,e){a=a*this.diffTemperature/b.mass/b.degree;b.fixedPosition||(b.plotX+=e.x*a,b.plotY+=e.y*a)},attractive:function(b,a,e){var d=b.getMass(),g=-e.x*a*this.diffTemperature;a=-e.y*a*this.diffTemperature;b.fromNode.fixedPosition||(b.fromNode.plotX-=g*d.fromNode/b.fromNode.degree,b.fromNode.plotY-=a*d.fromNode/b.fromNode.degree);b.toNode.fixedPosition|| +(b.toNode.plotX+=g*d.toNode/b.toNode.degree,b.toNode.plotY+=a*d.toNode/b.toNode.degree)},integrate:function(b,a){var e=-b.options.friction,d=b.options.maxSpeed,g=(a.plotX+a.dispX-a.prevX)*e;e*=a.plotY+a.dispY-a.prevY;var f=Math.abs,q=f(g)/(g||1);f=f(e)/(e||1);g=q*Math.min(d,Math.abs(g));e=f*Math.min(d,Math.abs(e));a.prevX=a.plotX+a.dispX;a.prevY=a.plotY+a.dispY;a.plotX+=g;a.plotY+=e;a.temperature=b.vectorLength({x:g,y:e})},getK:function(b){return Math.pow(b.box.width*b.box.height/b.nodes.length,.5)}}, +euler:{attractiveForceFunction:function(b,a){return b*b/a},repulsiveForceFunction:function(b,a){return a*a/b},barycenter:function(){var b=this.options.gravitationalConstant,a=this.barycenter.xFactor,e=this.barycenter.yFactor;this.nodes.forEach(function(d){if(!d.fixedPosition){var g=d.getDegree();g*=1+g/2;d.dispX+=(a-d.plotX)*b*g/d.degree;d.dispY+=(e-d.plotY)*b*g/d.degree}})},repulsive:function(b,a,e,d){b.dispX+=e.x/d*a/b.degree;b.dispY+=e.y/d*a/b.degree},attractive:function(b,a,e,d){var g=b.getMass(), +f=e.x/d*a;a*=e.y/d;b.fromNode.fixedPosition||(b.fromNode.dispX-=f*g.fromNode/b.fromNode.degree,b.fromNode.dispY-=a*g.fromNode/b.fromNode.degree);b.toNode.fixedPosition||(b.toNode.dispX+=f*g.toNode/b.toNode.degree,b.toNode.dispY+=a*g.toNode/b.toNode.degree)},integrate:function(b,a){a.dispX+=a.dispX*b.options.friction;a.dispY+=a.dispY*b.options.friction;var e=a.temperature=b.vectorLength({x:a.dispX,y:a.dispY});0!==e&&(a.plotX+=a.dispX/e*Math.min(Math.abs(a.dispX),b.temperature),a.plotY+=a.dispY/e*Math.min(Math.abs(a.dispY), +b.temperature))},getK:function(b){return Math.pow(b.box.width*b.box.height/b.nodes.length,.3)}}}});m(f,"modules/networkgraph/QuadTree.js",[f["parts/Globals.js"],f["parts/Utilities.js"]],function(f,b){b=b.extend;var a=f.QuadTreeNode=function(a){this.box=a;this.boxSize=Math.min(a.width,a.height);this.nodes=[];this.body=this.isInternal=!1;this.isEmpty=!0};b(a.prototype,{insert:function(e,d){this.isInternal?this.nodes[this.getBoxPosition(e)].insert(e,d-1):(this.isEmpty=!1,this.body?d?(this.isInternal= +!0,this.divideBox(),!0!==this.body&&(this.nodes[this.getBoxPosition(this.body)].insert(this.body,d-1),this.body=!0),this.nodes[this.getBoxPosition(e)].insert(e,d-1)):(d=new a({top:e.plotX,left:e.plotY,width:.1,height:.1}),d.body=e,d.isInternal=!1,this.nodes.push(d)):(this.isInternal=!1,this.body=e))},updateMassAndCenter:function(){var a=0,d=0,b=0;this.isInternal?(this.nodes.forEach(function(e){e.isEmpty||(a+=e.mass,d+=e.plotX*e.mass,b+=e.plotY*e.mass)}),d/=a,b/=a):this.body&&(a=this.body.mass,d=this.body.plotX, +b=this.body.plotY);this.mass=a;this.plotX=d;this.plotY=b},divideBox:function(){var b=this.box.width/2,d=this.box.height/2;this.nodes[0]=new a({left:this.box.left,top:this.box.top,width:b,height:d});this.nodes[1]=new a({left:this.box.left+b,top:this.box.top,width:b,height:d});this.nodes[2]=new a({left:this.box.left+b,top:this.box.top+d,width:b,height:d});this.nodes[3]=new a({left:this.box.left,top:this.box.top+d,width:b,height:d})},getBoxPosition:function(a){var d=a.plotYMath.abs(this.systemTemperature-this.prevSystemTemperature)||0>=this.temperature}, +getSystemTemperature:function(){return this.nodes.reduce(function(c,a){return c+a.temperature},0)},vectorLength:function(c){return Math.sqrt(c.x*c.x+c.y*c.y)},getDistR:function(c,a){c=this.getDistXY(c,a);return this.vectorLength(c)},getDistXY:function(c,a){var b=c.plotX-a.plotX;c=c.plotY-a.plotY;return{x:b,y:c,absX:Math.abs(b),absY:Math.abs(c)}}});e(f,"predraw",function(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(function(c){c.stop()})});e(f,"render",function(){function c(c){c.maxIterations--&& +isFinite(c.temperature)&&!c.isStable()&&!c.enableSimulation&&(c.beforeStep&&c.beforeStep(),c.step(),b=!1,a=!0)}var a=!1;if(this.graphLayoutsLookup){p(!1,this);for(this.graphLayoutsLookup.forEach(function(c){c.start()});!b;){var b=!0;this.graphLayoutsLookup.forEach(c)}a&&this.series.forEach(function(c){c&&c.layout&&c.render()})}});e(f,"beforePrint",function(){this.graphLayoutsLookup&&(this.graphLayoutsLookup.forEach(function(c){c.updateSimulation(!1)}),this.redraw())});e(f,"afterPrint",function(){this.graphLayoutsLookup&& +this.graphLayoutsLookup.forEach(function(c){c.updateSimulation()});this.redraw()})});m(f,"modules/networkgraph/draggable-nodes.js",[f["parts/Chart.js"],f["parts/Globals.js"],f["parts/Utilities.js"]],function(f,b,a){var e=a.addEvent;b.dragNodesMixin={onMouseDown:function(a,b){b=this.chart.pointer.normalize(b);a.fixedPosition={chartX:b.chartX,chartY:b.chartY,plotX:a.plotX,plotY:a.plotY};a.inDragMode=!0},onMouseMove:function(a,b){if(a.fixedPosition&&a.inDragMode){var d=this.chart;b=d.pointer.normalize(b); +var e=a.fixedPosition.chartX-b.chartX,f=a.fixedPosition.chartY-b.chartY;b=d.graphLayoutsLookup;if(5"+this.point.toNode.name},linkTextPath:{enabled:!0},textPath:{enabled:!1},style:{transition:"opacity 2000ms"}},link:{color:"rgba(100, 100, 100, 0.5)",width:1},draggable:!0,layoutAlgorithm:{initialPositions:"circle",initialPositionRadius:1,enableSimulation:!1,theta:.5,maxSpeed:10,approximation:"none",type:"reingold-fruchterman",integration:"euler",maxIterations:1E3,gravitationalConstant:.0625,friction:-.981},showInLegend:!1},{forces:["barycenter", +"repulsive","attractive"],hasDraggableNodes:!0,drawGraph:null,isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,pointArrayMap:["from","to"],trackerGroups:["group","markerGroup","dataLabelsGroup"],drawTracker:f.TrackerMixin.drawTrackerPoint,animate:null,buildKDTree:f.noop,createNode:f.NodesMixin.createNode,destroy:function(){this.layout.removeElementFromCollection(this,this.layout.series);f.NodesMixin.destroy.call(this)},init:function(){k.prototype.init.apply(this,arguments);e(this, +"updatedData",function(){this.layout&&this.layout.stop()});return this},generatePoints:function(){var c;f.NodesMixin.generatePoints.apply(this,arguments);this.options.nodes&&this.options.nodes.forEach(function(a){this.nodeLookup[a.id]||(this.nodeLookup[a.id]=this.createNode(a.id))},this);for(c=this.nodes.length-1;0<=c;c--){var a=this.nodes[c];a.degree=a.getDegree();a.radius=n(a.marker&&a.marker.radius,this.options.marker&&this.options.marker.radius,0);this.nodeLookup[a.id]||a.remove()}this.data.forEach(function(a){a.formatPrefix= +"link"});this.indexateNodes()},getPointsCollection:function(){return this.nodes||[]},indexateNodes:function(){this.nodes.forEach(function(a,b){a.index=b})},markerAttribs:function(a,b){b=k.prototype.markerAttribs.call(this,a,b);g(a.plotY)||(b.y=0);b.x=(a.plotX||0)-(b.width/2||0);return b},translate:function(){this.processedXData||this.processData();this.generatePoints();this.deferLayout();this.nodes.forEach(function(a){a.isInside=!0;a.linksFrom.forEach(function(a){a.shapeType="path";a.y=1})})},deferLayout:function(){var a= +this.options.layoutAlgorithm,b=this.chart.graphLayoutsStorage,d=this.chart.graphLayoutsLookup,e=this.chart.options.chart;if(this.visible){b||(this.chart.graphLayoutsStorage=b={},this.chart.graphLayoutsLookup=d=[]);var l=b[a.type];l||(a.enableSimulation=g(e.forExport)?!e.forExport:a.enableSimulation,b[a.type]=l=new f.layouts[a.type],l.init(a),d.splice(l.index,0,l));this.layout=l;l.setArea(0,0,this.chart.plotWidth,this.chart.plotHeight);l.addElementsToCollection([this],l.series);l.addElementsToCollection(this.nodes, +l.nodes);l.addElementsToCollection(this.points,l.links)}},render:function(){var a=this.points,b=this.chart.hoverPoint,d=[];this.points=this.nodes;m.line.prototype.render.call(this);this.points=a;a.forEach(function(a){a.fromNode&&a.toNode&&(a.renderLink(),a.redrawLink())});b&&b.series===this&&this.redrawHalo(b);this.chart.hasRendered&&!this.options.dataLabels.allowOverlap&&(this.nodes.concat(this.points).forEach(function(a){a.dataLabel&&d.push(a.dataLabel)}),this.chart.hideOverlappingLabels(d))},drawDataLabels:function(){var a= +this.options.dataLabels.textPath;k.prototype.drawDataLabels.apply(this,arguments);this.points=this.data;this.options.dataLabels.textPath=this.options.dataLabels.linkTextPath;k.prototype.drawDataLabels.apply(this,arguments);this.points=this.nodes;this.options.dataLabels.textPath=a},pointAttribs:function(a,b){var c=b||a&&a.state||"normal";b=k.prototype.pointAttribs.call(this,a,c);c=this.options.states[c];a&&!a.isNode&&(b=a.getLinkAttributes(),c&&(b={stroke:c.linkColor||b.stroke,dashstyle:c.linkDashStyle|| +b.dashstyle,opacity:n(c.linkOpacity,b.opacity),"stroke-width":c.linkColor||b["stroke-width"]}));return b},redrawHalo:p.redrawHalo,onMouseDown:p.onMouseDown,onMouseMove:p.onMouseMove,onMouseUp:p.onMouseUp,setState:function(a,b){b?(this.points=this.nodes.concat(this.data),k.prototype.setState.apply(this,arguments),this.points=this.data):k.prototype.setState.apply(this,arguments);this.layout.simulation||a||this.render()}},{setState:f.NodesMixin.setNodeState,init:function(){b.prototype.init.apply(this, +arguments);this.series.options.draggable&&!this.series.chart.styledMode&&(e(this,"mouseOver",function(){d(this.series.chart.container,{cursor:"move"})}),e(this,"mouseOut",function(){d(this.series.chart.container,{cursor:"default"})}));return this},getDegree:function(){var a=this.isNode?this.linksFrom.length+this.linksTo.length:0;return 0===a?1:a},getLinkAttributes:function(){var a=this.series.options.link,b=this.options;return{"stroke-width":n(b.width,a.width),stroke:b.color||a.color,dashstyle:b.dashStyle|| +a.dashStyle,opacity:n(b.opacity,a.opacity,1)}},renderLink:function(){if(!this.graphic&&(this.graphic=this.series.chart.renderer.path(this.getLinkPath()).add(this.series.group),!this.series.chart.styledMode)){var a=this.series.pointAttribs(this);this.graphic.attr(a);(this.dataLabels||[]).forEach(function(c){c&&c.attr({opacity:a.opacity})})}},redrawLink:function(){var a=this.getLinkPath();if(this.graphic){this.shapeArgs={d:a};if(!this.series.chart.styledMode){var b=this.series.pointAttribs(this);this.graphic.attr(b); +(this.dataLabels||[]).forEach(function(a){a&&a.attr({opacity:b.opacity})})}this.graphic.animate(this.shapeArgs);var d=a[0];a=a[1];"M"===d[0]&&"L"===a[0]&&(this.plotX=(d[1]+a[1])/2,this.plotY=(d[2]+a[2])/2)}},getMass:function(){var a=this.fromNode.mass,b=this.toNode.mass,d=a+b;return{fromNode:1-a/d,toNode:1-b/d}},getLinkPath:function(){var a=this.fromNode,b=this.toNode;a.plotX>b.plotX&&(a=this.toNode,b=this.fromNode);return[["M",a.plotX||0,a.plotY||0],["L",b.plotX||0,b.plotY||0]]},isValid:function(){return!this.isNode|| +g(this.id)},remove:function(a,b){var c=this.series,d=c.options.nodes||[],e,f=d.length;if(this.isNode){c.points=[];[].concat(this.linksFrom).concat(this.linksTo).forEach(function(a){e=a.fromNode.linksFrom.indexOf(a);-1x.userAgent.indexOf("Chrome"); +try{if(!b&&0>x.userAgent.toLowerCase().indexOf("firefox"))return D.createObjectURL(new e.Blob([a],{type:"image/svg+xml;charset-utf-16"}))}catch(f){}return"data:image/svg+xml;charset=UTF-8,"+encodeURIComponent(a)};b.imageToDataUrl=function(a,b,f,c,d,m,h,t,z){var l=new e.Image,r=function(){setTimeout(function(){var e=g.createElement("canvas"),m=e.getContext&&e.getContext("2d");try{if(m){e.height=l.height*c;e.width=l.width*c;m.drawImage(l,0,0,e.width,e.height);try{var y=e.toDataURL(b);d(y,b,f,c)}catch(E){k(a, +b,f,c)}}else h(a,b,f,c)}finally{z&&z(a,b,f,c)}},G)},u=function(){t(a,b,f,c);z&&z(a,b,f,c)};var k=function(){l=new e.Image;k=m;l.crossOrigin="Anonymous";l.onload=r;l.onerror=u;l.src=a};l.onload=r;l.onerror=u;l.src=a};b.downloadSVGLocal=function(a,d,f,c){function u(a,b){var c=a.width.baseVal.value+2*b;b=a.height.baseVal.value+2*b;c=new e.jsPDF(b>c?"p":"l","pt",[c,b]);[].forEach.call(a.querySelectorAll('*[visibility="hidden"]'),function(a){a.parentNode.removeChild(a)});e.svg2pdf(a,c,{removeInvalid:!0}); +return c.output("datauristring")}function m(){h.innerHTML=a;var e=h.getElementsByTagName("text"),d;[].forEach.call(e,function(a){["font-family","font-size"].forEach(function(b){for(var c=a;c&&c!==h;){if(c.style[b]){a.style[b]=c.style[b];break}c=c.parentNode}});a.style["font-family"]=a.style["font-family"]&&a.style["font-family"].split(" ").splice(-1);d=a.getElementsByTagName("title");[].forEach.call(d,function(b){a.removeChild(b)})});e=u(h.firstChild,0);try{b.downloadURL(e,r),c&&c()}catch(H){f(H)}} +var k=!0,t=d.libURL||A().exporting.libURL,h=g.createElement("div"),l=d.type||"image/png",r=(d.filename||"chart")+"."+("image/svg+xml"===l?"svg":l.split("/")[1]),q=d.scale||1;t="/"!==t.slice(-1)?t+"/":t;if("image/svg+xml"===l)try{if("undefined"!==typeof x.msSaveOrOpenBlob){var w=new MSBlobBuilder;w.append(a);var p=w.getBlob("image/svg+xml")}else p=b.svgToDataUrl(a);b.downloadURL(p,r);c&&c()}catch(y){f(y)}else if("application/pdf"===l)e.jsPDF&&e.svg2pdf?m():(k=!0,n(t+"jspdf.js",function(){n(t+"svg2pdf.js", +function(){m()})}));else{p=b.svgToDataUrl(a);var v=function(){try{D.revokeObjectURL(p)}catch(y){}};b.imageToDataUrl(p,l,{},q,function(a){try{b.downloadURL(a,r),c&&c()}catch(E){f(E)}},function(){var d=g.createElement("canvas"),m=d.getContext("2d"),h=a.match(/^]*width\s*=\s*"?(\d+)"?[^>]*>/)[1]*q,u=a.match(/^]*height\s*=\s*"?(\d+)"?[^>]*>/)[1]*q,p=function(){m.drawSvg(a,0,0,h,u);try{b.downloadURL(x.msSaveOrOpenBlob?d.msToBlob():d.toDataURL(l),r),c&&c()}catch(I){f(I)}finally{v()}};d.width= +h;d.height=u;e.canvg?p():(k=!0,n(t+"rgbcolor.js",function(){n(t+"canvg.js",function(){p()})}))},f,f,function(){k&&v()})}};a.prototype.getSVGForLocalExport=function(a,e,d,c){var f=this,m=0,h,g,k,l,r=function(){m===w.length&&c(f.sanitizeSVG(h.innerHTML,g))},n=function(a,b,c){++m;c.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href",a);r()};f.unbindGetSVG=q(f,"getSVG",function(a){g=a.chartCopy.options;h=a.chartCopy.container.cloneNode(!0)});f.getSVGForExport(a,e);var w=h.getElementsByTagName("image"); +try{if(!w.length){c(f.sanitizeSVG(h.innerHTML,g));return}var p=0;for(k=w.length;p/g,"<$1title>").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g,'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/ id=([^" >]+)/g,' id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g, +" ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()})},d.prototype.isReadyToRender=function(){var a=this;return D||t!=t.top||"complete"===f.readyState?!0:(f.attachEvent("onreadystatechange",function(){f.detachEvent("onreadystatechange",a.firstRender);"complete"===f.readyState&&a.firstRender()}),!1)},f.createElementNS||(f.createElementNS=function(a,b){return f.createElement(b)}),h.addEventListenerPolyfill=function(a,b){function c(a){a.target=a.srcElement|| +t;b.call(e,a)}var e=this;e.attachEvent&&(e.hcEventsIE||(e.hcEventsIE={}),b.hcKey||(b.hcKey=U()),e.hcEventsIE[b.hcKey]=c,e.attachEvent("on"+a,c))},h.removeEventListenerPolyfill=function(a,b){this.detachEvent&&(b=this.hcEventsIE[b.hcKey],this.detachEvent("on"+a,b))},d={docMode8:f&&8===f.documentMode,init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],e=["position: ","absolute",";"],m="div"===b;("shape"===b||m)&&e.push("left:0;top:0;width:1px;height:1px;");e.push("visibility: ",m?"hidden":"visible"); +c.push(' style="',e.join(""),'"/>');b&&(c=m||"span"===b||"img"===b?c.join(""):a.prepVML(c),this.element=E(c));this.renderer=a},add:function(a){var b=this.renderer,c=this.element,e=b.box,m=a&&a.inverted;e=a?a.element||a:e;a&&(this.parentGroup=a);m&&b.invertChild(c,e);e.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();this.className&&this.attr("class",this.className);return this},updateTransform:w.prototype.htmlUpdateTransform, +setSpanRotation:function(){var a=this.rotation,b=Math.cos(a*u),c=Math.sin(a*u);y(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):"none"})},getSpanCorrection:function(a,b,c,e,m){var d=e?Math.cos(e*u):1,A=e?Math.sin(e*u):0,I=z(this.elemHeight,this.element.offsetHeight);this.xCorr=0>d&&-a;this.yCorr=0>A&&-I;var k=0>d*A;this.xCorr+=A*b*(k?1-c:c);this.yCorr-=d*b*(e?k?c:1-c:1);m&&"left"!==m&&(this.xCorr-= +a*c*(0>d?-1:1),e&&(this.yCorr-=I*c*(0>A?-1:1)),y(this.element,{textAlign:m}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)P(a[b])?c[b]=Math.round(10*a[b])-5:"Z"===a[b]?c[b]="x":(c[b]=a[b],!a.isArc||"wa"!==a[b]&&"at"!==a[b]||(c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1)));return c.join(" ")||"x"},clip:function(a){var b=this;if(a){var c=a.members;N(c,b);c.push(b);b.destroyClip=function(){N(c,b)};a=a.getCSS(b)}else b.destroyClip&&b.destroyClip(), +a={clip:b.docMode8?"inherit":"rect(auto)"};return b.css(a)},css:w.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&M(a)},destroy:function(){this.destroyClip&&this.destroyClip();return w.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=t.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){a=a.split(/[ ,]/);var c=a.length;if(9===c||11===c)a[c-4]=a[c-2]=q(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var e=[],d,n=this.element, +A=this.renderer,I=n.style,k=n.path;k&&"string"!==typeof k.value&&(k="x");var g=k;if(a){var f=z(a.width,3);var p=(a.opacity||.15)/f;for(d=1;3>=d;d++){var h=2*f+1-2*d;c&&(g=this.cutOffPath(k.value,h+.5));var l=[''];var x=E(A.prepVML(l),null,{left:q(I.left)+z(a.offsetX,1),top:q(I.top)+z(a.offsetY,1)});c&&(x.cutOff=h+1);l=['']; +E(A.prepVML(l),null,null,x);b?b.element.appendChild(x):n.parentNode.insertBefore(x,n);e.push(x)}this.shadows=e}return this},updateShadows:H,setAttr:function(a,b){this.docMode8?this.element[a]=b:this.element.setAttribute(a,b)},getAttr:function(a){return this.docMode8?this.element[a]:this.element.getAttribute(a)},classSetter:function(a){(this.added?this.element:this).className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||E(this.renderer.prepVML([""]),null,null,c))[b]= +a||"solid";this[b]=a},dSetter:function(a,b,c){var e=this.shadows;a=a||[];this.d=a.join&&a.join(" ");c.path=a=this.pathToVML(a);if(e)for(c=e.length;c--;)e[c].path=e[c].cutOff?this.cutOffPath(a,e[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var e=c.nodeName;"SPAN"===e?c.style.color=a:"IMG"!==e&&(c.filled="none"!==a,this.setAttr("fillcolor",this.renderer.color(a,c,b,this)))},"fill-opacitySetter":function(a,b,c){E(this.renderer.prepVML(["<",b.split("-")[0],' opacity="',a,'"/>']),null,null, +c)},opacitySetter:H,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-Math.round(Math.sin(a*u)+1)+"px";c.top=Math.round(Math.cos(a*u))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b,this))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;P(a)&&(a+="px");this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){"inherit"===a&&(a="visible");this.shadows&&this.shadows.forEach(function(c){c.style[b]= +a});"DIV"===c.nodeName&&(a="hidden"===a?"-999em":0,this.docMode8||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;"x"===b?b="left":"y"===b&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a},fillGetter:function(){return this.getAttr("fillcolor")||""},strokeGetter:function(){return this.getAttr("strokecolor")||""},classGetter:function(){return this.getAttr("className")||""}},d["stroke-opacitySetter"]= +d["fill-opacitySetter"],h.VMLElement=d=R(w,d),d.prototype.ySetter=d.prototype.widthSetter=d.prototype.heightSetter=d.prototype.xSetter,C={Element:d,isIE8:-1'];E(d.prepVML(g),null,null,b)};var v=a[0];var z=a[a.length-1];0z[0]&&a.push([1,z[1]]);a.forEach(function(a,b){n.test(a[1])?(J=G(a[1]), +h=J.get("rgb"),l=J.get("a")):(h=a[1],l=1);w.push(100*a[0]+"% "+h);b?(r=l,x=h):(q=l,u=h)});if("fill"===c)if("gradient"===f)c=p.x1||p[0]||0,a=p.y1||p[1]||0,v=p.x2||p[2]||0,p=p.y2||p[3]||0,t='angle="'+(90-180*Math.atan((p-a)/(v-c))/Math.PI)+'"',y();else{k=p.r;var C=2*k,D=2*k,F=p.cx,H=p.cy,K=b.radialReference,B;k=function(){K&&(B=e.getBBox(),F+=(K[0]-B.x)/B.width-.5,H+=(K[1]-B.y)/B.height-.5,C*=K[2]/B.width,D*=K[2]/B.height);t='src="'+O().global.VMLRadialGradientURL+'" size="'+C+","+D+'" origin="0.5,0.5" position="'+ +F+","+H+'" color2="'+u+'" ';y()};e.added?k():e.onAdd=k;k=x}else k=h}else if(n.test(a)&&"IMG"!==b.tagName){var J=G(a);e[c+"-opacitySetter"](J.get("a"),c,b);k=J.get("rgb")}else k=b.getElementsByTagName(c),k.length&&(k[0].opacity=1,k[0].type="solid"),k=a;return k},prepVML:function(a){var b=this.isIE8;a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=-1===a.indexOf('style="')?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):a.replace('style="', +'style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","";this.point.image&&(c+='");c+="
    ";this.point.name&&(c+="

    "+this.point.name+"

    ");this.point.title&&(c+="

    "+(this.point.title||"")+"

    ");this.point.description&& +(c+="

    "+this.point.description+"

    ");return c+"
    "},style:{fontWeight:"normal",fontSize:"13px"},useHTML:!0},hangingIndent:20,linkColor:"#666666",linkLineWidth:1,nodeWidth:50,tooltip:{nodeFormat:"{point.name}
    {point.title}
    {point.description}"}},{pointAttribs:function(a,c){var g=this,d=q.pointAttribs.call(g,a,c),e=g.mapOptionsToLevel[(a.isNode?a.level:a.fromNode.level)||0]||{},t=a.options,b=e.states&&e.states[c]||{};c=["borderRadius","linkColor","linkLineWidth"].reduce(function(a, +c){a[c]=r(b[c],t[c],e[c],g.options[c]);return a},{});a.isNode?c.borderRadius&&(d.r=c.borderRadius):(d.stroke=c.linkColor,d["stroke-width"]=c.linkLineWidth,delete d.fill);return d},createNode:function(a){a=q.createNode.call(this,a);a.getSum=function(){return 1};return a},createNodeColumn:function(){var a=q.createNodeColumn.call(this);v(a,"offset",function(a,g,d){a=a.call(this,g,d);return g.hangsFrom?{absoluteTop:g.hangsFrom.nodeY}:a});return a},translateNode:function(a,c){q.translateNode.call(this, +a,c);a.hangsFrom&&(a.shapeArgs.height-=this.options.hangingIndent,this.chart.inverted||(a.shapeArgs.y+=this.options.hangingIndent));a.nodeHeight=this.chart.inverted?a.shapeArgs.width:a.shapeArgs.height},curvedPath:function(a,c){for(var g=[],d=0;d=n)&&(l=h=Math.floor(h+(p?-.5:.5)*b.shapeArgs.width)+d,k=b.shapeArgs.y,0>1,p=b-c[l].xMin,0p)e=l-1;else return l;return 0=b.x)e=c[g],e=b.x<=e.xMax&&b.x>=e.xMin&&b.y<=e.yMax&&b.y>=e.yMin;if(e)return g}return-1}function t(c){var b=[];if(c.length){b.push(["M",c[0].start.x,c[0].start.y]);for(var g=0;gz(a[d]-c[d+"Max"]);return e(a,d,c,d+(f?"Max":"Min"),f?1:-1)}var p=[],k=C(g.startDirectionX,z(b.x-c.x)>z(b.y-c.y))?"x":"y",u=g.chartObstacles,w=r(u,c);g=r(u,b);if(-1=c[k]===g[k]>=D[k]&&(k="y"===k?"x":"y",b=c[k]c?w(l(m,B.x),m.length-1):0;m[h]&&(0c&&m[h].xMax>=n.x);){if(m[h].xMin<=B.x&&m[h].xMax>=n.x&&m[h].yMin<=b.y&&m[h].yMax>=x.y)return f?{y:a.y,x:a.x=h[b+"Max"];h=a[b+"Min"]<=h[b+"Min"];var E=a[b+"Max"]>=B[b+"Max"];B=a[b+ +"Min"]<=B[b+"Min"];var g=z(a[b+"Min"]-d[b]),x=z(a[b+"Max"]-d[b]);f=10>z(g-x)?d[b]z(b.y-c.y)),F=G?"x":"y",H=[],D=!1,A=g.obstacleMetrics,a=w(c.x,b.x)-A.maxWidth-10,d=v(c.x,b.x)+A.maxWidth+10,f=w(c.y,b.y)-A.maxHeight-10,B=v(c.y,b.y)+ +A.maxHeight+10,m=g.chartObstacles;var E=l(m,a);A=l(m,d);m=m.slice(E,A+1);if(-1<(A=r(m,b))){var y=K(m[A],b,c);H.push({end:b,start:y});b=y}for(;-1<(A=r(m,b));)E=0>b[F]-c[F],y={x:b.x,y:b.y},y[F]=m[A][E?F+"Max":F+"Min"]+(E?1:-1),H.push({end:b,start:y}),b=y;c=p(c,b,G);c=c.concat(H.reverse());return{path:t(c),obstacles:c}},{requiresObstacles:!0})}});C(e,"parts-gantt/ArrowSymbols.js",[e["parts/SVGRenderer.js"]],function(e){e.prototype.symbols.arrow=function(e,r,t,k){return[["M",e,r+k/2],["L",e+t,r],["L", +e,r+k/2],["L",e+t,r+k]]};e.prototype.symbols["arrow-half"]=function(l,r,t,k){return e.prototype.symbols.arrow(l,r,t/2,k)};e.prototype.symbols["triangle-left"]=function(e,r,t,k){return[["M",e+t,r],["L",e,r+k/2],["L",e+t,r+k],["Z"]]};e.prototype.symbols["arrow-filled"]=e.prototype.symbols["triangle-left"];e.prototype.symbols["triangle-left-half"]=function(l,r,t,k){return e.prototype.symbols["triangle-left"](l,r,t/2,k)};e.prototype.symbols["arrow-filled-half"]=e.prototype.symbols["triangle-left-half"]}); +C(e,"parts-gantt/Pathfinder.js",[e["parts/Chart.js"],e["parts/Globals.js"],e["parts/Options.js"],e["parts/Point.js"],e["parts/Utilities.js"],e["parts-gantt/PathfinderAlgorithms.js"]],function(e,l,r,t,k,C){function u(a){var d=a.shapeArgs;return d?{xMin:d.x,xMax:d.x+d.width,yMin:d.y,yMax:d.y+d.height}:(d=a.graphic&&a.graphic.getBBox())?{xMin:a.plotX-d.width/2,xMax:a.plotX+d.width/2,yMin:a.plotY-d.height/2,yMax:a.plotY+d.height/2}:null}function w(a){for(var d=a.length,f=0,c,m,b=[],e=function(a,d,f){f= +G(f,10);var c=a.yMax+f>d.yMin-f&&a.yMin-fd.xMin-f&&a.xMin-fd.xMax?a.xMin-d.xMax:d.xMin-a.xMax:Infinity,h=b?a.yMin>d.yMax?a.yMin-d.yMax:d.yMin-a.yMax:Infinity;return b&&c?f?e(a,d,Math.floor(f/2)):Infinity:A(m,h)};fm&&b.push(m);b.push(80);return D(Math.floor(b.sort(function(a,d){return a-d})[Math.floor(b.length/10)]/2-1),1)}function v(a,d,f){this.init(a,d,f)}function z(a){this.init(a)}function c(a){if(a.options.pathfinder|| +a.series.reduce(function(a,f){f.options&&p(!0,f.options.connectors=f.options.connectors||{},f.options.pathfinder);return a||f.options&&f.options.pathfinder},!1))p(!0,a.options.connectors=a.options.connectors||{},a.options.pathfinder),I('WARNING: Pathfinder options have been renamed. Use "chart.connectors" or "series.connectors" instead.')}"";var b=k.addEvent,g=k.defined,I=k.error,J=k.extend,p=k.merge,L=k.objectEach,G=k.pick,F=k.splat,H=l.deg2rad,D=Math.max,A=Math.min;J(r.defaultOptions,{connectors:{type:"straight", +lineWidth:1,marker:{enabled:!1,align:"center",verticalAlign:"middle",inside:!1,lineWidth:1},startMarker:{symbol:"diamond"},endMarker:{symbol:"arrow-filled"}}});v.prototype={init:function(a,d,f){this.fromPoint=a;this.toPoint=d;this.options=f;this.chart=a.series.chart;this.pathfinder=this.chart.pathfinder},renderPath:function(a,d,f){var c=this.chart,b=c.styledMode,e=c.pathfinder,g=!c.options.chart.forExport&&!1!==f,h=this.graphics&&this.graphics.path;e.group||(e.group=c.renderer.g().addClass("highcharts-pathfinder-group").attr({zIndex:-1}).add(c.seriesGroup)); +e.group.translate(c.plotLeft,c.plotTop);h&&h.renderer||(h=c.renderer.path().add(e.group),b||h.attr({opacity:0}));h.attr(d);a={d:a};b||(a.opacity=1);h[g?"animate":"attr"](a,f);this.graphics=this.graphics||{};this.graphics.path=h},addMarker:function(a,d,f){var c=this.fromPoint.series.chart,b=c.pathfinder;c=c.renderer;var e="start"===a?this.fromPoint:this.toPoint,g=e.getPathfinderAnchorPoint(d);if(d.enabled&&((f="start"===a?f[1]:f[f.length-2])&&"M"===f[0]||"L"===f[0])){f={x:f[1],y:f[2]};f=e.getRadiansToVector(f, +g);g=e.getMarkerVector(f,d.radius,g);f=-f/H;if(d.width&&d.height){var h=d.width;var k=d.height}else h=k=2*d.radius;this.graphics=this.graphics||{};g={x:g.x-h/2,y:g.y-k/2,width:h,height:k,rotation:f,rotationOriginX:g.x,rotationOriginY:g.y};this.graphics[a]?this.graphics[a].animate(g):(this.graphics[a]=c.symbol(d.symbol).addClass("highcharts-point-connecting-path-"+a+"-marker").attr(g).add(b.group),c.styledMode||this.graphics[a].attr({fill:d.color||this.fromPoint.color,stroke:d.lineColor,"stroke-width":d.lineWidth, +opacity:0}).animate({opacity:1},e.series.options.animation))}},getPath:function(a){var d=this.pathfinder,f=this.chart,c=d.algorithms[a.type],b=d.chartObstacles;if("function"!==typeof c)I('"'+a.type+'" is not a Pathfinder algorithm.');else return c.requiresObstacles&&!b&&(b=d.chartObstacles=d.getChartObstacles(a),f.options.connectors.algorithmMargin=a.algorithmMargin,d.chartObstacleMetrics=d.getObstacleMetrics(b)),c(this.fromPoint.getPathfinderAnchorPoint(a.startMarker),this.toPoint.getPathfinderAnchorPoint(a.endMarker), +p({chartObstacles:b,lineObstacles:d.lineObstacles||[],obstacleMetrics:d.chartObstacleMetrics,hardBounds:{xMin:0,xMax:f.plotWidth,yMin:0,yMax:f.plotHeight},obstacleOptions:{margin:a.algorithmMargin},startDirectionX:d.getAlgorithmStartDirection(a.startMarker)},a))},render:function(){var a=this.fromPoint,d=a.series,f=d.chart,c=f.pathfinder,b=p(f.options.connectors,d.options.connectors,a.options.connectors,this.options),e={};f.styledMode||(e.stroke=b.lineColor||a.color,e["stroke-width"]=b.lineWidth,b.dashStyle&& +(e.dashstyle=b.dashStyle));e["class"]="highcharts-point-connecting-path highcharts-color-"+a.colorIndex;b=p(e,b);g(b.marker.radius)||(b.marker.radius=A(D(Math.ceil((b.algorithmMargin||8)/2)-1,1),5));a=this.getPath(b);f=a.path;a.obstacles&&(c.lineObstacles=c.lineObstacles||[],c.lineObstacles=c.lineObstacles.concat(a.obstacles));this.renderPath(f,e,d.options.animation);this.addMarker("start",p(b.marker,b.startMarker),f);this.addMarker("end",p(b.marker,b.endMarker),f)},destroy:function(){this.graphics&& +(L(this.graphics,function(a){a.destroy()}),delete this.graphics)}};z.prototype={algorithms:C,init:function(a){this.chart=a;this.connections=[];b(a,"redraw",function(){this.pathfinder.update()})},update:function(a){var d=this.chart,c=this,b=c.connections;c.connections=[];d.series.forEach(function(a){a.visible&&!a.options.isInternal&&a.points.forEach(function(a){var b,f=a.options&&a.options.connect&&F(a.options.connect);a.visible&&!1!==a.isInside&&f&&f.forEach(function(f){b=d.get("string"===typeof f? +f:f.to);b instanceof t&&b.series.visible&&b.visible&&!1!==b.isInside&&c.connections.push(new v(a,b,"string"===typeof f?{}:f))})})});for(var e=0,g,k,h=b.length,l=c.connections.length;eMath.PI;)a-=d;d=Math.tan(a);a>-h&&a<=h?(w=-1,k=!0):a>h&&a<=Math.PI-h?w=-1:a>Math.PI-h||a<=-(Math.PI-h)?(v=-1,k=!0):v=-1;k?(p+=v*f,r+=w*f*d):(p+=g/(2*d)*v,r+=w*n);b.x!==l&&(p=b.x);b.y!==e&&(r=b.y);t.x=p+c*Math.cos(a);t.y=r-c*Math.sin(a);return t}}); +e.prototype.callbacks.push(function(a){!1!==a.options.connectors.enabled&&(c(a),this.pathfinder=new z(this),this.pathfinder.update(!0))})});C(e,"masters/modules/pathfinder.src.js",[],function(){})}); +//# sourceMappingURL=pathfinder.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/pattern-fill.js b/libs/highcharts-8.1.2/modules/pattern-fill.js new file mode 100644 index 00000000..3d84b2bf --- /dev/null +++ b/libs/highcharts-8.1.2/modules/pattern-fill.js @@ -0,0 +1,23 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Module for adding patterns and images as point fills. + + (c) 2010-2019 Highsoft AS + Author: Torstein Hnsi, ystein Moseng + + License: www.highcharts.com/license +*/ +(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/pattern-fill",["highcharts"],function(g){c(g);c.Highcharts=g;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function g(c,p,g,e){c.hasOwnProperty(p)||(c[p]=e.apply(null,g))}c=c?c._modules:{};g(c,"modules/pattern-fill.src.js",[c["parts/Globals.js"],c["parts/Point.js"],c["parts/SVGRenderer.js"],c["parts/Utilities.js"]], +function(c,g,r,e){function p(a,b){a=JSON.stringify(a);var c=a.length||0,f=0,d=0;if(b){b=Math.max(Math.floor(c/500),1);for(var e=0;e +b.aspectRatio?b.aspectWidth=b.height*a.aspectRatio:b.aspectHeight=b.width/a.aspectRatio);a._width=a.width||Math.ceil(b.aspectWidth||b.width);a._height=a.height||Math.ceil(b.aspectHeight||b.height)}a.width||(a._x=a.x||0,a._x+=b.x-Math.round(b.aspectWidth?Math.abs(b.aspectWidth-b.width)/2:0));a.height||(a._y=a.y||0,a._y+=b.y-Math.round(b.aspectHeight?Math.abs(b.aspectHeight-b.height)/2:0))}};r.prototype.addPattern=function(a,b){b=q(b,!0);var c=u(b),f=a.width||a._width||32,d=a.height||a._height||32, +e=a.color||"#343434",h=a.id,g=this,n=function(a){g.rect(0,0,f,d).attr({fill:a}).add(m)};h||(this.idCounter=this.idCounter||0,h="highcharts-pattern-"+this.idCounter+"-"+(this.chartIndex||0),++this.idCounter);this.forExport&&(h+="-export");this.defIds=this.defIds||[];if(!(-1{series.name}
    ',pointFormat:"{point.fromNode.name} \u2192 {point.toNode.name}: {point.weight}
    ",nodeFormat:"{point.name}: {point.sum}
    "}},{isCartesian:!1,invertable:!0,forceDL:!0,orderNodes:!0,pointArrayMap:["from", +"to"],createNode:b.NodesMixin.createNode,searchPoint:b.noop,setData:b.NodesMixin.setData,destroy:b.NodesMixin.destroy,getNodePadding:function(){var a=this.options.nodePadding||0;if(this.nodeColumns){var e=this.nodeColumns.reduce(function(a,c){return Math.max(a,c.length)},0);e*a>this.chart.plotSizeY&&(a=this.chart.plotSizeY/e)}return a},createNodeColumn:function(){var a=this,e=this.chart,b=[];b.sum=function(){return this.reduce(function(a,c){return a+c.getSum()},0)};b.offset=function(c,e){for(var d= +0,f,m=a.nodePadding,g=0;gb){var f=d.fromNode;b=f.column}}c.column=b+1;f&&"hanging"===f.options.layout&&(c.hangsFrom=f,e=-1,u(f.linksFrom,function(a,b){(a=a.toNode===c)&&(e=b);return a}),c.column+=e)}a[c.column]||(a[c.column]=this.createNodeColumn());a[c.column].push(c)},this);for(var b=0;bl+k;g.inverted&&(t=g.plotSizeY-t,b=(g.plotSizeY||0)-b,d=g.plotSizeX-d,k=-k,f=-f,q=l>d);a.shapeType="path";a.linkBase=[t,t+f,b,b+f];if(q&&"number"===typeof b)a.shapeArgs={d:[["M",l+k,t],["C",l+k+p,t,d-p,b,d,b],["L",d+(n?k:0),b+f/2],["L",d,b+f],["C",d-p,b+f,l+k+p, +t+f,l+k,t+f],["Z"]]};else if("number"===typeof b){p=d-20-f;n=d-20;q=d;var r=l+k,A=r+20,u=A+f,x=t,v=t+f,z=v+20,C=z+(g.plotHeight-t-f),y=C+20,E=y+f,F=b,D=F+f,G=D+20,H=y+.7*f,I=q-.7*f,J=r+.7*f;a.shapeArgs={d:[["M",r,x],["C",J,x,u,v-.7*f,u,z],["L",u,C],["C",u,H,J,E,r,E],["L",q,E],["C",I,E,p,H,p,C],["L",p,G],["C",p,D-.7*f,I,F,q,F],["L",q,D],["C",n,D,n,D,n,G],["L",n,C],["C",n,y,n,y,q,y],["L",r,y],["C",A,y,A,y,A,C],["L",A,z],["C",A,v,A,v,r,v],["Z"]]}}a.dlBox={x:l+(d-l+k)/2,y:t+(b-t)/2,height:f,width:0}; +a.tooltipPos=g.inverted?[g.plotSizeY-a.dlBox.y-f/2,g.plotSizeX-a.dlBox.x]:[a.dlBox.x,a.dlBox.y+f/2];a.y=a.plotY=1;a.color||(a.color=c.color)},translate:function(){var a=this,b=function(b){for(var c=b.slice(),e=a.options.minLinkWidth||0,f,k=0,l,p=h.plotSizeY-g.borderWidth-(b.length-1)*d.nodePadding;b.length;){k=p/b.sum();f=!1;for(l=b.length;l--;)b[l].getSum()*ke)}function B(e,d,a,l,f,g,b,k){return A(e,d,f,g,b,k)!==A(a,l,f,g,b,k)&&A(e,d,a,l,f,g)!==A(e,d,a,l,b,k)}function E(e,d,a,l,f,g,b,k){return B(e,d,e+a,d,f,g,b,k)||B(e+a,d,e+a,d+l,f,g,b,k)||B(e,d+l,e+a,d+l,f,g,b,k)||B(e,d,e,d+l,f,g,b,k)}function F(e){if(this.renderer){var d=this,a=C(d.renderer.globalAnimation).duration;d.labelSeries=[];d.labelSeriesMaxSum=0;u.clearTimeout(d.seriesLabelTimer);d.series.forEach(function(l){var f= +l.options.label,g=l.labelBySeries,b=g&&g.closest;f.enabled&&l.visible&&(l.graph||l.area)&&!l.isSeriesBoosting&&(d.labelSeries.push(l),f.minFontSize&&f.maxFontSize&&(l.sum=l.yData.reduce(function(a,b){return(a||0)+(b||0)},0),d.labelSeriesMaxSum=Math.max(d.labelSeriesMaxSum,l.sum)),"load"===e.type&&(a=Math.max(a,C(l.options.animation).duration)),b&&("undefined"!==typeof b[0].plotX?g.animate({x:b[0].plotX+b[1],y:b[0].plotY+b[2]}):g.attr({opacity:0})))});d.seriesLabelTimer=I(function(){d.series&&d.labelSeries&& +d.drawSeriesLabels()},d.renderer.forExport||!a?0:a)}}var G=u.addEvent,C=u.animObject,H=u.extend,J=u.fireEvent,K=u.format,D=u.isNumber,z=u.pick,L=u.setOptions,I=u.syncTimeout;"";x=x.Series;L({plotOptions:{series:{label:{enabled:!0,connectorAllowed:!1,connectorNeighbourDistance:24,format:void 0,formatter:void 0,minFontSize:null,maxFontSize:null,onArea:null,style:{fontWeight:"bold"},boxesToAvoid:[]}}}});w.prototype.symbols.connector=function(e,d,a,l,f){var g=f&&f.anchorX;f=f&&f.anchorY;var b=a/2;if(D(g)&& +D(f)){var k=[["M",g,f]];var h=d-f;0>h&&(h=-l-h);hd+l?k.push(["L",e+b,d+l]):fe+a&&k.push(["L",e+a,d+l/2])}return k||[]};x.prototype.getPointsOnGraph=function(){function e(b){var c=Math.round(b.plotX/8)+","+Math.round(b.plotY/8);n[c]||(n[c]=1,a.push(b))}if(this.xAxis||this.yAxis){var d=this.points,a=[],l;var f=this.graph||this.area;var g=f.element;var b=this.chart.inverted,k=this.xAxis;var h=this.yAxis;var m=b?h.pos:k.pos;b= +b?k.pos:h.pos;k=z(this.options.label.onArea,!!this.area);var y=h.getThreshold(this.options.threshold),n={};if(this.getPointSpline&&g.getPointAtLength&&!k&&d.lengthn.right||cn.bottom||q=e-16&&n[c-1].chartX<= +e+a.width+16){if(E(e,d,a.width,a.height,n[c-1].chartX,n[c-1].chartY,n[c].chartX,n[c].chartY))return!1;this===v&&!b&&l&&(b=E(e-16,d-16,a.width+32,a.height+32,n[c-1].chartX,n[c-1].chartY,n[c].chartX,n[c].chartY))}if((h||b)&&(this!==v||k)){q=e+a.width/2-n[c].chartX;var u=d+a.height/2-n[c].chartY;f=Math.min(f,q*q+u*u)}}if(!k&&h&&this===v&&(l&&!b||fd&&a<=e-c.width&&b>=m&&b<=m+n-c.height}var f=a.options.label;if(f&&(a.xAxis||a.yAxis)){var g=[],b,k,h=(k=e.inverted)?a.yAxis.pos:a.xAxis.pos,m=k?a.xAxis.pos:a.yAxis.pos,u=e.inverted?a.yAxis.len:a.xAxis.len,n=e.inverted?a.xAxis.len:a.yAxis.len,c=a.interpolatedPoints,v=z(f.onArea,!!a.area),q=a.labelBySeries,w=!q;var p=f.minFontSize; +var r=f.maxFontSize;var t="highcharts-color-"+z(a.colorIndex,"none");if(v&&!k){k=[a.xAxis.toPixels(a.xData[0]),a.xAxis.toPixels(a.xData[a.xData.length-1])];var x=Math.min.apply(Math,k);var A=Math.max.apply(Math,k)}if(a.visible&&!a.isSeriesBoosting&&c){q||(q=a.name,"string"===typeof f.format?q=K(f.format,a,e):f.formatter&&(q=f.formatter.call(a)),a.labelBySeries=q=e.renderer.label(q,0,-9999,"connector").addClass("highcharts-series-label highcharts-series-label-"+a.index+" "+(a.options.className||"")+ +" "+t),e.renderer.styledMode||(q.css(H({color:v?e.renderer.getContrast(a.color):a.color},f.style||{})),q.attr({opacity:e.renderer.forExport?1:0,stroke:a.color,"stroke-width":1})),p&&r&&q.css({fontSize:a.labelFontSize(p,r)}),q.attr({padding:0,zIndex:3}).add());p=q.getBBox();p.width=Math.round(p.width);for(k=c.length-1;0=h;r-=16)for(t=m;t=c&&(f={x:g.x,y:g.y},g={}),c=void 0,w&&(c=C(a.options.animation),c.duration*=.2),a.labelBySeries.attr(H(g,{anchorX:b.connectorPoint&&b.connectorPoint.plotX+h,anchorY:b.connectorPoint&&b.connectorPoint.plotY+m})).animate(f,c),a.options.kdNow=!0,a.buildKDTree(), +a=a.searchPoint({chartX:b.x,chartY:b.y},!0)))q.closest=[a,b.x-(a.plotX||0),b.y-(a.plotY||0)]}else q&&(a.labelBySeries=q.destroy())}else q&&(a.labelBySeries=q.destroy())}});J(e,"afterDrawSeriesLabels")};G(m,"load",F);G(m,"redraw",F)});w(m,"masters/modules/series-label.src.js",[],function(){})}); +//# sourceMappingURL=series-label.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/solid-gauge.js b/libs/highcharts-8.1.2/modules/solid-gauge.js new file mode 100644 index 00000000..323c0fad --- /dev/null +++ b/libs/highcharts-8.1.2/modules/solid-gauge.js @@ -0,0 +1,17 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Solid angular gauge module + + (c) 2010-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/solid-gauge",["highcharts","highcharts/highcharts-more"],function(g){a(g);a.Highcharts=g;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function g(a,r,g,c){a.hasOwnProperty(r)||(a[r]=c.apply(null,g))}a=a?a._modules:{};g(a,"modules/solid-gauge.src.js",[a["parts/Color.js"],a["parts/Globals.js"],a["mixins/legend-symbol.js"], +a["parts/Utilities.js"]],function(a,g,x,c){var k=a.parse,r=c.clamp,u=c.extend,v=c.isNumber,y=c.merge,t=c.pick,w=c.pInt;a=c.seriesType;c=c.wrap;c(g.Renderer.prototype.symbols,"arc",function(e,a,l,b,z,d){e=e(a,l,b,z,d);d.rounded&&(b=((d.r||b)-(d.innerR||0))/2,a=e[0],d=e[2],"M"===a[0]&&"L"===d[0]&&(a=["A",b,b,0,1,1,a[1],a[2]],e[2]=["A",b,b,0,1,1,d[1],d[2]],e[4]=a));return e});var m;(function(a){var e={initDataClasses:function(a){var e=this.chart,l,d=0,h=this.options;this.dataClasses=l=[];a.dataClasses.forEach(function(b, +f){b=y(b);l.push(b);b.color||("category"===h.dataClassColor?(f=e.options.colors,b.color=f[d++],d===f.length&&(d=0)):b.color=k(h.minColor).tweenTo(k(h.maxColor),f/(a.dataClasses.length-1)))})},initStops:function(a){this.stops=a.stops||[[0,this.options.minColor],[1,this.options.maxColor]];this.stops.forEach(function(a){a.color=k(a[1])})},toColor:function(a,e){var b=this.stops,d=this.dataClasses,h;if(d)for(h=d.length;h--;){var c=d[h];var f=c.from;b=c.to;if(("undefined"===typeof f||a>=f)&&("undefined"=== +typeof b||a<=b)){var g=c.color;e&&(e.dataClass=h);break}}else{this.logarithmic&&(a=this.val2lin(a));a=1-(this.max-a)/(this.max-this.min);for(h=b.length;h--&&!(a>b[h][0]););f=b[h]||b[h+1];b=b[h+1]||f;a=1-(b[0]-a)/(b[0]-f[0]||1);g=f.color.tweenTo(b.color,a)}return g}};a.init=function(a){u(a,e)}})(m||(m={}));a("solidgauge","gauge",{colorByPoint:!0,dataLabels:{y:0}},{drawLegendSymbol:x.drawRectangle,translate:function(){var a=this.yAxis;m.init(a);!a.dataClasses&&a.options.dataClasses&&a.initDataClasses(a.options); +a.initStops(a.options);g.seriesTypes.gauge.prototype.translate.call(this)},drawPoints:function(){var a=this,c=a.yAxis,g=c.center,b=a.options,m=a.chart.renderer,d=b.overshoot,h=v(d)?d/180*Math.PI:0,k;v(b.threshold)&&(k=c.startAngleRad+c.translate(b.threshold,null,null,null,!0));this.thresholdAngleRad=t(k,c.startAngleRad);a.points.forEach(function(f){if(!f.isNull){var d=f.graphic,e=c.startAngleRad+c.translate(f.y,null,null,null,!0),k=w(t(f.options.radius,b.radius,100))*g[2]/200,n=w(t(f.options.innerRadius, +b.innerRadius,60))*g[2]/200,p=c.toColor(f.y,f),q=Math.min(c.startAngleRad,c.endAngleRad),l=Math.max(c.startAngleRad,c.endAngleRad);"none"===p&&(p=f.color||a.color||"none");"none"!==p&&(f.color=p);e=r(e,q-h,l+h);!1===b.wrap&&(e=r(e,q,l));q=Math.min(e,a.thresholdAngleRad);e=Math.max(e,a.thresholdAngleRad);e-q>2*Math.PI&&(e=q+2*Math.PI);f.shapeArgs=n={x:g[0],y:g[1],r:k,innerR:n,start:q,end:e,rounded:b.rounded};f.startR=k;d?(k=n.d,d.animate(u({fill:p},n)),k&&(n.d=k)):f.graphic=d=m.arc(n).attr({fill:p, +"sweep-flag":0}).add(a.group);a.chart.styledMode||("square"!==b.linecap&&d.attr({"stroke-linecap":"round","stroke-linejoin":"round"}),d.attr({stroke:b.borderColor||"none","stroke-width":b.borderWidth||0}));d&&d.addClass(f.getClassName(),!0)}})},animate:function(a){a||(this.startAngleRad=this.thresholdAngleRad,g.seriesTypes.pie.prototype.animate.call(this,a))}});"";return m});g(a,"masters/modules/solid-gauge.src.js",[],function(){})}); +//# sourceMappingURL=solid-gauge.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/sonification.js b/libs/highcharts-8.1.2/modules/sonification.js new file mode 100644 index 00000000..17d3c714 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/sonification.js @@ -0,0 +1,58 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Sonification module + + (c) 2012-2019 ystein Moseng + + License: www.highcharts.com/license +*/ +(function(b){"object"===typeof module&&module.exports?(b["default"]=b,module.exports=b):"function"===typeof define&&define.amd?define("highcharts/modules/sonification",["highcharts"],function(l){b(l);b.Highcharts=l;return b}):b("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(b){function l(d,b,f,n){d.hasOwnProperty(b)||(d[b]=n.apply(null,f))}b=b?b._modules:{};l(b,"modules/sonification/Instrument.js",[b["parts/Globals.js"],b["parts/Utilities.js"]],function(d,b){function f(c){this.init(c)} +var n=b.error,m=b.merge,k=b.pick,x=b.uniqueKey,p={type:"oscillator",playCallbackInterval:20,oscillator:{waveformShape:"sine"}};f.prototype.init=function(c){this.initAudioContext()?(this.options=m(p,c),this.id=this.options.id=c&&c.id||x(),c=d.audioContext,this.gainNode=c.createGain(),this.setGain(0),(this.panNode=c.createStereoPanner&&c.createStereoPanner())?(this.setPan(0),this.gainNode.connect(this.panNode),this.panNode.connect(c.destination)):this.gainNode.connect(c.destination),"oscillator"=== +this.options.type&&this.initOscillator(this.options.oscillator),this.playCallbackTimers=[]):n(29)};f.prototype.copy=function(c){return new f(m(this.options,{id:null},c))};f.prototype.initAudioContext=function(){var c=d.win.AudioContext||d.win.webkitAudioContext,a=!!d.audioContext;return c?(d.audioContext=d.audioContext||new c,!a&&d.audioContext&&"running"===d.audioContext.state&&d.audioContext.suspend(),!!(d.audioContext&&d.audioContext.createOscillator&&d.audioContext.createGain)):!1};f.prototype.initOscillator= +function(c){this.oscillator=d.audioContext.createOscillator();this.oscillator.type=c.waveformShape;this.oscillator.connect(this.gainNode);this.oscillatorStarted=!1};f.prototype.setPan=function(c){this.panNode&&this.panNode.pan.setValueAtTime(c,d.audioContext.currentTime)};f.prototype.setGain=function(c,a){this.gainNode&&(1.2b?e:a},Infinity):c};f.prototype.clearPlayCallbackTimers= +function(){this.playCallbackTimers.forEach(function(c){clearInterval(c)});this.playCallbackTimers=[]};f.prototype.setFrequency=function(c,a){a=a||{};c=this.getValidFrequency(c,a.min,a.max);"oscillator"===this.options.type&&this.oscillatorPlay(c)};f.prototype.oscillatorPlay=function(c){this.oscillatorStarted||(this.oscillator.start(),this.oscillatorStarted=!0);this.oscillator.frequency.setValueAtTime(c,d.audioContext.currentTime)};f.prototype.preparePlay=function(){this.setGain(.001);"suspended"=== +d.audioContext.state&&d.audioContext.resume();this.oscillator&&!this.oscillatorStarted&&(this.oscillator.start(),this.oscillatorStarted=!0)};f.prototype.play=function(c){var a=this,e=c.duration||0,h=function(e,h,b){var d=c.duration,f=0,k=a.options.playCallbackInterval;if("function"===typeof e){var m=setInterval(function(){f++;var c=f*k/d;if(1<=c)a[h](e(1),b),clearInterval(m);else a[h](e(c),b)},k);a.playCallbackTimers.push(m)}else a[h](e,b)};if(a.id)if("suspended"===d.audioContext.state||this.oscillator&& +!this.oscillatorStarted)a.preparePlay(),setTimeout(function(){a.play(c)},10);else{a.playCallbackTimers.length&&a.clearPlayCallbackTimers();a.cancelGainRamp();a.stopOscillatorTimeout&&(clearTimeout(a.stopOscillatorTimeout),delete a.stopOscillatorTimeout);a.stopTimeout&&(clearTimeout(a.stopTimeout),delete a.stopTimeout,a.stopCallback&&(a._play=a.play,a.play=function(){},a.stopCallback("cancelled"),a.play=a._play));var b=e=c.max||f.push(new b.sonification.TimelineEvent({time:c.max}));f.length&&a.addTimelineEvents(f)})}function z(a){return a.reduce(function(a,b){return a+u(b).reduce(function(a,b){return(b=b.series&&b.seriesOptions&& +b.seriesOptions.timeExtremes)?Math.max(a,b.max-b.min):a},0)},0)}function r(c,e){var d=Math.max(e-t(c),0),f=z(c);return c.reduce(function(c,e){e=u(e).reduce(function(c,e){e instanceof b.sonification.TimelinePath?c.push(e):e.series&&(e.seriesOptions.duration=e.seriesOptions.duration||n.virtualAxisTranslate(e.seriesOptions.timeExtremes.max-e.seriesOptions.timeExtremes.min,{min:0,max:f},{min:0,max:d}),c.push(a(e.series,e.seriesOptions)));return c},[]);c.push(e);return c},[])}"";var A=f.find,B=f.isArray, +w=f.merge,y=f.pick,u=f.splat;return{chartSonify:function(a){var c=w(this.options.sonification,a);this.sonification.timeline&&this.sonification.timeline.pause();this.sonification.duration=c.duration;var d=l(this,c.instruments,c.dataExtremes);a=h(c.order,this,function(a){return e(a,d,c)});a=q(a,c.afterSeriesWait||0);a=r(a,c.duration);a.forEach(function(a){v(a)});this.sonification.timeline=new b.sonification.Timeline({paths:a,onEnd:c.onEnd});this.sonification.timeline.play()},seriesSonify:function(c){var e= +a(this,c),d=this.chart.sonification;d.timeline&&d.timeline.pause();d.duration=c.duration;d.timeline=new b.sonification.Timeline({paths:[e]});d.timeline.play()},pause:function(a){this.sonification.timeline?this.sonification.timeline.pause(y(a,!0)):this.sonification.currentlyPlayingPoint&&this.sonification.currentlyPlayingPoint.cancelSonify(a)},resume:function(a){this.sonification.timeline&&this.sonification.timeline.play(a)},rewind:function(a){this.sonification.timeline&&this.sonification.timeline.rewind(a)}, +cancel:function(a){this.pauseSonify(a);this.resetSonifyCursor()},getCurrentPoints:function(){if(this.sonification.timeline){var a=this.sonification.timeline.getCursor();return Object.keys(a).map(function(b){return a[b].eventObject}).filter(function(a){return a instanceof g})}return[]},setCursor:function(a){var b=this.sonification.timeline;b&&u(a).forEach(function(a){b.setCursor(a.id)})},resetCursor:function(){this.sonification.timeline&&this.sonification.timeline.resetCursor()},resetCursorEnd:function(){this.sonification.timeline&& +this.sonification.timeline.resetCursorEnd()}}});l(b,"modules/sonification/Timeline.js",[b["parts/Globals.js"],b["parts/Utilities.js"],b["modules/sonification/utilities.js"]],function(b,g,f){function d(a){this.init(a||{})}function m(a){this.init(a)}function k(a){this.init(a||{})}var l=g.merge,p=g.splat,c=g.uniqueKey;d.prototype.init=function(a){this.options=a;this.time=a.time||0;this.id=this.options.id=a.id||c()};d.prototype.play=function(a){var b=this.options.eventObject,c=this.options.onEnd,d=a&& +a.onEnd,f=this.options.playOptions&&this.options.playOptions.onEnd;a=l(this.options.playOptions,a);b&&b.sonify?(a.onEnd=c||d||f?function(){var a=arguments;[c,d,f].forEach(function(b){b&&b.apply(this,a)})}:void 0,b.sonify(a)):(d&&d(),c&&c())};d.prototype.cancel=function(a){this.options.eventObject.cancelSonify(a)};m.prototype.init=function(a){this.options=a;this.id=this.options.id=a.id||c();this.cursor=0;this.eventsPlaying={};this.events=a.silentWait?[new d({time:0}),new d({time:a.silentWait})]:this.options.events; +this.sortEvents();this.updateEventIdMap();this.signalHandler=new f.SignalHandler(["playOnEnd","masterOnEnd","onStart","onEventStart","onEventEnd"]);this.signalHandler.registerSignalCallbacks(l(a,{masterOnEnd:a.onEnd}))};m.prototype.sortEvents=function(){this.events=this.events.sort(function(a,b){return a.time-b.time})};m.prototype.updateEventIdMap=function(){this.eventIdMap=this.events.reduce(function(a,b,c){a[b.id]=c;return a},{})};m.prototype.addTimelineEvents=function(a){this.events=this.events.concat(a); +this.sortEvents();this.updateEventIdMap()};m.prototype.getCursor=function(){return this.events[this.cursor]};m.prototype.setCursor=function(a){a=this.eventIdMap[a];return"undefined"!==typeof a?(this.cursor=a,!0):!1};m.prototype.play=function(a){this.pause();this.signalHandler.emitSignal("onStart");this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playEvents(1)};m.prototype.rewind=function(a){this.pause();this.signalHandler.emitSignal("onStart"); +this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playEvents(-1)};m.prototype.resetCursor=function(){this.cursor=0};m.prototype.resetCursorEnd=function(){this.cursor=this.events.length-1};m.prototype.pause=function(a){var b=this;clearTimeout(b.nextScheduledPlay);Object.keys(b.eventsPlaying).forEach(function(c){b.eventsPlaying[c]&&b.eventsPlaying[c].cancel(a)});b.eventsPlaying={}};m.prototype.playEvents=function(a){var b=this,c=b.events[this.cursor], +d=b.events[this.cursor+a],f=function(a){b.signalHandler.emitSignal("masterOnEnd",a);b.signalHandler.emitSignal("playOnEnd",a)};c.timelinePath=b;if(!1===b.signalHandler.emitSignal("onEventStart",c))f({event:c,cancelled:!0});else if(b.eventsPlaying[c.id]=c,c.play({onEnd:function(a){a={event:c,cancelled:!!a};delete b.eventsPlaying[c.id];b.signalHandler.emitSignal("onEventEnd",a);d||f(a)}}),d){var g=Math.abs(d.time-c.time);1>g?(b.cursor+=a,b.playEvents(a)):this.nextScheduledPlay=setTimeout(function(){b.cursor+= +a;b.playEvents(a)},g)}};k.prototype.init=function(a){this.options=a;this.cursor=0;this.paths=a.paths;this.pathsPlaying={};this.signalHandler=new f.SignalHandler(["playOnEnd","masterOnEnd","onPathStart","onPathEnd"]);this.signalHandler.registerSignalCallbacks(l(a,{masterOnEnd:a.onEnd}))};k.prototype.play=function(a){this.pause();this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playPaths(1)};k.prototype.rewind=function(a){this.pause(); +this.signalHandler.clearSignalCallbacks(["playOnEnd"]);this.signalHandler.registerSignalCallbacks({playOnEnd:a});this.playPaths(-1)};k.prototype.playPaths=function(a){var c=p(this.paths[this.cursor]),d=this.paths[this.cursor+a],f=this,g=this.signalHandler,k=0,m=function(b){g.emitSignal("onPathStart",b);f.pathsPlaying[b.id]=b;b[0=c.length&&(d&&!e?(f.cursor+=a,p(d).forEach(function(b){b[0< +a?"resetCursor":"resetCursorEnd"]()}),f.playPaths(a)):(g.emitSignal("playOnEnd",h),g.emitSignal("masterOnEnd",h)))})};c.forEach(function(a){a&&(a.timeline=f,setTimeout(function(){m(a)},b.sonification.fadeOutDuration))})};k.prototype.pause=function(a){var b=this;Object.keys(b.pathsPlaying).forEach(function(c){b.pathsPlaying[c]&&b.pathsPlaying[c].pause(a)});b.pathsPlaying={}};k.prototype.resetCursor=function(){this.paths.forEach(function(a){p(a).forEach(function(a){a.resetCursor()})});this.cursor=0}; +k.prototype.resetCursorEnd=function(){this.paths.forEach(function(a){p(a).forEach(function(a){a.resetCursorEnd()})});this.cursor=this.paths.length-1};k.prototype.setCursor=function(a){return this.paths.some(function(b){return p(b).some(function(b){return b.setCursor(a)})})};k.prototype.getCursor=function(){return this.getCurrentPlayingPaths().reduce(function(a,b){a[b.id]=b.getCursor();return a},{})};k.prototype.atStart=function(){return!this.getCurrentPlayingPaths().some(function(a){return a.cursor})}; +k.prototype.getCurrentPlayingPaths=function(){return p(this.paths[this.cursor])};return{TimelineEvent:d,TimelinePath:m,Timeline:k}});l(b,"modules/sonification/options.js",[],function(){return{sonification:{enabled:!1,duration:2E3,afterSeriesWait:1E3,order:"sequential",pointPlayTime:"x",instruments:[{instrument:"sineMusical",instrumentMapping:{duration:400,frequency:"y",volume:.7},instrumentOptions:{minFrequency:392,maxFrequency:1046}}]}}});l(b,"modules/sonification/sonification.js",[b["parts/Globals.js"], +b["parts/Options.js"],b["parts/Point.js"],b["parts/Utilities.js"],b["modules/sonification/Instrument.js"],b["modules/sonification/instrumentDefinitions.js"],b["modules/sonification/Earcon.js"],b["modules/sonification/pointSonify.js"],b["modules/sonification/chartSonify.js"],b["modules/sonification/utilities.js"],b["modules/sonification/Timeline.js"],b["modules/sonification/options.js"]],function(b,g,f,l,m,k,x,p,c,a,e,h){g=g.defaultOptions;var d=l.addEvent,n=l.extend,v=l.merge;b.sonification={fadeOutDuration:20, +utilities:a,Instrument:m,instruments:k,Earcon:x,TimelineEvent:e.TimelineEvent,TimelinePath:e.TimelinePath,Timeline:e.Timeline};v(!0,g,h);f.prototype.sonify=p.pointSonify;f.prototype.cancelSonify=p.pointCancelSonify;b.Series.prototype.sonify=c.seriesSonify;n(b.Chart.prototype,{sonify:c.chartSonify,pauseSonify:c.pause,resumeSonify:c.resume,rewindSonify:c.rewind,cancelSonify:c.cancel,getCurrentSonifyPoints:c.getCurrentPoints,setSonifyCursor:c.setCursor,resetSonifyCursor:c.resetCursor,resetSonifyCursorEnd:c.resetCursorEnd}); +d(b.Chart,"init",function(){this.sonification={}});d(b.Chart,"update",function(a){(a=a.options.sonification)&&v(!0,this.options.sonification,a)})});l(b,"masters/modules/sonification.src.js",[],function(){})}); +//# sourceMappingURL=sonification.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/static-scale.js b/libs/highcharts-8.1.2/modules/static-scale.js new file mode 100644 index 00000000..345ee438 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/static-scale.js @@ -0,0 +1,13 @@ +/* + Highcharts Gantt JS v8.1.2 (2020-06-16) + + StaticScale + + (c) 2016-2019 Torstein Honsi, Lars A. V. Cabrera + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/static-scale",["highcharts"],function(c){a(c);a.Highcharts=c;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function c(a,b,c,f){a.hasOwnProperty(b)||(a[b]=f.apply(null,c))}a=a?a._modules:{};c(a,"modules/static-scale.src.js",[a["parts/Globals.js"],a["parts/Utilities.js"]],function(a,b){var c=b.addEvent,f=b.defined,g= +b.isNumber,h=b.pick;b=a.Chart;c(a.Axis,"afterSetOptions",function(){var a=this.chart.options&&this.chart.options.chart;!this.horiz&&g(this.options.staticScale)&&(!a.height||a.scrollablePlotArea&&a.scrollablePlotArea.minHeight)&&(this.staticScale=this.options.staticScale)});b.prototype.adjustHeight=function(){"adjustHeight"!==this.redrawTrigger&&((this.axes||[]).forEach(function(a){var b=a.chart,c=!!b.initiatedScale&&b.options.animation,d=a.options.staticScale;if(a.staticScale&&f(a.min)){var e=h(a.brokenAxis&& +a.brokenAxis.unitLength,a.max+a.tickInterval-a.min)*d;e=Math.max(e,d);d=e-b.plotHeight;1<=Math.abs(d)&&(b.plotHeight=e,b.redrawTrigger="adjustHeight",b.setSize(void 0,b.chartHeight+d,c));a.series.forEach(function(a){(a=a.sharedClipKey&&b[a.sharedClipKey])&&a.attr({height:b.plotHeight})})}}),this.initiatedScale=!0);this.redrawTrigger=null};c(b,"render",b.prototype.adjustHeight)});c(a,"masters/modules/static-scale.src.js",[],function(){})}); +//# sourceMappingURL=static-scale.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/stock-tools.js b/libs/highcharts-8.1.2/modules/stock-tools.js new file mode 100644 index 00000000..8faee371 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/stock-tools.js @@ -0,0 +1,149 @@ +/* + Highstock JS v8.1.2 (2020-06-16) + + Advanced Highstock tools + + (c) 2010-2019 Highsoft AS + Author: Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(d){"object"===typeof module&&module.exports?(d["default"]=d,module.exports=d):"function"===typeof define&&define.amd?define("highcharts/modules/stock-tools",["highcharts","highcharts/modules/stock"],function(p){d(p);d.Highcharts=p;return d}):d("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(d){function p(d,e,l,k){d.hasOwnProperty(e)||(d[e]=k.apply(null,l))}d=d?d._modules:{};p(d,"annotations/eventEmitterMixin.js",[d["parts/Globals.js"],d["parts/Utilities.js"]],function(d,e){var l= +e.addEvent,k=e.fireEvent,n=e.inArray,c=e.objectEach,m=e.pick,C=e.removeEvent;return{addEvents:function(){var b=this,h=function(h){l(h,d.isTouchDevice?"touchstart":"mousedown",function(g){b.onMouseDown(g)})};h(this.graphic.element);(b.labels||[]).forEach(function(b){b.options.useHTML&&b.graphic.text&&h(b.graphic.text.element)});c(b.options.events,function(h,g){var a=function(a){"click"===g&&b.cancelClick||h.call(b,b.chart.pointer.normalize(a),b.target)};if(-1===n(g,b.nonDOMEvents||[]))b.graphic.on(g, +a);else l(b,g,a)});if(b.options.draggable&&(l(b,d.isTouchDevice?"touchmove":"drag",b.onDrag),!b.graphic.renderer.styledMode)){var q={cursor:{x:"ew-resize",y:"ns-resize",xy:"move"}[b.options.draggable]};b.graphic.css(q);(b.labels||[]).forEach(function(b){b.options.useHTML&&b.graphic.text&&b.graphic.text.css(q)})}b.isUpdating||k(b,"add")},removeDocEvents:function(){this.removeDrag&&(this.removeDrag=this.removeDrag());this.removeMouseUp&&(this.removeMouseUp=this.removeMouseUp())},onMouseDown:function(b){var h= +this,c=h.chart.pointer;b.preventDefault&&b.preventDefault();if(2!==b.button){b=c.normalize(b);var u=b.chartX;var g=b.chartY;h.cancelClick=!1;h.chart.hasDraggedAnnotation=!0;h.removeDrag=l(d.doc,d.isTouchDevice?"touchmove":"mousemove",function(a){h.hasDragged=!0;a=c.normalize(a);a.prevChartX=u;a.prevChartY=g;k(h,"drag",a);u=a.chartX;g=a.chartY});h.removeMouseUp=l(d.doc,d.isTouchDevice?"touchend":"mouseup",function(a){h.cancelClick=h.hasDragged;h.hasDragged=!1;h.chart.hasDraggedAnnotation=!1;k(m(h.target, +h),"afterUpdate");h.onMouseUp(a)})}},onMouseUp:function(b){var h=this.chart;b=this.target||this;var c=h.options.annotations;h=h.annotations.indexOf(b);this.removeDocEvents();c[h]=b.options},onDrag:function(b){if(this.chart.isInsidePlot(b.chartX-this.chart.plotLeft,b.chartY-this.chart.plotTop)){var h=this.mouseMoveToTranslation(b);"x"===this.options.draggable&&(h.y=0);"y"===this.options.draggable&&(h.x=0);this.points.length?this.translate(h.x,h.y):(this.shapes.forEach(function(b){b.translate(h.x,h.y)}), +this.labels.forEach(function(b){b.translate(h.x,h.y)}));this.redraw(!1)}},mouseMoveToRadians:function(b,h,c){var m=b.prevChartY-c,g=b.prevChartX-h;c=b.chartY-c;b=b.chartX-h;this.chart.inverted&&(h=g,g=m,m=h,h=b,b=c,c=h);return Math.atan2(c,b)-Math.atan2(m,g)},mouseMoveToTranslation:function(b){var h=b.chartX-b.prevChartX;b=b.chartY-b.prevChartY;if(this.chart.inverted){var c=b;b=h;h=c}return{x:h,y:b}},mouseMoveToScale:function(b,h,c){h=(b.chartX-h||1)/(b.prevChartX-h||1);b=(b.chartY-c||1)/(b.prevChartY- +c||1);this.chart.inverted&&(c=b,b=h,h=c);return{x:h,y:b}},destroy:function(){this.removeDocEvents();C(this);this.hcEvents=null}}});p(d,"annotations/ControlPoint.js",[d["parts/Utilities.js"],d["annotations/eventEmitterMixin.js"]],function(d,e){var l=d.merge,k=d.pick;return function(){function d(c,d,n,b){this.addEvents=e.addEvents;this.graphic=void 0;this.mouseMoveToRadians=e.mouseMoveToRadians;this.mouseMoveToScale=e.mouseMoveToScale;this.mouseMoveToTranslation=e.mouseMoveToTranslation;this.onDrag= +e.onDrag;this.onMouseDown=e.onMouseDown;this.onMouseUp=e.onMouseUp;this.removeDocEvents=e.removeDocEvents;this.nonDOMEvents=["drag"];this.chart=c;this.target=d;this.options=n;this.index=k(n.index,b)}d.prototype.setVisibility=function(c){this.graphic.attr("visibility",c?"visible":"hidden");this.options.visible=c};d.prototype.render=function(){var c=this.chart,d=this.options;this.graphic=c.renderer.symbol(d.symbol,0,0,d.width,d.height).add(c.controlPointsGroup).css(d.style);this.setVisibility(d.visible); +this.addEvents()};d.prototype.redraw=function(c){this.graphic[c?"animate":"attr"](this.options.positioner.call(this,this.target))};d.prototype.destroy=function(){e.destroy.call(this);this.graphic&&(this.graphic=this.graphic.destroy());this.options=this.target=this.chart=null};d.prototype.update=function(c){var d=this.chart,e=this.target,b=this.index;c=l(!0,this.options,c);this.destroy();this.constructor(d,e,c,b);this.render(d.controlPointsGroup);this.redraw()};return d}()});p(d,"annotations/MockPoint.js", +[d["parts/Globals.js"],d["parts/Utilities.js"]],function(d,e){var l=e.defined,k=e.fireEvent;return function(){function e(c,e,k){this.y=this.x=this.plotY=this.plotX=this.isInside=void 0;this.mock=!0;this.series={visible:!0,chart:c,getPlotBox:d.Series.prototype.getPlotBox};this.target=e||null;this.options=k;this.applyOptions(this.getOptions())}e.fromPoint=function(c){return new e(c.series.chart,null,{x:c.x,y:c.y,xAxis:c.series.xAxis,yAxis:c.series.yAxis})};e.pointToPixels=function(c,d){var e=c.series, +b=e.chart,h=c.plotX,m=c.plotY;b.inverted&&(c.mock?(h=c.plotY,m=c.plotX):(h=b.plotWidth-c.plotY,m=b.plotHeight-c.plotX));e&&!d&&(c=e.getPlotBox(),h+=c.translateX,m+=c.translateY);return{x:h,y:m}};e.pointToOptions=function(c){return{x:c.x,y:c.y,xAxis:c.series.xAxis,yAxis:c.series.yAxis}};e.prototype.hasDynamicOptions=function(){return"function"===typeof this.options};e.prototype.getOptions=function(){return this.hasDynamicOptions()?this.options(this.target):this.options};e.prototype.applyOptions=function(c){this.command= +c.command;this.setAxis(c,"x");this.setAxis(c,"y");this.refresh()};e.prototype.setAxis=function(c,e){e+="Axis";c=c[e];var m=this.series.chart;this.series[e]=c instanceof d.Axis?c:l(c)?m[e][c]||m.get(c):null};e.prototype.toAnchor=function(){var c=[this.plotX,this.plotY,0,0];this.series.chart.inverted&&(c[0]=this.plotY,c[1]=this.plotX);return c};e.prototype.getLabelConfig=function(){return{x:this.x,y:this.y,point:this}};e.prototype.isInsidePlot=function(){var c=this.plotX,d=this.plotY,e=this.series.xAxis, +b=this.series.yAxis,h={x:c,y:d,isInsidePlot:!0};e&&(h.isInsidePlot=l(c)&&0<=c&&c<=e.len);b&&(h.isInsidePlot=h.isInsidePlot&&l(d)&&0<=d&&d<=b.len);k(this.series.chart,"afterIsInsidePlot",h);return h.isInsidePlot};e.prototype.refresh=function(){var c=this.series,d=c.xAxis;c=c.yAxis;var e=this.getOptions();d?(this.x=e.x,this.plotX=d.toPixels(e.x,!0)):(this.x=null,this.plotX=e.x);c?(this.y=e.y,this.plotY=c.toPixels(e.y,!0)):(this.y=null,this.plotY=e.y);this.isInside=this.isInsidePlot()};e.prototype.translate= +function(c,d,e,b){this.hasDynamicOptions()||(this.plotX+=e,this.plotY+=b,this.refreshOptions())};e.prototype.scale=function(c,d,e,b){if(!this.hasDynamicOptions()){var h=this.plotY*b;this.plotX=(1-e)*c+this.plotX*e;this.plotY=(1-b)*d+h;this.refreshOptions()}};e.prototype.rotate=function(c,d,e){if(!this.hasDynamicOptions()){var b=Math.cos(e);e=Math.sin(e);var h=this.plotX,k=this.plotY;h-=c;k-=d;this.plotX=h*b-k*e+c;this.plotY=h*e+k*b+d;this.refreshOptions()}};e.prototype.refreshOptions=function(){var c= +this.series,e=c.xAxis;c=c.yAxis;this.x=this.options.x=e?this.options.x=e.toValue(this.plotX,!0):this.plotX;this.y=this.options.y=c?c.toValue(this.plotY,!0):this.plotY};return e}()});p(d,"annotations/controllable/controllableMixin.js",[d["annotations/ControlPoint.js"],d["annotations/MockPoint.js"],d["parts/Tooltip.js"],d["parts/Utilities.js"]],function(d,e,l,k){var n=k.isObject,c=k.isString,m=k.merge,z=k.splat;return{init:function(b,h,c){this.annotation=b;this.chart=b.chart;this.options=h;this.points= +[];this.controlPoints=[];this.index=c;this.linkPoints();this.addControlPoints()},attr:function(){this.graphic.attr.apply(this.graphic,arguments)},getPointsOptions:function(){var b=this.options;return b.points||b.point&&z(b.point)},attrsFromOptions:function(b){var h=this.constructor.attrsMap,c={},e,g=this.chart.styledMode;for(e in b){var a=h[e];!a||g&&-1!==["fill","stroke","stroke-width"].indexOf(a)||(c[a]=b[e])}return c},anchor:function(b){var c=b.series.getPlotBox();b=b.mock?b.toAnchor():l.prototype.getAnchor.call({chart:b.series.chart}, +b);b={x:b[0]+(this.options.x||0),y:b[1]+(this.options.y||0),height:b[2]||0,width:b[3]||0};return{relativePosition:b,absolutePosition:m(b,{x:b.x+c.translateX,y:b.y+c.translateY})}},point:function(b,h){if(b&&b.series)return b;h&&null!==h.series||(n(b)?h=new e(this.chart,this,b):c(b)?h=this.chart.get(b)||null:"function"===typeof b&&(h=b.call(h,this),h=h.series?h:new e(this.chart,this,b)));return h},linkPoints:function(){var b=this.getPointsOptions(),c=this.points,e=b&&b.length||0,d;for(d=0;df&&("right"===e?c.align="left":c.x=-f);f=a+h.width-g;f>b.plotWidth&&("left"===e?c.align="right":c.x=b.plotWidth-f);f=w+g;0>f&&("bottom"===d?c.verticalAlign="top":c.y=-f);f=w+h.height-g;f>b.plotHeight&&("top"===d?c.verticalAlign="bottom":c.y=b.plotHeight-f);return c};q.attrsMap={backgroundColor:"fill",borderColor:"stroke",borderWidth:"stroke-width",zIndex:"zIndex",borderRadius:"r",padding:"padding"};b(!0,q.prototype,d,{translatePoint:function(c,b){d.translatePoint.call(this,c, +b,0)},translate:function(c,b){var a=this.annotation.chart,f=this.annotation.userOptions,e=a.annotations.indexOf(this.annotation);e=a.options.annotations[e];a.inverted&&(a=c,c=b,b=a);this.options.x+=c;this.options.y+=b;e[this.collection][this.index].x=this.options.x;e[this.collection][this.index].y=this.options.y;f[this.collection][this.index].x=this.options.x;f[this.collection][this.index].y=this.options.y},render:function(c){var b=this.options,a=this.attrsFromOptions(b),f=b.style;this.graphic=this.annotation.chart.renderer.label("", +0,-9999,b.shape,null,null,b.useHTML,null,"annotation-label").attr(a).add(c);this.annotation.chart.styledMode||("contrast"===f.color&&(f.color=this.annotation.chart.renderer.getContrast(-1w&&(w=-f-w);wc+f?h.push(["L",b+g,c+f]):eb+a&&h.push(["L",b+a,c+f/2])}return h|| +[]};return q});p(d,"annotations/controllable/ControllableImage.js",[d["annotations/controllable/ControllableLabel.js"],d["annotations/controllable/controllableMixin.js"],d["parts/Utilities.js"]],function(d,e,l){l=l.merge;var k=function(e,c,d){this.init(e,c,d);this.collection="shapes"};k.attrsMap={width:"width",height:"height",zIndex:"zIndex"};l(!0,k.prototype,e,{type:"image",translate:e.translateShape,render:function(d){var c=this.attrsFromOptions(this.options),k=this.options;this.graphic=this.annotation.chart.renderer.image(k.src, +0,-9E9,k.width,k.height).attr(c).add(d);this.graphic.width=k.width;this.graphic.height=k.height;e.render.call(this)},redraw:function(k){var c=this.anchor(this.points[0]);if(c=d.prototype.position.call(this,c))this.graphic[k?"animate":"attr"]({x:c.x,y:c.y});else this.graphic.attr({x:0,y:-9E9});this.graphic.placed=!!c;e.redraw.call(this,k)}});return k});p(d,"annotations/annotations.src.js",[d["parts/Chart.js"],d["annotations/controllable/controllableMixin.js"],d["annotations/controllable/ControllableRect.js"], +d["annotations/controllable/ControllableCircle.js"],d["annotations/controllable/ControllablePath.js"],d["annotations/controllable/ControllableImage.js"],d["annotations/controllable/ControllableLabel.js"],d["annotations/ControlPoint.js"],d["annotations/eventEmitterMixin.js"],d["parts/Globals.js"],d["annotations/MockPoint.js"],d["parts/Pointer.js"],d["parts/Utilities.js"]],function(d,e,l,k,n,c,m,p,b,h,q,u,g){d=d.prototype;var a=g.addEvent,f=g.defined,v=g.destroyObjectProperties,r=g.erase,x=g.extend, +t=g.find,w=g.fireEvent,y=g.merge,B=g.pick,D=g.splat;g=g.wrap;var A=function(){function a(a,b){this.annotation=void 0;this.coll="annotations";this.shapesGroup=this.labelsGroup=this.labelCollector=this.group=this.graphic=this.collection=void 0;this.chart=a;this.points=[];this.controlPoints=[];this.coll="annotations";this.labels=[];this.shapes=[];this.options=y(this.defaultOptions,b);this.userOptions=b;b=this.getLabelsAndShapesOptions(this.options,b);this.options.labels=b.labels;this.options.shapes= +b.shapes;this.init(a,this.options)}a.prototype.init=function(){this.linkPoints();this.addControlPoints();this.addShapes();this.addLabels();this.setLabelCollector()};a.prototype.getLabelsAndShapesOptions=function(a,b){var c={};["labels","shapes"].forEach(function(f){a[f]&&(c[f]=D(b[f]).map(function(b,c){return y(a[f][c],b)}))});return c};a.prototype.addShapes=function(){(this.options.shapes||[]).forEach(function(a,b){a=this.initShape(a,b);y(!0,this.options.shapes[b],a.options)},this)};a.prototype.addLabels= +function(){(this.options.labels||[]).forEach(function(a,b){a=this.initLabel(a,b);y(!0,this.options.labels[b],a.options)},this)};a.prototype.addClipPaths=function(){this.setClipAxes();this.clipXAxis&&this.clipYAxis&&(this.clipRect=this.chart.renderer.clipRect(this.getClipBox()))};a.prototype.setClipAxes=function(){var a=this.chart.xAxis,b=this.chart.yAxis,c=(this.options.labels||[]).concat(this.options.shapes||[]).reduce(function(c,f){return[a[f&&f.point&&f.point.xAxis]||c[0],b[f&&f.point&&f.point.yAxis]|| +c[1]]},[]);this.clipXAxis=c[0];this.clipYAxis=c[1]};a.prototype.getClipBox=function(){if(this.clipXAxis&&this.clipYAxis)return{x:this.clipXAxis.left,y:this.clipYAxis.top,width:this.clipXAxis.width,height:this.clipYAxis.height}};a.prototype.setLabelCollector=function(){var a=this;a.labelCollector=function(){return a.labels.reduce(function(a,b){b.options.allowOverlap||a.push(b.graphic);return a},[])};a.chart.labelCollectors.push(a.labelCollector)};a.prototype.setOptions=function(a){this.options=y(this.defaultOptions, +a)};a.prototype.redraw=function(a){this.linkPoints();this.graphic||this.render();this.clipRect&&this.clipRect.animate(this.getClipBox());this.redrawItems(this.shapes,a);this.redrawItems(this.labels,a);e.redraw.call(this,a)};a.prototype.redrawItems=function(a,b){for(var c=a.length;c--;)this.redrawItem(a[c],b)};a.prototype.renderItems=function(a){for(var b=a.length;b--;)this.renderItem(a[b])};a.prototype.render=function(){var a=this.chart.renderer;this.graphic=a.g("annotation").attr({zIndex:this.options.zIndex, +visibility:this.options.visible?"visible":"hidden"}).add();this.shapesGroup=a.g("annotation-shapes").add(this.graphic).clip(this.chart.plotBoxClip);this.labelsGroup=a.g("annotation-labels").attr({translateX:0,translateY:0}).add(this.graphic);this.addClipPaths();this.clipRect&&this.graphic.clip(this.clipRect);this.renderItems(this.shapes);this.renderItems(this.labels);this.addEvents();e.render.call(this)};a.prototype.setVisibility=function(a){var b=this.options;a=B(a,!b.visible);this.graphic.attr("visibility", +a?"visible":"hidden");a||this.setControlPointsVisibility(!1);b.visible=a};a.prototype.setControlPointsVisibility=function(a){var b=function(b){b.setControlPointsVisibility(a)};e.setControlPointsVisibility.call(this,a);this.shapes.forEach(b);this.labels.forEach(b)};a.prototype.destroy=function(){var a=this.chart,c=function(a){a.destroy()};this.labels.forEach(c);this.shapes.forEach(c);this.clipYAxis=this.clipXAxis=null;r(a.labelCollectors,this.labelCollector);b.destroy.call(this);e.destroy.call(this); +v(this,a)};a.prototype.remove=function(){return this.chart.removeAnnotation(this)};a.prototype.update=function(a,b){var c=this.chart,f=this.getLabelsAndShapesOptions(this.userOptions,a),e=c.annotations.indexOf(this);a=y(!0,this.userOptions,a);a.labels=f.labels;a.shapes=f.shapes;this.destroy();this.constructor(c,a);c.options.annotations[e]=a;this.isUpdating=!0;B(b,!0)&&c.redraw();w(this,"afterUpdate");this.isUpdating=!1};a.prototype.initShape=function(b,c){b=y(this.options.shapeOptions,{controlPointOptions:this.options.controlPointOptions}, +b);c=new a.shapesMap[b.type](this,b,c);c.itemType="shape";this.shapes.push(c);return c};a.prototype.initLabel=function(a,b){a=y(this.options.labelOptions,{controlPointOptions:this.options.controlPointOptions},a);b=new m(this,a,b);b.itemType="label";this.labels.push(b);return b};a.prototype.redrawItem=function(a,b){a.linkPoints();a.shouldBeDrawn()?(a.graphic||this.renderItem(a),a.redraw(B(b,!0)&&a.graphic.placed),a.points.length&&this.adjustVisibility(a)):this.destroyItem(a)};a.prototype.adjustVisibility= +function(a){var b=!1,c=a.graphic;a.points.forEach(function(a){!1!==a.series.visible&&!1!==a.visible&&(b=!0)});b?"hidden"===c.visibility&&c.show():c.hide()};a.prototype.destroyItem=function(a){r(this[a.itemType+"s"],a);a.destroy()};a.prototype.renderItem=function(a){a.render("label"===a.itemType?this.labelsGroup:this.shapesGroup)};a.ControlPoint=p;a.MockPoint=q;a.shapesMap={rect:l,circle:k,path:n,image:c};a.types={};return a}();y(!0,A.prototype,e,b,y(A.prototype,{nonDOMEvents:["add","afterUpdate", +"drag","remove"],defaultOptions:{visible:!0,draggable:"xy",labelOptions:{align:"center",allowOverlap:!1,backgroundColor:"rgba(0, 0, 0, 0.75)",borderColor:"black",borderRadius:3,borderWidth:1,className:"",crop:!1,formatter:function(){return f(this.y)?this.y:"Annotation label"},overflow:"justify",padding:5,shadow:!1,shape:"callout",style:{fontSize:"11px",fontWeight:"normal",color:"contrast"},useHTML:!1,verticalAlign:"bottom",x:0,y:-16},shapeOptions:{stroke:"rgba(0, 0, 0, 0.75)",strokeWidth:1,fill:"rgba(0, 0, 0, 0.75)", +r:0,snap:2},controlPointOptions:{symbol:"circle",width:10,height:10,style:{stroke:"black","stroke-width":2,fill:"white"},visible:!1,events:{}},events:{},zIndex:6}}));h.extendAnnotation=function(a,b,c,f){b=b||A;y(!0,a.prototype,b.prototype,c);a.prototype.defaultOptions=y(a.prototype.defaultOptions,f||{})};x(d,{initAnnotation:function(a){a=new (A.types[a.type]||A)(this,a);this.annotations.push(a);return a},addAnnotation:function(a,b){a=this.initAnnotation(a);this.options.annotations.push(a.options); +B(b,!0)&&a.redraw();return a},removeAnnotation:function(a){var b=this.annotations,c="annotations"===a.coll?a:t(b,function(b){return b.options.id===a});c&&(w(c,"remove"),r(this.options.annotations,c.options),r(b,c),c.destroy())},drawAnnotations:function(){this.plotBoxClip.attr(this.plotBox);this.annotations.forEach(function(a){a.redraw()})}});d.collectionsWithUpdate.push("annotations");d.collectionsWithInit.annotations=[d.addAnnotation];d.callbacks.push(function(b){b.annotations=[];b.options.annotations|| +(b.options.annotations=[]);b.plotBoxClip=this.renderer.clipRect(this.plotBox);b.controlPointsGroup=b.renderer.g("control-points").attr({zIndex:99}).clip(b.plotBoxClip).add();b.options.annotations.forEach(function(a,c){a=b.initAnnotation(a);b.options.annotations[c]=a.options});b.drawAnnotations();a(b,"redraw",b.drawAnnotations);a(b,"destroy",function(){b.plotBoxClip.destroy();b.controlPointsGroup.destroy()})});g(u.prototype,"onContainerMouseDown",function(a){this.chart.hasDraggedAnnotation||a.apply(this, +Array.prototype.slice.call(arguments,1))});return h.Annotation=A});p(d,"mixins/navigation.js",[],function(){return{initUpdate:function(d){d.navigation||(d.navigation={updates:[],update:function(e,d){this.updates.forEach(function(k){k.update.call(k.context,e,d)})}})},addUpdate:function(d,e){e.navigation||this.initUpdate(e);e.navigation.updates.push({update:d,context:e})}}});p(d,"annotations/navigationBindings.js",[d["annotations/annotations.src.js"],d["mixins/navigation.js"],d["parts/Globals.js"], +d["parts/Utilities.js"]],function(d,e,l,k){function n(c){var f=c.prototype.defaultOptions.events&&c.prototype.defaultOptions.events.click;a(!0,c.prototype.defaultOptions.events,{click:function(a){var c=this,e=c.chart.navigationBindings,d=e.activeAnnotation;f&&f.call(c,a);d!==c?(e.deselectAnnotation(),e.activeAnnotation=c,c.setControlPointsVisibility(!0),b(e,"showPopup",{annotation:c,formType:"annotation-toolbar",options:e.annotationToFields(c),onSubmit:function(a){var b={};"remove"===a.actionType? +(e.activeAnnotation=!1,e.chart.removeAnnotation(c)):(e.fieldsToOptions(a.fields,b),e.deselectAnnotation(),a=b.typeOptions,"measure"===c.options.type&&(a.crosshairY.enabled=0!==a.crosshairY.strokeWidth,a.crosshairX.enabled=0!==a.crosshairX.strokeWidth),c.update(b))}})):(e.deselectAnnotation(),b(e,"closePopup"));a.activeAnnotation=!0}})}var c=k.addEvent,m=k.attr,p=k.format,b=k.fireEvent,h=k.isArray,q=k.isFunction,u=k.isNumber,g=k.isObject,a=k.merge,f=k.objectEach,v=k.pick;k=k.setOptions;var r=l.doc, +x=l.win,t=function(){function d(a,b){this.selectedButton=this.boundClassNames=void 0;this.chart=a;this.options=b;this.eventsToUnbind=[];this.container=r.getElementsByClassName(this.options.bindingsClassName||"")}d.prototype.initEvents=function(){var a=this,b=a.chart,d=a.container,e=a.options;a.boundClassNames={};f(e.bindings||{},function(b){a.boundClassNames[b.className]=b});[].forEach.call(d,function(b){a.eventsToUnbind.push(c(b,"click",function(c){var f=a.getButtonEvents(b,c);f&&a.bindingsButtonClick(f.button, +f.events,c)}))});f(e.events||{},function(b,f){q(b)&&a.eventsToUnbind.push(c(a,f,b))});a.eventsToUnbind.push(c(b.container,"click",function(c){!b.cancelClick&&b.isInsidePlot(c.chartX-b.plotLeft,c.chartY-b.plotTop)&&a.bindingsChartClick(this,c)}));a.eventsToUnbind.push(c(b.container,l.isTouchDevice?"touchmove":"mousemove",function(b){a.bindingsContainerMouseMove(this,b)}))};d.prototype.initUpdate=function(){var a=this;e.addUpdate(function(b){a.update(b)},this.chart)};d.prototype.bindingsButtonClick= +function(a,c,f){var d=this.chart;this.selectedButtonElement&&(b(this,"deselectButton",{button:this.selectedButtonElement}),this.nextEvent&&(this.currentUserDetails&&"annotations"===this.currentUserDetails.coll&&d.removeAnnotation(this.currentUserDetails),this.mouseMoveEvent=this.nextEvent=!1));this.selectedButton=c;this.selectedButtonElement=a;b(this,"selectButton",{button:a});c.init&&c.init.call(this,a,f);(c.start||c.steps)&&d.renderer.boxWrapper.addClass("highcharts-draw-mode")};d.prototype.bindingsChartClick= +function(a,c){a=this.chart;var f=this.selectedButton;a=a.renderer.boxWrapper;var d;if(d=this.activeAnnotation&&!c.activeAnnotation&&c.target.parentNode){a:{d=c.target;var e=x.Element.prototype,g=e.matches||e.msMatchesSelector||e.webkitMatchesSelector,h=null;if(e.closest)h=e.closest.call(d,".highcharts-popup");else{do{if(g.call(d,".highcharts-popup"))break a;d=d.parentElement||d.parentNode}while(null!==d&&1===d.nodeType)}d=h}d=!d}d&&(b(this,"closePopup"),this.deselectAnnotation());f&&f.start&&(this.nextEvent? +(this.nextEvent(c,this.currentUserDetails),this.steps&&(this.stepIndex++,f.steps[this.stepIndex]?this.mouseMoveEvent=this.nextEvent=f.steps[this.stepIndex]:(b(this,"deselectButton",{button:this.selectedButtonElement}),a.removeClass("highcharts-draw-mode"),f.end&&f.end.call(this,c,this.currentUserDetails),this.mouseMoveEvent=this.nextEvent=!1,this.selectedButton=null))):(this.currentUserDetails=f.start.call(this,c),f.steps?(this.stepIndex=0,this.steps=!0,this.mouseMoveEvent=this.nextEvent=f.steps[this.stepIndex]): +(b(this,"deselectButton",{button:this.selectedButtonElement}),a.removeClass("highcharts-draw-mode"),this.steps=!1,this.selectedButton=null,f.end&&f.end.call(this,c,this.currentUserDetails))))};d.prototype.bindingsContainerMouseMove=function(a,b){this.mouseMoveEvent&&this.mouseMoveEvent(b,this.currentUserDetails)};d.prototype.fieldsToOptions=function(a,b){f(a,function(a,c){var f=parseFloat(a),d=c.split("."),e=b,g=d.length-1;!u(f)||a.match(/px/g)||c.match(/format/g)||(a=f);""!==a&&"undefined"!==a&& +d.forEach(function(b,c){var f=v(d[c+1],"");g===c?e[b]=a:(e[b]||(e[b]=f.match(/\d/g)?[]:{}),e=e[b])})});return b};d.prototype.deselectAnnotation=function(){this.activeAnnotation&&(this.activeAnnotation.setControlPointsVisibility(!1),this.activeAnnotation=!1)};d.prototype.annotationToFields=function(a){function b(c,d,e,r){if(e&&-1===t.indexOf(d)&&(0<=(e.indexOf&&e.indexOf(d))||e[d]||!0===e))if(h(c))r[d]=[],c.forEach(function(a,c){g(a)?(r[d][c]={},f(a,function(a,f){b(a,f,k[d],r[d][c])})):b(a,0,k[d], +r[d])});else if(g(c)){var v={};h(r)?(r.push(v),v[d]={},v=v[d]):r[d]=v;f(c,function(a,c){b(a,c,0===d?e:k[d],v)})}else"format"===d?r[d]=[p(c,a.labels[0].points[0]).toString(),"text"]:h(r)?r.push([c,w(c)]):r[d]=[c,w(c)]}var c=a.options,e=d.annotationsEditable,k=e.nestedOptions,w=this.utils.getFieldType,r=v(c.type,c.shapes&&c.shapes[0]&&c.shapes[0].type,c.labels&&c.labels[0]&&c.labels[0].itemType,"label"),t=d.annotationsNonEditable[c.langKey]||[],x={langKey:c.langKey,type:r};f(c,function(a,d){"typeOptions"=== +d?(x[d]={},f(c[d],function(a,c){b(a,c,k,x[d],!0)})):b(a,d,e[r],x)});return x};d.prototype.getClickedClassNames=function(a,b){var c=b.target;b=[];for(var f;c&&((f=m(c,"class"))&&(b=b.concat(f.split(" ").map(function(a){return[a,c]}))),c=c.parentNode,c!==a););return b};d.prototype.getButtonEvents=function(a,b){var c=this,f;this.getClickedClassNames(a,b).forEach(function(a){c.boundClassNames[a[0]]&&!f&&(f={events:c.boundClassNames[a[0]],button:a[1]})});return f};d.prototype.update=function(b){this.options= +a(!0,this.options,b);this.removeEvents();this.initEvents()};d.prototype.removeEvents=function(){this.eventsToUnbind.forEach(function(a){a()})};d.prototype.destroy=function(){this.removeEvents()};d.annotationsEditable={nestedOptions:{labelOptions:["style","format","backgroundColor"],labels:["style"],label:["style"],style:["fontSize","color"],background:["fill","strokeWidth","stroke"],innerBackground:["fill","strokeWidth","stroke"],outerBackground:["fill","strokeWidth","stroke"],shapeOptions:["fill", +"strokeWidth","stroke"],shapes:["fill","strokeWidth","stroke"],line:["strokeWidth","stroke"],backgroundColors:[!0],connector:["fill","strokeWidth","stroke"],crosshairX:["strokeWidth","stroke"],crosshairY:["strokeWidth","stroke"]},circle:["shapes"],verticalLine:[],label:["labelOptions"],measure:["background","crosshairY","crosshairX"],fibonacci:[],tunnel:["background","line","height"],pitchfork:["innerBackground","outerBackground"],rect:["shapes"],crookedLine:[],basicAnnotation:[]};d.annotationsNonEditable= +{rectangle:["crosshairX","crosshairY","label"]};return d}();t.prototype.utils={updateRectSize:function(a,b){var c=b.chart,f=b.options.typeOptions,d=c.pointer.getCoordinates(a);a=d.xAxis[0].value-f.point.x;f=f.point.y-d.yAxis[0].value;b.update({typeOptions:{background:{width:c.inverted?f:a,height:c.inverted?a:f}}})},getFieldType:function(a){return{string:"text",number:"number","boolean":"checkbox"}[typeof a]}};l.Chart.prototype.initNavigationBindings=function(){var a=this.options;a&&a.navigation&& +a.navigation.bindings&&(this.navigationBindings=new t(this,a.navigation),this.navigationBindings.initEvents(),this.navigationBindings.initUpdate())};c(l.Chart,"load",function(){this.initNavigationBindings()});c(l.Chart,"destroy",function(){this.navigationBindings&&this.navigationBindings.destroy()});c(t,"deselectButton",function(){this.selectedButtonElement=null});c(d,"remove",function(){this.chart.navigationBindings&&this.chart.navigationBindings.deselectAnnotation()});l.Annotation&&(n(d),f(d.types, +function(a){n(a)}));k({lang:{navigation:{popup:{simpleShapes:"Simple shapes",lines:"Lines",circle:"Circle",rectangle:"Rectangle",label:"Label",shapeOptions:"Shape options",typeOptions:"Details",fill:"Fill",format:"Text",strokeWidth:"Line width",stroke:"Line color",title:"Title",name:"Name",labelOptions:"Label options",labels:"Labels",backgroundColor:"Background color",backgroundColors:"Background colors",borderColor:"Border color",borderRadius:"Border radius",borderWidth:"Border width",style:"Style", +padding:"Padding",fontSize:"Font size",color:"Color",height:"Height",shapes:"Shape options"}}},navigation:{bindingsClassName:"highcharts-bindings-container",bindings:{circleAnnotation:{className:"highcharts-circle-annotation",start:function(b){b=this.chart.pointer.getCoordinates(b);var c=this.chart.options.navigation;return this.chart.addAnnotation(a({langKey:"circle",type:"basicAnnotation",shapes:[{type:"circle",point:{xAxis:0,yAxis:0,x:b.xAxis[0].value,y:b.yAxis[0].value},r:5}]},c.annotationsOptions, +c.bindings.circleAnnotation.annotationsOptions))},steps:[function(a,b){var c=b.options.shapes[0].point,f=this.chart.xAxis[0].toPixels(c.x);c=this.chart.yAxis[0].toPixels(c.y);var d=this.chart.inverted;b.update({shapes:[{r:Math.max(Math.sqrt(Math.pow(d?c-a.chartX:f-a.chartX,2)+Math.pow(d?f-a.chartY:c-a.chartY,2)),5)}]})}]},rectangleAnnotation:{className:"highcharts-rectangle-annotation",start:function(b){var c=this.chart.pointer.getCoordinates(b);b=this.chart.options.navigation;var f=c.xAxis[0].value; +c=c.yAxis[0].value;return this.chart.addAnnotation(a({langKey:"rectangle",type:"basicAnnotation",shapes:[{type:"path",points:[{xAxis:0,yAxis:0,x:f,y:c},{xAxis:0,yAxis:0,x:f,y:c},{xAxis:0,yAxis:0,x:f,y:c},{xAxis:0,yAxis:0,x:f,y:c}]}]},b.annotationsOptions,b.bindings.rectangleAnnotation.annotationsOptions))},steps:[function(a,b){var c=b.options.shapes[0].points,f=this.chart.pointer.getCoordinates(a);a=f.xAxis[0].value;f=f.yAxis[0].value;c[1].x=a;c[2].x=a;c[2].y=f;c[3].y=f;b.update({shapes:[{points:c}]})}]}, +labelAnnotation:{className:"highcharts-label-annotation",start:function(b){b=this.chart.pointer.getCoordinates(b);var c=this.chart.options.navigation;return this.chart.addAnnotation(a({langKey:"label",type:"basicAnnotation",labelOptions:{format:"{y:.2f}"},labels:[{point:{xAxis:0,yAxis:0,x:b.xAxis[0].value,y:b.yAxis[0].value},overflow:"none",crop:!0}]},c.annotationsOptions,c.bindings.labelAnnotation.annotationsOptions))}}},events:{},annotationsOptions:{}}});return t});p(d,"modules/stock-tools-bindings.js", +[d["parts/Globals.js"],d["annotations/navigationBindings.js"],d["parts/Utilities.js"]],function(d,e,l){var k=l.correctFloat,n=l.defined,c=l.extend,m=l.fireEvent,p=l.isNumber,b=l.merge,h=l.pick,q=l.setOptions,u=l.uniqueKey,g=e.prototype.utils;g.addFlagFromForm=function(a){return function(b){var c=this,f=c.chart,d=f.stockTools,e=g.getFieldType;b=g.attractToPoint(b,f);var h={type:"flags",onSeries:b.series.id,shape:a,data:[{x:b.x,y:b.y}],point:{events:{click:function(){var a=this,b=a.options;m(c,"showPopup", +{point:a,formType:"annotation-toolbar",options:{langKey:"flags",type:"flags",title:[b.title,e(b.title)],name:[b.name,e(b.name)]},onSubmit:function(b){"remove"===b.actionType?a.remove():a.update(c.fieldsToOptions(b.fields,{}))}})}}}};d&&d.guiEnabled||f.addSeries(h);m(c,"showPopup",{formType:"flag",options:{langKey:"flags",type:"flags",title:["A",e("A")],name:["Flag A",e("Flag A")]},onSubmit:function(a){c.fieldsToOptions(a.fields,h.data[0]);f.addSeries(h)}})}};g.manageIndicators=function(a){var b=this.chart, +c={linkedTo:a.linkedTo,type:a.type},d=["ad","cmf","mfi","vbp","vwap"],e="ad atr cci cmf macd mfi roc rsi ao aroon aroonoscillator trix apo dpo ppo natr williamsr stochastic slowstochastic linearRegression linearRegressionSlope linearRegressionIntercept linearRegressionAngle".split(" ");if("edit"===a.actionType)this.fieldsToOptions(a.fields,c),(a=b.get(a.seriesId))&&a.update(c,!1);else if("remove"===a.actionType){if(a=b.get(a.seriesId)){var g=a.yAxis;a.linkedSeries&&a.linkedSeries.forEach(function(a){a.remove(!1)}); +a.remove(!1);0<=e.indexOf(a.type)&&(g.remove(!1),this.resizeYAxes())}}else c.id=u(),this.fieldsToOptions(a.fields,c),0<=e.indexOf(a.type)?(g=b.addAxis({id:u(),offset:0,opposite:!0,title:{text:""},tickPixelInterval:40,showLastLabel:!1,labels:{align:"left",y:-2}},!1,!1),c.yAxis=g.options.id,this.resizeYAxes()):c.yAxis=b.get(a.linkedTo).options.yAxis,0<=d.indexOf(a.type)&&(c.params.volumeSeriesID=b.series.filter(function(a){return"column"===a.options.type})[0].options.id),b.addSeries(c,!1);m(this,"deselectButton", +{button:this.selectedButtonElement});b.redraw()};g.updateHeight=function(a,b){b.update({typeOptions:{height:this.chart.pointer.getCoordinates(a).yAxis[0].value-b.options.typeOptions.points[1].y}})};g.attractToPoint=function(a,b){a=b.pointer.getCoordinates(a);var c=a.xAxis[0].value;a=a.yAxis[0].value;var f=Number.MAX_VALUE,d;b.series.forEach(function(a){a.points.forEach(function(a){a&&f>Math.abs(a.x-c)&&(f=Math.abs(a.x-c),d=a)})});return{x:d.x,y:d.y,below:a=a&&(b.x=d,b.y=e)});c.update({typeOptions:{points:f.points}})}};c(e.prototype,{getYAxisPositions:function(a,b,c){function f(a){return n(a)&&!p(a)&&a.match("%")}var d=0;a=a.map(function(a){var e= +f(a.options.height)?parseFloat(a.options.height)/100:a.height/b;a=f(a.options.top)?parseFloat(a.options.top)/100:k(a.top-a.chart.plotTop)/b;p(e)||(e=c/100);d=k(d+e);return{height:100*e,top:100*a}});a.allAxesHeight=d;return a},getYAxisResizers:function(a){var b=[];a.forEach(function(c,d){c=a[d+1];b[d]=c?{enabled:!0,controlledAxis:{next:[h(c.options.id,c.options.index)]}}:{enabled:!1}});return b},resizeYAxes:function(a){a=a||20;var b=this.chart,c=b.yAxis.filter(g.isNotNavigatorYAxis),d=c.length;b=this.getYAxisPositions(c, +b.plotHeight,a);var e=this.getYAxisResizers(c),h=b.allAxesHeight,l=a;1d?(b[0].height=k(b[0].height-l),b=this.recalculateYAxisPositions(b,l)):(a=100/d,b=this.recalculateYAxisPositions(b,a/(d-1),!0,-1)),b[d-1]={top:k(100-a),height:a}):(l=100*k(1-h),5>d?(b[0].height=k(b[0].height+l),b=this.recalculateYAxisPositions(b,l)):b=this.recalculateYAxisPositions(b,l/d,!0,1));b.forEach(function(a,b){c[b].update({height:a.height+"%",top:a.top+"%",resize:e[b]},!1)})},recalculateYAxisPositions:function(a,b, +c,d){a.forEach(function(f,e){e=a[e-1];f.top=e?k(e.height+e.top):0;c&&(f.height=k(f.height+d*b))});return a}});l={segment:{className:"highcharts-segment",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"segment",type:"crookedLine",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.segment.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1)]}, +arrowSegment:{className:"highcharts-arrow-segment",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"arrowSegment",type:"crookedLine",typeOptions:{line:{markerEnd:"arrow"},points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.arrowSegment.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1)]},ray:{className:"highcharts-ray",start:function(a){a= +this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"ray",type:"crookedLine",typeOptions:{type:"ray",points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.ray.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1)]},arrowRay:{className:"highcharts-arrow-ray",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"arrowRay", +type:"infinityLine",typeOptions:{type:"ray",line:{markerEnd:"arrow"},points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.arrowRay.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1)]},infinityLine:{className:"highcharts-infinity-line",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"infinityLine",type:"infinityLine",typeOptions:{type:"line", +points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.infinityLine.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1)]},arrowInfinityLine:{className:"highcharts-arrow-infinity-line",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"arrowInfinityLine",type:"infinityLine",typeOptions:{type:"line",line:{markerEnd:"arrow"},points:[{x:a.xAxis[0].value, +y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.arrowInfinityLine.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1)]},horizontalLine:{className:"highcharts-horizontal-line",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"horizontalLine",type:"infinityLine",draggable:"y",typeOptions:{type:"horizontalLine",points:[{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions, +c.bindings.horizontalLine.annotationsOptions);this.chart.addAnnotation(a)}},verticalLine:{className:"highcharts-vertical-line",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"verticalLine",type:"infinityLine",draggable:"x",typeOptions:{type:"verticalLine",points:[{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.verticalLine.annotationsOptions);this.chart.addAnnotation(a)}},crooked3:{className:"highcharts-crooked3", +start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"crooked3",type:"crookedLine",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.crooked3.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateNthPoint(2)]},crooked5:{className:"highcharts-crooked5",start:function(a){a=this.chart.pointer.getCoordinates(a); +var c=this.chart.options.navigation;a=b({langKey:"crookedLine",type:"crookedLine",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.crooked5.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateNthPoint(2),g.updateNthPoint(3),g.updateNthPoint(4)]},elliott3:{className:"highcharts-elliott3", +start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"elliott3",type:"elliottWave",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]},labelOptions:{style:{color:"#666666"}}},c.annotationsOptions,c.bindings.elliott3.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateNthPoint(2), +g.updateNthPoint(3)]},elliott5:{className:"highcharts-elliott5",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"elliott5",type:"elliottWave",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]},labelOptions:{style:{color:"#666666"}}}, +c.annotationsOptions,c.bindings.elliott5.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateNthPoint(2),g.updateNthPoint(3),g.updateNthPoint(4),g.updateNthPoint(5)]},measureX:{className:"highcharts-measure-x",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"measure",type:"measure",typeOptions:{selectType:"x",point:{x:a.xAxis[0].value,y:a.yAxis[0].value,xAxis:0,yAxis:0},crosshairX:{strokeWidth:1,stroke:"#000000"}, +crosshairY:{enabled:!1,strokeWidth:0,stroke:"#000000"},background:{width:0,height:0,strokeWidth:0,stroke:"#ffffff"}},labelOptions:{style:{color:"#666666"}}},c.annotationsOptions,c.bindings.measureX.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateRectSize]},measureY:{className:"highcharts-measure-y",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"measure",type:"measure",typeOptions:{selectType:"y",point:{x:a.xAxis[0].value, +y:a.yAxis[0].value,xAxis:0,yAxis:0},crosshairX:{enabled:!1,strokeWidth:0,stroke:"#000000"},crosshairY:{strokeWidth:1,stroke:"#000000"},background:{width:0,height:0,strokeWidth:0,stroke:"#ffffff"}},labelOptions:{style:{color:"#666666"}}},c.annotationsOptions,c.bindings.measureY.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateRectSize]},measureXY:{className:"highcharts-measure-xy",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"measure", +type:"measure",typeOptions:{selectType:"xy",point:{x:a.xAxis[0].value,y:a.yAxis[0].value,xAxis:0,yAxis:0},background:{width:0,height:0,strokeWidth:10},crosshairX:{strokeWidth:1,stroke:"#000000"},crosshairY:{strokeWidth:1,stroke:"#000000"}},labelOptions:{style:{color:"#666666"}}},c.annotationsOptions,c.bindings.measureXY.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateRectSize]},fibonacci:{className:"highcharts-fibonacci",start:function(a){a=this.chart.pointer.getCoordinates(a); +var c=this.chart.options.navigation;a=b({langKey:"fibonacci",type:"fibonacci",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]},labelOptions:{style:{color:"#666666"}}},c.annotationsOptions,c.bindings.fibonacci.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateHeight]},parallelChannel:{className:"highcharts-parallel-channel",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation; +a=b({langKey:"parallelChannel",type:"tunnel",typeOptions:{points:[{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}]}},c.annotationsOptions,c.bindings.parallelChannel.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateHeight]},pitchfork:{className:"highcharts-pitchfork",start:function(a){a=this.chart.pointer.getCoordinates(a);var c=this.chart.options.navigation;a=b({langKey:"pitchfork",type:"pitchfork",typeOptions:{points:[{x:a.xAxis[0].value, +y:a.yAxis[0].value,controlPoint:{style:{fill:"red"}}},{x:a.xAxis[0].value,y:a.yAxis[0].value},{x:a.xAxis[0].value,y:a.yAxis[0].value}],innerBackground:{fill:"rgba(100, 170, 255, 0.8)"}},shapeOptions:{strokeWidth:2}},c.annotationsOptions,c.bindings.pitchfork.annotationsOptions);return this.chart.addAnnotation(a)},steps:[g.updateNthPoint(1),g.updateNthPoint(2)]},verticalCounter:{className:"highcharts-vertical-counter",start:function(a){a=g.attractToPoint(a,this.chart);var c=this.chart.options.navigation, +d=n(this.verticalCounter)?this.verticalCounter:0;a=b({langKey:"verticalCounter",type:"verticalLine",typeOptions:{point:{x:a.x,y:a.y,xAxis:a.xAxis,yAxis:a.yAxis},label:{offset:a.below?40:-40,text:d.toString()}},labelOptions:{style:{color:"#666666",fontSize:"11px"}},shapeOptions:{stroke:"rgba(0, 0, 0, 0.75)",strokeWidth:1}},c.annotationsOptions,c.bindings.verticalCounter.annotationsOptions);a=this.chart.addAnnotation(a);a.options.events.click.call(a,{})}},verticalLabel:{className:"highcharts-vertical-label", +start:function(a){a=g.attractToPoint(a,this.chart);var c=this.chart.options.navigation;a=b({langKey:"verticalLabel",type:"verticalLine",typeOptions:{point:{x:a.x,y:a.y,xAxis:a.xAxis,yAxis:a.yAxis},label:{offset:a.below?40:-40}},labelOptions:{style:{color:"#666666",fontSize:"11px"}},shapeOptions:{stroke:"rgba(0, 0, 0, 0.75)",strokeWidth:1}},c.annotationsOptions,c.bindings.verticalLabel.annotationsOptions);a=this.chart.addAnnotation(a);a.options.events.click.call(a,{})}},verticalArrow:{className:"highcharts-vertical-arrow", +start:function(a){a=g.attractToPoint(a,this.chart);var c=this.chart.options.navigation;a=b({langKey:"verticalArrow",type:"verticalLine",typeOptions:{point:{x:a.x,y:a.y,xAxis:a.xAxis,yAxis:a.yAxis},label:{offset:a.below?40:-40,format:" "},connector:{fill:"none",stroke:a.below?"red":"green"}},shapeOptions:{stroke:"rgba(0, 0, 0, 0.75)",strokeWidth:1}},c.annotationsOptions,c.bindings.verticalArrow.annotationsOptions);a=this.chart.addAnnotation(a);a.options.events.click.call(a,{})}},flagCirclepin:{className:"highcharts-flag-circlepin", +start:g.addFlagFromForm("circlepin")},flagDiamondpin:{className:"highcharts-flag-diamondpin",start:g.addFlagFromForm("flag")},flagSquarepin:{className:"highcharts-flag-squarepin",start:g.addFlagFromForm("squarepin")},flagSimplepin:{className:"highcharts-flag-simplepin",start:g.addFlagFromForm("nopin")},zoomX:{className:"highcharts-zoom-x",init:function(a){this.chart.update({chart:{zoomType:"x"}});m(this,"deselectButton",{button:a})}},zoomY:{className:"highcharts-zoom-y",init:function(a){this.chart.update({chart:{zoomType:"y"}}); +m(this,"deselectButton",{button:a})}},zoomXY:{className:"highcharts-zoom-xy",init:function(a){this.chart.update({chart:{zoomType:"xy"}});m(this,"deselectButton",{button:a})}},seriesTypeLine:{className:"highcharts-series-type-line",init:function(a){this.chart.series[0].update({type:"line",useOhlcData:!0});m(this,"deselectButton",{button:a})}},seriesTypeOhlc:{className:"highcharts-series-type-ohlc",init:function(a){this.chart.series[0].update({type:"ohlc"});m(this,"deselectButton",{button:a})}},seriesTypeCandlestick:{className:"highcharts-series-type-candlestick", +init:function(a){this.chart.series[0].update({type:"candlestick"});m(this,"deselectButton",{button:a})}},fullScreen:{className:"highcharts-full-screen",init:function(a){this.chart.fullscreen.toggle();m(this,"deselectButton",{button:a})}},currentPriceIndicator:{className:"highcharts-current-price-indicator",init:function(a){var c=this.chart,b=c.series[0],d=b.options,e=d.lastVisiblePrice&&d.lastVisiblePrice.enabled;d=d.lastPrice&&d.lastPrice.enabled;c=c.stockTools;var g=c.getIconsURL();c&&c.guiEnabled&& +(a.firstChild.style["background-image"]=d?'url("'+g+'current-price-show.svg")':'url("'+g+'current-price-hide.svg")');b.update({lastPrice:{enabled:!d,color:"red"},lastVisiblePrice:{enabled:!e,label:{enabled:!0}}});m(this,"deselectButton",{button:a})}},indicators:{className:"highcharts-indicators",init:function(){var a=this;m(a,"showPopup",{formType:"indicators",options:{},onSubmit:function(c){a.utils.manageIndicators.call(a,c)}})}},toggleAnnotations:{className:"highcharts-toggle-annotations",init:function(a){var c= +this.chart,b=c.stockTools,d=b.getIconsURL();this.toggledAnnotations=!this.toggledAnnotations;(c.annotations||[]).forEach(function(a){a.setVisibility(!this.toggledAnnotations)},this);b&&b.guiEnabled&&(a.firstChild.style["background-image"]=this.toggledAnnotations?'url("'+d+'annotations-hidden.svg")':'url("'+d+'annotations-visible.svg")');m(this,"deselectButton",{button:a})}},saveChart:{className:"highcharts-save-chart",init:function(a){var c=this.chart,b=[],e=[],h=[],k=[];c.annotations.forEach(function(a, +c){b[c]=a.userOptions});c.series.forEach(function(a){a.is("sma")?e.push(a.userOptions):"flags"===a.type&&h.push(a.userOptions)});c.yAxis.forEach(function(a){g.isNotNavigatorYAxis(a)&&k.push(a.options)});d.win.localStorage.setItem("highcharts-chart",JSON.stringify({annotations:b,indicators:e,flags:h,yAxes:k}));m(this,"deselectButton",{button:a})}}};q({navigation:{bindings:l}});e.prototype.utils=b(g,e.prototype.utils)});p(d,"modules/stock-tools-gui.js",[d["parts/Chart.js"],d["parts/Globals.js"],d["annotations/navigationBindings.js"], +d["parts/Utilities.js"]],function(d,e,l,k){var n=k.addEvent,c=k.createElement,m=k.css,p=k.extend,b=k.fireEvent,h=k.getStyle,q=k.isArray,u=k.merge,g=k.pick;k=k.setOptions;k({lang:{stockTools:{gui:{simpleShapes:"Simple shapes",lines:"Lines",crookedLines:"Crooked lines",measure:"Measure",advanced:"Advanced",toggleAnnotations:"Toggle annotations",verticalLabels:"Vertical labels",flags:"Flags",zoomChange:"Zoom change",typeChange:"Type change",saveChart:"Save chart",indicators:"Indicators",currentPriceIndicator:"Current Price Indicators", +zoomX:"Zoom X",zoomY:"Zoom Y",zoomXY:"Zooom XY",fullScreen:"Fullscreen",typeOHLC:"OHLC",typeLine:"Line",typeCandlestick:"Candlestick",circle:"Circle",label:"Label",rectangle:"Rectangle",flagCirclepin:"Flag circle",flagDiamondpin:"Flag diamond",flagSquarepin:"Flag square",flagSimplepin:"Flag simple",measureXY:"Measure XY",measureX:"Measure X",measureY:"Measure Y",segment:"Segment",arrowSegment:"Arrow segment",ray:"Ray",arrowRay:"Arrow ray",line:"Line",arrowLine:"Arrow line",horizontalLine:"Horizontal line", +verticalLine:"Vertical line",infinityLine:"Infinity line",crooked3:"Crooked 3 line",crooked5:"Crooked 5 line",elliott3:"Elliott 3 line",elliott5:"Elliott 5 line",verticalCounter:"Vertical counter",verticalLabel:"Vertical label",verticalArrow:"Vertical arrow",fibonacci:"Fibonacci",pitchfork:"Pitchfork",parallelChannel:"Parallel channel"}},navigation:{popup:{circle:"Circle",rectangle:"Rectangle",label:"Label",segment:"Segment",arrowSegment:"Arrow segment",ray:"Ray",arrowRay:"Arrow ray",line:"Line", +arrowLine:"Arrow line",horizontalLine:"Horizontal line",verticalLine:"Vertical line",crooked3:"Crooked 3 line",crooked5:"Crooked 5 line",elliott3:"Elliott 3 line",elliott5:"Elliott 5 line",verticalCounter:"Vertical counter",verticalLabel:"Vertical label",verticalArrow:"Vertical arrow",fibonacci:"Fibonacci",pitchfork:"Pitchfork",parallelChannel:"Parallel channel",infinityLine:"Infinity line",measure:"Measure",measureXY:"Measure XY",measureX:"Measure X",measureY:"Measure Y",flags:"Flags",addButton:"add", +saveButton:"save",editButton:"edit",removeButton:"remove",series:"Series",volume:"Volume",connector:"Connector",innerBackground:"Inner background",outerBackground:"Outer background",crosshairX:"Crosshair X",crosshairY:"Crosshair Y",tunnel:"Tunnel",background:"Background"}}},stockTools:{gui:{enabled:!0,className:"highcharts-bindings-wrapper",toolbarClassName:"stocktools-toolbar",buttons:"indicators separator simpleShapes lines crookedLines measure advanced toggleAnnotations separator verticalLabels flags separator zoomChange fullScreen typeChange separator currentPriceIndicator saveChart".split(" "), +definitions:{separator:{symbol:"separator.svg"},simpleShapes:{items:["label","circle","rectangle"],circle:{symbol:"circle.svg"},rectangle:{symbol:"rectangle.svg"},label:{symbol:"label.svg"}},flags:{items:["flagCirclepin","flagDiamondpin","flagSquarepin","flagSimplepin"],flagSimplepin:{symbol:"flag-basic.svg"},flagDiamondpin:{symbol:"flag-diamond.svg"},flagSquarepin:{symbol:"flag-trapeze.svg"},flagCirclepin:{symbol:"flag-elipse.svg"}},lines:{items:"segment arrowSegment ray arrowRay line arrowLine horizontalLine verticalLine".split(" "), +segment:{symbol:"segment.svg"},arrowSegment:{symbol:"arrow-segment.svg"},ray:{symbol:"ray.svg"},arrowRay:{symbol:"arrow-ray.svg"},line:{symbol:"line.svg"},arrowLine:{symbol:"arrow-line.svg"},verticalLine:{symbol:"vertical-line.svg"},horizontalLine:{symbol:"horizontal-line.svg"}},crookedLines:{items:["elliott3","elliott5","crooked3","crooked5"],crooked3:{symbol:"crooked-3.svg"},crooked5:{symbol:"crooked-5.svg"},elliott3:{symbol:"elliott-3.svg"},elliott5:{symbol:"elliott-5.svg"}},verticalLabels:{items:["verticalCounter", +"verticalLabel","verticalArrow"],verticalCounter:{symbol:"vertical-counter.svg"},verticalLabel:{symbol:"vertical-label.svg"},verticalArrow:{symbol:"vertical-arrow.svg"}},advanced:{items:["fibonacci","pitchfork","parallelChannel"],pitchfork:{symbol:"pitchfork.svg"},fibonacci:{symbol:"fibonacci.svg"},parallelChannel:{symbol:"parallel-channel.svg"}},measure:{items:["measureXY","measureX","measureY"],measureX:{symbol:"measure-x.svg"},measureY:{symbol:"measure-y.svg"},measureXY:{symbol:"measure-xy.svg"}}, +toggleAnnotations:{symbol:"annotations-visible.svg"},currentPriceIndicator:{symbol:"current-price-show.svg"},indicators:{symbol:"indicators.svg"},zoomChange:{items:["zoomX","zoomY","zoomXY"],zoomX:{symbol:"zoom-x.svg"},zoomY:{symbol:"zoom-y.svg"},zoomXY:{symbol:"zoom-xy.svg"}},typeChange:{items:["typeOHLC","typeLine","typeCandlestick"],typeOHLC:{symbol:"series-ohlc.svg"},typeLine:{symbol:"series-line.svg"},typeCandlestick:{symbol:"series-candlestick.svg"}},fullScreen:{symbol:"fullscreen.svg"},saveChart:{symbol:"save-chart.svg"}}}}}); +n(e.Chart,"afterGetContainer",function(){this.setStockTools()});n(e.Chart,"getMargins",function(){var a=this.stockTools&&this.stockTools.listWrapper;(a=a&&(a.startWidth+h(a,"padding-left")+h(a,"padding-right")||a.offsetWidth))&&ak.offsetHeight&&f.offsetTop>p||(p=0),m(q,{top:-p+"px",left:g+3+"px"}),f.className+=" highcharts-current",l.startWidth=k.offsetWidth,l.style.width=l.startWidth+h(l,"padding-left")+q.offsetWidth+3+"px")}))};a.prototype.addSubmenuItems=function(a,c){var b= +this,d=this.submenu,e=this.lang,f=this.listWrapper,g;c.items.forEach(function(h){g=b.addButton(d,c,h,e);b.eventsToUnbind.push(n(g.mainButton,"click",function(){b.switchSymbol(this,a,!0);f.style.width=f.startWidth+"px";d.style.display="none"}))});var h=d.querySelectorAll("li > .highcharts-menu-item-btn")[0];b.switchSymbol(h,!1)};a.prototype.eraseActiveButtons=function(a,c,b){[].forEach.call(a,function(a){a!==c&&(a.classList.remove("highcharts-current"),a.classList.remove("highcharts-active"),b=a.querySelectorAll(".highcharts-submenu-wrapper"), +0this.wrapper.offsetHeight- +50?this.arrowWrapper.style.display="block":(this.toolbar.style.marginTop="0px",this.arrowWrapper.style.display="none")};a.prototype.showHideToolbar=function(){var a=this.chart,b=this.wrapper,d=this.listWrapper,e=this.submenu,g=this.visible,k;this.showhideBtn=k=c("div",{className:"highcharts-toggle-toolbar highcharts-arrow-left"},null,b);k.style["background-image"]="url("+this.iconsURL+"arrow-right.svg)";g?(b.style.height="100%",k.style.top=h(d,"padding-top")+"px",k.style.left=b.offsetWidth+h(d,"padding-left")+ +"px"):(e&&(e.style.display="none"),k.style.left="0px",this.visible=g=!1,d.classList.add("highcharts-hide"),k.classList.toggle("highcharts-arrow-right"),b.style.height=k.offsetHeight+"px");this.eventsToUnbind.push(n(k,"click",function(){a.update({stockTools:{gui:{visible:!g,placed:!0}}})}))};a.prototype.switchSymbol=function(a,b){var c=a.parentNode,d=c.classList.value;c=c.parentNode.parentNode;c.className="";d&&c.classList.add(d.trim());c.querySelectorAll(".highcharts-menu-item-btn")[0].style["background-image"]= +a.style["background-image"];b&&this.selectButton(c)};a.prototype.selectButton=function(a){0<=a.className.indexOf("highcharts-active")?a.classList.remove("highcharts-active"):a.classList.add("highcharts-active")};a.prototype.unselectAllButtons=function(a){var b=a.parentNode.querySelectorAll(".highcharts-active");[].forEach.call(b,function(b){b!==a&&b.classList.remove("highcharts-active")})};a.prototype.update=function(a){u(!0,this.chart.options.stockTools,a);this.destroy();this.chart.setStockTools(a); +this.chart.navigationBindings&&this.chart.navigationBindings.update()};a.prototype.destroy=function(){var a=this.wrapper,b=a&&a.parentNode;this.eventsToUnbind.forEach(function(a){a()});b&&b.removeChild(a);this.chart.isDirtyBox=!0;this.chart.redraw()};a.prototype.redraw=function(){this.showHideNavigatorion()};a.prototype.getIconsURL=function(){return this.chart.options.navigation.iconsURL||this.options.iconsURL||"https://code.highcharts.com/8.1.2/gfx/stock-icons/"};return a}();k.prototype.classMapping= +{circle:"highcharts-circle-annotation",rectangle:"highcharts-rectangle-annotation",label:"highcharts-label-annotation",segment:"highcharts-segment",arrowSegment:"highcharts-arrow-segment",ray:"highcharts-ray",arrowRay:"highcharts-arrow-ray",line:"highcharts-infinity-line",arrowLine:"highcharts-arrow-infinity-line",verticalLine:"highcharts-vertical-line",horizontalLine:"highcharts-horizontal-line",crooked3:"highcharts-crooked3",crooked5:"highcharts-crooked5",elliott3:"highcharts-elliott3",elliott5:"highcharts-elliott5", +pitchfork:"highcharts-pitchfork",fibonacci:"highcharts-fibonacci",parallelChannel:"highcharts-parallel-channel",measureX:"highcharts-measure-x",measureY:"highcharts-measure-y",measureXY:"highcharts-measure-xy",verticalCounter:"highcharts-vertical-counter",verticalLabel:"highcharts-vertical-label",verticalArrow:"highcharts-vertical-arrow",currentPriceIndicator:"highcharts-current-price-indicator",indicators:"highcharts-indicators",flagCirclepin:"highcharts-flag-circlepin",flagDiamondpin:"highcharts-flag-diamondpin", +flagSquarepin:"highcharts-flag-squarepin",flagSimplepin:"highcharts-flag-simplepin",zoomX:"highcharts-zoom-x",zoomY:"highcharts-zoom-y",zoomXY:"highcharts-zoom-xy",typeLine:"highcharts-series-type-line",typeOHLC:"highcharts-series-type-ohlc",typeCandlestick:"highcharts-series-type-candlestick",fullScreen:"highcharts-full-screen",toggleAnnotations:"highcharts-toggle-annotations",saveChart:"highcharts-save-chart",separator:"highcharts-separator"};p(d.prototype,{setStockTools:function(a){var b=this.options, +c=b.lang;a=u(b.stockTools&&b.stockTools.gui,a&&a.gui);this.stockTools=new e.Toolbar(a,c.stockTools&&c.stockTools.gui,this);this.stockTools.guiEnabled&&(this.isDirtyBox=!0)}});n(l,"selectButton",function(a){var b=a.button,c=this.chart.stockTools;c&&c.guiEnabled&&(c.unselectAllButtons(a.button),0<=b.parentNode.className.indexOf("highcharts-submenu-wrapper")&&(b=b.parentNode.parentNode),c.selectButton(b))});n(l,"deselectButton",function(a){a=a.button;var b=this.chart.stockTools;b&&b.guiEnabled&&(0<= +a.parentNode.className.indexOf("highcharts-submenu-wrapper")&&(a=a.parentNode.parentNode),b.selectButton(a))});e.Toolbar=k;return e.Toolbar});p(d,"masters/modules/stock-tools.src.js",[],function(){})}); +//# sourceMappingURL=stock-tools.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/stock.js b/libs/highcharts-8.1.2/modules/stock.js new file mode 100644 index 00000000..e85a3bf6 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/stock.js @@ -0,0 +1,169 @@ +/* + Highstock JS v8.1.2 (2020-06-16) + + Highstock as a plugin for Highcharts + + (c) 2010-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(l){"object"===typeof module&&module.exports?(l["default"]=l,module.exports=l):"function"===typeof define&&define.amd?define("highcharts/modules/stock",["highcharts"],function(K){l(K);l.Highcharts=K;return l}):l("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(l){function K(l,u,B,t){l.hasOwnProperty(u)||(l[u]=t.apply(null,B))}l=l?l._modules:{};K(l,"parts/NavigatorAxis.js",[l["parts/Globals.js"],l["parts/Utilities.js"]],function(l,u){var B=l.isTouchDevice,t=u.addEvent,E=u.correctFloat, +e=u.defined,x=u.isNumber,q=u.pick,c=function(){function c(c){this.axis=c}c.prototype.destroy=function(){this.axis=void 0};c.prototype.toFixedRange=function(c,v,C,z){var A=this.axis,n=A.chart;n=n&&n.fixedRange;var a=(A.pointRange||0)/2;c=q(C,A.translate(c,!0,!A.horiz));v=q(z,A.translate(v,!0,!A.horiz));A=n&&(v-c)/n;e(C)||(c=E(c+a));e(z)||(v=E(v-a));.7A&&(z?c=v-n:v=c+n);x(c)&&x(v)||(c=v=void 0);return{min:c,max:v}};return c}();return function(){function q(){}q.compose=function(q){q.keepProps.push("navigatorAxis"); +t(q,"init",function(){this.navigatorAxis||(this.navigatorAxis=new c(this))});t(q,"zoom",function(c){var q=this.chart.options,z=q.navigator,A=this.navigatorAxis,n=q.chart.pinchType,a=q.rangeSelector;q=q.chart.zoomType;this.isXAxis&&(z&&z.enabled||a&&a.enabled)&&("y"===q?c.zoomed=!1:(!B&&"xy"===q||B&&"xy"===n)&&this.options.range&&(z=A.previousZoom,e(c.newMin)?A.previousZoom=[this.min,this.max]:z&&(c.newMin=z[0],c.newMax=z[1],A.previousZoom=void 0)));"undefined"!==typeof c.zoomed&&c.preventDefault()})}; +q.AdditionsClass=c;return q}()});K(l,"parts/ScrollbarAxis.js",[l["parts/Globals.js"],l["parts/Utilities.js"]],function(l,u){var B=u.addEvent,t=u.defined,E=u.pick;return function(){function e(){}e.compose=function(e,q){B(e,"afterInit",function(){var c=this;c.options&&c.options.scrollbar&&c.options.scrollbar.enabled&&(c.options.scrollbar.vertical=!c.horiz,c.options.startOnTick=c.options.endOnTick=!1,c.scrollbar=new q(c.chart.renderer,c.options.scrollbar,c.chart),B(c.scrollbar,"changed",function(q){var e= +E(c.options&&c.options.min,c.min),v=E(c.options&&c.options.max,c.max),C=t(c.dataMin)?Math.min(e,c.min,c.dataMin):e,z=(t(c.dataMax)?Math.max(v,c.max,c.dataMax):v)-C;t(e)&&t(v)&&(c.horiz&&!c.reversed||!c.horiz&&c.reversed?(e=C+z*this.to,C+=z*this.from):(e=C+z*(1-this.from),C+=z*(1-this.to)),E(this.options.liveRedraw,l.svg&&!l.isTouchDevice&&!this.chart.isBoosting)||"mouseup"===q.DOMType||!t(q.DOMType)?c.setExtremes(C,e,!0,"mousemove"!==q.DOMType,q):this.setRange(this.from,this.to))}))});B(e,"afterRender", +function(){var c=Math.min(E(this.options.min,this.min),this.min,E(this.dataMin,this.min)),q=Math.max(E(this.options.max,this.max),this.max,E(this.dataMax,this.max)),e=this.scrollbar,l=this.axisTitleMargin+(this.titleOffset||0),C=this.chart.scrollbarsOffsets,z=this.options.margin||0;e&&(this.horiz?(this.opposite||(C[1]+=l),e.position(this.left,this.top+this.height+2+C[1]-(this.opposite?z:0),this.width,this.height),this.opposite||(C[1]+=z),l=1):(this.opposite&&(C[0]+=l),e.position(this.left+this.width+ +2+C[0]-(this.opposite?0:z),this.top,this.width,this.height),this.opposite&&(C[0]+=z),l=0),C[l]+=e.size+e.options.margin,isNaN(c)||isNaN(q)||!t(this.min)||!t(this.max)||this.min===this.max?e.setRange(0,1):(C=(this.min-c)/(q-c),c=(this.max-c)/(q-c),this.horiz&&!this.reversed||!this.horiz&&this.reversed?e.setRange(C,c):e.setRange(1-c,1-C)))});B(e,"afterGetOffset",function(){var c=this.horiz?2:1,e=this.scrollbar;e&&(this.chart.scrollbarsOffsets=[0,0],this.chart.axisOffset[c]+=e.size+e.options.margin)})}; +return e}()});K(l,"parts/Scrollbar.js",[l["parts/Axis.js"],l["parts/Globals.js"],l["parts/ScrollbarAxis.js"],l["parts/Utilities.js"],l["parts/Options.js"]],function(l,u,B,t,E){var e=t.addEvent,x=t.correctFloat,q=t.defined,c=t.destroyObjectProperties,v=t.fireEvent,J=t.merge,G=t.pick,C=t.removeEvent;t=E.defaultOptions;var z=u.hasTouch,A=u.isTouchDevice,n=u.swapXY=function(a,h){h&&a.forEach(function(g){for(var h=g.length,a,m=0;mthis.calculatedWidth?g.minWidth:0;return{chartX:(h.chartX-this.x-this.xOffset)/(this.barWidth-g),chartY:(h.chartY-this.y-this.yOffset)/(this.barWidth-g)}};a.prototype.destroy=function(){var h=this.chart.scroller;this.removeEvents();["track","scrollbarRifles","scrollbar","scrollbarGroup","group"].forEach(function(g){this[g]&&this[g].destroy&&(this[g]=this[g].destroy())},this);h&&this===h.scrollbar&&(h.scrollbar=null,c(h.scrollbarButtons))};a.prototype.drawScrollbarButton= +function(h){var g=this.renderer,a=this.scrollbarButtons,c=this.options,m=this.size;var k=g.g().add(this.group);a.push(k);k=g.rect().addClass("highcharts-scrollbar-button").add(k);this.chart.styledMode||k.attr({stroke:c.buttonBorderColor,"stroke-width":c.buttonBorderWidth,fill:c.buttonBackgroundColor});k.attr(k.crisp({x:-.5,y:-.5,width:m+1,height:m+1,r:c.buttonBorderRadius},k.strokeWidth()));k=g.path(n([["M",m/2+(h?-1:1),m/2-3],["L",m/2+(h?-1:1),m/2+3],["L",m/2+(h?2:-2),m/2]],c.vertical)).addClass("highcharts-scrollbar-arrow").add(a[h]); +this.chart.styledMode||k.attr({fill:c.buttonArrowColor})};a.prototype.init=function(h,g,I){this.scrollbarButtons=[];this.renderer=h;this.userOptions=g;this.options=J(a.defaultOptions,g);this.chart=I;this.size=G(this.options.size,this.options.height);g.enabled&&(this.render(),this.addEvents())};a.prototype.mouseDownHandler=function(h){h=this.chart.pointer.normalize(h);h=this.cursorToScrollbarPosition(h);this.chartX=h.chartX;this.chartY=h.chartY;this.initPositions=[this.from,this.to];this.grabbedCenter= +!0};a.prototype.mouseMoveHandler=function(h){var g=this.chart.pointer.normalize(h),a=this.options.vertical?"chartY":"chartX",c=this.initPositions||[];!this.grabbedCenter||h.touches&&0===h.touches[0][a]||(g=this.cursorToScrollbarPosition(g)[a],a=this[a],a=g-a,this.hasDragged=!0,this.updatePosition(c[0]+a,c[1]+a),this.hasDragged&&v(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMType:h.type,DOMEvent:h}))};a.prototype.mouseUpHandler=function(a){this.hasDragged&&v(this,"changed",{from:this.from, +to:this.to,trigger:"scrollbar",DOMType:a.type,DOMEvent:a});this.grabbedCenter=this.hasDragged=this.chartX=this.chartY=null};a.prototype.position=function(a,g,c,n){var h=this.options.vertical,k=0,d=this.rendered?"animate":"attr";this.x=a;this.y=g+this.trackBorderWidth;this.width=c;this.xOffset=this.height=n;this.yOffset=k;h?(this.width=this.yOffset=c=k=this.size,this.xOffset=g=0,this.barWidth=n-2*c,this.x=a+=this.options.margin):(this.height=this.xOffset=n=g=this.size,this.barWidth=c-2*n,this.y+=this.options.margin); +this.group[d]({translateX:a,translateY:this.y});this.track[d]({width:c,height:n});this.scrollbarButtons[1][d]({translateX:h?0:c-g,translateY:h?n-k:0})};a.prototype.removeEvents=function(){this._events.forEach(function(a){C.apply(null,a)});this._events.length=0};a.prototype.render=function(){var a=this.renderer,g=this.options,c=this.size,e=this.chart.styledMode,m;this.group=m=a.g("scrollbar").attr({zIndex:g.zIndex,translateY:-99999}).add();this.track=a.rect().addClass("highcharts-scrollbar-track").attr({x:0, +r:g.trackBorderRadius||0,height:c,width:c}).add(m);e||this.track.attr({fill:g.trackBackgroundColor,stroke:g.trackBorderColor,"stroke-width":g.trackBorderWidth});this.trackBorderWidth=this.track.strokeWidth();this.track.attr({y:-this.trackBorderWidth%2/2});this.scrollbarGroup=a.g().add(m);this.scrollbar=a.rect().addClass("highcharts-scrollbar-thumb").attr({height:c,width:c,r:g.barBorderRadius||0}).add(this.scrollbarGroup);this.scrollbarRifles=a.path(n([["M",-3,c/4],["L",-3,2*c/3],["M",0,c/4],["L", +0,2*c/3],["M",3,c/4],["L",3,2*c/3]],g.vertical)).addClass("highcharts-scrollbar-rifles").add(this.scrollbarGroup);e||(this.scrollbar.attr({fill:g.barBackgroundColor,stroke:g.barBorderColor,"stroke-width":g.barBorderWidth}),this.scrollbarRifles.attr({stroke:g.rifleColor,"stroke-width":1}));this.scrollbarStrokeWidth=this.scrollbar.strokeWidth();this.scrollbarGroup.translate(-this.scrollbarStrokeWidth%2/2,-this.scrollbarStrokeWidth%2/2);this.drawScrollbarButton(0);this.drawScrollbarButton(1)};a.prototype.setRange= +function(a,g){var h=this.options,c=h.vertical,m=h.minWidth,k=this.barWidth,d,p=!this.rendered||this.hasDragged||this.chart.navigator&&this.chart.navigator.hasDragged?"attr":"animate";if(q(k)){a=Math.max(a,0);var r=Math.ceil(k*a);this.calculatedWidth=d=x(k*Math.min(g,1)-r);d=d?this.scrollbarRifles.hide():this.scrollbarRifles.show(!0);!1===h.showFull&&(0>=a&&1<=g?this.group.hide():this.group.show());this.rendered=!0}};a.prototype.trackClick=function(a){var g=this.chart.pointer.normalize(a),h=this.to-this.from,c=this.y+this.scrollbarTop,m=this.x+this.scrollbarLeft;this.options.vertical&&g.chartY> +c||!this.options.vertical&&g.chartX>m?this.updatePosition(this.from+h,this.to+h):this.updatePosition(this.from-h,this.to-h);v(this,"changed",{from:this.from,to:this.to,trigger:"scrollbar",DOMEvent:a})};a.prototype.update=function(a){this.destroy();this.init(this.chart.renderer,J(!0,this.options,a),this.chart)};a.prototype.updatePosition=function(a,g){1a&&(g=x(g-a),a=0);this.from=a;this.to=g};a.defaultOptions={height:A?20:14,barBorderRadius:0,buttonBorderRadius:0,liveRedraw:void 0, +margin:10,minWidth:6,step:.2,zIndex:3,barBackgroundColor:"#cccccc",barBorderWidth:1,barBorderColor:"#cccccc",buttonArrowColor:"#333333",buttonBackgroundColor:"#e6e6e6",buttonBorderColor:"#cccccc",buttonBorderWidth:1,rifleColor:"#333333",trackBackgroundColor:"#f2f2f2",trackBorderColor:"#f2f2f2",trackBorderWidth:1};return a}();u.Scrollbar||(t.scrollbar=J(!0,E.defaultOptions,t.scrollbar),u.Scrollbar=E,B.compose(l,E));return u.Scrollbar});K(l,"parts/Navigator.js",[l["parts/Axis.js"],l["parts/Chart.js"], +l["parts/Color.js"],l["parts/Globals.js"],l["parts/NavigatorAxis.js"],l["parts/Options.js"],l["parts/Scrollbar.js"],l["parts/Utilities.js"]],function(l,u,B,t,E,e,x,q){B=B.parse;var c=e.defaultOptions,v=q.addEvent,J=q.clamp,G=q.correctFloat,C=q.defined,z=q.destroyObjectProperties,A=q.erase,n=q.extend,a=q.find,h=q.isArray,g=q.isNumber,I=q.merge,D=q.pick,m=q.removeEvent,k=q.splat,d=t.hasTouch,p=t.isTouchDevice;e=t.Series;var r=function(b){for(var f=[],y=1;ye&&(this.grabbedLeft?b=r.toPixels(y-e-k,!0):this.grabbedRight&& +(d=r.toPixels(f+e+k,!0)));this.zoomedMax=J(Math.max(b,d),0,h);this.zoomedMin=J(this.fixedWidth?this.zoomedMax-this.fixedWidth:Math.min(b,d),0,h);this.range=this.zoomedMax-this.zoomedMin;h=Math.round(this.zoomedMax);b=Math.round(this.zoomedMin);w&&(this.navigatorGroup.attr({visibility:"visible"}),c=c&&!this.hasDragged?"animate":"attr",this.drawMasks(b,h,m,c),this.drawOutline(b,h,m,c),this.navigatorOptions.handles.enabled&&(this.drawHandle(b,0,m,c),this.drawHandle(h,1,m,c)));this.scrollbar&&(m?(m=this.top- +p,F=this.left-p+(w||!F.opposite?0:(F.titleOffset||0)+F.axisTitleMargin),p=H+2*p):(m=this.top+(w?this.height:-p),F=this.left-p),this.scrollbar.position(F,m,a,p),this.scrollbar.setRange(this.zoomedMin/(H||1),this.zoomedMax/(H||1)));this.rendered=!0}};b.prototype.addMouseEvents=function(){var f=this,b=f.chart,a=b.container,p=[],g,r;f.mouseMoveHandler=g=function(b){f.onMouseMove(b)};f.mouseUpHandler=r=function(b){f.onMouseUp(b)};p=f.getPartsEvents("mousedown");p.push(v(b.renderTo,"mousemove",g),v(a.ownerDocument, +"mouseup",r));d&&(p.push(v(b.renderTo,"touchmove",g),v(a.ownerDocument,"touchend",r)),p.concat(f.getPartsEvents("touchstart")));f.eventsToUnbind=p;f.series&&f.series[0]&&p.push(v(f.series[0].xAxis,"foundExtremes",function(){b.navigator.modifyNavigatorAxisExtremes()}))};b.prototype.getPartsEvents=function(f){var b=this,a=[];["shades","handles"].forEach(function(y){b[y].forEach(function(d,p){a.push(v(d.element,f,function(f){b[y+"Mousedown"](f,p)}))})});return a};b.prototype.shadesMousedown=function(f, +b){f=this.chart.pointer.normalize(f);var y=this.chart,a=this.xAxis,d=this.zoomedMin,p=this.left,g=this.size,r=this.range,k=f.chartX;y.inverted&&(k=f.chartY,p=this.top);if(1===b)this.grabbedCenter=k,this.fixedWidth=r,this.dragOffset=k-d;else{f=k-p-r/2;if(0===b)f=Math.max(0,f);else if(2===b&&f+r>=g)if(f=g-r,this.reversedExtremes){f-=r;var w=this.getUnionExtremes().dataMin}else var h=this.getUnionExtremes().dataMax;f!==d&&(this.fixedWidth=r,b=a.navigatorAxis.toFixedRange(f,f+r,w,h),C(b.min)&&y.xAxis[0].setExtremes(Math.min(b.min, +b.max),Math.max(b.min,b.max),!0,null,{trigger:"navigator"}))}};b.prototype.handlesMousedown=function(f,b){this.chart.pointer.normalize(f);f=this.chart;var y=f.xAxis[0],a=this.reversedExtremes;0===b?(this.grabbedLeft=!0,this.otherHandlePos=this.zoomedMax,this.fixedExtreme=a?y.min:y.max):(this.grabbedRight=!0,this.otherHandlePos=this.zoomedMin,this.fixedExtreme=a?y.max:y.min);f.fixedRange=null};b.prototype.onMouseMove=function(f){var b=this,a=b.chart,d=b.left,g=b.navigatorSize,r=b.range,k=b.dragOffset, +w=a.inverted;f.touches&&0===f.touches[0].pageX||(f=a.pointer.normalize(f),a=f.chartX,w&&(d=b.top,a=f.chartY),b.grabbedLeft?(b.hasDragged=!0,b.render(0,0,a-d,b.otherHandlePos)):b.grabbedRight?(b.hasDragged=!0,b.render(0,0,b.otherHandlePos,a-d)):b.grabbedCenter&&(b.hasDragged=!0,ag+k-r&&(a=g+k-r),b.render(0,0,a-k,a-k+r)),b.hasDragged&&b.scrollbar&&D(b.scrollbar.options.liveRedraw,t.svg&&!p&&!this.chart.isBoosting)&&(f.DOMType=f.type,setTimeout(function(){b.onMouseUp(f)},0)))};b.prototype.onMouseUp= +function(f){var b=this.chart,a=this.xAxis,d=this.scrollbar,p=f.DOMEvent||f,g=b.inverted,r=this.rendered&&!this.hasDragged?"animate":"attr",k=Math.round(this.zoomedMax),w=Math.round(this.zoomedMin);if(this.hasDragged&&(!d||!d.hasDragged)||"scrollbar"===f.trigger){d=this.getUnionExtremes();if(this.zoomedMin===this.otherHandlePos)var h=this.fixedExtreme;else if(this.zoomedMax===this.otherHandlePos)var c=this.fixedExtreme;this.zoomedMax===this.size&&(c=this.reversedExtremes?d.dataMin:d.dataMax);0===this.zoomedMin&& +(h=this.reversedExtremes?d.dataMax:d.dataMin);a=a.navigatorAxis.toFixedRange(this.zoomedMin,this.zoomedMax,h,c);C(a.min)&&b.xAxis[0].setExtremes(Math.min(a.min,a.max),Math.max(a.min,a.max),!0,this.hasDragged?!1:null,{trigger:"navigator",triggerOp:"navigator-drag",DOMEvent:p})}"mousemove"!==f.DOMType&&"touchmove"!==f.DOMType&&(this.grabbedLeft=this.grabbedRight=this.grabbedCenter=this.fixedWidth=this.fixedExtreme=this.otherHandlePos=this.hasDragged=this.dragOffset=null);this.navigatorEnabled&&(this.shades&& +this.drawMasks(w,k,g,r),this.outline&&this.drawOutline(w,k,g,r),this.navigatorOptions.handles.enabled&&Object.keys(this.handles).length===this.handles.length&&(this.drawHandle(w,0,g,r),this.drawHandle(k,1,g,r)))};b.prototype.removeEvents=function(){this.eventsToUnbind&&(this.eventsToUnbind.forEach(function(f){f()}),this.eventsToUnbind=void 0);this.removeBaseSeriesEvents()};b.prototype.removeBaseSeriesEvents=function(){var f=this.baseSeries||[];this.navigatorEnabled&&f[0]&&(!1!==this.navigatorOptions.adaptToUpdatedData&& +f.forEach(function(f){m(f,"updatedData",this.updatedDataHandler)},this),f[0].xAxis&&m(f[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes))};b.prototype.init=function(f){var b=f.options,a=b.navigator,d=a.enabled,p=b.scrollbar,g=p.enabled;b=d?a.height:0;var k=g?p.height:0;this.handles=[];this.shades=[];this.chart=f;this.setBaseSeries();this.height=b;this.scrollbarHeight=k;this.scrollbarEnabled=g;this.navigatorEnabled=d;this.navigatorOptions=a;this.scrollbarOptions=p;this.outlineHeight=b+k;this.opposite= +D(a.opposite,!(d||!f.inverted));var w=this;d=w.baseSeries;p=f.xAxis.length;g=f.yAxis.length;var h=d&&d[0]&&d[0].xAxis||f.xAxis[0]||{options:{}};f.isDirtyBox=!0;w.navigatorEnabled?(w.xAxis=new l(f,I({breaks:h.options.breaks,ordinal:h.options.ordinal},a.xAxis,{id:"navigator-x-axis",yAxis:"navigator-y-axis",isX:!0,type:"datetime",index:p,isInternal:!0,offset:0,keepOrdinalPadding:!0,startOnTick:!1,endOnTick:!1,minPadding:0,maxPadding:0,zoomEnabled:!1},f.inverted?{offsets:[k,0,-k,0],width:b}:{offsets:[0, +-k,0,k],height:b})),w.yAxis=new l(f,I(a.yAxis,{id:"navigator-y-axis",alignTicks:!1,offset:0,index:g,isInternal:!0,zoomEnabled:!1},f.inverted?{width:b}:{height:b})),d||a.series.data?w.updateNavigatorSeries(!1):0===f.series.length&&(w.unbindRedraw=v(f,"beforeRedraw",function(){0y.indexOf(a)?(a&&(m(a,"updatedData",f.updatedDataHandler),delete a.navigatorSeries),b.chart&&b.destroy(), +!1):!0});y&&y.length&&y.forEach(function(b){var k=b.navigatorSeries,m=n({color:b.color,visible:b.visible},h(r)?c.navigator.series:r);k&&!1===f.navigatorOptions.adaptToUpdatedData||(e.name="Navigator "+y.length,p=b.options||{},w=p.navigatorOptions||{},g=I(p,e,m,w),g.pointRange=D(m.pointRange,w.pointRange,c.plotOptions[g.type||"line"].pointRange),m=w.data||m.data,f.hasNavigatorData=f.hasNavigatorData||!!m,g.data=m||p.data&&p.data.slice(0),k&&k.options?k.update(g,a):(b.navigatorSeries=d.initSeries(g), +b.navigatorSeries.baseSeries=b,z.push(b.navigatorSeries)))});if(r.data&&(!y||!y.length)||h(r))f.hasNavigatorData=!1,r=k(r),r.forEach(function(b,a){e.name="Navigator "+(z.length+1);g=I(c.navigator.series,{color:d.series[a]&&!d.series[a].options.isInternal&&d.series[a].color||d.options.colors[a]||d.options.colors[0]},e,b);g.data=b.data;g.data&&(f.hasNavigatorData=!0,z.push(d.initSeries(g)))});b&&this.addBaseSeriesEvents()};b.prototype.addBaseSeriesEvents=function(){var b=this,a=b.baseSeries||[];a[0]&& +a[0].xAxis&&v(a[0].xAxis,"foundExtremes",this.modifyBaseAxisExtremes);a.forEach(function(f){v(f,"show",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!0,!1)});v(f,"hide",function(){this.navigatorSeries&&this.navigatorSeries.setVisible(!1,!1)});!1!==this.navigatorOptions.adaptToUpdatedData&&f.xAxis&&v(f,"updatedData",this.updatedDataHandler);v(f,"remove",function(){this.navigatorSeries&&(A(b.series,this.navigatorSeries),C(this.navigatorSeries.options)&&this.navigatorSeries.remove(!1), +delete this.navigatorSeries)})},this)};b.prototype.getBaseSeriesMin=function(b){return this.baseSeries.reduce(function(b,f){return Math.min(b,f.xData?f.xData[0]:b)},b)};b.prototype.modifyNavigatorAxisExtremes=function(){var b=this.xAxis,a;"undefined"!==typeof b.getExtremes&&(!(a=this.getUnionExtremes(!0))||a.dataMin===b.min&&a.dataMax===b.max||(b.min=a.dataMin,b.max=a.dataMax))};b.prototype.modifyBaseAxisExtremes=function(){var b=this.chart.navigator,a=this.getExtremes(),d=a.dataMin,p=a.dataMax;a= +a.max-a.min;var r=b.stickToMin,w=b.stickToMax,k=D(this.options.overscroll,0),h=b.series&&b.series[0],c=!!this.setExtremes;if(!this.eventArgs||"rangeSelectorButton"!==this.eventArgs.trigger){if(r){var m=d;var n=m+a}w&&(n=p+k,r||(m=Math.max(d,n-a,b.getBaseSeriesMin(h&&h.xData?h.xData[0]:-Number.MAX_VALUE))));c&&(r||w)&&g(m)&&(this.min=this.userMin=m,this.max=this.userMax=n)}b.stickToMin=b.stickToMax=null};b.prototype.updatedDataHandler=function(){var b=this.chart.navigator,a=this.navigatorSeries,d= +b.getBaseSeriesMin(this.xData[0]);b.stickToMax=b.reversedExtremes?0===Math.round(b.zoomedMin):Math.round(b.zoomedMax)>=Math.round(b.size);b.stickToMin=g(this.xAxis.min)&&this.xAxis.min<=d&&(!this.chart.fixedRange||!b.stickToMax);a&&!b.hasNavigatorData&&(a.options.pointStart=this.xData[0],a.setData(this.options.data,!1,null,!1))};b.prototype.addChartEvents=function(){this.eventsToUnbind||(this.eventsToUnbind=[]);this.eventsToUnbind.push(v(this.chart,"redraw",function(){var b=this.navigator,a=b&&(b.baseSeries&& +b.baseSeries[0]&&b.baseSeries[0].xAxis||this.xAxis[0]);a&&b.render(a.min,a.max)}),v(this.chart,"getMargins",function(){var b=this.navigator,a=b.opposite?"plotTop":"marginBottom";this.inverted&&(a=b.opposite?"marginRight":"plotLeft");this[a]=(this[a]||0)+(b.navigatorEnabled||!this.inverted?b.outlineHeight:0)+b.navigatorOptions.margin}))};b.prototype.destroy=function(){this.removeEvents();this.xAxis&&(A(this.chart.xAxis,this.xAxis),A(this.chart.axes,this.xAxis));this.yAxis&&(A(this.chart.yAxis,this.yAxis), +A(this.chart.axes,this.yAxis));(this.series||[]).forEach(function(b){b.destroy&&b.destroy()});"series xAxis yAxis shades outline scrollbarTrack scrollbarRifles scrollbarGroup scrollbar navigatorGroup rendered".split(" ").forEach(function(b){this[b]&&this[b].destroy&&this[b].destroy();this[b]=null},this);[this.handles].forEach(function(b){z(b)},this)};return b}();t.Navigator||(t.Navigator=w,E.compose(l),v(u,"beforeShowResetZoom",function(){var b=this.options,f=b.navigator,a=b.rangeSelector;if((f&& +f.enabled||a&&a.enabled)&&(!p&&"x"===b.chart.zoomType||p&&"x"===b.chart.pinchType))return!1}),v(u,"beforeRender",function(){var b=this.options;if(b.navigator.enabled||b.scrollbar.enabled)this.scroller=this.navigator=new w(this)}),v(u,"afterSetChartSize",function(){var b=this.legend,f=this.navigator;if(f){var a=b&&b.options;var d=f.xAxis;var p=f.yAxis;var g=f.scrollbarHeight;this.inverted?(f.left=f.opposite?this.chartWidth-g-f.height:this.spacing[3]+g,f.top=this.plotTop+g):(f.left=this.plotLeft+g, +f.top=f.navigatorOptions.top||this.chartHeight-f.height-g-this.spacing[2]-(this.rangeSelector&&this.extraBottomMargin?this.rangeSelector.getHeight():0)-(a&&"bottom"===a.verticalAlign&&"proximate"!==a.layout&&a.enabled&&!a.floating?b.legendHeight+D(a.margin,10):0)-(this.titleOffset?this.titleOffset[2]:0));d&&p&&(this.inverted?d.options.left=p.options.left=f.left:d.options.top=p.options.top=f.top,d.setAxisSize(),p.setAxisSize())}}),v(u,"update",function(b){var f=b.options.navigator||{},a=b.options.scrollbar|| +{};this.navigator||this.scroller||!f.enabled&&!a.enabled||(I(!0,this.options.navigator,f),I(!0,this.options.scrollbar,a),delete b.options.navigator,delete b.options.scrollbar)}),v(u,"afterUpdate",function(b){this.navigator||this.scroller||!this.options.navigator.enabled&&!this.options.scrollbar.enabled||(this.scroller=this.navigator=new w(this),D(b.redraw,!0)&&this.redraw(b.animation))}),v(u,"afterAddSeries",function(){this.navigator&&this.navigator.setBaseSeries(null,!1)}),v(e,"afterUpdate",function(){this.chart.navigator&& +!this.options.isInternal&&this.chart.navigator.setBaseSeries(null,!1)}),u.prototype.callbacks.push(function(b){var f=b.navigator;f&&b.xAxis[0]&&(b=b.xAxis[0].getExtremes(),f.render(b.min,b.max))}));t.Navigator=w;return t.Navigator});K(l,"parts/OrdinalAxis.js",[l["parts/Axis.js"],l["parts/Globals.js"],l["parts/Utilities.js"]],function(l,u,B){var t=B.addEvent,E=B.css,e=B.defined,x=B.pick,q=B.timeUnits;B=u.Chart;var c=u.Series,v;(function(c){var l=function(){function c(c){this.index={};this.axis=c}c.prototype.beforeSetTickPositions= +function(){var c=this.axis,e=c.ordinal,n=[],a,h=!1,g=c.getExtremes(),q=g.min,D=g.max,m,k=c.isXAxis&&!!c.options.breaks;g=c.options.ordinal;var d=Number.MAX_VALUE,p=c.chart.options.chart.ignoreHiddenSeries,r;if(g||k){c.series.forEach(function(b,g){a=[];if(!(p&&!1===b.visible||!1===b.takeOrdinalPosition&&!k)&&(n=n.concat(b.processedXData),w=n.length,n.sort(function(b,f){return b-f}),d=Math.min(d,x(b.closestPointRange,d)),w)){for(g=0;gb||D-n[n.length-1]>b)&&(h=!0)}else c.options.overscroll&&(2===w?d=n[1]-n[0]:1===w?(d=c.options.overscroll,n=[n[0],n[0]+d]):d=e.overscrollPointsRange);h?(c.options.overscroll&&(e.overscrollPointsRange=d,n=n.concat(e.getOverscrollPositions())),e.positions=n,b=c.ordinal2lin(Math.max(q,n[0]),!0),m=Math.max(c.ordinal2lin(Math.min(D,n[n.length- +1]),!0),1),e.slope=D=(D-q)/(m-b),e.offset=q-b*D):(e.overscrollPointsRange=x(c.closestPointRange,e.overscrollPointsRange),e.positions=c.ordinal.slope=e.offset=void 0)}c.isOrdinal=g&&h;e.groupIntervalFactor=null};c.prototype.getExtendedPositions=function(){var c=this,e=c.axis,n=e.constructor.prototype,a=e.chart,h=e.series[0].currentDataGrouping,g=c.index,q=h?h.count+h.unitName:"raw",D=e.options.overscroll,m=e.getExtremes(),k;g||(g=c.index={});if(!g[q]){var d={series:[],chart:a,getExtremes:function(){return{min:m.dataMin, +max:m.dataMax+D}},options:{ordinal:!0},ordinal:{},ordinal2lin:n.ordinal2lin,val2lin:n.val2lin};d.ordinal.axis=d;e.series.forEach(function(g){k={xAxis:d,xData:g.xData.slice(),chart:a,destroyGroupedData:u.noop,getProcessedData:u.Series.prototype.getProcessedData};k.xData=k.xData.concat(c.getOverscrollPositions());k.options={dataGrouping:h?{enabled:!0,forced:!0,approximation:"open",units:[[h.unitName,[h.count]]]}:{enabled:!1}};g.processData.apply(k);d.series.push(k)});e.ordinal.beforeSetTickPositions.apply({axis:d}); +g[q]=d.ordinal.positions}return g[q]};c.prototype.getGroupIntervalFactor=function(c,e,n){n=n.processedXData;var a=n.length,h=[];var g=this.groupIntervalFactor;if(!g){for(g=0;gl.length||"undefined"===typeof c)return h.getTimeTicks.apply(h,arguments);var I=l.length;for(p=0;pg;l[p]5*m||z){if(l[p]>f){for(r=h.getTimeTicks(a,l[d],l[p],n);r.length&&r[0]<=f;)r.shift();r.length&&(f=r[r.length-1]);F.push(b.length);b=b.concat(r)}d=p+1}if(z)break}r=r.info;if(k&&r.unitRange<=q.hour){p=b.length-1;for(d=1;dg?F-1:F;for(D=void 0;d--;)p=v[d],F=Math.abs(D-p),D&&F<.8*y&&(null===h||F<.8*h)?(w[b[d]]&&!w[b[d+1]]?(F=d+1,D=p):F=d,b.splice(F,1)):D=p}return b};n.lin2val=function(a,c){var g=this.ordinal,h=g.positions;if(h){var e=g.slope,m=g.offset;g=h.length-1;if(c)if(0>a)a=h[0];else if(a>g)a=h[g];else{g=Math.floor(a);var k=a- +g}else for(;g--;)if(c=e*g+m,a>=c){e=e*(g+1)+m;k=(a-c)/(e-c);break}return"undefined"!==typeof k&&"undefined"!==typeof h[g]?h[g]+(k?k*(h[g+1]-h[g]):0):a}return a};n.val2lin=function(a,c){var g=this.ordinal,h=g.positions;if(h){var e=h.length,m;for(m=e;m--;)if(h[m]===a){var k=m;break}for(m=e-1;m--;)if(a>h[m]||0===m){a=(a-h[m])/(h[m+1]-h[m]);k=m+a;break}c=c?k:g.slope*(k||0)+g.offset}else c=a;return c};n.ordinal2lin=n.val2lin;t(l,"afterInit",function(){this.ordinal||(this.ordinal=new c.Composition(this))}); +t(l,"foundExtremes",function(){this.isXAxis&&e(this.options.overscroll)&&this.max===this.dataMax&&(!this.chart.mouseIsDown||this.isInternal)&&(!this.eventArgs||this.eventArgs&&"navigator"!==this.eventArgs.trigger)&&(this.max+=this.options.overscroll,!this.isInternal&&e(this.userMin)&&(this.min+=this.options.overscroll))});t(l,"afterSetScale",function(){this.horiz&&!this.isDirty&&(this.isDirty=this.isOrdinal&&this.chart.navigator&&!this.chart.navigator.adaptToUpdatedData)});t(l,"initialAxisTranslation", +function(){this.ordinal&&(this.ordinal.beforeSetTickPositions(),this.tickInterval=this.ordinal.postProcessTickInterval(this.tickInterval))});t(z,"pan",function(a){var c=this.xAxis[0],g=c.options.overscroll,e=a.originalEvent.chartX,n=this.options.chart&&this.options.chart.panning,m=!1;if(n&&"y"!==n.type&&c.options.ordinal&&c.series.length){var k=this.mouseDownX,d=c.getExtremes(),p=d.dataMax,r=d.min,w=d.max,b=this.hoverPoints,f=c.closestPointRange||c.ordinal&&c.ordinal.overscrollPointsRange;k=(k-e)/ +(c.translationSlope*(c.ordinal.slope||f));var y={ordinal:{positions:c.ordinal.getExtendedPositions()}};f=c.lin2val;var q=c.val2lin;if(!y.ordinal.positions)m=!0;else if(1k){b=y;var F=c.ordinal.positions?c:y}else b=c.ordinal.positions?c:y,F=y;y=F.ordinal.positions;p>y[y.length-1]&&y.push(p);this.fixedRange=w-r;k=c.navigatorAxis.toFixedRange(null,null,f.apply(b,[q.apply(b,[r,!0])+k,!0]),f.apply(F,[q.apply(F,[w,!0])+k,!0]));k.min>=Math.min(d.dataMin, +r)&&k.max<=Math.max(p,w)+g&&c.setExtremes(k.min,k.max,!0,!1,{trigger:"pan"});this.mouseDownX=e;E(this.container,{cursor:"move"})}}else m=!0;m||n&&/y/.test(n.type)?g&&(c.max=c.dataMax+g):a.preventDefault()});t(v,"updatedData",function(){var a=this.xAxis;a&&a.options.ordinal&&delete a.ordinal.index})}})(v||(v={}));v.compose(l,B,c);return v});K(l,"modules/broken-axis.src.js",[l["parts/Axis.js"],l["parts/Globals.js"],l["parts/Utilities.js"],l["parts/Stacking.js"]],function(l,u,B,t){var E=B.addEvent,e= +B.find,x=B.fireEvent,q=B.isArray,c=B.isNumber,v=B.pick,J=u.Series,G=function(){function c(c){this.hasBreaks=!1;this.axis=c}c.isInBreak=function(c,e){var n=c.repeat||Infinity,a=c.from,h=c.to-c.from;e=e>=a?(e-a)%n:n-(a-e)%n;return c.inclusive?e<=h:e=e)break;else a.to=e)break;else if(c.isInBreak(h,e)){n-=e-h.from;break}}return n};c.prototype.findBreakAt=function(c,q){return e(q,function(e){return e.fromd;)f-=k;for(;fb.to||m>b.from&&db.from&&db.from&&d>b.to&&da&&c>=this.basePointRange&&(a=c),m=void 0;e--;)m&&!1!==m.visible||(m=g[e+1]),c=g[e],!1!==m.visible&&!1!==c.visible&&(m.x- +c.x>a&&(m=(c.x+m.x)/2,g.splice(e+1,0,{isNull:!0,x:m}),n.stacking&&this.options.stacking&&(m=n.stacking.stacks[this.stackKey][m]=new t(n,n.options.stackLabels,!1,m,this.stack),m.total=0)),m=c);return this.getGraphPath(g)};E(e,"init",function(){this.brokenAxis||(this.brokenAxis=new G(this))});E(e,"afterInit",function(){"undefined"!==typeof this.brokenAxis&&this.brokenAxis.setBreaks(this.options.breaks,!1)});E(e,"afterSetTickPositions",function(){var a=this.brokenAxis;if(a&&a.hasBreaks){var c=this.tickPositions, +g=this.tickPositions.info,e=[],n;for(n=0;n=d[0]);x++);for(x;x<=y;x++){for(;"undefined"!==typeof d[v+1]&&b[x]>=d[v+1]||x===y;){var u=d[v];f.dataGroupInfo={start:f.cropStart+t,length:m[0].length};var z=c.apply(f,m);f.pointClass&&!J(f.dataGroupInfo.options)&&(f.dataGroupInfo.options= +n(f.pointClass.prototype.optionsToObject.call({series:f},f.options.data[f.cropStart+t])),H.forEach(function(b){delete f.dataGroupInfo.options[b]}));"undefined"!==typeof z&&(e.push(u),w.push(z),k.push(f.dataGroupInfo));t=x;for(u=0;uthis.chart.plotSizeX/c||f&&r.forced)&&(g=!0);return g?c:0};h.prototype.setDataGrouping=function(b,d){var f;d=a(d,!0);b||(b={forced:!1,units:null});if(this instanceof h)for(f=this.series.length;f--;)this.series[f].update({dataGrouping:b},!1);else this.chart.options.series.forEach(function(a){a.dataGrouping=b},!1);this.ordinal&&(this.ordinal.slope=void 0);d&&this.chart.redraw()};u.dataGrouping=D;"";return D});K(l, +"parts/OHLCSeries.js",[l["parts/Globals.js"],l["parts/Point.js"],l["parts/Utilities.js"]],function(l,u,B){B=B.seriesType;var t=l.seriesTypes;B("ohlc","column",{lineWidth:1,tooltip:{pointFormat:'\u25cf {series.name}
    Open: {point.open}
    High: {point.high}
    Low: {point.low}
    Close: {point.close}
    '},threshold:null,states:{hover:{lineWidth:3}},stickyTracking:!0},{directTouch:!1,pointArrayMap:["open","high","low","close"],toYData:function(l){return[l.open, +l.high,l.low,l.close]},pointValKey:"close",pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth"},init:function(){t.column.prototype.init.apply(this,arguments);this.options.stacking=void 0},pointAttribs:function(l,e){e=t.column.prototype.pointAttribs.call(this,l,e);var x=this.options;delete e.fill;!l.options.color&&x.upColor&&l.openv)break}}}c.forEach(function(d,p){d.plotX+=g;if("undefined"===typeof d.plotY||n)0<=d.plotX&&d.plotX<=a.len?n?(d.plotY=a.translate(d.x,0,1,0,1),d.plotX=B(d.y)?h.translate(d.y,0,0,0,1):0):d.plotY=(a.opposite?0:e.yAxis.len)+a.offset:d.shapeArgs={};if((u=c[p-1])&&u.plotX===d.plotX){"undefined"=== +typeof u.stackIndex&&(u.stackIndex=0);var r=u.stackIndex+1}d.stackIndex=r});this.onSeries=G}}});K(l,"parts/FlagsSeries.js",[l["parts/Globals.js"],l["parts/SVGElement.js"],l["parts/SVGRenderer.js"],l["parts/Utilities.js"],l["mixins/on-series.js"]],function(l,u,B,t,E){function e(a){h[a+"pin"]=function(c,g,e,k,d){var p=d&&d.anchorX;d=d&&d.anchorY;"circle"===a&&k>e&&(c-=Math.round((k-e)/2),e=k);var r=h[a](c,g,e,k);if(p&&d){var w=p;"circle"===a?w=c+e/2:(c=r[0],e=r[1],"M"===c[0]&&"L"===e[0]&&(w=(c[1]+e[1])/ +2));r.push(["M",w,g>d?g:g+k],["L",p,d]);r=r.concat(h.circle(p-1,d-1,2,2))}return r}}var x=t.addEvent,q=t.defined,c=t.isNumber,v=t.merge,J=t.objectEach,G=t.seriesType,C=t.wrap;t=l.noop;var z=l.Renderer,A=l.Series,n=l.TrackerMixin,a=l.VMLRenderer,h=B.prototype.symbols;G("flags","column",{pointRange:0,allowOverlapX:!1,shape:"flag",stackDistance:12,textAlign:"center",tooltip:{pointFormat:"{point.text}
    "},threshold:null,y:-30,fillColor:"#ffffff",lineWidth:1,states:{hover:{lineColor:"#000000",fillColor:"#ccd6eb"}}, +style:{fontSize:"11px",fontWeight:"bold"}},{sorted:!1,noSharedTooltip:!0,allowDG:!1,takeOrdinalPosition:!1,trackerGroups:["markerGroup"],forceCrop:!0,init:A.prototype.init,pointAttribs:function(a,c){var g=this.options,e=a&&a.color||this.color,k=g.lineColor,d=a&&a.lineWidth;a=a&&a.fillColor||g.fillColor;c&&(a=g.states[c].fillColor,k=g.states[c].lineColor,d=g.states[c].lineWidth);return{fill:a||e,stroke:k||e,"stroke-width":d||g.lineWidth||0}},translate:E.translate,getPlotBox:E.getPlotBox,drawPoints:function(){var a= +this.points,c=this.chart,e=c.renderer,h=c.inverted,k=this.options,d=k.y,p,r=this.yAxis,w={},b=[];for(p=a.length;p--;){var f=a[p];var n=(h?f.plotY:f.plotX)>this.xAxis.len;var H=f.plotX;var F=f.stackIndex;var t=f.options.shape||k.shape;var x=f.plotY;"undefined"!==typeof x&&(x=f.plotY+d-("undefined"!==typeof F&&F*k.stackDistance));f.anchorX=F?void 0:f.plotX;var z=F?void 0:f.plotY;var A="flag"!==t;F=f.graphic;"undefined"!==typeof x&&0<=H&&!n?(F||(F=f.graphic=e.label("",null,null,t,null,null,k.useHTML), +c.styledMode||F.attr(this.pointAttribs(f)).css(v(k.style,f.style)),F.attr({align:A?"center":"left",width:k.width,height:k.height,"text-align":k.textAlign}).addClass("highcharts-point").add(this.markerGroup),f.graphic.div&&(f.graphic.div.point=f),c.styledMode||F.shadow(k.shadow),F.isNew=!0),0h-k,F=d=864E5*{month:28,year:365}[p]*r-y&&g-36E5<=864E5*{month:31,year:366}[p]*r+y?d=!0:"ytd"===p?(d=m-l+y===g,z=!c):"all"===p&&(d=e.max-e.min>=h-k,H=!c&&v&&d);p=!u&&(x||F||H||b);r=c&&d||d&&!v&&!z||c&&a.frozenStates;p?n=3:r&&(v=!0,n=2);w.state!== +n&&(w.setState(n),0===n&&q===f&&a.setSelected(null))})};e.prototype.computeButtonRange=function(a){var c=a.type,d=a.count||1,e={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5};if(e[c])a._range=e[c]*d;else if("month"===c||"year"===c)a._range=864E5*{month:30,year:365}[c]*d;a._offsetMin=g(a.offsetMin,0);a._offsetMax=g(a.offsetMax,0);a._range+=a._offsetMax-a._offsetMin};e.prototype.setInputValue=function(a,c){var d=this.chart.options.rangeSelector,e=this.chart.time,b=this[a+"Input"]; +J(c)&&(b.previousValue=b.HCTime,b.HCTime=c);b.value=e.dateFormat(d.inputEditDateFormat||"%Y-%m-%d",b.HCTime);this[a+"DateBox"].attr({text:e.dateFormat(d.inputDateFormat||"%b %e, %Y",b.HCTime)})};e.prototype.showInput=function(a){var c=this.inputGroup,d=this[a+"DateBox"];v(this[a+"Input"],{left:c.translateX+d.x+"px",top:c.translateY+"px",width:d.width-2+"px",height:d.height-2+"px",border:"2px solid silver"})};e.prototype.hideInput=function(a){v(this[a+"Input"],{border:0,width:"1px",height:"1px"}); +this.setInputValue(a)};e.prototype.drawInput=function(d){function e(){var b=m.value,a=(h.inputDateParser||Date.parse)(b),c=k.xAxis[0],f=k.scroller&&k.scroller.xAxis?k.scroller.xAxis:c,d=f.dataMin;f=f.dataMax;a!==m.previousValue&&(m.previousValue=a,n(a)||(a=b.split("-"),a=Date.UTC(I(a[0]),I(a[1])-1,I(a[2]))),n(a)&&(k.time.useUTC||(a+=6E4*(new Date).getTimezoneOffset()),q?a>g.maxInput.HCTime?a=void 0:af&&(a=f),"undefined"!==typeof a&&c.setExtremes(q?a:c.min, +q?c.max:a,void 0,void 0,{trigger:"rangeSelectorInput"})))}var g=this,k=g.chart,b=k.renderer.style||{},f=k.renderer,h=k.options.rangeSelector,l=g.div,q="min"===d,m,u,t=this.inputGroup;this[d+"Label"]=u=f.label(x.lang[q?"rangeSelectorFrom":"rangeSelectorTo"],this.inputGroup.offset).addClass("highcharts-range-label").attr({padding:2}).add(t);t.offset+=u.width+5;this[d+"DateBox"]=f=f.label("",t.offset).addClass("highcharts-range-input").attr({padding:2,width:h.inputBoxWidth||90,height:h.inputBoxHeight|| +17,"text-align":"center"}).on("click",function(){g.showInput(d);g[d+"Input"].focus()});k.styledMode||f.attr({stroke:h.inputBoxBorderColor||"#cccccc","stroke-width":1});f.add(t);t.offset+=f.width+(q?10:0);this[d+"Input"]=m=c("input",{name:d,className:"highcharts-range-selector",type:"text"},{top:k.plotTop+"px"},l);k.styledMode||(u.css(a(b,h.labelStyle)),f.css(a({color:"#333333"},b,h.inputStyle)),v(m,z({position:"absolute",border:0,width:"1px",height:"1px",padding:0,textAlign:"center",fontSize:b.fontSize, +fontFamily:b.fontFamily,top:"-9999em"},h.inputStyle)));m.onfocus=function(){g.showInput(d)};m.onblur=function(){m===B.doc.activeElement&&e();g.hideInput(d);m.blur()};m.onchange=e;m.onkeypress=function(a){13===a.keyCode&&e()}};e.prototype.getPosition=function(){var a=this.chart,c=a.options.rangeSelector;a="top"===c.verticalAlign?a.plotTop-a.axisOffset[0]:0;return{buttonTop:a+c.buttonPosition.y,inputTop:a+c.inputPosition.y-10}};e.prototype.getYTDExtremes=function(a,c,e){var d=this.chart.time,b=new d.Date(a), +f=d.get("FullYear",b);e=e?d.Date.UTC(f,0,1):+new d.Date(f,0,1);c=Math.max(c||0,e);b=b.getTime();return{max:Math.min(a||b,b),min:c}};e.prototype.render=function(a,e){var d=this,p=d.chart,b=p.renderer,f=p.container,k=p.options,h=k.exporting&&!1!==k.exporting.enabled&&k.navigation&&k.navigation.buttonOptions,l=x.lang,n=d.div,m=k.rangeSelector,q=g(k.chart.style&&k.chart.style.zIndex,0)+1;k=m.floating;var v=d.buttons;n=d.inputGroup;var u=m.buttonTheme,t=m.buttonPosition,z=m.inputPosition,A=m.inputEnabled, +B=u&&u.states,C=p.plotLeft,D=d.buttonGroup,E,G=d.options.verticalAlign,I=p.legend,J=I&&I.options,K=t.y,N=z.y,O=p.hasLoaded,P=O?"animate":"attr",M=0,L=0;if(!1!==m.enabled){d.rendered||(d.group=E=b.g("range-selector-group").attr({zIndex:7}).add(),d.buttonGroup=D=b.g("range-selector-buttons").add(E),d.zoomText=b.text(l.rangeSelectorZoom,0,15).add(D),p.styledMode||(d.zoomText.css(m.labelStyle),u["stroke-width"]=g(u["stroke-width"],0)),d.buttonOptions.forEach(function(a,c){v[c]=b.button(a.text,0,0,function(b){var f= +a.events&&a.events.click,e;f&&(e=f.call(a,b));!1!==e&&d.clickButton(c);d.isActive=!0},u,B&&B.hover,B&&B.select,B&&B.disabled).attr({"text-align":"center"}).add(D)}),!1!==A&&(d.div=n=c("div",null,{position:"relative",height:0,zIndex:q}),f.parentNode.insertBefore(n,f),d.inputGroup=n=b.g("input-group").add(E),n.offset=0,d.drawInput("min"),d.drawInput("max")));d.zoomText[P]({x:g(C+t.x,C)});var Q=g(C+t.x,C)+d.zoomText.getBBox().width+5;d.buttonOptions.forEach(function(a,b){v[b][P]({x:Q});Q+=v[b].width+ +g(m.buttonSpacing,5)});C=p.plotLeft-p.spacing[3];d.updateButtonStates();h&&this.titleCollision(p)&&"top"===G&&"right"===t.align&&t.y+D.getBBox().height-12<(h.y||0)+h.height&&(M=-40);f=t.x-p.spacing[3];"right"===t.align?f+=M-C:"center"===t.align&&(f-=C/2);D.align({y:t.y,width:D.getBBox().width,align:t.align,x:f},!0,p.spacingBox);d.group.placed=O;d.buttonGroup.placed=O;!1!==A&&(M=h&&this.titleCollision(p)&&"top"===G&&"right"===z.align&&z.y-n.getBBox().height-12<(h.y||0)+h.height+p.spacing[0]?-40:0, +"left"===z.align?f=C:"right"===z.align&&(f=-Math.max(p.axisOffset[1],-M)),n.align({y:z.y,width:n.getBBox().width,align:z.align,x:z.x+f-2},!0,p.spacingBox),h=n.alignAttr.translateX+n.alignOptions.x-M+n.getBBox().x+2,f=n.alignOptions.width,l=D.alignAttr.translateX+D.getBBox().x,C=D.getBBox().width+20,(z.align===t.align||l+C>h&&h+f>l&&K=-M?0:-M),translateY:n.alignAttr.translateY+D.getBBox().height+10}),d.setInputValue("min", +a),d.setInputValue("max",e),d.inputGroup.placed=O);d.group.align({verticalAlign:G},!0,p.spacingBox);a=d.group.getBBox().height+20;e=d.group.alignAttr.translateY;"bottom"===G&&(I=J&&"bottom"===J.verticalAlign&&J.enabled&&!J.floating?I.legendHeight+g(J.margin,10):0,a=a+I-20,L=e-a-(k?0:m.y)-(p.titleOffset?p.titleOffset[2]:0)-10);if("top"===G)k&&(L=0),p.titleOffset&&p.titleOffset[0]&&(L=p.titleOffset[0]),L+=p.margin[0]-p.spacing[0]||0;else if("middle"===G)if(N===K)L=0>N?e+void 0:e;else if(N||K)L=0>N|| +0>K?L-Math.min(N,K):e-a+NaN;d.group.translate(m.x,m.y+Math.floor(L));!1!==A&&(d.minInput.style.marginTop=d.group.translateY+"px",d.maxInput.style.marginTop=d.group.translateY+"px");d.rendered=!0}};e.prototype.getHeight=function(){var a=this.options,c=this.group,e=a.y,g=a.buttonPosition.y,b=a.inputPosition.y;if(a.height)return a.height;a=c?c.getBBox(!0).height+13+e:0;c=Math.min(b,g);if(0>b&&0>g||0p+e.width)&&(B?l=q=v(l,p,p+e.width):b=!0);b||u.push(["M",l,m],["L",q,t])}):E.forEach(function(a){var b;l=a.pos;q=l+a.len;m=t=Math.round(k+e.height-G);"pass"!==B&&(mk+e.height)&&(B?m=t=v(m,k,k+e.height):b=!0);b||u.push(["M",l,m],["L",q,t])}));c.path=0C?"hidden":"visible"});d=m.getBBox();if(n(m.y))if(h){if(u&&!k||!u&&k)p=m.y-d.height}else p=m.y-d.height/2;h?(c=l-d.x,e=l+this.width-d.x):(c="left"===this.labelAlign?l:0,e="right"===this.labelAlign?l+this.width:b.chartWidth);m.translateX=e&&(x=-(m.translateX+d.width-e));m.attr({x:f+x,y:p,anchorX:h?f:this.opposite?0:b.chartWidth,anchorY:h? +this.opposite?b.chartHeight:0:p+d.height/2})}});D.init=function(){m.apply(this,arguments);this.setCompare(this.options.compare)};D.setCompare=function(a){this.modifyValue="value"===a||"percent"===a?function(c,d){var b=this.compareValue;return"undefined"!==typeof c&&"undefined"!==typeof b?(c="value"===a?c-b:c/b*100-(100===this.options.compareBase?0:100),d&&(d.change=c),c):0}:null;this.userOptions.compare=a;this.chart.hasRendered&&(this.isDirty=!0)};D.processData=function(a){var c,d=-1,b=!0===this.options.compareStart? +0:1;k.apply(this,arguments);if(this.xAxis&&this.processedYData){var f=this.processedXData;var e=this.processedYData;var g=e.length;this.pointArrayMap&&(d=this.pointArrayMap.indexOf(this.options.pointValKey||this.pointValKey||"y"));for(c=0;c=this.xAxis.min&&0!==h){this.compareValue=h;break}}}};x(e,"afterGetExtremes",function(a){a=a.dataExtremes;if(this.modifyValue&&a){var d=[this.modifyValue(a.dataMin),this.modifyValue(a.dataMax)];a.dataMin=c(d); +a.dataMax=q(d)}});l.prototype.setCompare=function(a,c){this.isXAxis||(this.series.forEach(function(c){c.setCompare(a)}),g(c,!0)&&this.chart.redraw())};t.prototype.tooltipFormatter=function(a){var c=this.series.chart.numberFormatter;a=a.replace("{point.change}",(0{point.name}: {point.value}
    "},ignoreHiddenPoint:!0,layoutAlgorithm:"sliceAndDice",layoutStartingDirection:"vertical",alternateStartingDirection:!1,levelIsConstant:!0,drillUpButton:{position:{align:"right",x:-10,y:10}},traverseUpButton:{position:{align:"right", +x:-10,y:10}},borderColor:"#e6e6e6",borderWidth:1,colorKey:"colorValue",opacity:.15,states:{hover:{borderColor:"#999999",brightness:L.heatmap?0:.1,halo:!1,opacity:.75,shadow:!1}}},{pointArrayMap:["value"],directTouch:!0,optionalAxis:"colorAxis",getSymbol:l,parallelArrays:["x","y","value","colorValue"],colorKey:"colorValue",trackerGroups:["group","dataLabelsGroup"],getListOfParents:function(a,c){a=N(a)?a:[];var e=N(c)?c:[];c=a.reduce(function(a,c,e){c=D(c.parent,"");"undefined"===typeof a[c]&&(a[c]= +[]);a[c].push(e);return a},{"":[]});f(c,function(a,c,b){""!==c&&-1===e.indexOf(c)&&(a.forEach(function(a){b[""].push(a)}),delete b[c])});return c},getTree:function(){var a=this.data.map(function(a){return a.id});a=this.getListOfParents(this.data,a);this.nodeMap=[];return this.buildNode("",-1,0,a,null)},hasData:function(){return!!this.processedXData.length},init:function(a,c){var e=d.colorMapSeriesMixin;e&&(this.colorAttribs=e.colorAttribs);this.eventsToUnbind.push(B(this,"setOptions",function(a){a= +a.userOptions;t(a.allowDrillToNode)&&!t(a.allowTraversingTree)&&(a.allowTraversingTree=a.allowDrillToNode,delete a.allowDrillToNode);t(a.drillUpButton)&&!t(a.traverseUpButton)&&(a.traverseUpButton=a.drillUpButton,delete a.drillUpButton)}));J.prototype.init.call(this,a,c);delete this.opacity;this.options.allowTraversingTree&&this.eventsToUnbind.push(B(this,"click",this.onClickDrillToNode))},buildNode:function(a,c,e,b,h){var f=this,p=[],d=f.points[c],k=0,K;(b[a]||[]).forEach(function(c){K=f.buildNode(f.points[c].id, +c,e+1,b,a);k=Math.max(K.height+1,k);p.push(K)});c={id:a,i:c,children:p,height:k,level:e,parent:h,visible:!1};f.nodeMap[c.id]=c;d&&(d.node=c);return c},setTreeValues:function(a){var c=this,e=c.options,b=c.nodeMap[c.rootNode];e="boolean"===typeof e.levelIsConstant?e.levelIsConstant:!0;var h=0,f=[],z=c.points[a.i];a.children.forEach(function(a){a=c.setTreeValues(a);f.push(a);a.ignore||(h+=a.val)});R(f,function(a,c){return a.sortIndex-c.sortIndex});var d=D(z&&z.options.value,h);z&&(z.value=d);C(a,{children:f, +childrenTotal:h,ignore:!(D(z&&z.visible,!0)&&0n.lP.lR&&h.algorithmCalcPoints(a,!1,n,f,d);k===y&&h.algorithmCalcPoints(a,!0,n,f,d);k+=1});return f},algorithmFill:function(a,c,e){var f=[],h,b=c.direction,d=c.x,k=c.y, +y=c.width,n=c.height,r,l,g,m;e.forEach(function(e){h=e.val/c.val*c.height*c.width;r=d;l=k;0===b?(m=n,g=h/m,y-=g,d+=g):(g=y,m=h/g,n-=m,k+=m);f.push({x:r,y:l,width:g,height:m});a&&(b=1-b)});return f},strip:function(a,c){return this.algorithmLowAspectRatio(!1,a,c)},squarified:function(a,c){return this.algorithmLowAspectRatio(!0,a,c)},sliceAndDice:function(a,c){return this.algorithmFill(!0,a,c)},stripes:function(a,c){return this.algorithmFill(!1,a,c)},translate:function(){var a=this,c=a.options,e=y(a); +J.prototype.translate.call(a);var f=a.tree=a.getTree();var b=a.nodeMap[e];a.renderTraverseUpButton(e);a.mapOptionsToLevel=P({from:b.level+1,levels:c.levels,to:f.height,defaults:{levelIsConstant:a.options.levelIsConstant,colorByPoint:c.colorByPoint}});""===e||b&&b.children.length||(a.setRootNode("",!1),e=a.rootNode,b=a.nodeMap[e]);k(a.nodeMap[a.rootNode],function(c){var e=!1,b=c.parent;c.visible=!0;if(b||""===b)e=a.nodeMap[b];return e});k(a.nodeMap[a.rootNode].children,function(a){var c=!1;a.forEach(function(a){a.visible= +!0;a.children.length&&(c=(c||[]).concat(a.children))});return c});a.setTreeValues(f);a.axisRatio=a.xAxis.len/a.yAxis.len;a.nodeMap[""].pointValues=e={x:0,y:0,width:100,height:100};a.nodeMap[""].values=e=G(e,{width:e.width*a.axisRatio,direction:"vertical"===c.layoutStartingDirection?0:1,val:f.val});a.calculateChildrenAreas(f,e);a.colorAxis||c.colorByPoint||a.setColorRecursive(a.tree);c.allowTraversingTree&&(c=b.pointValues,a.xAxis.setExtremes(c.x,c.x+c.width,!1),a.yAxis.setExtremes(c.y,c.y+c.height, +!1),a.xAxis.setScale(),a.yAxis.setScale());a.setPointValues()},drawDataLabels:function(){var a=this,c=a.mapOptionsToLevel,e,b;a.points.filter(function(a){return a.node.visible}).forEach(function(f){b=c[f.node.level];e={style:{}};f.node.isLeaf||(e.enabled=!1);b&&b.dataLabels&&(e=G(e,b.dataLabels),a._hasPointLabels=!0);f.shapeArgs&&(e.style.width=f.shapeArgs.width,f.dataLabel&&f.dataLabel.css({width:f.shapeArgs.width+"px"}));f.dlOptions=G(e,f.options.dataLabels)});J.prototype.drawDataLabels.call(this)}, +alignDataLabel:function(a,c,e){var f=e.style;!t(f.textOverflow)&&c.text&&c.getBBox().width>c.text.textWidth&&c.css({textOverflow:"ellipsis",width:f.width+="px"});L.column.prototype.alignDataLabel.apply(this,arguments);a.dataLabel&&a.dataLabel.attr({zIndex:(a.node.zIndex||0)+1})},pointAttribs:function(a,c){var e=Q(this.mapOptionsToLevel)?this.mapOptionsToLevel:{},f=a&&e[a.node.level]||{};e=this.options;var b=c&&e.states[c]||{},d=a&&a.getClassName()||"";a={stroke:a&&a.borderColor||f.borderColor||b.borderColor|| +e.borderColor,"stroke-width":D(a&&a.borderWidth,f.borderWidth,b.borderWidth,e.borderWidth),dashstyle:a&&a.borderDashStyle||f.borderDashStyle||b.borderDashStyle||e.borderDashStyle,fill:a&&a.color||this.color};-1!==d.indexOf("highcharts-above-level")?(a.fill="none",a["stroke-width"]=0):-1!==d.indexOf("highcharts-internal-node-interactive")?(c=D(b.opacity,e.opacity),a.fill=u(a.fill).setOpacity(c).get(),a.cursor="pointer"):-1!==d.indexOf("highcharts-internal-node")?a.fill="none":c&&(a.fill=u(a.fill).brighten(b.brightness).get()); +return a},drawPoints:function(){var a=this,c=a.chart,e=c.renderer,f=c.styledMode,b=a.options,d=f?{}:b.shadow,k=b.borderRadius,y=c.pointCountf.innerArcLength&&f.outerArcLength>h.radius){var H=0;f.dataLabelPath&&"circular"===A&&(k.textPath={enabled:!0})}else 11.5*h.radius?"circular"===A?k.textPath={enabled:!0,attributes:{dy:5}}:A="parallel":(f.dataLabel&&f.dataLabel.textPathWrapper&&"circular"===A&&(k.textPath={enabled:!1}),A="perpendicular");"auto"!==A&&"circular"!==A&&(H=h.end-(h.end-h.start)/2);k.style.width="parallel"===A?Math.min(2.5*h.radius,(f.outerArcLength+f.innerArcLength)/ +2):h.radius;"perpendicular"===A&&f.series.chart.renderer.fontMetrics(k.style.fontSize).h>f.outerArcLength&&(k.style.width=1);k.style.width=Math.max(k.style.width-2*(k.padding||0),1);H=H*G%180;"parallel"===A&&(H-=90);90H&&(H+=180);k.rotation=H}k.textPath&&(0===f.shapeExisting.innerR&&k.textPath.enabled?(k.rotation=0,k.textPath.enabled=!1,k.style.width=Math.max(2*f.shapeExisting.r-2*(k.padding||0),1)):f.dlOptions&&f.dlOptions.textPath&&!f.dlOptions.textPath.enabled&&"circular"===A&&(k.textPath.enabled= +!0),k.textPath.enabled&&(k.rotation=0,k.style.width=Math.max((f.outerArcLength+f.innerArcLength)/2-2*(k.padding||0),1)));0===k.rotation&&(k.rotation=.001);f.dlOptions=k;if(!E&&v){E=!0;var V=F}f.draw({animatableAttribs:K,attribs:l(y,!w.styledMode&&b.pointAttribs(f,f.selected&&"select")),onComplete:V,group:m,renderer:D,shapeType:"arc",shapeArgs:n})});v&&E?(b.hasRendered=!1,b.options.dataLabels.defer=!0,M.prototype.drawDataLabels.call(b),b.hasRendered=!0,x&&F()):M.prototype.drawDataLabels.call(b)},pointAttribs:E.column.prototype.pointAttribs, +layoutAlgorithm:function(b,d,g){var f=b.start,a=b.end-f,c=b.val,e=b.x,k=b.y,h=g&&B(g.levelSize)&&u(g.levelSize.value)?g.levelSize.value:0,m=b.r,l=m+h,y=g&&u(g.slicedOffset)?g.slicedOffset:0;return(d||[]).reduce(function(b,d){var g=1/c*d.val*a,n=f+g/2,p=e+Math.cos(n)*y;n=k+Math.sin(n)*y;d={x:d.sliced?p:e,y:d.sliced?n:k,innerR:m,r:l,radius:h,start:f,end:f+g};b.push(d);f=d.end;return b},[])},setShapeArgs:function(b,d,g){var f=[],a=g[b.level+1];b=b.children.filter(function(a){return a.visible});f=this.layoutAlgorithm(d, +b,a);b.forEach(function(a,b){b=f[b];var c=b.start+(b.end-b.start)/2,d=b.innerR+(b.r-b.innerR)/2,e=b.end-b.start;d=0===b.innerR&&6.28a.val?a.childrenTotal:a.val:a.childrenTotal;this.points[a.i]&&(this.points[a.i].innerArcLength=e*b.innerR,this.points[a.i].outerArcLength=e*b.r);a.shapeArgs=t(b,{plotX:d.x,plotY:d.y+4*Math.abs(Math.cos(c))});a.values=t(b,{val:k});a.children.length&&this.setShapeArgs(a,a.values,g)}, +this)},translate:function(){var b=this,d=b.options,l=b.center=N.call(b),n=b.startAndEndRadians=v(d.startAngle,d.endAngle),a=l[3]/2,c=l[2]/2-a,e=R(b),p=b.nodeMap,h=p&&p[e],t={};b.shapeRoot=h&&h.shapeArgs;M.prototype.translate.call(b);var w=b.tree=b.getTree();b.renderTraverseUpButton(e);p=b.nodeMap;h=p[e];var u=g(h.parent)?h.parent:"";u=p[u];var q=P(h);var x=q.from,r=q.to;q=Q({from:x,levels:b.options.levels,to:r,defaults:{colorByPoint:d.colorByPoint,dataLabels:d.dataLabels,levelIsConstant:d.levelIsConstant, +levelSize:d.levelSize,slicedOffset:d.slicedOffset}});q=O(q,{diffRadius:c,from:x,to:r});D(w,{before:J,idRoot:e,levelIsConstant:d.levelIsConstant,mapOptionsToLevel:q,mapIdToNode:p,points:b.points,series:b});d=p[""].shapeArgs={end:n.end,r:a,start:n.start,val:h.val,x:l[0],y:l[1]};this.setShapeArgs(u,d,q);b.mapOptionsToLevel=q;b.data.forEach(function(a){t[a.id]&&m(31,!1,b.chart);t[a.id]=!0});t={}},alignDataLabel:function(b,d,g){if(!g.textPath||!g.textPath.enabled)return E.treemap.prototype.alignDataLabel.apply(this, +arguments)},animate:function(b){var d=this.chart,f=[d.plotWidth/2,d.plotHeight/2],g=d.plotLeft,a=d.plotTop;d=this.group;b?(b={translateX:f[0]+g,translateY:f[1]+a,scaleX:.001,scaleY:.001,rotation:10,opacity:.01},d.attr(b)):(b={translateX:g,translateY:a,scaleX:1,scaleY:1,rotation:0,opacity:1},d.animate(b,this.options.animation))},utils:{calculateLevelSizes:O,getLevelFromAndTo:P,range:L}},{draw:C,shouldDraw:function(){return!this.isNull},isValid:function(){return!0},getDataLabelPath:function(b){var d= +this.series.chart.renderer,f=this.shapeExisting,g=f.start,a=f.end,c=g+(a-g)/2;c=0>c&&c>-Math.PI||c>Math.PI;var e=f.r+(b.options.distance||0);g===-Math.PI/2&&w(a)===w(1.5*Math.PI)&&(g=-Math.PI+Math.PI/360,a=-Math.PI/360,c=!0);if(a-g>Math.PI){c=!1;var l=!0}this.dataLabelPath&&(this.dataLabelPath=this.dataLabelPath.destroy());this.dataLabelPath=d.arc({open:!0,longArc:l?1:0}).add(b);this.dataLabelPath.attr({start:c?g:a,end:c?a:g,clockwise:+c,x:f.x,y:f.y,r:(e+f.innerR)/2});return this.dataLabelPath}})}); +C(d,"masters/modules/sunburst.src.js",[],function(){})}); +//# sourceMappingURL=sunburst.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/tilemap.js b/libs/highcharts-8.1.2/modules/tilemap.js new file mode 100644 index 00000000..f7c4a212 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/tilemap.js @@ -0,0 +1,23 @@ +/* + Highmaps JS v8.1.2 (2020-06-16) + + Tilemap module + + (c) 2010-2019 Highsoft AS + + License: www.highcharts.com/license +*/ +(function(d){"object"===typeof module&&module.exports?(d["default"]=d,module.exports=d):"function"===typeof define&&define.amd?define("highcharts/modules/tilemap",["highcharts","highcharts/modules/map"],function(f){d(f);d.Highcharts=f;return d}):d("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(d){function f(e,d,f,v){e.hasOwnProperty(d)||(e[d]=v.apply(null,f))}d=d?d._modules:{};f(d,"modules/tilemap.src.js",[d["parts/Globals.js"],d["parts/Utilities.js"]],function(e,d){function f(a,b, +c){a=a.options;return{xPad:(a.colsize||1)/-b,yPad:(a.rowsize||1)/-c}}"";var v=d.addEvent,h=d.clamp,y=d.extend,x=d.pick;d=d.seriesType;e.tileShapeTypes={hexagon:{alignDataLabel:e.seriesTypes.scatter.prototype.alignDataLabel,getSeriesPadding:function(a){return f(a,3,2)},haloPath:function(a){if(!a)return[];var b=this.tileEdges;return[["M",b.x2-a,b.y1+a],["L",b.x3+a,b.y1+a],["L",b.x4+1.5*a,b.y2],["L",b.x3+a,b.y3-a],["L",b.x2-a,b.y3-a],["L",b.x1-1.5*a,b.y2],["Z"]]},translate:function(){var a=this.options, +b=this.xAxis,c=this.yAxis,d=a.pointPadding||0,e=(a.colsize||1)/3,f=(a.rowsize||1)/2,n;this.generatePoints();this.points.forEach(function(a){var t=h(Math.floor(b.len-b.translate(a.x-2*e,0,1,0,1)),-b.len,2*b.len),k=h(Math.floor(b.len-b.translate(a.x-e,0,1,0,1)),-b.len,2*b.len),q=h(Math.floor(b.len-b.translate(a.x+e,0,1,0,1)),-b.len,2*b.len),u=h(Math.floor(b.len-b.translate(a.x+2*e,0,1,0,1)),-b.len,2*b.len),r=h(Math.floor(c.translate(a.y-f,0,1,0,1)),-c.len,2*c.len),g=h(Math.floor(c.translate(a.y,0,1, +0,1)),-c.len,2*c.len),l=h(Math.floor(c.translate(a.y+f,0,1,0,1)),-c.len,2*c.len),m=x(a.pointPadding,d),p=m*Math.abs(k-t)/Math.abs(l-g);p=b.reversed?-p:p;var w=b.reversed?-m:m;m=c.reversed?-m:m;a.x%2&&(n=n||Math.round(Math.abs(l-r)/2)*(c.reversed?-1:1),r+=n,g+=n,l+=n);a.plotX=a.clientX=(k+q)/2;a.plotY=g;t+=p+w;k+=w;q-=w;u-=p+w;r-=m;l+=m;a.tileEdges={x1:t,x2:k,x3:q,x4:u,y1:r,y2:g,y3:l};a.shapeType="path";a.shapeArgs={d:[["M",k,r],["L",q,r],["L",u,g],["L",q,l],["L",k,l],["L",t,g],["Z"]]}});this.translateColors()}}, +diamond:{alignDataLabel:e.seriesTypes.scatter.prototype.alignDataLabel,getSeriesPadding:function(a){return f(a,2,2)},haloPath:function(a){if(!a)return[];var b=this.tileEdges;return[["M",b.x2,b.y1+a],["L",b.x3+a,b.y2],["L",b.x2,b.y3-a],["L",b.x1-a,b.y2],["Z"]]},translate:function(){var a=this.options,b=this.xAxis,c=this.yAxis,d=a.pointPadding||0,e=a.colsize||1,f=(a.rowsize||1)/2,n;this.generatePoints();this.points.forEach(function(a){var p=h(Math.round(b.len-b.translate(a.x-e,0,1,0,0)),-b.len,2*b.len), +k=h(Math.round(b.len-b.translate(a.x,0,1,0,0)),-b.len,2*b.len),q=h(Math.round(b.len-b.translate(a.x+e,0,1,0,0)),-b.len,2*b.len),u=h(Math.round(c.translate(a.y-f,0,1,0,0)),-c.len,2*c.len),r=h(Math.round(c.translate(a.y,0,1,0,0)),-c.len,2*c.len),g=h(Math.round(c.translate(a.y+f,0,1,0,0)),-c.len,2*c.len),l=x(a.pointPadding,d),m=l*Math.abs(k-p)/Math.abs(g-r);m=b.reversed?-m:m;l=c.reversed?-l:l;a.x%2&&(n=Math.abs(g-u)/2*(c.reversed?-1:1),u+=n,r+=n,g+=n);a.plotX=a.clientX=k;a.plotY=r;p+=m;q-=m;u-=l;g+= +l;a.tileEdges={x1:p,x2:k,x3:q,y1:u,y2:r,y3:g};a.shapeType="path";a.shapeArgs={d:[["M",k,u],["L",q,r],["L",k,g],["L",p,r],["Z"]]}});this.translateColors()}},circle:{alignDataLabel:e.seriesTypes.scatter.prototype.alignDataLabel,getSeriesPadding:function(a){return f(a,2,2)},haloPath:function(a){return e.seriesTypes.scatter.prototype.pointClass.prototype.haloPath.call(this,a+(a&&this.radius))},translate:function(){var a=this.options,b=this.xAxis,c=this.yAxis,d=a.pointPadding||0,e=(a.rowsize||1)/2,f=a.colsize|| +1,n,t,v,k,q=!1;this.generatePoints();this.points.forEach(function(a){var p=h(Math.round(b.len-b.translate(a.x,0,1,0,0)),-b.len,2*b.len),g=h(Math.round(c.translate(a.y,0,1,0,0)),-c.len,2*c.len),l=d,m=!1;"undefined"!==typeof a.pointPadding&&(l=a.pointPadding,q=m=!0);if(!k||q)n=Math.abs(h(Math.floor(b.len-b.translate(a.x+f,0,1,0,0)),-b.len,2*b.len)-p),t=Math.abs(h(Math.floor(c.translate(a.y+e,0,1,0,0)),-c.len,2*c.len)-g),v=Math.floor(Math.sqrt(n*n+t*t)/2),k=Math.min(n,v,t)-l,q&&!m&&(q=!1);a.x%2&&(g+= +t*(c.reversed?-1:1));a.plotX=a.clientX=p;a.plotY=g;a.radius=k;a.shapeType="circle";a.shapeArgs={x:p,y:g,r:k}});this.translateColors()}},square:{alignDataLabel:e.seriesTypes.heatmap.prototype.alignDataLabel,translate:e.seriesTypes.heatmap.prototype.translate,getSeriesPadding:function(){},haloPath:e.seriesTypes.heatmap.prototype.pointClass.prototype.haloPath}};v(e.Axis,"afterSetAxisTranslation",function(){if(!this.recomputingForTilemap&&"colorAxis"!==this.coll){var a=this,b=a.series.map(function(b){return b.getSeriesPixelPadding&& +b.getSeriesPixelPadding(a)}).reduce(function(a,b){return(a&&a.padding)>(b&&b.padding)?a:b},void 0)||{padding:0,axisLengthFactor:1},c=Math.round(b.padding*b.axisLengthFactor);b.padding&&(a.len-=c,a.recomputingForTilemap=!0,a.setAxisTranslation(),delete a.recomputingForTilemap,a.minPixelPadding+=b.padding,a.len+=c)}});d("tilemap","heatmap",{marker:null,states:{hover:{halo:{enabled:!0,size:2,opacity:.5,attributes:{zIndex:3}}}},pointPadding:2,tileShape:"hexagon"},{markerAttribs:e.seriesTypes.scatter.prototype.markerAttribs, +pointAttribs:e.seriesTypes.column.prototype.pointAttribs,getSymbol:e.noop,drawPoints:function(){var a=this;e.seriesTypes.column.prototype.drawPoints.call(this);this.points.forEach(function(b){b.graphic&&b.graphic[a.chart.styledMode?"css":"animate"](a.colorAttribs(b))})},setOptions:function(){var a=e.seriesTypes.heatmap.prototype.setOptions.apply(this,Array.prototype.slice.call(arguments));this.tileShape=e.tileShapeTypes[a.tileShape];return a},alignDataLabel:function(){return this.tileShape.alignDataLabel.apply(this, +Array.prototype.slice.call(arguments))},getSeriesPixelPadding:function(a){var b=a.isXAxis,c=this.tileShape.getSeriesPadding(this);if(!c)return{padding:0,axisLengthFactor:1};var d=Math.round(a.translate(b?2*c.xPad:c.yPad,0,1,0,1));a=Math.round(a.translate(b?c.xPad:0,0,1,0,1));return{padding:Math.abs(d-a)||0,axisLengthFactor:b?2:1.1}},translate:function(){return this.tileShape.translate.apply(this,Array.prototype.slice.call(arguments))}},y({haloPath:function(){return this.series.tileShape.haloPath.apply(this, +Array.prototype.slice.call(arguments))}},e.colorPointMixin));""});f(d,"masters/modules/tilemap.src.js",[],function(){})}); +//# sourceMappingURL=tilemap.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/timeline.js b/libs/highcharts-8.1.2/modules/timeline.js new file mode 100644 index 00000000..5696c840 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/timeline.js @@ -0,0 +1,24 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Timeline series + + (c) 2010-2019 Highsoft AS + Author: Daniel Studencki + + License: www.highcharts.com/license +*/ +(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/timeline",["highcharts"],function(l){c(l);c.Highcharts=l;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function l(c,l,q,r){c.hasOwnProperty(l)||(c[l]=r.apply(null,q))}c=c?c._modules:{};l(c,"modules/timeline.src.js",[c["parts/Globals.js"],c["mixins/legend-symbol.js"],c["parts/Point.js"],c["parts/SVGElement.js"],c["parts/Utilities.js"]], +function(c,l,q,r,f){var p=f.addEvent,x=f.arrayMax,y=f.arrayMin,u=f.defined,z=f.isNumber,t=f.merge,A=f.objectEach,n=f.pick;f=f.seriesType;var m=c.Series,v=c.seriesTypes;f("timeline","line",{colorByPoint:!0,stickyTracking:!1,ignoreHiddenPoint:!0,legendType:"point",lineWidth:4,tooltip:{headerFormat:'\u25cf {point.key}
    ',pointFormat:"{point.description}"},states:{hover:{lineWidthPlus:0}},dataLabels:{enabled:!0,allowOverlap:!0, +alternate:!0,backgroundColor:"#ffffff",borderWidth:1,borderColor:"#999999",borderRadius:3,color:"#333333",connectorWidth:1,distance:100,formatter:function(){var a=this.series.chart.styledMode?"\u25cf ":'\u25cf ';return a+=''+(this.key||"")+"
    "+(this.point.label||"")},style:{textOutline:"none",fontWeight:"normal",fontSize:"12px"},shadow:!1,verticalAlign:"middle"},marker:{enabledThreshold:0,symbol:"square", +radius:6,lineWidth:2,height:15},showInLegend:!1,colorKey:"x"},{trackerGroups:["markerGroup","dataLabelsGroup"],drawLegendSymbol:l.drawRectangle,drawTracker:c.TrackerMixin.drawTrackerPoint,init:function(){var a=this;m.prototype.init.apply(a,arguments);p(a,"afterTranslate",function(){var b,k=Number.MAX_VALUE;a.points.forEach(function(a){a.isInside=a.isInside&&a.visible;a.visible&&!a.isNull&&(u(b)&&(k=Math.min(k,Math.abs(a.plotX-b))),b=a.plotX)});a.closestPointRangePx=k});p(a,"drawDataLabels",function(){a.distributeDL()}); +p(a,"afterDrawDataLabels",function(){var b;a.points.forEach(function(a){if(b=a.dataLabel)return b.animate=function(a){this.targetPosition&&(this.targetPosition=a);return r.prototype.animate.apply(this,arguments)},b.targetPosition||(b.targetPosition={}),a.drawConnector()})});p(a.chart,"afterHideOverlappingLabel",function(){a.points.forEach(function(a){a.connector&&a.dataLabel&&a.dataLabel.oldOpacity!==a.dataLabel.newOpacity&&a.alignConnector()})})},alignDataLabel:function(a,b,k,c){var d=this.chart.inverted, +g=this.visibilityMap.filter(function(a){return a}),e=this.visiblePointsCount,h=g.indexOf(a);g=this.options.dataLabels;var w=a.userDLOptions||{};h=g.alternate?h&&h!==e-1?2:1.5:1;e=Math.floor(this.xAxis.len/e);var f=b.padding;if(a.visible){var l=Math.abs(w.x||a.options.dataLabels.x);d?(d=2*(l-f)-a.itemHeight/2,d={width:d+"px",textOverflow:b.width/d*b.height/2>e*h?"ellipsis":"none"}):d={width:(w.width||g.width||e*h-2*f)+"px"};b.css(d);this.chart.styledMode||b.shadow(g.shadow)}m.prototype.alignDataLabel.apply(this, +arguments)},processData:function(){var a=0,b;this.visibilityMap=this.getVisibilityMap();this.visibilityMap.forEach(function(b){b&&a++});this.visiblePointsCount=a;for(b=0;bh?c:h;y=y+ +1+b.descendants;k=Math.max(b.height+1,k);return b});f&&(f.start=A(f.start,d),f.end=A(f.end,h));u(n,{children:c,descendants:y,height:k});"function"===typeof z&&z(n,g);return n};return{getListOfParents:g,getNode:q,getTree:function(a,n){var m=a.map(function(f){return f.id});a=g(a,m);return q("",null,1,null,a,n)}}});B(a,"parts-gantt/TreeGridTick.js",[a["parts/Utilities.js"]],function(a){var u=a.addEvent,w=a.defined,A=a.isObject,g=a.isNumber,q=a.pick,t=a.wrap,n;(function(a){function f(){this.treeGrid|| +(this.treeGrid=new z(this))}function m(c,d){c=c.treeGrid;var h=!c.labelIcon,p=d.renderer,b=d.xy,e=d.options,l=e.width,D=e.height,E=b.x-l/2-e.padding;b=b.y-D/2;var a=d.collapsed?90:180,f=d.show&&g(b),v=c.labelIcon;v||(c.labelIcon=v=p.path(p.symbols[e.type](e.x,e.y,l,D)).addClass("highcharts-label-icon").add(d.group));f||v.attr({y:-9999});p.styledMode||v.attr({"stroke-width":1,fill:q(d.color,"#666666")}).css({cursor:"pointer",stroke:e.lineColor,strokeWidth:e.lineWidth});v[h?"attr":"animate"]({translateX:E, +translateY:b,rotation:a})}function n(c,d,h,p,b,e,l,D,E){var a=q(this.options&&this.options.labels,e);e=this.pos;var f=this.axis,v="treegrid"===f.options.type;c=c.apply(this,[d,h,p,b,a,l,D,E]);v&&(d=a&&A(a.symbol,!0)?a.symbol:{},a=a&&g(a.indentation)?a.indentation:0,e=(e=(f=f.treeGrid.mapOfPosToGridNode)&&f[e])&&e.depth||1,c.x+=d.width+2*d.padding+(e-1)*a);return c}function y(c){var d=this,h=d.pos,a=d.axis,b=d.label,e=a.treeGrid.mapOfPosToGridNode,l=a.options,D=q(d.options&&d.options.labels,l&&l.labels), +E=D&&A(D.symbol,!0)?D.symbol:{},f=(e=e&&e[h])&&e.depth;l="treegrid"===l.type;var k=-1f&&!a.startOnTick&&(d[0]=f),h>k&&h-r=d?(f-d)%c: +c-(d-f)%c;return a.inclusive?f<=h:f=a)break;else d.to=a)break;else if(g.isInBreak(h,a)){c-=a-h.from;break}}return c};g.prototype.findBreakAt=function(a,f){return q(f, +function(c){return c.fromp;)x-=k;for(;xd.to||h>d.from&&kd.from&&kd.from&&k>d.to&&ka&&c>=this.basePointRange&&(a=c),g=void 0;b--;)g&&!1!==g.visible||(g=f[b+1]),c=f[b],!1!==g.visible&&!1!==c.visible&&(g.x-c.x>a&&(g=(c.x+g.x)/2,f.splice(b+1,0,{isNull:!0,x:g}),e.stacking&&this.options.stacking&&(g=e.stacking.stacks[this.stackKey][g]=new B(e,e.options.stackLabels,!1,g,this.stack),g.total=0)),g=c);return this.getGraphPath(f)};g(a,"init", +function(){this.brokenAxis||(this.brokenAxis=new C(this))});g(a,"afterInit",function(){"undefined"!==typeof this.brokenAxis&&this.brokenAxis.setBreaks(this.options.breaks,!1)});g(a,"afterSetTickPositions",function(){var a=this.brokenAxis;if(a&&a.hasBreaks){var c=this.tickPositions,f=this.tickPositions.info,b=[],e;for(e=0;e=b&&(c-=.5);return{from:c,to:a,showPoints:!1}}function d(a,b,c){var d=[],e=[],f={},g={},h=-1,r="boolean"===typeof b? +b:!1;a=w.getTree(a,{after:function(a){a=g[a.pos];var b=0,c=0;a.children.forEach(function(a){c+=(a.descendants||0)+1;b=Math.max((a.height||0)+1,b)});a.descendants=c;a.height=b;a.collapsed&&e.push(a)},before:function(a){var b=A(a.data,!0)?a.data:{},c=C(b.name)?b.name:"",e=f[a.parent];e=A(e,!0)?g[e.pos]:null;var k=function(a){return a.name===c},l;r&&A(e,!0)&&(l=n(e.children,k))?(k=l.pos,l.nodes.push(a)):k=h++;g[k]||(g[k]=l={depth:e?e.depth+1:0,name:c,nodes:[a],children:[],pos:k},-1!==k&&d.push(c),A(e, +!0)&&e.children.push(l));C(a.id)&&(f[a.id]=a);l&&!0===b.collapsed&&(l.collapsed=!0);a.pos=k}});g=function(a,b){var c=function(a,d,e){var f=d+(-1===d?0:b-1),g=(f-d)/2,h=d+g;a.nodes.forEach(function(a){var b=a.data;A(b,!0)&&(b.y=d+(b.seriesIndex||0),delete b.seriesIndex);a.pos=h});e[h]=a;a.pos=h;a.tickmarkOffset=g+.5;a.collapseStart=f+.5;a.children.forEach(function(a){c(a,f+1,e);f=(a.collapseEnd||0)-.5});a.collapseEnd=f+.5;return e};return c(a["-1"],-1,{})}(g,c);return{categories:d,mapOfIdToNode:f, +mapOfPosToGridNode:g,collapsedNodes:e,tree:a}}function b(a){a.target.axes.filter(function(a){return"treegrid"===a.options.type}).forEach(function(b){var c=b.options||{},e=c.labels,f=c.uniqueNames,h=0;if(!b.treeGrid.mapOfPosToGridNode||b.series.some(function(a){return!a.hasRendered||a.isDirtyData||a.isDirty}))c=b.series.reduce(function(a,b){b.visible&&((b.options.data||[]).forEach(function(b){A(b,!0)&&(b.seriesIndex=h,a.push(b))}),!0===f&&h++);return a},[]),c=d(c,f||!1,!0===f?h:1),b.categories=c.categories, +b.treeGrid.mapOfPosToGridNode=c.mapOfPosToGridNode,b.hasNames=!0,b.treeGrid.tree=c.tree,b.series.forEach(function(a){var b=(a.options.data||[]).map(function(a){return A(a,!0)?y(a):a});a.visible&&a.setData(b,!1)}),b.treeGrid.mapOptionsToLevel=g.getLevelOptions({defaults:e,from:1,levels:e&&e.levels,to:b.treeGrid.tree&&b.treeGrid.tree.height}),"beforeRender"===a.type&&(b.treeGrid.collapsedNodes=c.collapsedNodes)})}function e(a,b){var c=this.treeGrid.mapOptionsToLevel||{},d=this.ticks,e=d[b],f;if("treegrid"=== +this.options.type&&this.treeGrid.mapOfPosToGridNode){var g=this.treeGrid.mapOfPosToGridNode[b];(c=c[g.depth])&&(f={labels:c});e?(e.parameters.category=g.name,e.options=f,e.addLabel()):d[b]=new u(this,b,void 0,void 0,{category:g.name,tickmarkOffset:g.tickmarkOffset,options:f})}else a.apply(this,Array.prototype.slice.call(arguments,1))}function l(a){var b=this.options;b=(b=b&&b.labels)&&f(b.indentation)?b.indentation:0;var c=a.apply(this,Array.prototype.slice.call(arguments,1));if("treegrid"===this.options.type&& +this.treeGrid.mapOfPosToGridNode){var d=this.treeGrid.mapOfPosToGridNode[-1].height||0;c.width+=b*(d-1)}return c}function q(a,c,e){var f=this,g="treegrid"===e.type;f.treeGrid||(f.treeGrid=new H(f));g&&(t(c,"beforeRender",b),t(c,"beforeRedraw",b),t(c,"addSeries",function(a){a.options.data&&(a=d(a.options.data,e.uniqueNames||!1,1),f.treeGrid.collapsedNodes=(f.treeGrid.collapsedNodes||[]).concat(a.collapsedNodes))}),t(f,"foundExtremes",function(){f.treeGrid.collapsedNodes&&f.treeGrid.collapsedNodes.forEach(function(a){var b= +f.treeGrid.collapse(a);f.brokenAxis&&(f.brokenAxis.setBreaks(b,!1),f.treeGrid.collapsedNodes&&(f.treeGrid.collapsedNodes=f.treeGrid.collapsedNodes.filter(function(b){return a.collapseStart!==b.collapseStart||a.collapseEnd!==b.collapseEnd})))})}),t(f,"afterBreaks",function(){var a;"yAxis"===f.coll&&!f.staticScale&&(null===(a=f.chart.options.chart)||void 0===a?0:a.height)&&(f.isDirty=!0)}),e=y({grid:{enabled:!0},labels:{align:"left",levels:[{level:void 0},{level:1,style:{fontWeight:"bold"}}],symbol:{type:"triangle", +x:-5,y:-5,height:10,width:10,padding:5}},uniqueNames:!1},e,{reversed:!0,grid:{columns:void 0}}));a.apply(f,[c,e]);g&&(f.hasNames=!0,f.options.showLastLabel=!0)}function E(a){var b=this.options;"treegrid"===b.type?(this.min=k(this.userMin,b.min,this.dataMin),this.max=k(this.userMax,b.max,this.dataMax),m(this,"foundExtremes"),this.setAxisTranslation(!0),this.tickmarkOffset=.5,this.tickInterval=1,this.tickPositions=this.treeGrid.mapOfPosToGridNode?this.treeGrid.getTickPositions():[]):a.apply(this,Array.prototype.slice.call(arguments, +1))}var G=!1;a.compose=function(a){G||(z(a.prototype,"generateTick",e),z(a.prototype,"getMaxLabelDimensions",l),z(a.prototype,"init",q),z(a.prototype,"setTickInterval",E),B.compose(u),G=!0)};var H=function(){function a(a){this.axis=a}a.prototype.collapse=function(a){var b=this.axis,d=b.options.breaks||[];a=c(a,b.max);d.push(a);return d};a.prototype.expand=function(a){var b=this.axis,d=b.options.breaks||[],e=c(a,b.max);return d.reduce(function(a,b){b.to===e.to&&b.from===e.from||a.push(b);return a}, +[])};a.prototype.getTickPositions=function(){var a=this.axis;return Object.keys(a.treeGrid.mapOfPosToGridNode||{}).reduce(function(b,c){c=+c;!(a.min<=c&&a.max>=c)||a.brokenAxis&&a.brokenAxis.isInAnyBreak(c)||b.push(c);return b},[])};a.prototype.isCollapsed=function(a){var b=this.axis,d=b.options.breaks||[],e=c(a,b.max);return d.some(function(a){return a.from===e.from&&a.to===e.to})};a.prototype.toggleCollapse=function(a){return this.isCollapsed(a)?this.expand(a):this.collapse(a)};return a}();a.Additions= +H})(c||(c={}));a.prototype.utils={getNode:w.getNode};c.compose(a);return c});B(a,"masters/modules/treegrid.src.js",[],function(){})}); +//# sourceMappingURL=treegrid.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/treemap.js b/libs/highcharts-8.1.2/modules/treemap.js new file mode 100644 index 00000000..a96418a2 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/treemap.js @@ -0,0 +1,42 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + (c) 2014-2019 Highsoft AS + Authors: Jon Arild Nygard / Oystein Moseng + + License: www.highcharts.com/license +*/ +(function(c){"object"===typeof module&&module.exports?(c["default"]=c,module.exports=c):"function"===typeof define&&define.amd?define("highcharts/modules/treemap",["highcharts"],function(w){c(w);c.Highcharts=w;return c}):c("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(c){function w(c,d,x,k){c.hasOwnProperty(d)||(c[d]=k.apply(null,x))}c=c?c._modules:{};w(c,"mixins/tree-series.js",[c["parts/Color.js"],c["parts/Utilities.js"]],function(c,d){var x=d.extend,k=d.isArray,n=d.isNumber,p=d.isObject, +g=d.merge,v=d.pick;return{getColor:function(f,h){var t=h.index,d=h.mapOptionsToLevel,g=h.parentColor,p=h.parentColorIndex,B=h.series,A=h.colors,x=h.siblings,m=B.points,k=B.chart.options.chart,y;if(f){m=m[f.i];f=d[f.level]||{};if(d=m&&f.colorByPoint){var u=m.index%(A?A.length:k.colorCount);var n=A&&A[u]}if(!B.chart.styledMode){A=m&&m.options.color;k=f&&f.color;if(y=g)y=(y=f&&f.colorVariation)&&"brightness"===y.key?c.parse(g).brighten(t/x*y.to).get():g;y=v(A,k,n,y,B.color)}var w=v(m&&m.options.colorIndex, +f&&f.colorIndex,u,p,h.colorIndex)}return{color:y,colorIndex:w}},getLevelOptions:function(f){var h=null;if(p(f)){h={};var d=n(f.from)?f.from:1;var c=f.levels;var z={};var v=p(f.defaults)?f.defaults:{};k(c)&&(z=c.reduce(function(h,c){if(p(c)&&n(c.level)){var f=g({},c);var t="boolean"===typeof f.levelIsConstant?f.levelIsConstant:v.levelIsConstant;delete f.levelIsConstant;delete f.level;c=c.level+(t?0:d-1);p(h[c])?x(h[c],f):h[c]=f}return h},{}));c=n(f.to)?f.to:1;for(f=0;f<=c;f++)h[f]=g({},v,p(z[f])?z[f]: +{})}return h},setTreeValues:function J(h,c){var d=c.before,g=c.idRoot,t=c.mapIdToNode[g],k=c.points[h.i],p=k&&k.options||{},m=0,n=[];x(h,{levelDynamic:h.level-(("boolean"===typeof c.levelIsConstant?c.levelIsConstant:1)?0:t.level),name:v(k&&k.name,""),visible:g===h.id||("boolean"===typeof c.visible?c.visible:!1)});"function"===typeof d&&(h=d(h,c));h.children.forEach(function(d,g){var k=x({},c);x(k,{index:g,siblings:h.children.length,visible:h.visible});d=J(d,k);n.push(d);d.visible&&(m+=d.val)});h.visible= +0{point.name}: {point.value}
    "},ignoreHiddenPoint:!0,layoutAlgorithm:"sliceAndDice",layoutStartingDirection:"vertical",alternateStartingDirection:!1,levelIsConstant:!0,drillUpButton:{position:{align:"right",x:-10,y:10}}, +traverseUpButton:{position:{align:"right",x:-10,y:10}},borderColor:"#e6e6e6",borderWidth:1,colorKey:"colorValue",opacity:.15,states:{hover:{borderColor:"#999999",brightness:G.heatmap?0:.1,halo:!1,opacity:.75,shadow:!1}}},{pointArrayMap:["value"],directTouch:!0,optionalAxis:"colorAxis",getSymbol:g,parallelArrays:["x","y","value","colorValue"],colorKey:"colorValue",trackerGroups:["group","dataLabelsGroup"],getListOfParents:function(a,b){a=B(a)?a:[];var e=B(b)?b:[];b=a.reduce(function(a,b,e){b=u(b.parent, +"");"undefined"===typeof a[b]&&(a[b]=[]);a[b].push(e);return a},{"":[]});P(b,function(a,b,c){""!==b&&-1===e.indexOf(b)&&(a.forEach(function(a){c[""].push(a)}),delete c[b])});return b},getTree:function(){var a=this.data.map(function(a){return a.id});a=this.getListOfParents(this.data,a);this.nodeMap=[];return this.buildNode("",-1,0,a,null)},hasData:function(){return!!this.processedXData.length},init:function(a,b){var e=c.colorMapSeriesMixin;e&&(this.colorAttribs=e.colorAttribs);this.eventsToUnbind.push(f(this, +"setOptions",function(a){a=a.userOptions;t(a.allowDrillToNode)&&!t(a.allowTraversingTree)&&(a.allowTraversingTree=a.allowDrillToNode,delete a.allowDrillToNode);t(a.drillUpButton)&&!t(a.traverseUpButton)&&(a.traverseUpButton=a.drillUpButton,delete a.drillUpButton)}));E.prototype.init.call(this,a,b);delete this.opacity;this.options.allowTraversingTree&&this.eventsToUnbind.push(f(this,"click",this.onClickDrillToNode))},buildNode:function(a,b,e,c,l){var r=this,q=[],d=r.points[b],f=0,C;(c[a]||[]).forEach(function(b){C= +r.buildNode(r.points[b].id,b,e+1,c,a);f=Math.max(C.height+1,f);q.push(C)});b={id:a,i:b,children:q,height:f,level:e,parent:l,visible:!1};r.nodeMap[b.id]=b;d&&(d.node=b);return b},setTreeValues:function(a){var b=this,e=b.options,c=b.nodeMap[b.rootNode];e="boolean"===typeof e.levelIsConstant?e.levelIsConstant:!0;var l=0,I=[],q=b.points[a.i];a.children.forEach(function(a){a=b.setTreeValues(a);I.push(a);a.ignore||(l+=a.val)});M(I,function(a,b){return a.sortIndex-b.sortIndex});var d=u(q&&q.options.value, +l);q&&(q.value=d);z(a,{children:I,childrenTotal:l,ignore:!(u(q&&q.visible,!0)&&0h.lP.lR&&l.algorithmCalcPoints(a,!1,h,c,f);g===k&&l.algorithmCalcPoints(a,!0,h,c,f);g+=1});return c},algorithmFill:function(a,b,e){var c=[],l,d=b.direction,f=b.x,g=b.y, +h=b.width,k=b.height,p,m,n,t;e.forEach(function(e){l=e.val/b.val*b.height*b.width;p=f;m=g;0===d?(t=k,n=l/t,h-=n,f+=n):(n=h,t=l/n,k-=t,g+=t);c.push({x:p,y:m,width:n,height:t});a&&(d=1-d)});return c},strip:function(a,b){return this.algorithmLowAspectRatio(!1,a,b)},squarified:function(a,b){return this.algorithmLowAspectRatio(!0,a,b)},sliceAndDice:function(a,b){return this.algorithmFill(!0,a,b)},stripes:function(a,b){return this.algorithmFill(!1,a,b)},translate:function(){var a=this,b=a.options,e=Q(a); +E.prototype.translate.call(a);var c=a.tree=a.getTree();var d=a.nodeMap[e];a.renderTraverseUpButton(e);a.mapOptionsToLevel=O({from:d.level+1,levels:b.levels,to:c.height,defaults:{levelIsConstant:a.options.levelIsConstant,colorByPoint:b.colorByPoint}});""===e||d&&d.children.length||(a.setRootNode("",!1),e=a.rootNode,d=a.nodeMap[e]);F(a.nodeMap[a.rootNode],function(b){var e=!1,c=b.parent;b.visible=!0;if(c||""===c)e=a.nodeMap[c];return e});F(a.nodeMap[a.rootNode].children,function(a){var b=!1;a.forEach(function(a){a.visible= +!0;a.children.length&&(b=(b||[]).concat(a.children))});return b});a.setTreeValues(c);a.axisRatio=a.xAxis.len/a.yAxis.len;a.nodeMap[""].pointValues=e={x:0,y:0,width:100,height:100};a.nodeMap[""].values=e=D(e,{width:e.width*a.axisRatio,direction:"vertical"===b.layoutStartingDirection?0:1,val:c.val});a.calculateChildrenAreas(c,e);a.colorAxis||b.colorByPoint||a.setColorRecursive(a.tree);b.allowTraversingTree&&(b=d.pointValues,a.xAxis.setExtremes(b.x,b.x+b.width,!1),a.yAxis.setExtremes(b.y,b.y+b.height, +!1),a.xAxis.setScale(),a.yAxis.setScale());a.setPointValues()},drawDataLabels:function(){var a=this,b=a.mapOptionsToLevel,c,d;a.points.filter(function(a){return a.node.visible}).forEach(function(e){d=b[e.node.level];c={style:{}};e.node.isLeaf||(c.enabled=!1);d&&d.dataLabels&&(c=D(c,d.dataLabels),a._hasPointLabels=!0);e.shapeArgs&&(c.style.width=e.shapeArgs.width,e.dataLabel&&e.dataLabel.css({width:e.shapeArgs.width+"px"}));e.dlOptions=D(c,e.options.dataLabels)});E.prototype.drawDataLabels.call(this)}, +alignDataLabel:function(a,b,c){var e=c.style;!t(e.textOverflow)&&b.text&&b.getBBox().width>b.text.textWidth&&b.css({textOverflow:"ellipsis",width:e.width+="px"});G.column.prototype.alignDataLabel.apply(this,arguments);a.dataLabel&&a.dataLabel.attr({zIndex:(a.node.zIndex||0)+1})},pointAttribs:function(a,b){var c=L(this.mapOptionsToLevel)?this.mapOptionsToLevel:{},d=a&&c[a.node.level]||{};c=this.options;var f=b&&c.states[b]||{},g=a&&a.getClassName()||"";a={stroke:a&&a.borderColor||d.borderColor||f.borderColor|| +c.borderColor,"stroke-width":u(a&&a.borderWidth,d.borderWidth,f.borderWidth,c.borderWidth),dashstyle:a&&a.borderDashStyle||d.borderDashStyle||f.borderDashStyle||c.borderDashStyle,fill:a&&a.color||this.color};-1!==g.indexOf("highcharts-above-level")?(a.fill="none",a["stroke-width"]=0):-1!==g.indexOf("highcharts-internal-node-interactive")?(b=u(f.opacity,c.opacity),a.fill=v(a.fill).setOpacity(b).get(),a.cursor="pointer"):-1!==g.indexOf("highcharts-internal-node")?a.fill="none":b&&(a.fill=v(a.fill).brighten(f.brightness).get()); +return a},drawPoints:function(){var a=this,b=a.chart,c=b.renderer,d=b.styledMode,f=a.options,g=d?{}:f.shadow,h=f.borderRadius,k=b.pointCount\u25cf {series.name}
    Value: {point.y}
    Size: {point.z}
    '}},{pointArrayMap:["y","z"],parallelArrays:["x","y","z"],redraw:function(){this.center=null;y.redraw.call(this,arguments)},zValEval:function(a){return"number"!==typeof a||isNaN(a)?null:!0}, +calculateExtremes:function(){var a=this.chart,b=this.options;var c=this.zData;var d=Math.min(a.plotWidth,a.plotHeight)-2*(b.slicedOffset||0),l={};a=this.center||this.getCenter();["minPointSize","maxPointSize"].forEach(function(a){var c=b[a],k=/%$/.test(c);c=parseInt(c,10);l[a]=k?d*c/100:2*c});this.minPxSize=a[3]+l.minPointSize;this.maxPxSize=w(a[2],a[3]+l.minPointSize,l.maxPointSize);c.length&&(a=p(b.zMin,n(c.filter(this.zValEval))),c=p(b.zMax,g(c.filter(this.zValEval))),this.getRadii(a,c,this.minPxSize, +this.maxPxSize))},getRadii:function(a,b,c,d){var l=0,g=this.zData,q=g.length,k=[],p="radius"!==this.options.sizeBy,u=b-a;for(l;l=b?h=d/2:(h=01.5*Math.PI?e-=2*Math.PI:e<-Math.PI/2&&(e+=2*Math.PI);f.slicedTranslation={translateX:Math.round(Math.cos(e)*d),translateY:Math.round(Math.sin(e)*d)};var v=Math.cos(e)*a[2]/2;var w=Math.sin(e)*a[2]/2;r=Math.cos(e)*m;m*=Math.sin(e);f.tooltipPos=[a[0]+.7*v,a[1]+.7*w];f.half=e<-Math.PI/2||e>Math.PI/2?1:0;f.angle=e;v=Math.min(g,f.labelDistance/5);f.labelPosition={natural:{x:a[0]+r+Math.cos(e)*f.labelDistance,y:a[1]+m+Math.sin(e)*f.labelDistance},"final":{},alignment:f.half?"right": +"left",connectorPosition:{breakAt:{x:a[0]+r+Math.cos(e)*v,y:a[1]+m+Math.sin(e)*v},touchingSliceAt:{x:a[0]+r,y:a[1]+m}}}}x(this,"afterTranslate")}});""});g(b,"masters/modules/variable-pie.src.js",[],function(){})}); +//# sourceMappingURL=variable-pie.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/variwide.js b/libs/highcharts-8.1.2/modules/variwide.js new file mode 100644 index 00000000..fac87c96 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/variwide.js @@ -0,0 +1,17 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Highcharts variwide module + + (c) 2010-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/variwide",["highcharts"],function(f){a(f);a.Highcharts=f;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function f(a,e,f,l){a.hasOwnProperty(e)||(a[e]=l.apply(null,f))}a=a?a._modules:{};f(a,"modules/variwide.src.js",[a["parts/Globals.js"],a["parts/Utilities.js"]],function(a,e){var f=e.addEvent,l=e.isNumber,n=e.pick, +q=e.seriesType;e=e.wrap;var p=a.seriesTypes;q("variwide","column",{pointPadding:0,groupPadding:0},{irregularWidths:!0,pointArrayMap:["y","z"],parallelArrays:["x","y","z"],processData:function(b){this.totalZ=0;this.relZ=[];p.column.prototype.processData.call(this,b);(this.xAxis.reversed?this.zData.slice().reverse():this.zData).forEach(function(b,a){this.relZ[a]=this.totalZ;this.totalZ+=b},this);this.xAxis.categories&&(this.xAxis.variwide=!0,this.xAxis.zData=this.zData)},postTranslate:function(b,a, +h){var g=this.xAxis,c=this.relZ;b=g.reversed?c.length-b:b;var d=g.reversed?-1:1,m=g.len,k=this.totalZ;g=b/c.length*m;var f=(b+d)/c.length*m,e=n(c[b],k)/k*m;c=n(c[b+d],k)/k*m;h&&(h.crosshairWidth=c-e);return e+(a-g)*(c-e)/(f-g)},translate:function(){var b=this.options.crisp,a=this.xAxis;this.options.crisp=!1;p.column.prototype.translate.call(this);this.options.crisp=b;var h=this.chart.inverted,g=this.borderWidth%2/2;this.points.forEach(function(c,b){if(a.variwide){var d=this.postTranslate(b,c.shapeArgs.x, +c);b=this.postTranslate(b,c.shapeArgs.x+c.shapeArgs.width)}else d=c.plotX,b=a.translate(c.x+c.z,0,0,0,1);this.options.crisp&&(d=Math.round(d)-g,b=Math.round(b)-g);c.shapeArgs.x=d;c.shapeArgs.width=Math.max(b-d,1);c.plotX=(d+b)/2;h?c.tooltipPos[1]=a.len-c.shapeArgs.x-c.shapeArgs.width/2:c.tooltipPos[0]=c.shapeArgs.x+c.shapeArgs.width/2},this);this.options.stacking&&this.correctStackLabels()},correctStackLabels:function(){var b=this,a=b.options,h=b.yAxis,g,c,e,f;b.points.forEach(function(d){f=d.x;c= +d.shapeArgs.width;(e=h.stacking.stacks[(b.negStacks&&d.y<(a.startFromThreshold?0:a.threshold)?"-":"")+b.stackKey])&&(g=e[f])&&!d.isNull&&g.setOffset(-(c/2)||0,c||0,void 0,void 0,d.plotX)})}},{isValid:function(){return l(this.y)&&l(this.z)}});a.Tick.prototype.postTranslate=function(b,a,e){var d=this.axis,c=b[a]-d.pos;d.horiz||(c=d.len-c);c=d.series[0].postTranslate(e,c);d.horiz||(c=d.len-c);b[a]=d.pos+c};f(a.Axis,"afterDrawCrosshair",function(b){this.variwide&&this.cross&&this.cross.attr("stroke-width", +b.point&&b.point.crosshairWidth)});f(a.Axis,"afterRender",function(){var b=this;!this.horiz&&this.variwide&&this.chart.labelCollectors.push(function(){return b.tickPositions.filter(function(a){return b.ticks[a].label}).map(function(a,e){a=b.ticks[a].label;a.labelrank=b.zData[e];return a})})});f(a.Tick,"afterGetPosition",function(a){var b=this.axis,e=b.horiz?"x":"y";b.variwide&&(this[e+"Orig"]=a.pos[e],this.postTranslate(a.pos,e,this.pos))});e(a.Tick.prototype,"getLabelPosition",function(a,e,f,g,c, +l,m,k){var b=Array.prototype.slice.call(arguments,1),d=c?"x":"y";this.axis.variwide&&"number"===typeof this[d+"Orig"]&&(b[c?0:1]=this[d+"Orig"]);b=a.apply(this,b);this.axis.variwide&&this.axis.categories&&this.postTranslate(b,d,k);return b});""});f(a,"masters/modules/variwide.src.js",[],function(){})}); +//# sourceMappingURL=variwide.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/vector.js b/libs/highcharts-8.1.2/modules/vector.js new file mode 100644 index 00000000..58ef8487 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/vector.js @@ -0,0 +1,15 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + Vector plot series module + + (c) 2010-2019 Torstein Honsi + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/vector",["highcharts"],function(c){a(c);a.Highcharts=c;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function c(a,d,c,e){a.hasOwnProperty(d)||(a[d]=e.apply(null,c))}a=a?a._modules:{};c(a,"modules/vector.src.js",[a["parts/Globals.js"],a["parts/Utilities.js"]],function(a,d){var c=d.animObject,e=d.arrayMax,g=d.pick;d= +d.seriesType;d("vector","scatter",{lineWidth:2,marker:null,rotationOrigin:"center",states:{hover:{lineWidthPlus:1}},tooltip:{pointFormat:"[{point.x}, {point.y}]
    Length: {point.length}
    Direction: {point.direction}\u00b0
    "},vectorLength:20},{pointArrayMap:["y","length","direction"],parallelArrays:["x","y","length","direction"],pointAttribs:function(a,b){var f=this.options;a=a.color||this.color;var c=this.options.lineWidth;b&&(a=f.states[b].color||a,c=(f.states[b].lineWidth|| +c)+(f.states[b].lineWidthPlus||0));return{stroke:a,"stroke-width":c}},markerAttribs:a.noop,getSymbol:a.noop,arrow:function(a){a=a.length/this.lengthMax*this.options.vectorLength/20;var b={start:10*a,center:0,end:-10*a}[this.options.rotationOrigin]||0;return[["M",0,7*a+b],["L",-1.5*a,7*a+b],["L",0,10*a+b],["L",1.5*a,7*a+b],["L",0,7*a+b],["L",0,-10*a+b]]},translate:function(){a.Series.prototype.translate.call(this);this.lengthMax=e(this.lengthData)},drawPoints:function(){var a=this.chart;this.points.forEach(function(b){var c= +b.plotX,d=b.plotY;!1===this.options.clip||a.isInsidePlot(c,d,a.inverted)?(b.graphic||(b.graphic=this.chart.renderer.path().add(this.markerGroup).addClass("highcharts-point highcharts-color-"+g(b.colorIndex,b.series.colorIndex))),b.graphic.attr({d:this.arrow(b),translateX:c,translateY:d,rotation:b.direction}),this.chart.styledMode||b.graphic.attr(this.pointAttribs(b))):b.graphic&&(b.graphic=b.graphic.destroy())},this)},drawGraph:a.noop,animate:function(a){a?this.markerGroup.attr({opacity:.01}):this.markerGroup.animate({opacity:1}, +c(this.options.animation))}});""});c(a,"masters/modules/vector.src.js",[],function(){})}); +//# sourceMappingURL=vector.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/venn.js b/libs/highcharts-8.1.2/modules/venn.js new file mode 100644 index 00000000..0735689e --- /dev/null +++ b/libs/highcharts-8.1.2/modules/venn.js @@ -0,0 +1,34 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + (c) 2017-2019 Highsoft AS + Authors: Jon Arild Nygard + + License: www.highcharts.com/license +*/ +(function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/venn",["highcharts"],function(m){a(m);a.Highcharts=m;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function m(a,f,b,B){a.hasOwnProperty(f)||(a[f]=B.apply(null,b))}a=a?a._modules:{};m(a,"mixins/draw-point.js",[],function(){var a=function(f){var b,a=this,k=a.graphic,e=f.animatableAttribs,u=f.onComplete,w=f.css,m=f.renderer, +r=null===(b=a.series)||void 0===b?void 0:b.options.animation;if(a.shouldDraw())k||(a.graphic=k=m[f.shapeType](f.shapeArgs).add(f.group)),k.css(w).attr(f.attribs).animate(e,f.isNew?!1:r,u);else if(k){var n=function(){a.graphic=k=k.destroy();"function"===typeof u&&u()};Object.keys(e).length?k.animate(e,void 0,function(){n()}):n()}};return function(f){(f.attribs=f.attribs||{})["class"]=this.getClassName();a.call(this,f)}});m(a,"mixins/geometry.js",[],function(){return{getAngleBetweenPoints:function(a, +f){return Math.atan2(f.x-a.x,f.y-a.y)},getCenterOfPoints:function(a){var f=a.reduce(function(b,f){b.x+=f.x;b.y+=f.y;return b},{x:0,y:0});return{x:f.x/a.length,y:f.y/a.length}},getDistanceBetweenPoints:function(a,f){return Math.sqrt(Math.pow(f.x-a.x,2)+Math.pow(f.y-a.y,2))}}});m(a,"mixins/geometry-circles.js",[a["mixins/geometry.js"]],function(a){function f(d,c){c=Math.pow(10,c);return Math.round(d*c)/c}function b(d){if(0>=d)throw Error("radius of circle must be a positive number.");return Math.PI* +d*d}function k(d,c){return d*d*Math.acos(1-c/d)-(d-c)*Math.sqrt(c*(2*d-c))}function m(d,c){var a=t(d,c),b=d.r,e=c.r,z=[];if(aMath.abs(b-e)){b*=b;var x=(b-e*e+a*a)/(2*a);e=Math.sqrt(b-x*x);b=d.x;z=c.x;d=d.y;var k=c.y;c=b+x*(z-b)/a;x=d+x*(k-d)/a;d=e/a*-(k-d);a=e/a*-(z-b);z=[{x:f(c+d,14),y:f(x-a,14)},{x:f(c-d,14),y:f(x+a,14)}]}return z}function e(d){return d.reduce(function(d,a,b,f){f=f.slice(b+1).reduce(function(d,c,f){var e=[b,f+b+1];return d.concat(m(a,c).map(function(d){d.indexes=e;return d}))}, +[]);return d.concat(f)},[])}function u(d,c){return t(d,c)<=c.r+1e-10}function w(d,c){return!c.some(function(c){return!u(d,c)})}function y(d){return e(d).filter(function(c){return w(c,d)})}var r=a.getAngleBetweenPoints,n=a.getCenterOfPoints,t=a.getDistanceBetweenPoints;return{getAreaOfCircle:b,getAreaOfIntersectionBetweenCircles:function(d){var c=y(d);if(12*e&&(q=2*e);if(!c||c.width>q)c={r:e,largeArc:q>e?1:0,width:q,x:b.x,y:b.y};return c},null);if(e){var q=e.r;c.arcs.push(["A",q,q,0,e.largeArc,1,e.x,e.y]);c.startPoint=b}return c},{startPoint:b,arcs:[]}).arcs;if(0!==c.length&&1!==c.length){c.unshift(["M",b.x,b.y]);var f= +{center:a,d:c}}}return f},getCircleCircleIntersection:m,getCirclesIntersectionPoints:e,getCirclesIntersectionPolygon:y,getCircularSegmentArea:k,getOverlapBetweenCircles:function(d,c,a){var e=0;ay;y++){b.sort(k);var r=b[b.length-1],n=a(b),t=w(n,r,2,-1);t.fx=b[b.length-2].fx?t.fx>r.fx?(n=w(n,r,.5,.5),b=n.fx=b)throw Error("a must be smaller than b.");if(0d;){p=(b-c)/2;h=c+p;var v=a(h);0=b?d:z(ab)a.left=b;if(!c(a.right)||a.rightd)a.top=d;if(!c(a.bottom)||a.bottome)break}}}h.forEach(function(b,d){b.plotX+=v;if("undefined"===typeof b.plotY||n)0<=b.plotX&&b.plotX<=r.len?n?(b.plotY=r.translate(b.x,0,1,0,1),b.plotX=k(b.y)?x.translate(b.y,0,0,0,1):0): +b.plotY=(r.opposite?0:a.yAxis.len)+r.offset:b.shapeArgs={};if((c=h[d-1])&&c.plotX===b.plotX){"undefined"===typeof c.stackIndex&&(c.stackIndex=0);var e=c.stackIndex+1}b.stackIndex=e});this.onSeries=b}}});k(a,"modules/windbarb.src.js",[a["parts/Globals.js"],a["parts/Utilities.js"],a["mixins/on-series.js"]],function(a,f,k){function n(){a.approximations&&!a.approximations.windbarb&&(a.approximations.windbarb=function(h,e){var c=0,b=0,d,f=h.length;for(d=0;d\u25cf {series.name}: {point.value} ({point.beaufort})
    '},vectorLength:20,colorKey:"value",yOffset:-20, +xOffset:0},{pointArrayMap:["value","direction"],parallelArrays:["x","value","direction"],beaufortName:"Calm;Light air;Light breeze;Gentle breeze;Moderate breeze;Fresh breeze;Strong breeze;Near gale;Gale;Strong gale;Storm;Violent storm;Hurricane".split(";"),beaufortFloor:[0,.3,1.6,3.4,5.5,8,10.8,13.9,17.2,20.8,24.5,28.5,32.7],trackerGroups:["markerGroup"],init:function(h,e){n();a.Series.prototype.init.call(this,h,e)},pointAttribs:function(a,e){var c=this.options;a=a.color||this.color;var b=this.options.lineWidth; +e&&(a=c.states[e].color||a,b=(c.states[e].lineWidth||b)+(c.states[e].lineWidthPlus||0));return{stroke:a,"stroke-width":b}},markerAttribs:function(){},getPlotBox:k.getPlotBox,windArrow:function(a){var e=1.943844*a.value,c=this.options.vectorLength/20,b=-10;if(a.isNull)return[];if(0===a.beaufortLevel)return this.chart.renderer.symbols.circle(-10*c,-10*c,20*c,20*c);a=[["M",0,7*c],["L",-1.5*c,7*c],["L",0,10*c],["L",1.5*c,7*c],["L",0,7*c],["L",0,-10*c]];var d=(e-e%50)/50;if(0c.value);b++);c.beaufortLevel=b-1;c.beaufort=e[b-1]})},drawPoints:function(){var a= +this.chart,e=this.yAxis,c=a.inverted,b=this.options.vectorLength/2;this.points.forEach(function(d){var f=d.plotX,g=d.plotY;!1===this.options.clip||a.isInsidePlot(f,0,!1)?(d.graphic||(d.graphic=this.chart.renderer.path().add(this.markerGroup).addClass("highcharts-point highcharts-color-"+l(d.colorIndex,d.series.colorIndex))),d.graphic.attr({d:this.windArrow(d),translateX:f+this.options.xOffset,translateY:g+this.options.yOffset,rotation:d.direction}),this.chart.styledMode||d.graphic.attr(this.pointAttribs(d))): +d.graphic&&(d.graphic=d.graphic.destroy());d.tooltipPos=[f+this.options.xOffset+(c&&!this.onSeries?b:0),g+this.options.yOffset-(c?0:b+e.pos-a.plotTop)]},this)},animate:function(a){a?this.markerGroup.attr({opacity:.01}):this.markerGroup.animate({opacity:1},u(this.options.animation))},invertGroups:g,getExtremes:function(){return{}}},{isValid:function(){return t(this.value)&&0<=this.value}});""});k(a,"masters/modules/windbarb.src.js",[],function(){})}); +//# sourceMappingURL=windbarb.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/wordcloud.js b/libs/highcharts-8.1.2/modules/wordcloud.js new file mode 100644 index 00000000..909a0347 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/wordcloud.js @@ -0,0 +1,27 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + (c) 2016-2019 Highsoft AS + Authors: Jon Arild Nygard + + License: www.highcharts.com/license +*/ +(function(b){"object"===typeof module&&module.exports?(b["default"]=b,module.exports=b):"function"===typeof define&&define.amd?define("highcharts/modules/wordcloud",["highcharts"],function(l){b(l);b.Highcharts=l;return b}):b("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(b){function l(b,e,z,h){b.hasOwnProperty(e)||(b[e]=h.apply(null,z))}b=b?b._modules:{};l(b,"mixins/draw-point.js",[],function(){var b=function(e){var b,h=this,p=h.graphic,t=e.animatableAttribs,u=e.onComplete,l=e.css, +q=e.renderer,y=null===(b=h.series)||void 0===b?void 0:b.options.animation;if(h.shouldDraw())p||(h.graphic=p=q[e.shapeType](e.shapeArgs).add(e.group)),p.css(l).attr(e.attribs).animate(t,e.isNew?!1:y,u);else if(p){var v=function(){h.graphic=p=p.destroy();"function"===typeof u&&u()};Object.keys(t).length?p.animate(t,void 0,function(){v()}):v()}};return function(e){(e.attribs=e.attribs||{})["class"]=this.getClassName();b.call(this,e)}});l(b,"mixins/polygon.js",[b["parts/Globals.js"],b["parts/Utilities.js"]], +function(b,e){var l=e.find,h=e.isArray,p=e.isNumber,t=b.deg2rad,u=function(a,c){c=p(c)?c:14;c=Math.pow(10,c);return Math.round(a*c)/c},H=function(a,c){var b=c[0]-a[0];a=c[1]-a[1];return[[-a,b],[a,-b]]},q=function(a,c){a=a.map(function(a){return a[0]*c[0]+a[1]*c[1]});return{min:Math.min.apply(this,a),max:Math.max.apply(this,a)}},y=function(a,c){var b=a[0];a=a[1];var k=t*-c;c=Math.cos(k);k=Math.sin(k);return[u(b*c-a*k),u(b*k+a*c)]},v=function(a,c,b){a=y([a[0]-c[0],a[1]-c[1]],b);return[a[0]+c[0],a[1]+ +c[1]]},C=function(a){var c=a.axes;if(!h(c)){c=[];var b=b=a.concat([a[0]]);b.reduce(function(a,b){var k=H(a,b)[0];l(c,function(a){return a[0]===k[0]&&a[1]===k[1]})||c.push(k);return b});a.axes=c}return c},F=function(a,c){a=C(a);c=C(c);return a.concat(c)};return{getBoundingBoxFromPolygon:function(a){return a.reduce(function(a,b){var c=b[0];b=b[1];a.left=Math.min(c,a.left);a.right=Math.max(c,a.right);a.bottom=Math.max(b,a.bottom);a.top=Math.min(b,a.top);return a},{left:Number.MAX_VALUE,right:-Number.MAX_VALUE, +bottom:-Number.MAX_VALUE,top:Number.MAX_VALUE})},getPolygon:function(a,b,e,k,h){var c=[a,b],l=a-e/2;a+=e/2;e=b-k/2;b+=k/2;return[[l,e],[a,e],[a,b],[l,b]].map(function(a){return v(a,c,-h)})},isPolygonsColliding:function(a,b){var c=F(a,b);return!l(c,function(c){var e=q(a,c);c=q(b,c);return!!(c.min>e.max||c.maxa.right||f.righta.bottom||f.bottom=g&&("boolean"===typeof c&&d>=b-a&&(c={x:f-(b-d),y:-f}),b-=a,"boolean"===typeof c&&d>=b-a&&(c={x:-f,y:-f+(b-d)}),b-=a,"boolean"===typeof c&&(c=d>=b-a?{x:-f+(b-d),y:f}:{x:f,y:f-(b-d-a)}),c.x*=5,c.y*=5);return c}function u(g,d,f){var a=2*Math.max(Math.abs(f.top),Math.abs(f.bottom));f=2*Math.max(Math.abs(f.left),Math.abs(f.right));return Math.min(0d?g/d:1;g=d>g?d/g:1;return{width:a*f,height:a*g,ratioX:f,ratioY:g}}function q(a,d,f,b){var g=!1;k(a)&&k(d)&&k(f)&&k(b)&&0f&&(g=f+d%a*((b-f)/(a-1||1)));return g}function y(a,d){var g,b=[];for(g=1;1E4>g;g++)b.push(a(g,d));return function(a){return 1E4>=a?b[a-1]:!1}}function v(a,d){var g=d.width/2,b=-(d.height/2),c=d.height/ +2;return!(-(d.width/2)a.right&&ba.bottom)}function C(g,d){var b=d.placed,c=d.field,e=d.rectangle,k=d.polygon,h=d.spiral,l=1,r={x:0,y:0},n=g.rect=a({},e);g.polygon=k;for(g.rotation=d.rotation;!1!==r&&(p(g,b)||v(n,c));)r=h(l),A(r)&&(n.left=e.left+r.x,n.right=e.right+r.x,n.top=e.top+r.y,n.bottom=e.bottom+r.y,g.polygon=K(r.x,r.y,k)),l++;return r}function F(a,d){if(A(a)&&A(d)){var g=d.bottom-d.top;var b=d.right-d.left;d=a.ratioX;var c=a.ratioY;g=b*d>g*c?b:g;a=I(a,{width:a.width+g* +d*2,height:a.height+g*c*2})}return a}var a=e.extend,c=e.find,z=e.isArray,k=e.isNumber,A=e.isObject,I=e.merge;e=e.seriesType;var B=b.noop,J=h.getBoundingBoxFromPolygon,L=h.getPolygon,D=h.isPolygonsColliding,K=h.movePolygon,E=b.Series;e("wordcloud","column",{allowExtendPlayingField:!0,animation:{duration:500},borderWidth:0,clip:!1,colorByPoint:!0,minFontSize:1,maxFontSize:25,placementStrategy:"center",rotation:{from:0,orientations:2,to:90},showInLegend:!1,spiral:"rectangular",style:{fontFamily:"sans-serif", +fontWeight:"900",whiteSpace:"nowrap"},tooltip:{followPointer:!0,pointFormat:'\u25cf {series.name}: {point.weight}
    '}},{animate:E.prototype.animate,animateDrilldown:B,animateDrillupFrom:B,setClip:B,bindAxes:function(){var g={endOnTick:!1,gridLineWidth:0,lineWidth:0,maxPadding:0,startOnTick:!1,title:null,tickPositions:[]};E.prototype.bindAxes.call(this);a(this.yAxis.options,g);a(this.xAxis.options,g)},pointAttribs:function(a,d){a=b.seriesTypes.column.prototype.pointAttribs.call(this, +a,d);delete a.stroke;delete a["stroke-width"];return a},deriveFontSize:function(a,d,b){a=k(a)?a:0;d=k(d)?d:1;b=k(b)?b:1;return Math.floor(Math.max(b,a*d))},drawPoints:function(){var b=this,d=b.hasRendered,c=b.xAxis,e=b.yAxis,l=b.group,h=b.options,p=h.animation,t=h.allowExtendPlayingField,r=b.chart.renderer,n=r.text().add(l),q=[],v=b.placementStrategy[h.placementStrategy],z=h.rotation,B=b.points.map(function(a){return a.weight}),D=Math.max.apply(null,B),G=b.points.concat().sort(function(a,b){return b.weight- +a.weight});b.group.attr({scaleX:1,scaleY:1});G.forEach(function(d){var c=b.deriveFontSize(1/D*d.weight,h.maxFontSize,h.minFontSize);c=a({fontSize:c+"px"},h.style);n.css(c).attr({x:0,y:0,text:d.name});c=n.getBBox(!0);d.dimensions={height:c.height,width:c.width}});var w=H(c.len,e.len,G);var E=y(b.spirals[h.spiral],{field:w});G.forEach(function(c){var g=b.deriveFontSize(1/D*c.weight,h.maxFontSize,h.minFontSize);g=a({fontSize:g+"px"},h.style);var f=v(c,{data:G,field:w,placed:q,rotation:z}),e=a(b.pointAttribs(c, +c.selected&&"select"),{align:"center","alignment-baseline":"middle",x:f.x,y:f.y,text:c.name,rotation:f.rotation}),n=L(f.x,f.y,c.dimensions.width,c.dimensions.height,f.rotation),m=J(n),x=C(c,{rectangle:m,polygon:n,field:w,placed:q,spiral:E,rotation:f.rotation});!x&&t&&(w=F(w,m),x=C(c,{rectangle:m,polygon:n,field:w,placed:q,spiral:E,rotation:f.rotation}));if(A(x)){e.x+=x.x;e.y+=x.y;m.left+=x.x;m.right+=x.x;m.top+=x.y;m.bottom+=x.y;f=w;if(!k(f.left)||f.left>m.left)f.left=m.left;if(!k(f.right)||f.right< +m.right)f.right=m.right;if(!k(f.top)||f.top>m.top)f.top=m.top;if(!k(f.bottom)||f.bottom=a&&(b={x:d*Math.cos(d),y:d*Math.sin(d)},Math.min(Math.abs(b.x),Math.abs(b.y))< +c||(b=!1));return b},rectangular:function(a,b){a=t(a,b);b=b.field;a&&(a.x*=b.ratioX,a.y*=b.ratioY);return a},square:t},utils:{extendPlayingField:F,getRotation:q,isPolygonsColliding:D,rotate2DToOrigin:h.rotate2DToOrigin,rotate2DToPoint:h.rotate2DToPoint},getPlotBox:function(){var a=this.chart,b=a.inverted,c=this[b?"yAxis":"xAxis"];b=this[b?"xAxis":"yAxis"];return{translateX:(c?c.left:a.plotLeft)+(c?c.len:a.plotWidth)/2,translateY:(b?b.top:a.plotTop)+(b?b.len:a.plotHeight)/2,scaleX:1,scaleY:1}}},{draw:l, +shouldDraw:function(){return!this.isNull},isValid:function(){return!0},weight:1})});l(b,"masters/modules/wordcloud.src.js",[],function(){})}); +//# sourceMappingURL=wordcloud.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/modules/xrange.js b/libs/highcharts-8.1.2/modules/xrange.js new file mode 100644 index 00000000..67dd20c2 --- /dev/null +++ b/libs/highcharts-8.1.2/modules/xrange.js @@ -0,0 +1,22 @@ +/* + Highcharts JS v8.1.2 (2020-06-16) + + X-range series + + (c) 2010-2019 Torstein Honsi, Lars A. V. Cabrera + + License: www.highcharts.com/license +*/ +(function(b){"object"===typeof module&&module.exports?(b["default"]=b,module.exports=b):"function"===typeof define&&define.amd?define("highcharts/modules/xrange",["highcharts"],function(h){b(h);b.Highcharts=h;return b}):b("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(b){function h(b,l,h,p){b.hasOwnProperty(l)||(b[l]=p.apply(null,h))}b=b?b._modules:{};h(b,"modules/xrange.src.js",[b["parts/Axis.js"],b["parts/Globals.js"],b["parts/Color.js"],b["parts/Point.js"],b["parts/Utilities.js"]], +function(b,l,h,p,g){var x=h.parse;h=g.addEvent;var r=g.clamp,B=g.correctFloat,C=g.defined,y=g.find,t=g.isNumber,v=g.isObject,u=g.merge,w=g.pick;g=g.seriesType;var z=l.seriesTypes.column,A=l.seriesTypes,D=l.Series;g("xrange","column",{colorByPoint:!0,dataLabels:{formatter:function(){var a=this.point.partialFill;v(a)&&(a=a.amount);if(t(a)&&0{point.x} - {point.x2}
    ',pointFormat:'\u25cf {series.name}: {point.yCategory}
    '}, +borderRadius:3,pointRange:0},{type:"xrange",parallelArrays:["x","x2","y"],requireSorting:!1,animate:A.line.prototype.animate,cropShoulder:1,getExtremesFromAll:!0,autoIncrement:l.noop,buildKDTree:l.noop,init:function(){A.column.prototype.init.apply(this,arguments);this.options.stacking=void 0},getColumnMetrics:function(){function a(){f.series.forEach(function(a){var c=a.xAxis;a.xAxis=a.yAxis;a.yAxis=c})}var f=this.chart;a();var d=z.prototype.getColumnMetrics.call(this);a();return d},cropData:function(a, +f,d,m){f=D.prototype.cropData.call(this,this.x2Data,f,d,m);f.xData=a.slice(f.start,f.end);return f},findPointIndex:function(a){var f=this.cropped,d=this.cropStart,m=this.points,c=a.id;if(c)var e=(e=y(m,function(a){return a.id===c}))?e.index:void 0;"undefined"===typeof e&&(e=(e=y(m,function(c){return c.x===a.x&&c.x2===a.x2&&!c.touched}))?e.index:void 0);f&&t(e)&&t(d)&&e>=d&&(e-=d);return e},translatePoint:function(a){var f=this.xAxis,d=this.yAxis,m=this.columnMetrics,c=this.options,e=c.minPointLength|| +0,b=a.plotX,g=w(a.x2,a.x+(a.len||0)),k=f.translate(g,0,0,0,1);g=Math.abs(k-b);var h=this.chart.inverted,l=w(c.borderWidth,1)%2/2,n=m.offset,q=Math.round(m.width);e&&(e-=g,0>e&&(e=0),b-=e/2,k+=e/2);b=Math.max(b,-10);k=r(k,-10,f.len+10);C(a.options.pointWidth)&&(n-=(Math.ceil(a.options.pointWidth)-q)/2,q=Math.ceil(a.options.pointWidth));c.pointPlacement&&t(a.plotY)&&d.categories&&(a.plotY=d.translate(a.y,0,1,0,1,c.pointPlacement));a.shapeArgs={x:Math.floor(Math.min(b,k))+l,y:Math.floor(a.plotY+n)+l, +width:Math.round(Math.abs(k-b)),height:q,r:this.options.borderRadius};c=a.shapeArgs.x;e=c+a.shapeArgs.width;0>c||e>f.len?(c=r(c,0,f.len),e=r(e,0,f.len),k=e-c,a.dlBox=u(a.shapeArgs,{x:c,width:e-c,centerX:k?k/2:null})):a.dlBox=null;c=a.tooltipPos;e=h?1:0;k=h?0:1;m=this.columnMetrics?this.columnMetrics.offset:-m.width/2;c[e]=r(c[e]+g/2*(f.reversed?-1:1)*(h?-1:1),0,f.len-1);c[k]=r(c[k]+(h?-1:1)*m,0,d.len-1);if(m=a.partialFill)v(m)&&(m=m.amount),t(m)||(m=0),d=a.shapeArgs,a.partShapeArgs={x:d.x,y:d.y,width:d.width, +height:d.height,r:this.options.borderRadius},b=Math.max(Math.round(g*m+a.plotX-b),0),a.clipRectArgs={x:f.reversed?d.x+g-b:d.x,y:d.y,width:b,height:d.height}},translate:function(){z.prototype.translate.apply(this,arguments);this.points.forEach(function(a){this.translatePoint(a)},this)},drawPoint:function(a,f){var d=this.options,b=this.chart.renderer,c=a.graphic,e=a.shapeType,g=a.shapeArgs,h=a.partShapeArgs,k=a.clipRectArgs,l=a.partialFill,p=d.stacking&&!d.borderRadius,n=a.state,q=d.states[n||"normal"]|| +{},r="undefined"===typeof n?"attr":f;n=this.pointAttribs(a,n);q=w(this.chart.options.chart.animation,q.animation);if(a.isNull||!1===a.visible)c&&(a.graphic=c.destroy());else{if(c)c.rect[f](g);else a.graphic=c=b.g("point").addClass(a.getClassName()).add(a.group||this.group),c.rect=b[e](u(g)).addClass(a.getClassName()).addClass("highcharts-partfill-original").add(c);h&&(c.partRect?(c.partRect[f](u(h)),c.partialClipRect[f](u(k))):(c.partialClipRect=b.clipRect(k.x,k.y,k.width,k.height),c.partRect=b[e](h).addClass("highcharts-partfill-overlay").add(c).clip(c.partialClipRect))); +this.chart.styledMode||(c.rect[f](n,q).shadow(d.shadow,null,p),h&&(v(l)||(l={}),v(d.partialFill)&&(l=u(l,d.partialFill)),a=l.fill||x(n.fill).brighten(-.3).get()||x(a.color||this.color).brighten(-.3).get(),n.fill=a,c.partRect[r](n,q).shadow(d.shadow,null,p)))}},drawPoints:function(){var a=this,f=a.getAnimationVerb();a.points.forEach(function(b){a.drawPoint(b,f)})},getAnimationVerb:function(){return this.chart.pointCount<(this.options.animationLimit||250)?"animate":"attr"}},{resolveColor:function(){var a= +this.series;if(a.options.colorByPoint&&!this.options.color){var b=a.options.colors||a.chart.options.colors;var d=this.y%(b?b.length:a.chart.options.chart.colorCount);b=b&&b[d];a.chart.styledMode||(this.color=b);this.options.colorIndex||(this.colorIndex=d)}else this.color||(this.color=a.color)},init:function(){p.prototype.init.apply(this,arguments);this.y||(this.y=0);return this},setState:function(){p.prototype.setState.apply(this,arguments);this.series.drawPoint(this,this.series.getAnimationVerb())}, +getLabelConfig:function(){var a=p.prototype.getLabelConfig.call(this),b=this.series.yAxis.categories;a.x2=this.x2;a.yCategory=this.yCategory=b&&b[this.y];return a},tooltipDateKeys:["x","x2"],isValid:function(){return"number"===typeof this.x&&"number"===typeof this.x2}});h(b,"afterGetSeriesExtremes",function(){var a=this.series,b;if(this.isXAxis){var d=w(this.dataMax,-Number.MAX_VALUE);a.forEach(function(a){a.x2Data&&a.x2Data.forEach(function(a){a>d&&(d=a,b=!0)})});b&&(this.dataMax=d)}});""});h(b, +"masters/modules/xrange.src.js",[],function(){})}); +//# sourceMappingURL=xrange.js.map \ No newline at end of file diff --git a/libs/highcharts-8.1.2/plugins/draggable-legend.js b/libs/highcharts-8.1.2/plugins/draggable-legend.js new file mode 100644 index 00000000..04f9771d --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/draggable-legend.js @@ -0,0 +1,97 @@ +/** + * Highcharts plugin for dragging a legend by its title + * + * Author: Torstein Hønsi + * License: MIT License + * Version: 1.3.9 + * Requires: Highcharts 3.0+ + * + * Usage: Set draggable:true and floating:true in the legend options. The legend + * preserves is alignment after dragging. For example if it is aligned to the right, + * if will keep the same distance to the right edge even after chart resize or + * when exporting to a different size. + */ +(function (H) { + var addEvent = H.addEvent; + + H.wrap(H.Chart.prototype, 'init', function (proceed) { + proceed.apply(this, Array.prototype.slice.call(arguments, 1)); + + var chart = this, + legend = chart.legend, + title = legend.title, + options = legend.options, + isDragging, + downX, + downY, + optionsX, + optionsY, + currentX, + currentY; + + + function pointerDown(e) { + e = chart.pointer.normalize(e); + downX = e.chartX; + downY = e.chartY; + optionsX = options.x; + optionsY = options.y; + currentX = legend.group.attr('translateX'); + currentY = legend.group.attr('translateY'); + isDragging = true; + } + + function pointerMove(e) { + if (isDragging) { + e = chart.pointer.normalize(e); + var draggedX = e.chartX - downX, + draggedY = e.chartY - downY; + + // Stop touch-panning the page + e.preventDefault(); + + // Do the move is we're inside the chart + if ( + currentX + draggedX > 0 && + currentX + draggedX + legend.legendWidth < chart.chartWidth && + currentY + draggedY > 0 && + currentY + draggedY + legend.legendHeight < chart.chartHeight + ) { + + options.x = optionsX + draggedX; + options.y = optionsY + draggedY; + legend.group.placed = false; // prevent animation + legend.group.align(H.extend({ + width: legend.legendWidth, + height: legend.legendHeight + }, options), true, 'spacingBox'); + legend.positionCheckboxes(); + } + if (chart.pointer.selectionMarker) { + chart.pointer.selectionMarker = chart.pointer.selectionMarker.destroy(); + } + + } + } + + function pointerUp() { + isDragging = false; + } + + if (options.draggable && title) { + + title.css({ cursor: 'move' }); + + // Mouse events + addEvent(title.element, 'mousedown', pointerDown); + addEvent(chart.container, 'mousemove', pointerMove); + addEvent(document, 'mouseup', pointerUp); + + // Touch events + addEvent(title.element, 'touchstart', pointerDown); + addEvent(chart.container, 'touchmove', pointerMove); + addEvent(document, 'touchend', pointerUp); + + } + }); +}(Highcharts)); \ No newline at end of file diff --git a/libs/highcharts-8.1.2/plugins/grouped-categories.js b/libs/highcharts-8.1.2/plugins/grouped-categories.js new file mode 100644 index 00000000..7b7be59e --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/grouped-categories.js @@ -0,0 +1,603 @@ +/* global Highcharts module window:true */ +(function (factory) { + if (typeof module === 'object' && module.exports) { + module.exports = factory; + } else { + factory(Highcharts); + } +}(function (HC) { + 'use strict'; + /** + * Grouped Categories v1.1.6 (2020-06-19) + * + * (c) 2012-2020 Black Label + * + * License: Creative Commons Attribution (CC) + */ + + /* jshint expr:true, boss:true */ + var UNDEFINED = void 0, + mathRound = Math.round, + mathMin = Math.min, + mathMax = Math.max, + merge = HC.merge, + pick = HC.pick, + each = HC.each, + + // cache prototypes + axisProto = HC.Axis.prototype, + tickProto = HC.Tick.prototype, + + // cache original methods + protoAxisInit = axisProto.init, + protoAxisRender = axisProto.render, + protoAxisSetCategories = axisProto.setCategories, + protoTickGetLabelSize = tickProto.getLabelSize, + protoTickAddLabel = tickProto.addLabel, + protoTickDestroy = tickProto.destroy, + protoTickRender = tickProto.render; + + function deepClone(thing) { + return JSON.parse(JSON.stringify(thing)); + } + + function Category(obj, parent) { + this.userOptions = deepClone(obj); + this.name = obj.name || obj; + this.parent = parent; + + return this; + } + + Category.prototype.toString = function () { + var parts = [], + cat = this; + + while (cat) { + parts.push(cat.name); + cat = cat.parent; + } + + return parts.join(', '); + }; + + // returns sum of an array + function sum(arr) { + var l = arr.length, + x = 0; + + while (l--) { + x += arr[l]; + } + + return x; + } + + // Adds category leaf to array + function addLeaf(out, cat, parent) { + out.unshift(new Category(cat, parent)); + + while (parent) { + parent.leaves = parent.leaves ? (parent.leaves + 1) : 1; + parent = parent.parent; + } + } + + // Builds reverse category tree + function buildTree(cats, out, options, parent, depth) { + var len = cats.length, + cat; + + depth = depth ? depth : 0; + options.depth = options.depth ? options.depth : 0; + + while (len--) { + cat = cats[len]; + + if (cat.categories) { + if (parent) { + cat.parent = parent; + } + buildTree(cat.categories, out, options, cat, depth + 1); + } else { + addLeaf(out, cat, parent); + } + } + options.depth = mathMax(options.depth, depth); + } + + // Pushes part of grid to path + function addGridPart(path, d, width) { + // Based on crispLine from HC (#65) + if (d[0] === d[2]) { + d[0] = d[2] = mathRound(d[0]) - (width % 2 / 2); + } + if (d[1] === d[3]) { + d[1] = d[3] = mathRound(d[1]) + (width % 2 / 2); + } + + path.push( + 'M', + d[0], d[1], + 'L', + d[2], d[3] + ); + } + + // Returns tick position + function tickPosition(tick, pos) { + return tick.getPosition(tick.axis.horiz, pos, tick.axis.tickmarkOffset); + } + + function walk(arr, key, fn) { + var l = arr.length, + children; + + while (l--) { + children = arr[l][key]; + + if (children) { + walk(children, key, fn); + } + fn(arr[l]); + } + } + + // + // Axis prototype + // + + axisProto.init = function (chart, options) { + // default behaviour + protoAxisInit.call(this, chart, options); + + if (typeof options === 'object' && options.categories) { + this.setupGroups(options); + } + }; + + // setup required axis options + axisProto.setupGroups = function (options) { + var categories = deepClone(options.categories), + reverseTree = [], + stats = {}, + labelOptions = this.options.labels, + userAttr = labelOptions.groupedOptions, + css = labelOptions.style; + + // build categories tree + buildTree(categories, reverseTree, stats); + + // set axis properties + this.categoriesTree = categories; + this.categories = reverseTree; + this.isGrouped = stats.depth !== 0; + this.labelsDepth = stats.depth; + this.labelsSizes = []; + this.labelsGridPath = []; + this.tickLength = options.tickLength || this.tickLength || null; + // #66: tickWidth for x axis defaults to 1, for y to 0 + this.tickWidth = pick(options.tickWidth, this.isXAxis ? 1 : 0); + this.directionFactor = [-1, 1, 1, -1][this.side]; + this.options.lineWidth = pick(options.lineWidth, 1); + // #85: align labels vertically + this.groupFontHeights = []; + for (var i = 0; i <= stats.depth; i++) { + var hasOptions = userAttr && userAttr[i - 1], + mergedCSS = hasOptions && userAttr[i - 1].style ? merge(css, userAttr[i - 1].style) : css; + this.groupFontHeights[i] = Math.round(this.chart.renderer.fontMetrics(mergedCSS ? mergedCSS.fontSize : 0).b * 0.3); + } + }; + + + axisProto.render = function () { + // clear grid path + if (this.isGrouped) { + this.labelsGridPath = []; + } + + // cache original tick length + if (this.originalTickLength === UNDEFINED) { + this.originalTickLength = this.options.tickLength; + } + + // use default tickLength for not-grouped axis + // and generate grid on grouped axes, + // use tiny number to force highcharts to hide tick + this.options.tickLength = this.isGrouped ? 0.001 : this.originalTickLength; + + protoAxisRender.call(this); + + if (!this.isGrouped) { + if (this.labelsGrid) { + this.labelsGrid.attr({ + visibility: 'hidden' + }); + } + return false; + } + + var axis = this, + options = axis.options, + top = axis.top, + left = axis.left, + right = left + axis.width, + bottom = top + axis.height, + visible = axis.hasVisibleSeries || axis.hasData, + depth = axis.labelsDepth, + grid = axis.labelsGrid, + horiz = axis.horiz, + d = axis.labelsGridPath, + i = options.drawHorizontalBorders === false ? (depth + 1) : 0, + offset = axis.opposite ? (horiz ? top : right) : (horiz ? bottom : left), + tickWidth = axis.tickWidth, + part; + + if (axis.userTickLength) { + depth -= 1; + } + + // render grid path for the first time + if (!grid) { + grid = axis.labelsGrid = axis.chart.renderer.path() + .attr({ + // #58: use tickWidth/tickColor instead of lineWidth/lineColor: + strokeWidth: tickWidth, // < 4.0.3 + 'stroke-width': tickWidth, // 4.0.3+ #30 + stroke: options.tickColor || '' // for styled mode (tickColor === undefined) + }) + .add(axis.axisGroup); + // for styled mode - add class + if (!options.tickColor) { + grid.addClass('highcharts-tick'); + } + } + + // go through every level and draw horizontal grid line + while (i <= depth) { + offset += axis.groupSize(i); + + part = horiz ? + [left, offset, right, offset] : + [offset, top, offset, bottom]; + + addGridPart(d, part, tickWidth); + i++; + } + + // draw grid path + grid.attr({ + d: d, + visibility: visible ? 'visible' : 'hidden' + }); + + axis.labelGroup.attr({ + visibility: visible ? 'visible' : 'hidden' + }); + + + walk(axis.categoriesTree, 'categories', function (group) { + var tick = group.tick; + + if (!tick) { + return false; + } + if (tick.startAt + tick.leaves - 1 < axis.min || tick.startAt > axis.max) { + tick.label.hide(); + tick.destroyed = 0; + } else { + tick.label.attr({ + visibility: visible ? 'visible' : 'hidden' + }); + } + return true; + }); + return true; + }; + + axisProto.setCategories = function (newCategories, doRedraw) { + if (this.categories) { + this.cleanGroups(); + } + this.setupGroups({ + categories: newCategories + }); + this.categories = this.userOptions.categories = newCategories; + protoAxisSetCategories.call(this, this.categories, doRedraw); + }; + + // cleans old categories + axisProto.cleanGroups = function () { + var ticks = this.ticks, + n; + + for (n in ticks) { + if (ticks[n].parent) { + delete ticks[n].parent; + } + } + walk(this.categoriesTree, 'categories', function (group) { + var tick = group.tick; + + if (!tick) { + return false; + } + tick.label.destroy(); + + each(tick, function (v, i) { + delete tick[i]; + }); + delete group.tick; + + return true; + }); + this.labelsGrid = null; + }; + + // keeps size of each categories level + axisProto.groupSize = function (level, position) { + var positions = this.labelsSizes, + direction = this.directionFactor, + groupedOptions = this.options.labels.groupedOptions ? this.options.labels.groupedOptions[level - 1] : false, + userXY = 0; + + if (groupedOptions) { + if (direction === -1) { + userXY = groupedOptions.x ? groupedOptions.x : 0; + } else { + userXY = groupedOptions.y ? groupedOptions.y : 0; + } + } + + if (position !== UNDEFINED) { + positions[level] = mathMax(positions[level] || 0, position + 10 + Math.abs(userXY)); + } + + if (level === true) { + return sum(positions) * direction; + } else if (positions[level]) { + return positions[level] * direction; + } + + return 0; + }; + + // + // Tick prototype + // + + // Override methods prototypes + tickProto.addLabel = function () { + var tick = this, + axis = tick.axis, + category; + + protoTickAddLabel.call(tick); + + if (!axis.categories || !(category = axis.categories[tick.pos])) { + return false; + } + + // set label text - but applied after formatter #46 + if (tick.label) { + tick.label.attr('text', tick.axis.labelFormatter.call({ + axis: axis, + chart: axis.chart, + isFirst: tick.isFirst, + isLast: tick.isLast, + value: category.name, + pos: tick.pos + })); + } + + // create elements for parent categories + if (axis.isGrouped && axis.options.labels.enabled) { + tick.addGroupedLabels(category); + } + return true; + }; + + // render ancestor label + tickProto.addGroupedLabels = function (category) { + var tick = this, + axis = this.axis, + chart = axis.chart, + options = axis.options.labels, + useHTML = options.useHTML, + css = options.style, + userAttr = options.groupedOptions, + attr = { + align: 'center', + rotation: options.rotation, + x: 0, + y: 0 + }, + size = axis.horiz ? 'height' : 'width', + depth = 0, + label; + + + while (tick) { + if (depth > 0 && !category.tick) { + // render label element + this.value = category.name; + var name = options.formatter ? options.formatter.call(this, category) : category.name, + hasOptions = userAttr && userAttr[depth - 1], + mergedAttrs = hasOptions ? merge(attr, userAttr[depth - 1]) : attr, + mergedCSS = hasOptions && userAttr[depth - 1].style ? merge(css, userAttr[depth - 1].style) : css; + + // #63: style is passed in CSS and not as an attribute + delete mergedAttrs.style; + + label = chart.renderer.text(name, 0, 0, useHTML) + .attr(mergedAttrs) + .css(mergedCSS) + .add(axis.labelGroup); + + // tick properties + tick.startAt = this.pos; + tick.childCount = category.categories.length; + tick.leaves = category.leaves; + tick.visible = this.childCount; + tick.label = label; + tick.labelOffsets = { + x: mergedAttrs.x, + y: mergedAttrs.y + }; + + // link tick with category + category.tick = tick; + } + + // set level size, #93 + if (tick && tick.label) { + axis.groupSize(depth, tick.label.getBBox()[size]); + } + + // go up to the parent category + category = category.parent; + + if (category) { + tick = tick.parent = category.tick || {}; + } else { + tick = null; + } + + depth++; + } + }; + + // set labels position & render categories grid + tickProto.render = function (index, old, opacity) { + protoTickRender.call(this, index, old, opacity); + + var treeCat = this.axis.categories[this.pos]; + + if (!this.axis.isGrouped || !treeCat || this.pos > this.axis.max) { + return; + } + + var tick = this, + group = tick, + axis = tick.axis, + tickPos = tick.pos, + isFirst = tick.isFirst, + max = axis.max, + min = axis.min, + horiz = axis.horiz, + grid = axis.labelsGridPath, + size = axis.groupSize(0), + tickWidth = axis.tickWidth, + xy = tickPosition(tick, tickPos), + start = horiz ? xy.y : xy.x, + baseLine = axis.chart.renderer.fontMetrics(axis.options.labels.style ? axis.options.labels.style.fontSize : 0).b, + depth = 1, + reverseCrisp = ((horiz && xy.x === axis.pos + axis.len) || (!horiz && xy.y === axis.pos)) ? -1 : 0, // adjust grid lines for edges + gridAttrs, + lvlSize, + minPos, + maxPos, + attrs, + bBox; + + // render grid for "normal" categories (first-level), render left grid line only for the first category + if (isFirst) { + gridAttrs = horiz ? + [axis.left, xy.y, axis.left, xy.y + axis.groupSize(true)] : axis.isXAxis ? + [xy.x, axis.top, xy.x + axis.groupSize(true), axis.top] : [xy.x, axis.top + axis.len, xy.x + axis.groupSize(true), axis.top + axis.len]; + + addGridPart(grid, gridAttrs, tickWidth); + } + + if (horiz && axis.left < xy.x) { + addGridPart(grid, [xy.x - reverseCrisp, xy.y, xy.x - reverseCrisp, xy.y + size], tickWidth); + } else if (!horiz && axis.top <= xy.y) { + addGridPart(grid, [xy.x, xy.y + reverseCrisp, xy.x + size, xy.y + reverseCrisp], tickWidth); + } + + size = start + size; + + function fixOffset(tCat) { + var ret = 0; + if (isFirst) { + ret = tCat.parent.categories.indexOf(tCat.name); + ret = ret < 0 ? 0 : ret; + return ret; + } + return ret; + } + + + while (group.parent) { + group = group.parent; + + var fix = fixOffset(treeCat), + userX = group.labelOffsets.x, + userY = group.labelOffsets.y; + + minPos = tickPosition(tick, mathMax(group.startAt - 1, min - 1)); + maxPos = tickPosition(tick, mathMin(group.startAt + group.leaves - 1 - fix, max)); + bBox = group.label.getBBox(true); + lvlSize = axis.groupSize(depth); + // check if on the edge to adjust + reverseCrisp = ((horiz && maxPos.x === axis.pos + axis.len) || (!horiz && maxPos.y === axis.pos)) ? -1 : 0; + + attrs = horiz ? { + x: (minPos.x + maxPos.x) / 2 + userX, + y: size + axis.groupFontHeights[depth] + lvlSize / 2 + userY / 2 + } : { + x: size + lvlSize / 2 + userX, + y: (minPos.y + maxPos.y - bBox.height) / 2 + baseLine + userY + }; + + if (!isNaN(attrs.x) && !isNaN(attrs.y)) { + group.label.attr(attrs); + + if (grid) { + if (horiz && axis.left < maxPos.x) { + addGridPart(grid, [maxPos.x - reverseCrisp, size, maxPos.x - reverseCrisp, size + lvlSize], tickWidth); + } else if (!horiz && axis.top <= maxPos.y) { + addGridPart(grid, [size, maxPos.y + reverseCrisp, size + lvlSize, maxPos.y + reverseCrisp], tickWidth); + } + } + } + + size += lvlSize; + depth++; + } + }; + + tickProto.destroy = function () { + var group = this.parent; + + while (group) { + group.destroyed = group.destroyed ? (group.destroyed + 1) : 1; + group = group.parent; + } + + protoTickDestroy.call(this); + }; + + // return size of the label (height for horizontal, width for vertical axes) + tickProto.getLabelSize = function () { + if (this.axis.isGrouped === true) { + // #72, getBBox might need recalculating when chart is tall + var size = protoTickGetLabelSize.call(this) + 10, + topLabelSize = this.axis.labelsSizes[0]; + if (topLabelSize < size) { + this.axis.labelsSizes[0] = size; + } + return sum(this.axis.labelsSizes); + } + return protoTickGetLabelSize.call(this); + }; + + // Since datasorting is not supported by the plugin, + // override replaceMovedLabel method, #146. + HC.wrap(HC.Tick.prototype, 'replaceMovedLabel', function (proceed) { + if (!this.axis.isGrouped) { + proceed.apply(this, Array.prototype.slice.call(arguments, 1)); + } + }); + +})); diff --git a/libs/highcharts-8.1.2/plugins/highcharts-regression.js b/libs/highcharts-8.1.2/plugins/highcharts-regression.js new file mode 100644 index 00000000..32308c1a --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/highcharts-regression.js @@ -0,0 +1,663 @@ +(function(factory) { + "use strict"; + + if (typeof module === "object" && module.exports) { + module.exports = factory; + } else { + if(typeof define === "function" && define.amd){ + define(function() { + return factory + }); + } + else{ + if(typeof Highcharts !== "undefined"){ + factory(Highcharts); + } + else{ + void 0; + } + } + } +}(function (H) { + var processSerie = function (s, method, chart) { + if (s.regression && !s.rendered) { + s.regressionSettings = s.regressionSettings || {}; + s.regressionSettings.tooltip = s.regressionSettings.tooltip || {}; + s.regressionSettings.dashStyle = s.regressionSettings.dashStyle || 'solid'; + s.regressionSettings.decimalPlaces = s.regressionSettings.decimalPlaces || 2; + s.regressionSettings.useAllSeries = s.regressionSettings.useAllSeries || false; + + var regressionType = s.regressionSettings.type || "linear"; + var regression; + var extraSerie = { + data: [], + color: s.regressionSettings.color || '', + yAxis: s.yAxis, + lineWidth: s.regressionSettings.lineWidth || 2, + marker: {enabled: false}, + isRegressionLine: true, + visible: s.regressionSettings.visible, + type: s.regressionSettings.linetype || 'spline', + name: s.regressionSettings.name || "Equation: %eq", + id: s.regressionSettings.id, + dashStyle: s.regressionSettings.dashStyle || 'solid', + showInLegend: !s.regressionSettings.hideInLegend, + tooltip: { + valueSuffix: s.regressionSettings.tooltip.valueSuffix || ' ' + } + }; + + if (typeof s.regressionSettings.index !== 'undefined') { + extraSerie.index = s.regressionSettings.index; + } + if (typeof s.regressionSettings.legendIndex !== 'undefined') { + extraSerie.legendIndex = s.regressionSettings.legendIndex; + } + + var mergedData = s.data; + if (s.regressionSettings.useAllSeries) { + mergedData = []; + for (di = 0; di < series.length; di++) { + var seriesToMerge = series[di]; + mergedData = mergedData.concat(seriesToMerge.data); + } + } + + if (regressionType == "linear") { + var extrapolate = s.regressionSettings.extrapolate || 0; + regression = _linear(mergedData, s.regressionSettings.decimalPlaces, extrapolate); + extraSerie.type = "line"; + } else if (regressionType == "exponential") { + var extrapolate = s.regressionSettings.extrapolate || 0; + regression = _exponential(mergedData, extrapolate); + } + else if (regressionType == "polynomial") { + var order = s.regressionSettings.order || 2; + var extrapolate = s.regressionSettings.extrapolate || 0; + regression = _polynomial(mergedData, order, extrapolate); + } else if (regressionType == "power") { + var extrapolate = s.regressionSettings.extrapolate || 0; + regression = _power(mergedData, extrapolate); + } else if (regressionType == "logarithmic") { + var extrapolate = s.regressionSettings.extrapolate || 0; + regression = _logarithmic(mergedData, extrapolate); + } else if (regressionType == "loess") { + var loessSmooth = s.regressionSettings.loessSmooth || 25; + regression = _loess(mergedData, loessSmooth / 100); + } else { + console.error("Invalid regression type: ", regressionType); + return; + } + + regression.rSquared = coefficientOfDetermination(mergedData, regression.points); + regression.rValue = _round(Math.sqrt(regression.rSquared), s.regressionSettings.decimalPlaces); + regression.rSquared = _round(regression.rSquared, s.regressionSettings.decimalPlaces); + regression.standardError = _round(standardError(mergedData, regression.points), s.regressionSettings.decimalPlaces); + extraSerie.data = regression.points; + extraSerie.name = replaceRegressionPlaceholders(extraSerie.name, regression); + + if (s.regressionSettings.dataLabels !== undefined) { + for (let i = 0; i < s.regressionSettings.dataLabels.length; i++) { + var dataLabel = s.regressionSettings.dataLabels[i] + var dataLabelPoint = extraSerie.data[dataLabel.pointIndex]; + var dataLabelFormat = replaceRegressionPlaceholders(dataLabel.format, regression); + + if (dataLabelPoint !== undefined) { + extraSerie.data[dataLabel.pointIndex] = { + x: dataLabelPoint[0], + y: dataLabelPoint[1], + dataLabels: { + enabled: true, + format: dataLabelFormat + } + }; + } + } + } + + extraSerie.regressionOutputs = regression; + return extraSerie; + } + } + + H.wrap(H.Chart.prototype, 'init', function (proceed) { + var series = arguments[1].series; + var extraSeries = []; + var i = 0; + if (series) { + for (i = 0; i < series.length; i++) { + var s = series[i]; + if (s.regression) { + var extraSerie = processSerie(s, 'init', this); + extraSeries.push(extraSerie); + arguments[1].series[i].rendered = true; + } + } + } + + if (extraSerie) { + arguments[1].series = series.concat(extraSeries); + } + + proceed.apply(this, Array.prototype.slice.call(arguments, 1)); + + + }); + + H.wrap(H.Chart.prototype, 'addSeries', function (proceed) { + var s = arguments[1]; + var extraSerie = processSerie(s, 'addSeries', this); + arguments[1].rendered = true; + if (extraSerie) { + this.addSeries(extraSerie); + } + return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); + }); + + + /** + * Code extracted from https://github.com/Tom-Alexander/regression-js/ + */ + function _exponential(data, extrapolate) { + var sum = [0, 0, 0, 0, 0, 0], n = 0, results = []; + + for (len = data.length; n < len; n++) { + if (data[n].x != null) { + data[n][0] = data[n].x; + data[n][1] = data[n].y; + } + if (data[n][1] != null) { + sum[0] += data[n][0]; // X + sum[1] += data[n][1]; // Y + sum[2] += data[n][0] * data[n][0] * data[n][1]; // XXY + sum[3] += data[n][1] * Math.log(data[n][1]); // Y Log Y + sum[4] += data[n][0] * data[n][1] * Math.log(data[n][1]); //YY Log Y + sum[5] += data[n][0] * data[n][1]; //XY + } + } + + var denominator = (sum[1] * sum[2] - sum[5] * sum[5]); + var A = Math.pow(Math.E, (sum[2] * sum[3] - sum[5] * sum[4]) / denominator); + var B = (sum[1] * sum[4] - sum[5] * sum[3]) / denominator; + + var resultLength = data.length + extrapolate; + var step = data[data.length - 1][0] - data[data.length - 2][0]; + + for (var i = 0, len = resultLength; i < len; i++) { + var answer = 0; + if(typeof data[i] !== 'undefined') { + var x = data[i][0]; + } else { + var x = data[data.length - 1][0] + (i - data.length) * step; + } + + var coordinate = [x, A * Math.pow(Math.E, B * x)]; + results.push(coordinate); + } + + results.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + + var string = 'y = ' + Math.round(A * 100) / 100 + 'e^(' + Math.round(B * 100) / 100 + 'x)'; + + return {equation: [A, B], points: results, string: string}; + } + + + /** + * Code extracted from https://github.com/Tom-Alexander/regression-js/ + * Human readable formulas: + * + * N * Σ(XY) - Σ(X) + * intercept = --------------------- + * N * Σ(X^2) - Σ(X)^2 + * + * correlation = N * Σ(XY) - Σ(X) * Σ (Y) / √ ( N * Σ(X^2) - Σ(X) ) * ( N * Σ(Y^2) - Σ(Y)^2 ) ) ) + * + */ + function _linear(data, decimalPlaces, extrapolate) { + var sum = [0, 0, 0, 0, 0], n = 0, results = [], N = data.length; + + for (; n < data.length; n++) { + if (data[n]['x'] != null) { + data[n][0] = data[n].x; + data[n][1] = data[n].y; + } + if (data[n][1] != null) { + sum[0] += data[n][0]; //Σ(X) + sum[1] += data[n][1]; //Σ(Y) + sum[2] += data[n][0] * data[n][0]; //Σ(X^2) + sum[3] += data[n][0] * data[n][1]; //Σ(XY) + sum[4] += data[n][1] * data[n][1]; //Σ(Y^2) + } else { + N -= 1; + } + } + + var gradient = (N * sum[3] - sum[0] * sum[1]) / (N * sum[2] - sum[0] * sum[0]); + var intercept = (sum[1] / N) - (gradient * sum[0]) / N; + // var correlation = (N * sum[3] - sum[0] * sum[1]) / Math.sqrt((N * sum[2] - sum[0] * sum[0]) * (N * sum[4] - sum[1] * sum[1])); + + var resultLength = data.length + extrapolate; + var step = data[data.length - 1][0] - data[data.length - 2][0]; + + for (var i = 0, len = resultLength; i < len; i++) { + var answer = 0; + if(typeof data[i] !== 'undefined') { + var x = data[i][0]; + } else { + var x = data[data.length - 1][0] + (i - data.length) * step; + } + + var coorY = x * gradient + intercept; + if (decimalPlaces) + coorY = parseFloat(coorY.toFixed(decimalPlaces)); + var coordinate = [x, coorY]; + results.push(coordinate); + } + + results.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + + var string = 'y = ' + Math.round(gradient * 100) / 100 + 'x + ' + Math.round(intercept * 100) / 100; + return {equation: [gradient, intercept], points: results, string: string}; + } + + /** + * Code extracted from https://github.com/Tom-Alexander/regression-js/ + */ + function _logarithmic(data, extrapolate) { + var sum = [0, 0, 0, 0], n = 0, results = [], mean = 0; + + + for (len = data.length; n < len; n++) { + if (data[n].x != null) { + data[n][0] = data[n].x; + data[n][1] = data[n].y; + } + if (data[n][1] != null) { + sum[0] += Math.log(data[n][0]); + sum[1] += data[n][1] * Math.log(data[n][0]); + sum[2] += data[n][1]; + sum[3] += Math.pow(Math.log(data[n][0]), 2); + } + } + + var B = (n * sum[1] - sum[2] * sum[0]) / (n * sum[3] - sum[0] * sum[0]); + var A = (sum[2] - B * sum[0]) / n; + + var resultLength = data.length + extrapolate; + var step = data[data.length - 1][0] - data[data.length - 2][0]; + + for (var i = 0, len = resultLength; i < len; i++) { + var answer = 0; + if(typeof data[i] !== 'undefined') { + var x = data[i][0]; + } else { + var x = data[data.length - 1][0] + (i - data.length) * step; + } + + var coordinate = [x, A + B * Math.log(x)]; + results.push(coordinate); + } + + results.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + + var string = 'y = ' + Math.round(A * 100) / 100 + ' + ' + Math.round(B * 100) / 100 + ' ln(x)'; + + return {equation: [A, B], points: results, string: string}; + } + + /** + * Code extracted from https://github.com/Tom-Alexander/regression-js/ + */ + function _power(data, extrapolate) { + var sum = [0, 0, 0, 0], n = 0, results = []; + + for (len = data.length; n < len; n++) { + if (data[n].x != null) { + data[n][0] = data[n].x; + data[n][1] = data[n].y; + } + if (data[n][1] != null) { + sum[0] += Math.log(data[n][0]); + sum[1] += Math.log(data[n][1]) * Math.log(data[n][0]); + sum[2] += Math.log(data[n][1]); + sum[3] += Math.pow(Math.log(data[n][0]), 2); + } + } + + var B = (n * sum[1] - sum[2] * sum[0]) / (n * sum[3] - sum[0] * sum[0]); + var A = Math.pow(Math.E, (sum[2] - B * sum[0]) / n); + + var resultLength = data.length + extrapolate; + var step = data[data.length - 1][0] - data[data.length - 2][0]; + + for (var i = 0, len = resultLength; i < len; i++) { + var answer = 0; + if(typeof data[i] !== 'undefined') { + var x = data[i][0]; + } else { + var x = data[data.length - 1][0] + (i - data.length) * step; + } + + var coordinate = [x, A * Math.pow(x, B)]; + results.push(coordinate); + } + + results.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + + var string = 'y = ' + Math.round(A * 100) / 100 + 'x^' + Math.round(B * 100) / 100; + + return {equation: [A, B], points: results, string: string}; + } + + /** + * Code extracted from https://github.com/Tom-Alexander/regression-js/ + */ + function _polynomial(data, order, extrapolate) { + if (typeof order == 'undefined') { + order = 2; + } + var lhs = [], rhs = [], results = [], a = 0, b = 0, i = 0, k = order + 1; + + for (; i < k; i++) { + for (var l = 0, len = data.length; l < len; l++) { + if (data[l].x != null) { + data[l][0] = data[l].x; + data[l][1] = data[l].y; + } + if (data[l][1] != null) { + a += Math.pow(data[l][0], i) * data[l][1]; + } + } + lhs.push(a); + a = 0; + var c = []; + for (var j = 0; j < k; j++) { + for (var l = 0, len = data.length; l < len; l++) { + if (data[l][1]) { + b += Math.pow(data[l][0], i + j); + } + } + c.push(b); + b = 0; + } + rhs.push(c); + } + rhs.push(lhs); + + var equation = gaussianElimination(rhs, k); + + var resultLength = data.length + extrapolate; + var step = data[data.length - 1][0] - data[data.length - 2][0]; + for (var i = 0, len = resultLength; i < len; i++) { + var answer = 0; + var x = 0; + if (typeof data[i] !== 'undefined') { + x = data[i][0]; + } else { + x = data[data.length - 1][0] + (i - data.length) * step; + } + + for (var w = 0; w < equation.length; w++) { + answer += equation[w] * Math.pow(x, w); + } + results.push([x, answer]); + } + + results.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + + var string = 'y = '; + + for (var i = equation.length - 1; i >= 0; i--) { + if (i > 1) string += Math.round(equation[i] * 100) / 100 + 'x^' + i + ' + '; + else if (i == 1) string += Math.round(equation[i] * 100) / 100 + 'x' + ' + '; + else string += Math.round(equation[i] * 100) / 100; + } + + return {equation: equation, points: results, string: string}; + } + + /** + * @author: Ignacio Vazquez + * Based on + * - http://commons.apache.org/proper/commons-math/download_math.cgi LoesInterpolator.java + * - https://gist.github.com/avibryant/1151823 + */ + function _loess(data, bandwidth) { + bandwidth = bandwidth || 0.25; + + var xval = data.map(function (pair) { + return pair.x || pair[0]; + }); + var distinctX = array_unique(xval); + if (2 / distinctX.length > bandwidth) { + bandwidth = Math.min(2 / distinctX.length, 1); + console.warn("updated bandwith to " + bandwidth); + } + + var yval = data.map(function (pair) { + return pair.y || pair[1]; + }); + + function array_unique(values) { + var o = {}, i, l = values.length, r = []; + for (i = 0; i < l; i += 1) o[values[i]] = values[i]; + for (i in o) r.push(o[i]); + return r; + } + + function tricube(x) { + var tmp = 1 - x * x * x; + return tmp * tmp * tmp; + } + + var res = []; + + var left = 0; + var right = Math.floor(bandwidth * xval.length) - 1; + + for (var i in xval) { + var x = xval[i]; + + if (i > 0) { + if (right < xval.length - 1 && + xval[right + 1] - xval[i] < xval[i] - xval[left]) { + left++; + right++; + } + } + //console.debug("left: "+left + " right: " + right ); + var edge; + if (xval[i] - xval[left] > xval[right] - xval[i]) + edge = left; + else + edge = right; + var denom = Math.abs(1.0 / (xval[edge] - x)); + var sumWeights = 0; + var sumX = 0, sumXSquared = 0, sumY = 0, sumXY = 0; + + var k = left; + while (k <= right) { + var xk = xval[k]; + var yk = yval[k]; + var dist; + if (k < i) { + dist = (x - xk); + } else { + dist = (xk - x); + } + var w = tricube(dist * denom); + var xkw = xk * w; + sumWeights += w; + sumX += xkw; + sumXSquared += xk * xkw; + sumY += yk * w; + sumXY += yk * xkw; + k++; + } + + var meanX = sumX / sumWeights; + //console.debug(meanX); + var meanY = sumY / sumWeights; + var meanXY = sumXY / sumWeights; + var meanXSquared = sumXSquared / sumWeights; + + var beta; + if (meanXSquared == meanX * meanX) + beta = 0; + else + beta = (meanXY - meanX * meanY) / (meanXSquared - meanX * meanX); + + var alpha = meanY - beta * meanX; + res[i] = beta * x + alpha; + } + //console.debug(res); + return { + equation: "", + points: xval.map(function (x, i) { + return [x, res[i]]; + }), + string: "" + }; + } + + + /** + * Code extracted from https://github.com/Tom-Alexander/regression-js/ + */ + function gaussianElimination(a, o) { + var i = 0, j = 0, k = 0, maxrow = 0, tmp = 0, n = a.length - 1, x = new Array(o); + for (i = 0; i < n; i++) { + maxrow = i; + for (j = i + 1; j < n; j++) { + if (Math.abs(a[i][j]) > Math.abs(a[i][maxrow])) + maxrow = j; + } + for (k = i; k < n + 1; k++) { + tmp = a[k][i]; + a[k][i] = a[k][maxrow]; + a[k][maxrow] = tmp; + } + for (j = i + 1; j < n; j++) { + for (k = n; k >= i; k--) { + a[k][j] -= a[k][i] * a[i][j] / a[i][i]; + } + } + } + for (j = n - 1; j >= 0; j--) { + tmp = 0; + for (k = j + 1; k < n; k++) + tmp += a[k][j] * x[k]; + x[j] = (a[n][j] - tmp) / a[j][j]; + } + return (x); + } + + /** + * @author Ignacio Vazquez + * See http://en.wikipedia.org/wiki/Coefficient_of_determination for theaorical details + */ + function coefficientOfDetermination(data, pred) { + // Sort the initial data { pred array (model's predictions) is sorted } + // The initial data must be sorted in the same way in order to calculate the coefficients + data.sort(function (a, b) { + if (a[0] > b[0]) { + return 1; + } + if (a[0] < b[0]) { + return -1; + } + return 0; + }); + + // Calc the mean + var mean = 0; + var N = data.length; + for (var i = 0; i < data.length; i++) { + if (data[i][1] != null) { + mean += data[i][1]; + } else { + N--; + } + } + mean /= N; + + // Calc the coefficent of determination + var SSE = 0; + var SSYY = 0; + for (var i = 0; i < data.length; i++) { + if (data[i][1] != null) { + SSYY += Math.pow(data[i][1] - pred[i][1], 2); + SSE += Math.pow(data[i][1] - mean, 2); + } + } + return 1 - ( SSYY / SSE); + } + + function standardError(data, pred) { + var SE = 0, N = data.length; + + for (var i = 0; i < data.length; i++) { + if (data[i][1] != null) { + SE += Math.pow(data[i][1] - pred[i][1], 2); + } else { + N--; + } + } + SE = Math.sqrt(SE / (N - 2)); + + return SE; + } + + function _round(number, decimalPlaces) { + var decimalFactor = Math.pow(10, decimalPlaces); + return Math.round(number * decimalFactor) / decimalFactor; + } + function replaceRegressionPlaceholders(text, regression) { + return text + .replace("%r2", regression.rSquared) + .replace("%r", regression.rValue) + .replace("%eq", regression.string) + .replace("%se", regression.standardError); + } +})); diff --git a/libs/highcharts-8.1.2/plugins/motion.js b/libs/highcharts-8.1.2/plugins/motion.js new file mode 100644 index 00000000..dc312b51 --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/motion.js @@ -0,0 +1,256 @@ +/** + * @license http://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) + * @author Lars Cabrera + * @version 1.0.9 + */ + +// JSLint options: +/*global Highcharts, window*/ + +(function (H) { + // Check if object is array + function isArray(obj) { + return Object.prototype.toString.call(obj) === '[object Array]'; + } + + + // Sets up motion ready to use + function Motion(chart) { + var motion = this; + + this.chart = chart; + this.paused = true; + this.options = H.merge(this.defaultOptions, this.chart.options.motion); + this.dataSeries = []; + this.dataLength = 0; + motion.options.series = H.splat(motion.options.series); + Highcharts.each(this.chart.series, function (series, index) { + if (motion.options.series.indexOf(index) >= 0) { + motion.dataSeries[index] = series; + for (var i = 0; i < series.data.length; i++) { + if (series.data[i].sequence) { + motion.dataLength = Math.max(motion.dataLength, series.data[i].sequence.length); + } + } + } + }); + + // Play-controls HTML-div + this.playControls = H.createElement('div', { + id: 'play-controls' + }, null, this.chart.renderTo, null); + + // Play/pause HTML-button + this.playPauseBtn = H.createElement('button', { + id: 'play-pause-button', + title: 'play' + }, null, this.playControls, null); + this.playPauseBtn.className = this.options.playIcon; + + // Play-range HTML-input + this.playRange = H.createElement('input', { + id: 'play-range', + type: 'range', + min: 0, + max: this.dataLength - 1, + step: this.options.magnet.step + }, null, this.playControls, null); + // Important: max must be set before value in order to allow for + // higher numbers than 100. + this.playRange.value = H.pick(this.options.startIndex, this.dataLength - 1); + + // Play-range HTML-output + this.playOutput = H.createElement('label', { + id: 'play-output', + name: this.options.axisLabel + }, null, this.playControls, null); + if (isArray(this.options.labels)) { + this.playOutput.innerHTML = this.options.labels[this.dataLength - 1] || ''; + } else { + this.playOutput.innerHTML = this.dataLength - 1; + } + + // Common key event handler function + function handleKeyEvents(e) { + e = e || window.event; + switch (e.which) { + case 32: // Space + motion.togglePlayPause(); + break; + case 37: // Left + motion.playRange.value = motion.round(parseFloat(motion.playRange.value) - 1); + motion.updateChart(motion.playRange.value); + break; + case 39: // Right + motion.playRange.value = motion.round(parseFloat(motion.playRange.value) + 1); + motion.updateChart(motion.playRange.value); + break; + default: + return; + } + e.preventDefault(); + } + + // Bind controls to events + Highcharts.addEvent(this.playPauseBtn, 'click', function () { + motion.togglePlayPause(); + }); + Highcharts.addEvent(this.playRange, 'mouseup', function () { + motion.attractToStep(); + }); + Highcharts.addEvent(this.playRange, 'input', function () { + motion.updateChart(this.value); + }); + + // Request focus to the controls when clicking on controls div + Highcharts.addEvent(this.playControls, 'click', function () { + motion.playRange.focus(); + }); + // Bind keys to events + Highcharts.addEvent(this.playPauseBtn, 'keydown', handleKeyEvents); + Highcharts.addEvent(this.playRange, 'keydown', handleKeyEvents); + + // Initial value + this.inputValue = parseFloat(this.playRange.value); + + // Initial update + this.updateChart(this.inputValue); + + // Auto-play + if (this.options.autoPlay) { + this.play(); + } + } + + // Default options for Motion + Motion.prototype.defaultOptions = { + enabled: true, + axisLabel: 'year', + autoPlay : false, + loop: false, + series: 0, + updateInterval: 10, + magnet: { + round: 'round', + step: 0.01 + }, + playIcon: "fa fa-play", + pauseIcon: "fa fa-pause" + }; + + // Toggles between Play and Pause states, and makes calls to changeButtonType() + // From http://www.creativebloq.com/html5/build-custom-html5-video-player-9134473 + Motion.prototype.togglePlayPause = function () { + this[this.paused ? 'play' : 'pause'](); + }; + + // Plays the motion, continuously updating the chart + Motion.prototype.play = function () { + var motion = this; + if (this.paused && parseFloat(this.playRange.value) === parseFloat(this.playRange.max)) { + this.reset(); + } + this.changeButtonType('pause'); + this.paused = false; + this.timer = setInterval(function () { + motion.playUpdate(); + }, this.options.updateInterval); + }; + + // Pauses the motion, which stops updating the chart + Motion.prototype.pause = function () { + this.changeButtonType('play'); + this.paused = true; + window.clearInterval(this.timer); + this.attractToStep(); + }; + + // Resets the motion and updates the chart. Does not pause + Motion.prototype.reset = function () { + this.playRange.value = this.playRange.min; + this.updateChart(this.playRange.value); + }; + + // Updates a button's title, innerHTML and CSS class to a certain value + Motion.prototype.changeButtonType = function (value) { + this.playPauseBtn.title = value; + this.playPauseBtn.className = value + " "; + if (value == 'play') { + this.playPauseBtn.className += this.options.playIcon; + } else if (value == 'pause') { + this.playPauseBtn.className += this.options.pauseIcon;; + } + }; + + // Called continuously while playing + Motion.prototype.playUpdate = function () { + if (!this.paused) { + this.inputValue = parseFloat(this.playRange.value); + this.playRange.value = this.inputValue + this.options.magnet.step; + this.attractToStep(); + this.updateChart(this.playRange.value); // Use playRange.value to get updated value + if (this.playRange.value >= parseFloat(this.playRange.max)) { // Auto-pause + if (this.options.loop) { + this.reset(); + } else { + this.pause(); + } + } + } + }; + + // Updates chart data and redraws the chart + Motion.prototype.updateChart = function (inputValue) { + var seriesKey, + series, + point, + roundedInput = this.round(inputValue), + i; + if (this.currentAxisValue !== roundedInput) { + this.currentAxisValue = roundedInput; + this.chart.options.motion.startIndex = roundedInput; + for (seriesKey in this.dataSeries) { + if (this.dataSeries.hasOwnProperty(seriesKey)) { + series = this.dataSeries[seriesKey]; + for (i = 0; i < series.data.length; i++) { + point = series.data[i]; + try { + if (point.sequence) { + point.update(point.sequence[roundedInput], false, false); + } + } catch (e) { + console.error('Error:', e, ' \nat point:', point, ' \nwith new value:', point.sequence[roundedInput]); + } + } + } + } + this.chart.redraw(); + this.attractToStep(); + } + }; + + // Moves output value to data point + Motion.prototype.attractToStep = function () { + if (isArray(this.options.labels)) { + this.playOutput.innerHTML = this.options.labels[this.round(this.playRange.value)] || ''; + } else { + this.playOutput.innerHTML = this.round(this.playRange.value); + } + }; + + // Returns an integer rounded up, down or even depending on + // motion.magnet.round options. + Motion.prototype.round = function (number) { + return Math[this.options.magnet.round](number); + }; + + // Initiates motion automatically if motion options object exists and + // is not disabled + H.Chart.prototype.callbacks.push(function (chart) { + if (chart.options.motion && chart.options.motion.enabled) { + chart.motion = new Motion(chart); + } + }); + + H.Motion = Motion; +}(Highcharts)); diff --git a/libs/highcharts-8.1.2/plugins/multicolor_series.js b/libs/highcharts-8.1.2/plugins/multicolor_series.js new file mode 100644 index 00000000..79cd2c20 --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/multicolor_series.js @@ -0,0 +1,658 @@ +/** +* Multicolor Series v2.2.7(2020-06-23) +* +* (c) 2012-2016 Black Label +* +* License: Creative Commons Attribution (CC) +*/ +/* global Highcharts window document module:true */ +/** + * @fileoverview + * @suppress {checkTypes} + */ +(function (factory) { + if (typeof module === 'object' && module.exports) { + module.exports = factory; + } else { + factory(Highcharts); + } +}(function (H) { + var each = H.each, + seriesTypes = H.seriesTypes, + pick = H.pick, + UNDEFINED, + NORMAL_STATE = '', + VISIBLE = 'visible', + HIDDEN = 'hidden', + PREFIX = 'highcharts-', + NONE = 'none', + hasTouch = document.documentElement.ontouchstart !== UNDEFINED, + TRACKER_FILL = 'rgba(192,192,192,' + (H.hasSVG ? 0.0001 : 0.002) + ')', // invisible but clickable + M = 'M', + L = 'L'; + + // handle unsorted data, throw error anyway + function error(code, stop) { + var msg = 'Highcharts error #' + code + ': www.highcharts.com/errors/' + code; + if (stop) { + throw msg; + } else if (window.console) { + console.log(msg); // eslint-disable-line + } + } + + /** + If replacing L and M in tracker will be necessary use that getPath(): + + function getPath(arr){ + var ret = []; + each(arr, function(el, ind) { + var len = el[0].length; + for(var i = 0; i < len; i++){ + var p = el[0][i]; + if(p == M && ind != 0 && i == 0) { + p = L; + } + ret.push(p); + } + }); + return ret; + } + **/ + + + function getPath(arr) { + var ret = []; + each(arr, function (el) { + ret = ret.concat(el[0]); + }); + return ret; + } + + /** + * Return the graph path of a segment - compatibility with 4.2.3+ + * @param {Object} segment of the path + * @returns {Array} Path (SVG) + */ + H.Series.prototype.getSegmentPath = function (segment) { + var series = this, + segmentPath = [], + step = series.options.step; + + // build the segment line + each(segment, function (point, i) { + var plotX = point.plotX, + plotY = point.plotY, + lastPoint; + + if (series.getPointSpline) { + // generate the spline as defined in the SplineSeries object + segmentPath.push.apply(segmentPath, series.getPointSpline(segment, point, i)); + } else { + // moveTo or lineTo + segmentPath.push(i ? L : M); + + // step line? + if (step && i) { + lastPoint = segment[i - 1]; + if (step === 'right') { + segmentPath.push( + lastPoint.plotX, + plotY, + L + ); + } else if (step === 'center') { + segmentPath.push( + (lastPoint.plotX + plotX) / 2, + lastPoint.plotY, + L, + (lastPoint.plotX + plotX) / 2, + plotY, + L + ); + } else { + segmentPath.push( + plotX, + lastPoint.plotY, + L + ); + } + } + + // normal line to next point + segmentPath.push( + point.plotX, + point.plotY + ); + } + }); + + return segmentPath; + }; + + /** + * + * ColoredLine series type + * + **/ + + seriesTypes.coloredline = H.extendClass(seriesTypes.line); + + H.seriesTypes.coloredline.prototype.processData = function (force) { + var series = this, + processedXData = series.xData, // copied during slice operation below + processedYData = series.yData, + cropStart = 0, + cropped, + distance, + closestPointRange, + xAxis = series.xAxis, + i, // loop variable + options = series.options, + isCartesian = series.isCartesian; + + // If the series data or axes haven't changed, don't go through this. Return false to pass + // the message on to override methods like in data grouping. + if (isCartesian && !series.isDirty && !xAxis.isDirty && !series.yAxis.isDirty && !force) { + return false; + } + + // Find the closest distance between processed points + for (i = processedXData.length - 1; i >= 0; i--) { + distance = processedXData[i] - processedXData[i - 1]; + if (distance > 0 && (closestPointRange === UNDEFINED || distance < closestPointRange)) { + closestPointRange = distance; + + // Unsorted data is not supported by the line tooltip, as well as data grouping and + // navigation in Stock charts (#725) and width calculation of columns (#1900) + } else if (distance < 0 && series.requireSorting) { + error(15); + } + } + + // Record the properties + series.cropped = cropped; // undefined or true + series.cropStart = cropStart; + series.processedXData = processedXData; + series.processedYData = processedYData; + + if (options.pointRange === null) { // null means auto, as for columns, candlesticks and OHLC + series.pointRange = closestPointRange || 1; + } + series.closestPointRange = closestPointRange; + return true; + }; + + H.seriesTypes.coloredline.prototype.drawTracker = function () { + var series = this, + options = series.options, + trackByArea = options.trackByArea, + trackerPath = [].concat(trackByArea ? series.areaPath : getPath(series.graphPath)), + trackerPathLength = trackerPath.length, + chart = series.chart, + pointer = chart.pointer, + renderer = chart.renderer, + snap = chart.options.tooltip.snap, + tracker = series.tracker, + cursor = options.cursor, + css = cursor && { cursor: cursor }, + singlePoints = series.singlePoints, + singlePoint, + i, + onMouseOver; + + onMouseOver = function () { + if (chart.hoverSeries !== series) { + series.onMouseOver(); + } + }; + // Extend end points. A better way would be to use round linecaps, + // but those are not clickable in VML. + if (trackerPathLength && !trackByArea) { + i = trackerPathLength + 1; + while (i--) { + if (trackerPath[i] === M) { // extend left side + trackerPath.splice(i + 1, 0, trackerPath[i + 1] - snap, trackerPath[i + 2], L); + } + if ((i && trackerPath[i] === M) || i === trackerPathLength) { // extend right side + trackerPath.splice(i, 0, L, trackerPath[i - 2] + snap, trackerPath[i - 1]); + } + } + } + + // handle single points + for (i = 0; i < singlePoints.length; i++) { + singlePoint = singlePoints[i]; + if (singlePoint.plotX && singlePoint.plotY) { + trackerPath.push(M, singlePoint.plotX - snap, singlePoint.plotY, + L, singlePoint.plotX + snap, singlePoint.plotY); + } + } + + // draw the tracker + if (tracker) { + tracker.attr({ d: trackerPath }); + } else { // create + series.tracker = renderer.path(trackerPath) + .attr({ + 'stroke-linejoin': 'round', // #1225 + visibility: series.visible ? VISIBLE : HIDDEN, + stroke: TRACKER_FILL, + fill: trackByArea ? TRACKER_FILL : NONE, + 'stroke-width': options.lineWidth + (trackByArea ? 0 : 2 * snap), + zIndex: 2 + }) + .add(series.group); + + // The tracker is added to the series group, which is clipped, but is covered + // by the marker group. So the marker group also needs to capture events. + each([series.tracker, series.markerGroup], function (track) { + track.addClass(PREFIX + 'tracker') + .on('mouseover', onMouseOver) + .on('mouseout', function (e) { pointer.onTrackerMouseOut(e); }) + .css(css); + + if (hasTouch) { + track.on('touchstart', onMouseOver); + } + }); + } + + }; + + H.seriesTypes.coloredline.prototype.setState = function (state) { + var series = this, + options = series.options, + graph = series.graph, + stateOptions = options.states, + lineWidth = options.lineWidth, + attribs; + + state = state || NORMAL_STATE; + + if (series.state !== state) { + series.state = state; + + if (stateOptions[state] && stateOptions[state].enabled === false) { + return; + } + + if (state) { + lineWidth = stateOptions[state].lineWidth || lineWidth + 1; + } + + if (graph && !graph.dashstyle) { // hover is turned off for dashed lines in VML + attribs = { + 'stroke-width': lineWidth + }; + // use attr because animate will cause any other animation on the graph to stop + each(graph, function (seg) { + seg.attr(attribs); + }); + } + } + }; + + /** + * The main change to get multi color isFinite changes segments array. + * From array of points to object with color and array of points. + * @returns {undefined} + **/ + H.seriesTypes.coloredline.prototype.getSegments = function () { + var series = this, + lastColor = 0, + segments = [], + i, + points = series.points, + pointsLength = points.length; + + if (pointsLength) { // no action required for [] + + // if connect nulls, just remove null points + if (series.options.connectNulls) { + // iterate backwars for secure point removal + for (i = pointsLength - 1; i >= 0; --i) { + if (points[i].y === null) { + points.splice(i, 1); + } + } + pointsLength = points.length; + + each(points, function (point, j) { + if (j > 0 && points[j].segmentColor !== points[j - 1].segmentColor) { + segments.push({ + points: points.slice(lastColor, j + 1), + color: points[j - 1].segmentColor + }); + lastColor = j; + } + }); + + if (pointsLength) { + // add the last segment (only single-point last segement is added) + if (lastColor !== pointsLength - 1) { + segments.push({ + points: points.slice(lastColor, pointsLength), + color: points[pointsLength - 1].segmentColor + }); + } + } + + if (points.length && segments.length === 0) { + segments = [points]; + } + + // else, split on null points or different colors + } else { + var previousColor = null; + each(points, function (point, j) { + var colorChanged = j > 0 && (point.y === null || points[j - 1].y === null || (point.segmentColor !== points[j - 1].segmentColor && points[j].segmentColor !== previousColor)), + colorExists = points[j - 1] && points[j - 1].segmentColor && points[j - 1].y !== null ? true : false; + + if (colorChanged) { + var p = points.slice(lastColor, j + 1); + if (p.length > 0) { + // do not create segments with null ponits + each(p, function (pointObject, k) { + if (pointObject.y === null) { + // remove null points (might be on edges) + p.splice(k, 1); + } + }); + + segments.push({ + points: p, + color: colorExists ? points[j - 1].segmentColor : previousColor + }); + lastColor = j; + } + } else if (j === pointsLength - 1) { + var next = j + 1; + if (point.y === null) { + next--; + } + p = points.slice(lastColor, next); + if (p.length > 0) { + // do not create segments with null ponits + each(p, function (pointObject, k) { + if (pointObject.y === null) { + // remove null points (might be on edges) + p.splice(k, 1); + } + }); + segments.push({ + points: p, + color: colorExists ? points[j - 1].segmentColor : previousColor + }); + lastColor = j; + } + + } + + // store previous color + if (point) { + previousColor = point.segmentColor; + } + }); + } + } + // register it + series.segments = segments; + }; + + H.seriesTypes.coloredline.prototype.getGraphPath = function () { + // var ret = f.apply(this, Array.prototype.slice.call(arguments, 1)); + var series = this, + graphPath = [], + segmentPath, + singlePoints = []; // used in drawTracker + // Divide into segments and build graph and area paths + each(series.segments, function (segment) { + segmentPath = series.getSegmentPath(segment.points); + // add the segment to the graph, or a single point for tracking + if (segment.points.length > 1) { + graphPath.push([segmentPath, segment.color]); + } else { + singlePoints.push(segment.points); + } + }); + + // Record it for use in drawGraph and drawTracker, and return graphPath + series.singlePoints = singlePoints; + series.graphPath = graphPath; + + return graphPath; + }; + + H.seriesTypes.coloredline.prototype.drawGraph = function () { + var series = this, + options = series.options, + props = [['graph', options.lineColor || series.color]], + lineWidth = options.lineWidth, + dashStyle = options.dashStyle, + roundCap = options.linecap !== 'square', + graphPath = series.getGraphPath(), + graphPathLength = graphPath.length, + graphSegmentsLength = 0; + + function getSegment(segment, prop, i) { + var attribs = { + stroke: prop[1], + 'stroke-width': lineWidth, + fill: 'none', + zIndex: 1 // #1069 + }, + item; + if (dashStyle) { + attribs.dashstyle = dashStyle; + } else if (roundCap) { + attribs['stroke-linecap'] = attribs['stroke-linejoin'] = 'round'; + } + if (segment[1]) { + attribs.stroke = segment[1]; + } + + item = series.chart.renderer.path(segment[0]) + .attr(attribs) + .add(series.group); + + + if (item.shadow) { + item.shadow(!i && options.shadow); + } + + return item; + } + + // draw the graph + each(props, function (prop, i) { + var graphKey = prop[0], + graph = series[graphKey], + g; + + if (graph) { // cancel running animations, #459 + // do we have animation + each(graphPath, function (segment, j) { + // update color and path + + if (series[graphKey][j]) { + series[graphKey][j].attr({ d: segment[0], stroke: segment[1] }); + } else { + series[graphKey][j] = getSegment(segment, prop, i); + } + }); + + } else if (graphPath.length) { // #1487 + graph = []; + each(graphPath, function (segment, j) { + graph[j] = getSegment(segment, prop, i); + }); + series[graphKey] = graph; + // add destroying elements + series[graphKey].destroy = function () { + for (g in series[graphKey]) { // eslint-disable-line + var el = series[graphKey][g]; + if (el && el.destroy) { + el.destroy(); + } + } + }; + } + // Checks if series.graph exists. #3 + graphSegmentsLength = (series.graph && series.graph.length) || -1; + + for (var j = graphSegmentsLength; j >= graphPathLength; j--) { + if (series[graphKey][j]) { + series[graphKey][j].destroy(); + series[graphKey].splice(j, 1); + } + } + }); + }; + + H.wrap(seriesTypes.coloredline.prototype, 'translate', function (proceed) { + proceed.apply(this, [].slice.call(arguments, 1)); + if (this.getSegments) { + this.getSegments(); + } + }); + + H.wrap(H.Series.prototype, 'applyZones', function (proceed) { + var series = this, + parts = ['area', 'graph']; + + parts.forEach(function (part) { + var shape = series[part]; + + if (shape && H.isArray(shape)) { + shape.show = function () { + shape.forEach(function (subGraph) { + subGraph.show(true); + }); + }; + shape.hide = function () { + shape.forEach(function (subGraph) { + subGraph.hide(); + }); + }; + } + }); + + return proceed.apply(this, Array.prototype.slice.call(arguments, 1)); + }); + + H.wrap(seriesTypes.coloredline.prototype, 'destroy', function (proceed) { + // destroy all parts + this.graph.destroy(); + proceed.apply(this, Array.prototype.slice.call(arguments, 1)); + }); + + /** + * + * ColoredArea series type + * + **/ + seriesTypes.coloredarea = H.extendClass(seriesTypes.coloredline); + + H.seriesTypes.coloredarea.prototype.init = function (chart, options) { + options.threshold = options.threshold || null; + H.Series.prototype.init.call(this, chart, options); + }; + + H.seriesTypes.coloredarea.prototype.closeSegment = function (path, segment, translatedThreshold) { + path.push( + L, + segment[segment.length - 1].plotX, + translatedThreshold, + L, + segment[0].plotX, + translatedThreshold + ); + }; + + H.seriesTypes.coloredarea.prototype.drawGraph = function (f) { + H.seriesTypes.coloredline.prototype.drawGraph.call(this, f); + var series = this, + options = this.options, + props = [['graph', options.lineColor || series.color]]; + + each(props, function (prop) { + var graphKey = prop[0], + graph = series[graphKey]; + + if (graph) { // cancel running animations, #459 + // do we have animation + each(series.graphPath, function (segment, j) { + // update color and path + + if (series[graphKey][j]) { + series[graphKey][j].attr({ fill: segment[1] }); + } + }); + + } + }); + }; + + /** + * Extend the base Series getSegmentPath method by adding the path for the area. + * This path is pushed to the series.areaPath property. + * @param {Object} segment of the path + * @returns {Array} Path (SVG) + **/ + H.seriesTypes.coloredarea.prototype.getSegmentPath = function (segment) { + var segmentPath = H.Series.prototype.getSegmentPath.call(this, segment), // call base method + areaSegmentPath = [].concat(segmentPath), // work on a copy for the area path + i, + options = this.options, + segLength = segmentPath.length, + translatedThreshold = this.yAxis.getThreshold(options.threshold), // #2181 + yBottom; + + if (segLength === 3) { // for animation from 1 to two points + areaSegmentPath.push(L, segmentPath[1], segmentPath[2]); + } + if (options.stacking && !this.closedStacks) { + for (i = segment.length - 1; i >= 0; i--) { + + yBottom = pick(segment[i].yBottom, translatedThreshold); + + // step line? + if (i < segment.length - 1 && options.step) { + areaSegmentPath.push(segment[i + 1].plotX, yBottom); + } + areaSegmentPath.push(segment[i].plotX, yBottom); + } + } else { // follow zero line back + this.closeSegment(areaSegmentPath, segment, translatedThreshold); + } + return areaSegmentPath; + }; + + H.seriesTypes.coloredarea.prototype.getGraphPath = function () { + var series = this, + graphPath = [], + segmentPath, + singlePoints = []; // used in drawTracker + // Divide into segments and build graph and area paths + + this.areaPath = []; + each(series.segments, function (segment) { + segmentPath = series.getSegmentPath(segment.points); + // add the segment to the graph, or a single point for tracking + if (segment.points.length > 1) { + graphPath.push([segmentPath, segment.color]); + } else { + singlePoints.push(segment.points); + } + }); + + // Record it for use in drawGraph and drawTracker, and return graphPath + series.singlePoints = singlePoints; + series.graphPath = graphPath; + return graphPath; + + }; + + H.seriesTypes.coloredarea.prototype.drawLegendSymbol = H.LegendSymbolMixin.drawRectangle; +})); \ No newline at end of file diff --git a/libs/highcharts-8.1.2/plugins/pattern-fill-v2.js b/libs/highcharts-8.1.2/plugins/pattern-fill-v2.js new file mode 100644 index 00000000..e72fa17a --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/pattern-fill-v2.js @@ -0,0 +1,212 @@ +/** + * Highcharts pattern fill plugin + * + * Version 3.0.3 + * Author: Torstein Honsi + * Stephane Vanraes + * Last revision: 2016-10-05 + * License: MIT License + * + * Remark: The latest version is not compatible with earlier versions. + * + * Usage: Add a 'defs' object to the options + * Create a 'patterns' array under 'defs' + * Each item in this array represents a pattern + * To use a pattern, set the color to `url(#id-of-pattern)' + * + * Options for the patterns: + * - id: The id for the pattern, defaults to highcharts-pattern-# with # an increasing number for each pattern without id + * - width: The width of the pattern, defaults to 10 + * - height: The height of the pattern, defaults to 10 + * - opacity A general opacity for the pattern + * - path: In SVG, the path for the pattern + * (Note: this can be a string with only a path, or an object with d, stroke, strokeWidth and fill) + * - image: An image source for the pattern + * - color: A color to be used instead of a path + * + * Notes: VML does not support the path setting + * If all other fills fail (no path, image or color) the pattern will return #A0A0A0 as a color + * Several patterns have been predefined, called highcharts-default-pattern-# (numbered 0-9) + */ + +/*global Highcharts, document */ +(function (factory) { + if (typeof module === 'object' && module.exports) { + module.exports = factory; + } else { + factory(Highcharts); + } +}(function (Highcharts) { + + 'use strict'; + + var idCounter = 0, + wrap = Highcharts.wrap, + each = Highcharts.each; + + /** + * Exposed method to add a pattern to the renderer. + */ + Highcharts.SVGRenderer.prototype.addPattern = function (id, options) { + var pattern, + path, + w = options.width || 10, + h = options.height || 10, + ren = this; + + /** + * Add a rectangle for solid color + */ + function rect (fill) { + ren.rect(0, 0, w, h) + .attr({ + fill: fill + }) + .add(pattern); + } + + if (!id) { + id = 'highcharts-pattern-' + idCounter; + idCounter += 1; + } + + pattern = this.createElement('pattern').attr({ + id: id, + patternUnits: 'userSpaceOnUse', + width: options.width || 10, + height: options.height || 10 + }).add(this.defs); + + // Get id + pattern.id = pattern.element.id; + + // Use an SVG path for the pattern + if (options.path) { + path = options.path; + + // The background + if (path.fill) { + rect(path.fill); + } + + // The pattern + this.createElement('path').attr({ + 'd': path.d || path, + 'stroke': path.stroke || options.color || '#343434', + 'stroke-width': path.strokeWidth || 2 + }).add(pattern); + pattern.color = options.color; + + // Image pattern + } else if (options.image) { + + this.image(options.image, 0, 0, options.width, options.height).add(pattern); + + // A solid color + } else if (options.color) { + + rect(options.color); + + } + + if (options.opacity !== undefined) { + each(pattern.element.children, function (child) { + child.setAttribute('opacity', options.opacity); + }); + } + + return pattern; + }; + + if (Highcharts.VMLElement) { + + Highcharts.VMLRenderer.prototype.addPattern = function (id, options) { + + var patterns; + if (!id) { + id = 'highcharts-pattern-' + idCounter; + idCounter += 1; + } + patterns = this.patterns || {}; + patterns[id] = options; + this.patterns = patterns; + }; + + Highcharts.wrap(Highcharts.VMLRenderer.prototype.Element.prototype, 'fillSetter', function (proceed, color, prop, elem) { + if (typeof color === 'string' && color.substring(0, 5) === 'url(#') { + var id = color.substring(5, color.length - 1), + pattern = this.renderer.patterns[id], + markup; + + if (pattern.image) { + // Remove Previous fills + if (elem.getElementsByTagName('fill').length) { + elem.removeChild(elem.getElementsByTagName('fill')[0]); + } + + markup = this.renderer.prepVML(['<', prop, ' type="tile" src="', pattern.image, '" />']); + elem.appendChild(document.createElement(markup)); + + // Work around display bug on updating attached nodes + if (elem.parentNode.nodeType === 1) { + elem.outerHTML = elem.outerHTML; + } + + } else if (pattern.color) { + proceed.call(this, pattern.color, prop, elem); + } else { + proceed.call(this, '#A0A0A0', prop, elem); + } + } else { + proceed.call(this, color, prop, elem); + } + }); + } + + /** + * Add the predefined patterns + */ + function addPredefinedPatterns(renderer) { + var colors = Highcharts.getOptions().colors; + + each([ + 'M 0 0 L 10 10 M 9 -1 L 11 1 M -1 9 L 1 11', + 'M 0 10 L 10 0 M -1 1 L 1 -1 M 9 11 L 11 9', + 'M 3 0 L 3 10 M 8 0 L 8 10', + 'M 0 3 L 10 3 M 0 8 L 10 8', + 'M 0 3 L 5 3 L 5 0 M 5 10 L 5 7 L 10 7', + 'M 3 3 L 8 3 L 8 8 L 3 8 Z', + 'M 5 5 m -4 0 a 4 4 0 1 1 8 0 a 4 4 0 1 1 -8 0', + 'M 10 3 L 5 3 L 5 0 M 5 10 L 5 7 L 0 7', + 'M 2 5 L 5 2 L 8 5 L 5 8 Z', + 'M 0 0 L 5 10 L 10 0' + ], function (pattern, i) { + renderer.addPattern('highcharts-default-pattern-' + i, { + path: pattern, + color: colors[i] + }); + }); + } + + // Add patterns to the defs element + wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) { + proceed.apply(this); + + var chart = this, + renderer = chart.renderer, + options = chart.options, + patterns = options.defs && options.defs.patterns; + + // First add default patterns + addPredefinedPatterns(renderer); + + // Add user defined patterns + if (patterns) { + each(patterns, function (pattern) { + renderer.addPattern(pattern.id, pattern); + }); + } + + }); + +})); diff --git a/libs/highcharts-8.1.2/plugins/tooltip-delay.js b/libs/highcharts-8.1.2/plugins/tooltip-delay.js new file mode 100644 index 00000000..b7e902d2 --- /dev/null +++ b/libs/highcharts-8.1.2/plugins/tooltip-delay.js @@ -0,0 +1,48 @@ +(function(H) { + + let timerId = {}; + + const generatePointsUniqueKey = (points) => { + + const generatePointKey = (point) => { + return point.category + " " + point.series.name + ": " + point.x + " " + point.y; + }; + + const result = points.map(generatePointKey).join(', '); + + return result; + } + + H.wrap(H.Tooltip.prototype, 'refresh', function(proceed) { + let seriesName; + + if (Array.isArray(arguments[ 1 ])) { + // Can be array in case that, it's shared tooltip + seriesName = generatePointsUniqueKey(arguments[ 1 ]); + } else { + seriesName = arguments[ 1 ].series.name; + } + + const delayForDisplay = this.chart.options.tooltip.delayForDisplay ? this.chart.options.tooltip.delayForDisplay : 1000; + + if (timerId[ seriesName ]) { + clearTimeout(timerId[ seriesName ]); + delete timerId[ seriesName ]; + } + + timerId[ seriesName ] = window.setTimeout(function() { + let pointOrPoints = this.refreshArguments[ 0 ]; + + if (pointOrPoints === this.chart.hoverPoint || $.inArray(this.chart.hoverPoint, pointOrPoints) > -1) { + proceed.apply(this.tooltip, this.refreshArguments); + } + + }.bind({ + refreshArguments: Array.prototype.slice.call(arguments, 1), + chart: this.chart, + tooltip: this + }), delayForDisplay); + + }); + +}(Highcharts)); \ No newline at end of file diff --git a/libs/htmlwidgets-1.5.2/htmlwidgets.js b/libs/htmlwidgets-1.5.2/htmlwidgets.js new file mode 100644 index 00000000..6f3d672d --- /dev/null +++ b/libs/htmlwidgets-1.5.2/htmlwidgets.js @@ -0,0 +1,903 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = tryEval(task); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + // Attempt eval() both with and without enclosing in parentheses. + // Note that enclosing coerces a function declaration into + // an expression that eval() can parse + // (otherwise, a SyntaxError is thrown) + function tryEval(code) { + var result = null; + try { + result = eval(code); + } catch(error) { + if (!error instanceof SyntaxError) { + throw error; + } + try { + result = eval("(" + code + ")"); + } catch(e) { + if (e instanceof SyntaxError) { + throw error; + } else { + throw e; + } + } + } + return result; + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + if (cel) { + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + } + + return { + getWidth: function() { return cel.offsetWidth; }, + getHeight: function() { return cel.offsetHeight; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return el.offsetWidth; }, + getHeight: function() { return el.offsetHeight; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
    ").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var result = bindingDef.initialize(el, el.offsetWidth, + el.offsetHeight); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + initResult = binding.initialize(el, + sizeObj ? sizeObj.getWidth() : el.offsetWidth, + sizeObj ? sizeObj.getHeight() : el.offsetHeight + ); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + var resizeHandler = function(e) { + var size = { + w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, + h: sizeObj ? sizeObj.getHeight() : el.offsetHeight + }; + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); + diff --git a/libs/jquery-3.5.0/jquery.min.js b/libs/jquery-3.5.0/jquery.min.js new file mode 100644 index 00000000..47b63970 --- /dev/null +++ b/libs/jquery-3.5.0/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.0 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 + + + + + + + + + + + diff --git a/regression-lineaire.html b/regression-lineaire.html index e8ad2a70..b8cae2a1 100644 --- a/regression-lineaire.html +++ b/regression-lineaire.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,15 @@ gtag('config', 'UA-121727005-1'); + + diff --git a/regression-logistique.html b/regression-logistique.html index 6d000879..611ce6a5 100644 --- a/regression-logistique.html +++ b/regression-logistique.html @@ -20,6 +20,7 @@ + @@ -58,6 +59,78 @@ gtag('config', 'UA-121727005-1'); + + + + + + + + + + + +